@@ -17,13 +17,16 @@ class DeclHeader:
1717 line : str
1818 # declName is just the identifier name
1919 declName : str
20+ # declName is just the identifier name
21+ namespace : str
2022 # fields contains a list of all the names of the fields in the structure
2123 fields : List [str ]
2224
23- def __init__ (self , line : str , declName : str , fields : List [str ]):
24- self .line = line
25- self .declName = declName
26- self .fields = fields
25+ def __init__ (self , line : str , namespace : str , declName : str , fields : List [str ]):
26+ self .line = line
27+ self .namespace = namespace
28+ self .declName = declName
29+ self .fields = fields
2730
2831enumNames : List [DeclHeader ] = []
2932structureNames : List [DeclHeader ] = []
@@ -73,45 +76,45 @@ def lines(s: str) -> Generator[str, None, None]:
7376 yield line
7477
7578def parseHeader (fileContents : str ):
76- insideIGCNameSpace = False
79+ namespace = ""
7780 pcount = 0
7881 file = lines (fileContents )
7982 for line in file :
8083 line = line .split ("//" )[0 ]
81- if "namespace IGC" in line :
84+ if "namespace" in line :
85+ words = line .split ()
8286 while "{" not in line :
8387 line = next (file , None )
8488 if line is None :
8589 sys .exit ('missing opening brace!' )
86- insideIGCNameSpace = True
90+ namespace = words [ 1 ] if len ( words ) > 1 else ""
8791 pcount += 1
88- if insideIGCNameSpace :
89- blockType = re .search ("struct|enum" , line )
90- if blockType :
91- words = line .split ()
92- idx = 2 if 'class' in words else 1
93- foundDecl = DeclHeader (line , words [idx ], [])
94- opcount = pcount
95- namesList = structureNames
96- extractFunc = extractStructField
97- if blockType [0 ] == 'enum' :
98- namesList = enumNames
99- extractFunc = extractEnumVal
100- while True :
101- line = next (file , None )
102- if line is None :
103- sys .exit (f"EOF reached with unclosed enum or struct, check formatting" )
104- line = line .split ("//" )[0 ]
105- pcount += line .count ("{" ) - line .count ("}" )
106- if pcount <= opcount :
107- break
108- extractFunc (re .sub ("{|}" ,"" , line ), foundDecl )
109- assert pcount == opcount , f"Unexpected struct/enum ending, check formatting"
110- namesList .append (foundDecl )
111- elif "}" in line and "};" not in line :
112- insideIGCNameSpace = False
113- pcount -= 1
114- assert pcount == 0 , f"EOF reached, with unclosed IGC namespace, check formatting"
92+ blockType = re .search ("struct|enum" , line )
93+ if blockType :
94+ words = line .split ()
95+ idx = 2 if blockType [0 ] == 'enum' and ('class' in words or 'struct' in words ) else 1
96+ foundDecl = DeclHeader (line , namespace , words [idx ], [])
97+ opcount = pcount
98+ namesList = structureNames
99+ extractFunc = extractStructField
100+ if blockType [0 ] == 'enum' :
101+ namesList = enumNames
102+ extractFunc = extractEnumVal
103+ while True :
104+ line = next (file , None )
105+ if line is None :
106+ sys .exit (f"EOF reached with unclosed enum or struct, check formatting" )
107+ line = line .split ("//" )[0 ]
108+ pcount += line .count ("{" ) - line .count ("}" )
109+ if pcount <= opcount :
110+ break
111+ extractFunc (re .sub ("{|}" ,"" , line ), foundDecl )
112+ assert pcount == opcount , f"Unexpected struct/enum ending, check formatting"
113+ namesList .append (foundDecl )
114+ elif "}" in line and "};" not in line :
115+ insideIGCNameSpace = False
116+ pcount -= 1
117+ assert pcount == 0 , f"EOF reached, with unclosed namespace, check formatting"
115118
116119def stripBlockComments (text : str ) -> str :
117120 return re .sub (r'/\*(.|\s)*?\*/' , '' , text )
@@ -164,7 +167,7 @@ def printEnumCalls(enumDecl: DeclHeader, outputFile: TextIO):
164167 outputFile .write (f" switch({ enumDecl .declName } Var)\n " )
165168 outputFile .write (" {\n " )
166169 for item in enumDecl .fields :
167- outputFile .write (f" case IGC ::{ enumDecl .declName } ::{ item } :\n " )
170+ outputFile .write (f" case { enumDecl . namespace } ::{ enumDecl .declName } ::{ item } :\n " )
168171 outputFile .write (" enumName = " )
169172 outputFile .write (f'"{ item } "' )
170173 outputFile .write (";\n " )
@@ -193,41 +196,41 @@ def printEnumReadCalls(enumDecl: DeclHeader, outputFile: TextIO):
193196 outputFile .write (f'"{ item } "' )
194197 outputFile .write (") == 0)\n " )
195198 outputFile .write (" {\n " )
196- outputFile .write (f" { enumDecl .declName } Var = IGC ::{ enumDecl .declName } ::{ item } ;\n " )
199+ outputFile .write (f" { enumDecl .declName } Var = { enumDecl . namespace } ::{ enumDecl .declName } ::{ item } ;\n " )
197200 outputFile .write (" }\n " )
198201 first = False
199202
200203 outputFile .write (" else\n " )
201204 outputFile .write (" {\n " )
202- outputFile .write (f" { enumDecl .declName } Var = (IGC ::{ enumDecl .declName } )(0);\n " )
205+ outputFile .write (f" { enumDecl .declName } Var = ({ enumDecl . namespace } ::{ enumDecl .declName } )(0);\n " )
203206 outputFile .write (" }\n " )
204207
205208
206- def emitCodeBlock (names : List [DeclHeader ], fmtFn : Callable [[str ], str ], printFn : Callable [[DeclHeader , TextIO ], None ], outputFile : TextIO ):
209+ def emitCodeBlock (names : List [DeclHeader ], fmtFn : Callable [[str , str ], str ], printFn : Callable [[DeclHeader , TextIO ], None ], outputFile : TextIO ):
207210 for item in names :
208- outputFile .write (fmtFn (item .declName ))
211+ outputFile .write (fmtFn (item .namespace , item . declName ))
209212 outputFile .write ("{\n " )
210213 printFn (item , outputFile )
211214 outputFile .write ("}\n \n " )
212215
213216def emitEnumCreateNode (outputFile : TextIO ):
214- def fmtFn (item : str ):
215- return f"MDNode* CreateNode(IGC ::{ item } { item } Var, Module* module, StringRef name)\n "
217+ def fmtFn (namespace : str , item : str ):
218+ return f"MDNode* CreateNode({ namespace } ::{ item } { item } Var, Module* module, StringRef name)\n "
216219 emitCodeBlock (enumNames , fmtFn , printEnumCalls , outputFile )
217220
218221def emitStructCreateNode (outputFile : TextIO ):
219- def fmtFn (item : str ):
220- return f"MDNode* CreateNode(const IGC ::{ item } & { item } Var, Module* module, StringRef name)\n "
222+ def fmtFn (namespace : str , item : str ):
223+ return f"MDNode* CreateNode(const { namespace } ::{ item } & { item } Var, Module* module, StringRef name)\n "
221224 emitCodeBlock (structureNames , fmtFn , printStructCalls , outputFile )
222225
223226def emitEnumReadNode (outputFile : TextIO ):
224- def fmtFn (item : str ):
225- return f"void readNode(IGC ::{ item } & { item } Var, MDNode* node)\n "
227+ def fmtFn (namespace : str , item : str ):
228+ return f"void readNode({ namespace } ::{ item } & { item } Var, MDNode* node)\n "
226229 emitCodeBlock (enumNames , fmtFn , printEnumReadCalls , outputFile )
227230
228231def emitStructReadNode (outputFile : TextIO ):
229- def fmtFn (item : str ):
230- return f"void readNode(IGC ::{ item } & { item } Var, MDNode* node)\n "
232+ def fmtFn (namespace : str , item : str ):
233+ return f"void readNode({ namespace } ::{ item } & { item } Var, MDNode* node)\n "
231234 emitCodeBlock (structureNames , fmtFn , printStructReadCalls , outputFile )
232235
233236def genCode (fileName : str ):
0 commit comments