fe85692863283516e87b80f996506b5124da9998
[charm.git] / src / xlat-i / sdag / CParsedFile.h
1 #include "xi-symbol.h"
2 #include "CEntry.h"
3 #include "sdag-globals.h"
4 #include "EToken.h"
5 #include <list>
6 namespace xi {
7
8 class Chare;
9 class Entry;
10
11
12 /******************* CParsedFile ***********************/
13 class CParsedFile {
14   private:
15     void numberNodes(void);
16     void labelNodes(void);
17     void mapCEntry();                   // search and check if all functions in when() are defined.
18     void propagateState(void);
19     void generateConnectEntryList(void);
20     void generateEntryList(void);       // collect and setup CEntry list for When and If
21     void generateCode(XStr& decls, XStr& defs);
22     void generateEntries(XStr& decls, XStr& defs);
23     void generateConnectEntries(XStr& output);
24     void generateInitFunction(XStr& decls, XStr& defs);
25     void generatePupFunction(XStr& output);
26     void generateTraceEp(XStr& decls, XStr& defs);
27     void generateRegisterEp(XStr& decls, XStr& defs);
28     void generateDependencyMergePoints(XStr& output);
29     void generateTrace();
30     std::list<Entry*> nodeList;
31     TList<CEntry*> entryList;
32     TList<SdagConstruct *> connectEntryList;
33     Chare *container;
34
35   public:
36     static XStr *className;
37     CParsedFile(Chare *c): container(c) {}
38     ~CParsedFile(void){}
39     void print(int indent);
40     void addNode(Entry *e) { nodeList.push_back(e); }
41     void doProcess(XStr& classname, XStr& decls, XStr& defs) {
42       className = &classname;
43       decls << "#define " << classname << "_SDAG_CODE \n";
44
45       numberNodes();
46       labelNodes();
47       propagateState();
48       generateConnectEntryList();
49       generateTrace();
50       generateEntryList();
51       mapCEntry();
52       generateCode(decls, defs);
53       generateEntries(decls, defs);
54       generateInitFunction(decls, defs);
55       generatePupFunction(decls);
56       generateRegisterEp(decls, defs);
57       generateTraceEp(decls, defs);
58
59 #ifdef USE_CRITICAL_PATH_HEADER_ARRAY
60       generateDependencyMergePoints(decls); // for Isaac's Critical Path Detection
61 #endif
62
63       decls.line_append_padding('\\');
64       decls << "\n";
65     }
66
67 };
68
69 }