aboutsummaryrefslogtreecommitdiffstats
path: root/misc/py_wrap_generator.py
diff options
context:
space:
mode:
authorStefan Biereigel <stefan@biereigel.de>2020-01-30 21:26:37 +0100
committerStefan Biereigel <stefan@biereigel.de>2020-01-30 21:26:37 +0100
commit3c9371589d19cb8618ec9aef6d8de5d83450386c (patch)
treee2310a7f3b38d6a4e193ca9effc29223cdb06364 /misc/py_wrap_generator.py
parent60876ce183ee5f3980c378e190d996453d59a780 (diff)
downloadyosys-3c9371589d19cb8618ec9aef6d8de5d83450386c.tar.gz
yosys-3c9371589d19cb8618ec9aef6d8de5d83450386c.tar.bz2
yosys-3c9371589d19cb8618ec9aef6d8de5d83450386c.zip
add inheritance for pywrap generators
Diffstat (limited to 'misc/py_wrap_generator.py')
-rw-r--r--misc/py_wrap_generator.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/misc/py_wrap_generator.py b/misc/py_wrap_generator.py
index 9b4e644c0..c60a1f268 100644
--- a/misc/py_wrap_generator.py
+++ b/misc/py_wrap_generator.py
@@ -721,6 +721,7 @@ class WClass:
name = None
namespace = None
link_type = None
+ base_class = None
id_ = None
string_id = None
hash_id = None
@@ -732,6 +733,7 @@ class WClass:
def __init__(self, name, link_type, id_, string_id = None, hash_id = None, needs_clone = False):
self.name = name
self.namespace = None
+ self.base_class = None
self.link_type = link_type
self.id_ = id_
self.string_id = string_id
@@ -1971,9 +1973,21 @@ def parse_header(source):
for namespace in impl_namespaces:
complete_namespace += "::" + namespace
debug("\tFound " + struct_name + " in " + complete_namespace,2)
+
+ base_class_name = None
+ if len(ugly_line.split(" : ")) > 1: # class is derived
+ deriv_str = ugly_line.split(" : ")[1]
+ if len(deriv_str.split("::")) > 1: # namespace of base class is given
+ base_class_name = deriv_str.split("::", 1)[1]
+ else:
+ base_class_name = deriv_str.split(" ")[0]
+ debug("\t " + struct_name + " is derived from " + base_class_name,2)
+ base_class = class_by_name(base_class_name)
+
class_ = (class_by_name(struct_name), ugly_line.count("{"))#calc_ident(line))
if struct_name in classnames:
class_[0].namespace = complete_namespace
+ class_[0].base_class = base_class
i += 1
continue
@@ -2142,6 +2156,21 @@ def expand_functions():
new_funs.extend(expand_function(fun))
class_.found_funs = new_funs
+def inherit_members():
+ for source in sources:
+ for class_ in source.classes:
+ if class_.base_class:
+ base_funs = copy.deepcopy(class_.base_class.found_funs)
+ for fun in base_funs:
+ fun.member_of = class_
+ fun.namespace = class_.namespace
+ base_vars = copy.deepcopy(class_.base_class.found_vars)
+ for var in base_vars:
+ var.member_of = class_
+ var.namespace = class_.namespace
+ class_.found_funs.extend(base_funs)
+ class_.found_vars.extend(base_vars)
+
def clean_duplicates():
for source in sources:
for class_ in source.classes:
@@ -2178,6 +2207,7 @@ def gen_wrappers(filename, debug_level_ = 0):
parse_header(source)
expand_functions()
+ inherit_members()
clean_duplicates()
import shutil