00001 #include "xi-symbol.h"
00002 #include "CEntry.h"
00003 #include "sdag-globals.h"
00004 #include "EToken.h"
00005
00006 namespace xi {
00007
00008 class Chare;
00009 class Entry;
00010
00011
00012
00013 class CParsedFile {
00014 private:
00015 void numberNodes(void);
00016 void labelNodes(void);
00017 void mapCEntry();
00018 void propagateState(void);
00019 void generateConnectEntryList(void);
00020 void generateEntryList(void);
00021 void generateCode(XStr& decls, XStr& defs);
00022 void generateEntries(XStr& decls, XStr& defs);
00023 void generateConnectEntries(XStr& output);
00024 void generateInitFunction(XStr& decls, XStr& defs);
00025 void generatePupFunction(XStr& output);
00026 void generateTraceEp(XStr& decls, XStr& defs);
00027 void generateRegisterEp(XStr& decls, XStr& defs);
00028 void generateDependencyMergePoints(XStr& output);
00029 void generateTrace();
00030 public:
00031 Chare *container;
00032 static XStr *className;
00033 TList<CEntry*> entryList;
00034 TList<SdagConstruct *> connectEntryList;
00035 TList<Entry*> nodeList;
00036 CParsedFile(Chare *c): container(c) {}
00037 ~CParsedFile(void){}
00038 void print(int indent);
00039 void doProcess(XStr& classname, XStr& decls, XStr& defs) {
00040 className = &classname;
00041 decls << "#define " << classname << "_SDAG_CODE \n";
00042
00043 numberNodes();
00044 labelNodes();
00045 propagateState();
00046 generateConnectEntryList();
00047 generateTrace();
00048 generateEntryList();
00049 mapCEntry();
00050 generateCode(decls, defs);
00051 generateEntries(decls, defs);
00052 generateInitFunction(decls, defs);
00053 generatePupFunction(decls);
00054 generateRegisterEp(decls, defs);
00055 generateTraceEp(decls, defs);
00056
00057 #ifdef USE_CRITICAL_PATH_HEADER_ARRAY
00058 generateDependencyMergePoints(decls);
00059 #endif
00060
00061 decls.line_append_padding('\\');
00062 decls << "\n";
00063 }
00064
00065 };
00066
00067 }