@@ -14,6 +14,7 @@ def __init__(self, requirejs=False, insert_runtime=False):
1414 pythonjs .JSGenerator .__init__ (self , requirejs = False , insert_runtime = False )
1515 #self._classes = dict()
1616 #self._class_props = dict()
17+ self ._vars = set ()
1718
1819 def visit_Print (self , node ):
1920 r = [ 'fmt.Println(%s);' % self .visit (e ) for e in node .values ]
@@ -113,7 +114,10 @@ def _visit_call_helper_go(self, node):
113114 else :
114115 return SyntaxError ('invalid special go call' )
115116
116- def visit_FunctionDef (self , node ):
117+ def _visit_function (self , node ):
118+ if self ._function_stack [0 ] is node :
119+ self ._vars = set ()
120+
117121 args_typedefs = {}
118122 return_type = None
119123 for decor in node .decorator_list :
@@ -183,9 +187,13 @@ def _visit_call_helper_var(self, node):
183187 for key in node .keywords :
184188 args .append ( key .arg )
185189
186- out = []
187- for v in args :
188- out .append ( self .indent () + 'var ' + v + ' int' )
190+ for name in args :
191+ if name not in self ._vars :
192+ self ._vars .add ( name )
193+
194+ #out = []
195+ #for v in args:
196+ # out.append( self.indent() + 'var ' + v + ' int')
189197
190198 #return '\n'.join(out)
191199 return ''
@@ -200,11 +208,21 @@ def visit_Assign(self, node):
200208 value = self .visit (node .value .right )
201209 return 'var %s <- %s;' % (target , value )
202210
211+ elif not self ._function_stack :
212+ target = self .visit (target )
213+ value = self .visit (node .value )
214+ return 'var %s = %s;' % (target , value )
215+
216+ elif isinstance (node .targets [0 ], ast .Name ) and target .id in self ._vars :
217+ target = self .visit (target )
218+ value = self .visit (node .value )
219+ self ._vars .remove ( target )
220+ return '%s := %s;' % (target , value )
221+
203222 else :
204223 target = self .visit (target )
205224 value = self .visit (node .value )
206- code = 'var %s = %s;' % (target , value )
207- return code
225+ return '%s = %s;' % (target , value )
208226
209227 def visit_While (self , node ):
210228 body = [ 'for %s {' % self .visit (node .test )]
0 commit comments