void PSIVisitor::visit_model(IModel *model) { fprintf(stdout, "--> visit_model(%p)\n", model); IPackage *pkg = model->getGlobalPackage(); visit_package(pkg); ModelImpl *model_i = dynamic_cast<ModelImpl *>(model); for (int32_t i=0; i<model->getItems().size(); i++) { IBaseItem *it = model->getItems().at(i); fprintf(stdout, "-- it=%p %d\n", it, it->getType()); m_removed = false; push_scope(it); if (it->getType() == IBaseItem::TypePackage) { IPackage *pkg = dynamic_cast<IPackage *>(it); visit_package(pkg); } else if (it->getType() == IBaseItem::TypeComponent) { visit_component(dynamic_cast<IComponent *>(it)); } else { // Really shouldn't be anything else in the global scope } pop_scope(); if (m_removed) { model_i->remove(it); delete it; i--; } } fprintf(stdout, "<-- visit_model(%p)\n", model); }
/** * Locates and returns the named field. Returns 0 if * the named field does not exist */ IField *ScopeItemImpl::getField(const std::string &name) { for (std::vector<IBaseItem *>::const_iterator it=m_children.begin(); it!=m_children.end(); it++) { IBaseItem *t = *it; if (t->getType() == IBaseItem::TypeField && dynamic_cast<IField *>(t)->getName() == name) { return dynamic_cast<IField *>(t); } } return 0; }
void PSIVisitor::visit_package(IPackage *pkg) { std::vector<IBaseItem *>::const_iterator it=pkg->getItems().begin(); for (; it!=pkg->getItems().end(); it++) { IBaseItem *i = *it; switch (i->getType()) { case IBaseItem::TypeAction: // TODO: break; case IBaseItem::TypeStruct: visit_struct(static_cast<IStruct *>(i)); break; } } }
void PSIVisitor::visit_model(IModel *model) { IPackage *pkg = model->getGlobalPackage(); visit_package(pkg); std::vector<IBaseItem *>::const_iterator it=model->getItems().begin(); for (; it!=model->getItems().end(); it++) { IBaseItem *i = *it; if (i->getType() == IBaseItem::TypePackage) { IPackage *pkg = static_cast<IPackage *>(i); visit_package(pkg); } else if (i->getType() == IBaseItem::TypeComponent) { visit_component(static_cast<IComponent *>(i)); } else { // Really shouldn't be anything else in the global scope } } }
void PSIVisitor::visit_body(IBaseItem *p, const std::vector<IBaseItem *> &items) { std::vector<IBaseItem *>::const_iterator it = items.begin(); for (int32_t i=0; i<items.size(); i++) { IBaseItem *it = items.at(i); m_removed = false; switch (it->getType()) { case IBaseItem::TypeBind: visit_bind(dynamic_cast<IBind *>(it)); break; case IBaseItem::TypeConstraint: visit_constraint(dynamic_cast<IConstraintBlock *>(it)); break; case IBaseItem::TypeField: visit_field(dynamic_cast<IField *>(it)); break; case IBaseItem::TypeExec: visit_exec(dynamic_cast<IExec *>(it)); break; case IBaseItem::TypeVendor: visit_vendor_item(it); break; default: fprintf(stdout, "Error: Unknown body item %d\n", it->getType()); } if (m_removed) { ScopeItemImpl *s = dynamic_cast<ScopeItemImpl *>(p); s->remove(it); delete it; } } m_removed = false; }
void PSIVisitor::visit_package(IPackage *pkg) { std::vector<IBaseItem *>::const_iterator it=pkg->getItems().begin(); for (int32_t i=0; i<pkg->getItems().size(); i++) { IBaseItem *it = pkg->getItems().at(i); push_scope(it); m_removed = false; switch (it->getType()) { case IBaseItem::TypeAction: // TODO: break; case IBaseItem::TypeStruct: visit_struct(dynamic_cast<IStruct *>(it)); break; case IBaseItem::TypeExtend: visit_extend(dynamic_cast<IExtend *>(it)); break; case IBaseItem::TypeImportFunc: visit_import_func(dynamic_cast<IImportFunc *>(it)); break; default: fprintf(stdout, "Error: Unhandled package item: %d\n", it->getType()); } pop_scope(); if (m_removed) { dynamic_cast<PackageImpl *>(pkg)->remove(it); delete it; } } m_removed = false; }
void PSIVisitor::visit_body(IBaseItem *p, const std::vector<IBaseItem *> &items) { std::vector<IBaseItem *>::const_iterator it = items.begin(); for (; it!=items.end(); it++) { IBaseItem *i = *it; switch (i->getType()) { case IBaseItem::TypeBind: visit_bind(static_cast<IBind *>(i)); break; case IBaseItem::TypeConstraint: visit_constraint(static_cast<IConstraintBlock *>(i)); break; case IBaseItem::TypeField: visit_field(static_cast<IField *>(i)); break; default: fprintf(stdout, "Error: Unknown body item %d\n", i->getType()); } } }