コード例 #1
0
ファイル: PSIVisitor.cpp プロジェクト: mballance/psi
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);
}
コード例 #2
0
ファイル: ScopeItemImpl.cpp プロジェクト: mballance/psi
/**
 * 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;
}
コード例 #3
0
ファイル: PSIVisitor.cpp プロジェクト: biswajitbiee/psi
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;
		}
	}
}
コード例 #4
0
ファイル: PSIVisitor.cpp プロジェクト: biswajitbiee/psi
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
		}
	}
}
コード例 #5
0
ファイル: PSIVisitor.cpp プロジェクト: mballance/psi
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;
}
コード例 #6
0
ファイル: PSIVisitor.cpp プロジェクト: mballance/psi
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;
}
コード例 #7
0
ファイル: PSIVisitor.cpp プロジェクト: biswajitbiee/psi
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());
		}
	}
}