3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-07 18:05:24 +00:00

Merge pull request #3723 from povik/pygen-const

Fix the python generator for a bunch of const cases
This commit is contained in:
Miodrag Milanović 2023-06-09 15:13:23 +02:00 committed by GitHub
commit bac4c55ed6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -178,6 +178,8 @@ class WType:
t.cont = None
t.attr_type = attr_types.default
if str_def.find("<") != -1:# and str_def.find("<") < str_def.find(" "):
str_def = str_def.replace("const ", "")
candidate = WContainer.from_string(str_def, containing_file, line_number)
if candidate == None:
return None
@ -203,8 +205,12 @@ class WType:
prefix = ""
if str.startswith(str_def, "const "):
if "char_p" in str_def:
prefix = "const "
str_def = str_def[6:]
if str.startswith(str_def, "unsigned "):
prefix = "unsigned "
prefix = "unsigned " + prefix
str_def = str_def[9:]
while str.startswith(str_def, "long "):
prefix= "long " + prefix
@ -1285,7 +1291,7 @@ class WFunction:
prefix = ""
i = 0
for part in parts:
if part in ["unsigned", "long", "short"]:
if part in ["unsigned", "long", "short", "const"]:
prefix += part + " "
i += 1
else:
@ -1361,10 +1367,17 @@ class WFunction:
func.args.append(parsed)
return func
@property
def mangled_name(self):
mangled_typename = lambda code: code.replace("::", "_").replace("<","_").replace(">","_") \
.replace(" ","").replace("*","").replace(",","")
return self.name + "".join(
f"__{mangled_typename(arg.wtype.gen_text_cpp())}" for arg in self.args
)
def gen_alias(self):
self.alias = self.name
for arg in self.args:
self.alias += "__" + arg.wtype.gen_text_cpp().replace("::", "_").replace("<","_").replace(">","_").replace(" ","").replace("*","").replace(",","")
self.alias = self.mangled_name
def gen_decl(self):
if self.duplicate:
@ -2190,12 +2203,15 @@ def clean_duplicates():
for fun in class_.found_funs:
if fun.gen_decl_hash_py() in known_decls:
debug("Multiple declarations of " + fun.gen_decl_hash_py(),3)
other = known_decls[fun.gen_decl_hash_py()]
other.gen_alias()
fun.gen_alias()
if fun.gen_decl_hash_py() == other.gen_decl_hash_py():
if fun.mangled_name == other.mangled_name:
fun.duplicate = True
debug("Disabled \"" + fun.gen_decl_hash_py() + "\"", 3)
continue
other.gen_alias()
fun.gen_alias()
else:
known_decls[fun.gen_decl_hash_py()] = fun
known_decls = []