@@ -17,13 +17,16 @@ class DeclHeader:
17
17
line : str
18
18
# declName is just the identifier name
19
19
declName : str
20
+ # declName is just the identifier name
21
+ namespace : str
20
22
# fields contains a list of all the names of the fields in the structure
21
23
fields : List [str ]
22
24
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
27
30
28
31
enumNames : List [DeclHeader ] = []
29
32
structureNames : List [DeclHeader ] = []
@@ -73,45 +76,45 @@ def lines(s: str) -> Generator[str, None, None]:
73
76
yield line
74
77
75
78
def parseHeader (fileContents : str ):
76
- insideIGCNameSpace = False
79
+ namespace = ""
77
80
pcount = 0
78
81
file = lines (fileContents )
79
82
for line in file :
80
83
line = line .split ("//" )[0 ]
81
- if "namespace IGC" in line :
84
+ if "namespace" in line :
85
+ words = line .split ()
82
86
while "{" not in line :
83
87
line = next (file , None )
84
88
if line is None :
85
89
sys .exit ('missing opening brace!' )
86
- insideIGCNameSpace = True
90
+ namespace = words [ 1 ] if len ( words ) > 1 else ""
87
91
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"
115
118
116
119
def stripBlockComments (text : str ) -> str :
117
120
return re .sub (r'/\*(.|\s)*?\*/' , '' , text )
@@ -164,7 +167,7 @@ def printEnumCalls(enumDecl: DeclHeader, outputFile: TextIO):
164
167
outputFile .write (f" switch({ enumDecl .declName } Var)\n " )
165
168
outputFile .write (" {\n " )
166
169
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 " )
168
171
outputFile .write (" enumName = " )
169
172
outputFile .write (f'"{ item } "' )
170
173
outputFile .write (";\n " )
@@ -193,41 +196,41 @@ def printEnumReadCalls(enumDecl: DeclHeader, outputFile: TextIO):
193
196
outputFile .write (f'"{ item } "' )
194
197
outputFile .write (") == 0)\n " )
195
198
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 " )
197
200
outputFile .write (" }\n " )
198
201
first = False
199
202
200
203
outputFile .write (" else\n " )
201
204
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 " )
203
206
outputFile .write (" }\n " )
204
207
205
208
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 ):
207
210
for item in names :
208
- outputFile .write (fmtFn (item .declName ))
211
+ outputFile .write (fmtFn (item .namespace , item . declName ))
209
212
outputFile .write ("{\n " )
210
213
printFn (item , outputFile )
211
214
outputFile .write ("}\n \n " )
212
215
213
216
def 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 "
216
219
emitCodeBlock (enumNames , fmtFn , printEnumCalls , outputFile )
217
220
218
221
def 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 "
221
224
emitCodeBlock (structureNames , fmtFn , printStructCalls , outputFile )
222
225
223
226
def 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 "
226
229
emitCodeBlock (enumNames , fmtFn , printEnumReadCalls , outputFile )
227
230
228
231
def 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 "
231
234
emitCodeBlock (structureNames , fmtFn , printStructReadCalls , outputFile )
232
235
233
236
def genCode (fileName : str ):
0 commit comments