update to latest cppyy
This commit is contained in:
		| @@ -150,7 +150,7 @@ def add_sys_include_path(incl): | ||||
| def _pythonizor(clazz, name): | ||||
|     # A pythonizor receives the freshly prepared bound C++ class, and a name stripped down to | ||||
|     # the namespace the pythonizor is applied. Also accessible are clazz.__name__ (for the | ||||
|     # Python name) and clazz.__cppname__ (for the C++ name) | ||||
|     # Python name) and clazz.__cpp_name__ (for the C++ name) | ||||
|     if name == 'sc_time': | ||||
|         clazz.__repr__ = lambda self: repr(self.to_string()) | ||||
|         clazz.__str__ = lambda self: self.to_string() | ||||
|   | ||||
| @@ -15,6 +15,53 @@ class Mode(Enum): | ||||
|  | ||||
| mode=Mode.SIM | ||||
|  | ||||
| module_list = list() | ||||
| connection_list = list() | ||||
|  | ||||
| def dump_structure(): | ||||
|     mports=dict() | ||||
|      | ||||
|     def add_port(p, io): | ||||
|         mod = p.get_parent_object() | ||||
|         if mod not in mports: | ||||
|             mports[mod]=dict() | ||||
|             mports[mod]['in']=[] | ||||
|             mports[mod]['out']=[] | ||||
|         if not p in mports[mod][io]: | ||||
|             mports[mod][io].append(p) | ||||
|          | ||||
|     for c in connection_list: | ||||
|         add_port(c.source, 'out') | ||||
|         for t in c.targets: | ||||
|             add_port(t, 'in') | ||||
|          | ||||
|     with open("structure.dot", "w") as f: | ||||
|         f.write("""digraph structs { | ||||
|     rankdir=LR | ||||
|     node [shape=record];\n""") | ||||
|         for m in mports.keys(): | ||||
|             #struct3 [shape=record,label="hello\nworld |{ b |{c|<here> d|e}| f}| g | h"]; | ||||
|             in_names=['<%s> %s'%(p.basename(), p.basename()) for p in mports[m]['in']] | ||||
|             out_names=['<%s> %s'%(p.basename(), p.basename()) for p in mports[m]['out']] | ||||
|             if len(in_names) == 0: | ||||
|                 f.write('  %s [shape=record,label="{%s|{%s}}"];\n' % ( | ||||
|                     m.name(), m.basename(), '|'.join(out_names))) | ||||
|             elif len(out_names) == 0: | ||||
|                 f.write('  %s [shape=record,label="{{%s}|%s}"];\n' % ( | ||||
|                     m.name(), '|'.join(in_names), m.basename())) | ||||
|             else: | ||||
|                 f.write('  %s [shape=record,label="{{%s}|%s|{%s}}"];\n' % ( | ||||
|                     m.name(), '|'.join(in_names), m.basename(), '|'.join(out_names))) | ||||
|         for c in connection_list: | ||||
|             attr = 'dir=both arrowhead=box arrowtail=obox' | ||||
|             if isinstance(c, Signal): | ||||
|                 attr = 'dir=none' | ||||
|             src = '%s:%s' % (c.source.get_parent_object().name(), c.source.basename()) | ||||
|             for t in c.targets: | ||||
|                 tgt = '%s:%s' % (t.get_parent_object().name(), t.basename()) | ||||
|                 f.write("    %s -> %s [%s];\n" % (src, tgt, attr)) | ||||
|         f.write("}\n") | ||||
|          | ||||
| class Simulation(object): | ||||
|      | ||||
|     @staticmethod | ||||
| @@ -74,6 +121,7 @@ class Module(object): | ||||
|     def __init__(self, clazz): | ||||
|         self.cppclazz=clazz | ||||
|         self.instance=None | ||||
|         module_list.append(self) | ||||
|      | ||||
|     def __getattr__(self, attr): | ||||
|         if self.instance is None: | ||||
| @@ -91,6 +139,7 @@ class Connection(object): | ||||
|     def __init__(self): | ||||
|         self.source=None | ||||
|         self.targets=[] | ||||
|         connection_list.append(self) | ||||
|      | ||||
|     def src(self, module_port): | ||||
|         self.source=module_port | ||||
| @@ -101,6 +150,11 @@ class Connection(object): | ||||
|         self.source.bind(module_port) | ||||
|         return self | ||||
|  | ||||
|     def cross(self, module_port_in, module_port_out): | ||||
|         self.targets.append(module_port_in) | ||||
|         self.source.bind(module_port_in) | ||||
|         return Connection().src(module_port_out) | ||||
|          | ||||
| class Signal(Connection): | ||||
|     ''' | ||||
|     classdocs | ||||
| @@ -118,7 +172,7 @@ class Signal(Connection): | ||||
|          | ||||
|     def src(self, module_port): | ||||
|         self.source=module_port | ||||
|         port_class_name=type(module_port).__cppname__ | ||||
|         port_class_name=type(module_port).__cpp_name__ | ||||
|         match = self._sc_inout_re.match(port_class_name) | ||||
|         if match: | ||||
|             self.data_type=match.group(1) | ||||
| @@ -138,3 +192,7 @@ class Signal(Connection): | ||||
|         module_port.bind(self.signal) | ||||
|         return self | ||||
|          | ||||
|     def cross(self, module_port_in, module_port_out): | ||||
|         self.targets.append(module_port_in) | ||||
|         self.source.bind(module_port_in) | ||||
|         return Signal().src(module_port_out) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user