Skip to content

Commit 66921bf

Browse files
author
hartsantler
committed
go backend: use dict literal in class body to typedef the attributes of self.
1 parent b4517fc commit 66921bf

3 files changed

Lines changed: 27 additions & 5 deletions

File tree

pythonjs/python_to_pythonjs.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,8 @@ def _visit_dart_classdef(self, node):
813813
methods = {}
814814
method_list = [] ## getter/setters can have the same name
815815
props = set()
816+
struct_types = dict()
817+
816818
for item in node.body:
817819
if isinstance(item, FunctionDef):
818820
methods[ item.name ] = item
@@ -830,7 +832,18 @@ def _visit_dart_classdef(self, node):
830832
if n.id == 'self':
831833
n.id = 'this'
832834

833-
if props:
835+
elif isinstance(item, ast.Expr) and isinstance(item.value, ast.Dict):
836+
sdef = []
837+
for i in range( len(item.value.keys) ):
838+
k = self.visit( item.value.keys[ i ] )
839+
v = self.visit( item.value.values[i] )
840+
sdef.append( '%s=%s'%(k,v) )
841+
842+
writer.write('@__struct__(%s)' %','.join(sdef))
843+
844+
if self._with_go:
845+
pass
846+
elif props:
834847
writer.write('@properties(%s)'%','.join(props))
835848
for dec in node.decorator_list:
836849
writer.write('@%s'%self.visit(dec))

pythonjs/pythonjs_to_go.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def visit_ClassDef(self, node):
2424
self._class_stack.append( node )
2525
node._parents = set()
2626
out = []
27+
sdef = dict()
2728
props = set()
2829
bases = set()
2930
base_classes = set()
@@ -32,11 +33,15 @@ def visit_ClassDef(self, node):
3233
self._class_props[ node.name ] = props
3334
for decor in node.decorator_list: ## class decorators
3435
if isinstance(decor, ast.Call):
35-
props.update( [self.visit(a) for a in decor.args] )
36+
assert decor.func.id=='__struct__'
37+
#props.update( [self.visit(a) for a in decor.args] )
38+
for kw in decor.keywords:
39+
props.add( kw.arg )
40+
sdef[ kw.arg ] = kw.value.id
3641

3742
out.append( 'type %s struct {' %node.name)
38-
for name in props:
39-
out.append('%s int' %name)
43+
for name in sdef:
44+
out.append('%s %s' %(name, sdef[name]))
4045

4146
out.append('}')
4247

regtests/go/class.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
'''
22
simple class
33
'''
4-
54
class A:
5+
{
6+
x:int,
7+
y:int,
8+
}
69
def __init__(self):
710
self.x = 1
11+
self.y = 2
812

913
def main():
1014
a = A()

0 commit comments

Comments
 (0)