Browse Source

Implement some of the methods in DccImpl

nemerle 8 years ago
parent
commit
a944ea5da8
2 changed files with 48 additions and 41 deletions
  1. 38 37
      include/project.h
  2. 10 4
      src/dcc_interface.cpp

+ 38 - 37
include/project.h

@@ -23,52 +23,53 @@ class IProject
 };
 class Project : public IProject
 {
-    static Project *s_instance;
-    QString m_fname;
-    QString m_project_name;
-    QString m_output_path;
+    static  Project *s_instance;
+            QString     m_fname;
+            QString     m_project_name;
+            QString     m_output_path;
 public:
 
-typedef llvm::iplist<Function> FunctionListType;
-typedef FunctionListType lFunction;
+    typedef llvm::iplist<Function> FunctionListType;
+    typedef FunctionListType lFunction;
     typedef FunctionListType::iterator ilFunction;
-    SYMTAB symtab;       /* Global symbol table              */
 
-    FunctionListType pProcList;
-    CALL_GRAPH * callGraph;	/* Pointer to the head of the call graph     */
-    PROG prog;   		/* Loaded program image parameters  */
-    // no copies
-    Project(const Project&) = delete;
-    const Project &operator=(const Project & l) =delete;
-    // only moves
-    Project(); // default constructor,
+            SYMTAB      symtab;       /* Global symbol table              */
+            FunctionListType pProcList;
+            CALL_GRAPH * callGraph;	/* Pointer to the head of the call graph     */
+            PROG        prog;   		/* Loaded program image parameters  */
+                        // no copies
+                        Project(const Project&) = delete;
+    const   Project &   operator=(const Project & l) =delete;
+                        // only moves
+                        Project(); // default constructor,
 
 public:
-    void create(const QString &a);
-    bool load();
-    const QString &output_path() const {return m_output_path;}
-    const QString &project_name() const {return m_project_name;}
-    const QString &binary_path() const {return m_fname;}
-    QString output_name(const char *ext);
-    ilFunction funcIter(Function *to_find);
-    ilFunction findByEntry(uint32_t entry);
-    ilFunction createFunction(FunctionType *f, const QString & name);
-    bool valid(ilFunction iter);
+            void        create(const QString &a);
+            bool        load();
+    const   QString &   output_path() const {return m_output_path;}
+    const   QString &   project_name() const {return m_project_name;}
+    const   QString &   binary_path() const {return m_fname;}
+            QString     output_name(const char *ext);
+            ilFunction  funcIter(Function *to_find);
+            ilFunction  findByEntry(uint32_t entry);
+            ilFunction  createFunction(FunctionType *f, const QString & name);
+            bool        valid(ilFunction iter);
 
-    int     getSymIdxByAdd(uint32_t adr);
-    bool    validSymIdx(size_t idx);
-    size_t  symbolSize(size_t idx);
-    hlType  symbolType(size_t idx);
-    const QString & symbolName(size_t idx);
-    const SYM &getSymByIdx(size_t idx) const;
+            int         getSymIdxByAdd(uint32_t adr);
+            bool        validSymIdx(size_t idx);
+            size_t      symbolSize(size_t idx);
+            hlType      symbolType(size_t idx);
+    const   QString &   symbolName(size_t idx);
+    const   SYM &       getSymByIdx(size_t idx) const;
 
-    static Project *get();
-    PROG * binary() {return &prog;}
-    SourceMachine *machine();
+    static  Project *   get();
+            PROG *      binary() {return &prog;}
+            SourceMachine *machine();
 
-    const FunctionListType &functions() const { return pProcList; }
+    const   FunctionListType &functions() const { return pProcList; }
+            FunctionListType &functions()       { return pProcList; }
 protected:
-    void initialize();
-    void writeGlobSymTable();
+            void        initialize();
+            void        writeGlobSymTable();
 };
 //extern Project g_proj;

+ 10 - 4
src/dcc_interface.cpp

@@ -1,22 +1,24 @@
 #include "dcc_interface.h"
 #include "dcc.h"
 #include "project.h"
-struct DccImpl : public IDcc{
-
-
+struct DccImpl : public IDcc {
+    ilFunction m_current_func;
     // IDcc interface
 public:
     void BaseInit()
     {
+        m_current_func = Project::get()->functions().end();
     }
     void Init(QObject *tgt)
     {
     }
     ilFunction GetFirstFuncHandle()
     {
+        return Project::get()->functions().begin();
     }
     ilFunction GetCurFuncHandle()
     {
+        return m_current_func;
     }
     void analysis_Once()
     {
@@ -34,13 +36,17 @@ public:
     }
     size_t getFuncCount()
     {
+        return Project::get()->functions().size();
     }
     const lFunction &validFunctions() const
     {
         return Project::get()->functions();
     }
-    void SetCurFunc_by_Name(QString)
+    void SetCurFunc_by_Name(QString v)
     {
+        if(m_current_func!=Project::get()->functions().end()) {
+            m_current_func->name = v;
+        }
     }
     QDir installDir() {
         return QDir(".");