Skip to content

Commit 80e58b0

Browse files
author
hartsantler
committed
fixed evaluation order a = False and (False or True)
go backend: `range` builtin.
1 parent 4f7178d commit 80e58b0

6 files changed

Lines changed: 63 additions & 6 deletions

File tree

pythonjs/python_to_pythonjs.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,11 @@ def visit_NotIn(self, node):
657657
#return ' not in '
658658
raise RuntimeError('"not in" is only allowed in if-test: see method - visit_Compare')
659659

660+
## TODO check if the default visit_Compare always works ##
661+
#def visit_Compare(self, node):
662+
# raise NotImplementedError( node )
663+
664+
660665
def visit_AugAssign(self, node):
661666
self._in_assign_target = True
662667
target = self.visit( node.target )
@@ -1169,7 +1174,8 @@ def visit_Or(self, node):
11691174

11701175
def visit_BoolOp(self, node):
11711176
op = self.visit(node.op)
1172-
return op.join( [self.visit(v) for v in node.values] )
1177+
#raise SyntaxError(op)
1178+
return '('+ op.join( [self.visit(v) for v in node.values] ) + ')'
11731179

11741180
def visit_If(self, node):
11751181
if self._with_dart and writer.is_at_global_level():
@@ -2103,7 +2109,8 @@ def visit_Expr(self, node):
21032109

21042110
line = self.visit(node.value)
21052111
if line:
2106-
writer.write(line)
2112+
#writer.write('('+line+')')
2113+
writer.write( line )
21072114
elif use_runtime_errors:
21082115
writer.write('pass')
21092116

pythonjs/pythonjs.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1082,7 +1082,7 @@ def visit_Or(self, node):
10821082

10831083
def visit_BoolOp(self, node):
10841084
op = self.visit(node.op)
1085-
return op.join( [self.visit(v) for v in node.values] )
1085+
return '('+ op.join( [self.visit(v) for v in node.values] ) +')'
10861086

10871087
def visit_If(self, node):
10881088
out = []
@@ -1282,6 +1282,7 @@ def main(source, requirejs=True, insert_runtime=True, webworker=False, function_
12821282

12831283
try:
12841284
tree = ast.parse( source )
1285+
#raise SyntaxError(source)
12851286
except SyntaxError:
12861287
import traceback
12871288
err = traceback.format_exc()

pythonjs/pythonjs_to_go.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,13 +184,18 @@ def visit_For(self, node):
184184

185185

186186
def _visit_call_helper(self, node):
187+
fname = self.visit(node.func)
188+
if fname=='__DOLLAR__': fname = '$'
189+
elif fname == 'range':
190+
assert len(node.args)
191+
fname += str(len(node.args))
192+
193+
187194
if node.args:
188195
args = [self.visit(e) for e in node.args]
189196
args = ', '.join([e for e in args if e])
190197
else:
191198
args = ''
192-
fname = self.visit(node.func)
193-
if fname=='__DOLLAR__': fname = '$'
194199

195200
if node.keywords:
196201
if args: args += ','

pythonjs/runtime/go_builtins.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,31 @@
2727
2828
}
2929
}
30+
31+
func range1( x int ) []int {
32+
arr := make([]int, x)
33+
for i := 0; i < x; i++ {
34+
arr[i]=i
35+
}
36+
return arr
37+
}
38+
39+
func range2( start int, stop int ) []int {
40+
arr := make([]int, stop-start)
41+
for i := start; i < stop; i++ {
42+
arr[i]=i
43+
}
44+
return arr
45+
}
46+
47+
func range3( start int, stop int, step int ) []int {
48+
arr := make([]int, stop-start)
49+
for i := start; i < stop; i+=step {
50+
arr[i]=i
51+
}
52+
return arr
53+
}
54+
3055
""")
56+
57+

regtests/go/arrays.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,13 @@ def main():
1010
TestError( b[1]==200 )
1111

1212
c = a[:2]
13-
TestError( len(c)==2 )
13+
TestError( len(c)==2 )
14+
15+
d = range(10)
16+
TestError(len(d)==10)
17+
18+
#e = range(2,10)
19+
#TestError(len(e)==8)
20+
21+
#f = range(2,10, 2)
22+
#TestError(len(f)==4)

regtests/lang/eval_order.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
'''
2+
evaluation order
3+
'''
4+
# https://github.com/PythonJS/PythonJS/issues/131
5+
6+
def main():
7+
a = False and (False or True)
8+
TestError( a==False )

0 commit comments

Comments
 (0)