int ProcessGraph::addGraphNode(ProcessGraphNode *pgn){ nodes[numNodes]=pgn; inverse[pgn->getVarDecl()]=numNodes; //std::cout << "adaugat graph node\n"; clang::CallExpr *e=dyn_cast<clang::CallExpr>(pgn->getExpr()); clang::DeclRefExpr *fun = getProcessFunction(e->getArg(1)); clang::FunctionDecl *funD = dyn_cast<clang::FunctionDecl>(fun->getDecl()); //if (funD!=NULL) // std::cout << "gasit decl\n"; pgn->setName(funD->getNameAsString()); std::cout << "adaugat "<<pgn->getName() << std::endl; pgn->setNumber(numNodes); int numP = funD->getNumParams(); for (int i=3; i<3+numP; i++){ clang::ParmVarDecl *pvd = funD->getParamDecl(i-3); if (pvd->getType().getAsString().compare("co_stream")==0){ clang::DeclRefExpr *str_ref = getProcessFunction(e->getArg(i)); if (!dyn_cast<clang::VarDecl>(str_ref->getDecl())){ std::cerr << "error: not referencing a variabile in call to co_process_create\n"; exit(-1); } int str_id = inverse[dyn_cast<clang::VarDecl>(str_ref->getDecl())]; DataStream *ds = vertices[str_id]; /* if (ds==NULL) std::cout<<"ds null"; */ ds->addProcess(pgn); pgn->addStream(ds); std::cout << "added stream " << ds->getVarDecl()->getNameAsString() << "\n"; } } numNodes++; return numNodes-1; }