@@ -24,6 +24,7 @@ def __init__(self, requirejs=False, insert_runtime=False):
2424 def visit_ClassDef (self , node ):
2525 self ._class_stack .append ( node )
2626 node ._parents = set ()
27+ node ._struct_def = dict ()
2728 out = []
2829 sdef = dict ()
2930 props = set ()
@@ -61,7 +62,13 @@ def visit_ClassDef(self, node):
6162 props .add ( kw .arg )
6263 sdef [ kw .arg ] = kw .value .id
6364
65+ node ._struct_def .update ( sdef )
6466 out .append ( 'type %s struct {' % node .name )
67+ if base_classes :
68+ for bnode in base_classes :
69+ ## Go only needs the name of the parent struct and all its items are inserted automatically ##
70+ out .append ('%s' % bnode .name )
71+
6572 for name in sdef :
6673 out .append ('%s %s' % (name , sdef [name ]))
6774 out .append ('}' )
@@ -76,7 +83,25 @@ def visit_ClassDef(self, node):
7683 if b .name == '__init__' :
7784 init = b
7885
79- if init :
86+
87+ parent_init = None
88+ if base_classes :
89+ for bnode in base_classes :
90+ for b in bnode .body :
91+ if isinstance (b , ast .FunctionDef ):
92+ if b .name in method_names :
93+ continue
94+ if b .name == '__init__' :
95+ parent_init = {'class' :bnode , 'init' :b }
96+ #continue
97+ out .append ( self .visit (b ) )
98+
99+ if init or parent_init :
100+ if parent_init :
101+ classname = parent_init ['class' ].name
102+ init = parent_init ['init' ]
103+ else :
104+ classname = node .name
80105
81106 out .append ( 'func __new__%s( %s ) *%s {' % (node .name , init ._args_signature , node .name ))
82107 out .append ( ' ob := %s{}' % node .name )
@@ -88,21 +113,6 @@ def visit_ClassDef(self, node):
88113 out .append ( 'func __new__%s() *%s { return &%s{} }' % (node .name , node .name , node .name ))
89114
90115
91- if base_classes :
92- for bnode in base_classes :
93- for b in bnode .body :
94- if isinstance (b , ast .FunctionDef ):
95- if b .name == '__init__' : continue
96- if b .name in method_names : continue
97- out .append ( self .visit (b ) )
98- #args = [self.visit(a) for a in b.args.args][1:]
99- #args = ','.join(args)
100- #if args:
101- # out.append(self.indent()+ '%s(%s) { return %s.__%s(this,%s); }'%(b.name, args, bnode.name, b.name, args) )
102- #else:
103- # out.append(self.indent()+ '%s() { return %s.__%s(this); }'%(b.name, bnode.name, b.name) )
104-
105-
106116 self ._class_stack .pop ()
107117 return '\n ' .join (out )
108118
0 commit comments