]> rtime.felk.cvut.cz Git - boost-statechart-viewer.git/blobdiff - src/visualizer.cpp
Correct errors during printing multiple transitions in state.
[boost-statechart-viewer.git] / src / visualizer.cpp
index 0a034896a3f165f2e4061fe004ab1b2046b763d6..2f4b9ab58fa4b6715bdfe41a6e849da2e9cabc13 100644 (file)
@@ -127,7 +127,7 @@ class FindStates : public ASTConsumer
        FullSourceLoc *fsloc; /** Full Source Location instance for holding Source Manager. */
        public:
 
-       list<string> getStates() /** Return list of states. */
+       list<string> getStates() /** Return list of states of the state machine. */
        {
                return states;
        }
@@ -288,6 +288,7 @@ class FindStates : public ASTConsumer
                const TagDecl *tagDecl = dyn_cast<TagDecl>(decl);
                const DeclContext *declCont = tagDecl->castToDeclContext(tagDecl);                      
                output="";
+               std::cout<<"Found state: "<<state<<std::endl;
                for (DeclContext::decl_iterator i = declCont->decls_begin(), e = declCont->decls_end(); i != e; ++i) 
                {
                        if (i->getKind()==26) // typedefs
@@ -320,8 +321,9 @@ class FindStates : public ASTConsumer
                                        output="";
                                }
                        }
-                       if(i->getKind()==35) method_decl(decl);// C++ method
+                       if(i->getKind()==35) method_decl(*i);// C++ method
                }
+               
        }
 
  /**
@@ -331,15 +333,17 @@ class FindStates : public ASTConsumer
        {
                string output, line, event;     
                llvm::raw_string_ostream x(output);
+
                if(decl->hasBody())
                {
                        decl->print(x);
-                       line = get_return(x.str());
-                       if(test_model(line,"result"))
+                       line = get_return(x.str());                     
+                       if(get_model(line)==5)
                        {
+                               //std::cout<<"metodass"<<std::endl;
                                const FunctionDecl *fDecl = dyn_cast<FunctionDecl>(decl);
                                const ParmVarDecl *pvd = fDecl->getParamDecl(0);
-                                QualType qt = pvd->getOriginalType();
+                               QualType qt = pvd->getOriginalType();
                                event = qt.getAsString();
                                if(event[event.length()-1]=='&') event = event.substr(0,event.length()-2);
                                event = event.substr(event.rfind(" ")+1);
@@ -393,11 +397,16 @@ class FindStates : public ASTConsumer
                        case 98 :       line = sman.getCharacterData(dyn_cast<ReturnStmt>(stmt)->getReturnLoc()); 
                                                        line = get_line_of_code(line).substr(6);
                                                        line = line.substr(0,line.find("("));
-                                                       if(test_model(line,"transit"))
+                                                       if(get_model(line)==6)
                                                        {
                                                                param = get_params(line);
                                                                transitions.push_back(event.append(",").append(param));
                                                        }
+                                                       if(get_model(line) == 7)
+                                                       {
+                                                               param = ",";
+                                                               transitions.push_back(param.append(event));
+                                                       }
                                                        break;
                        case 99 :       find_return_stmt(stmt, event);
                                                        break;
@@ -472,7 +481,7 @@ int main(int argc, char **argv)
        inputFilename = f.Inputs[0].second;
 
        cout<<"Input filename: "<<inputFilename<<"\n"; // print Input filename
-       cout<<"Output filename: "<<outputFilename<<"\n"; // print Output filename
+       cout<<"Output filename: "<<outputFilename<<"\n\n\n"; // print Output filename
 
 
        Preprocessor pp(diag, lang, *ti, sm, *headers);