Skip to content

Commit 7316b4d

Browse files
author
hartsantler
committed
finished tuple implementation
1 parent d59559e commit 7316b4d

4 files changed

Lines changed: 33 additions & 11 deletions

File tree

pythonscript.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// PythonScript Runtime - regenerated on: Wed Oct 9 20:55:21 2013
1+
// PythonScript Runtime - regenerated on: Thu Oct 10 00:32:54 2013
22
var jsrange = function(num) {
33
"Emulates Python's range function";
44
var i, r;
@@ -642,11 +642,21 @@ signature = {"kwargs": {"js_object": undefined}, "args": create_array("self", "j
642642
arguments = get_arguments(signature, args, kwargs);
643643
var self = arguments['self'];
644644
var js_object = arguments['js_object'];
645-
if(js_object) {
646-
self["__dict__"]["js_object"] = js_object;
645+
self["__dict__"]["js_object"] = create_array();
646+
if(js_object instanceof Array) {
647+
arr = self["__dict__"]["js_object"];
648+
i = 0;
649+
length = js_object.length;
650+
while(i < length) {
651+
arr.push( js_object[i] );
652+
i += 1
653+
}
647654
}
648655
else {
649-
self["__dict__"]["js_object"] = create_array();
656+
if(js_object) {
657+
throw TypeError;
658+
}
659+
650660
}
651661

652662
}

pythonscript/python_to_pythonjs.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -677,24 +677,31 @@ def visit_Call(self, node):
677677
else:
678678

679679
call_has_args = len(node.args) or len(node.keywords) or node.starargs or node.kwargs
680+
name = self.visit(node.func)
680681

681682
if call_has_args:
682683
args = ', '.join(map(self.visit, node.args))
683684
kwargs = ', '.join(map(lambda x: '%s=%s' % (x.arg, self.visit(x.value)), node.keywords))
684685
args_name = '__args_%s' % self.identifier
685686
kwargs_name = '__kwargs_%s' % self.identifier
687+
686688
writer.append('var(%s, %s)' % (args_name, kwargs_name))
687689
self.identifier += 1
688-
writer.append('%s = JSArray(%s)' % (args_name, args))
690+
691+
if name in ('list', 'tuple'):
692+
writer.write( '%s = JS("%s.__dict__.js_object")' % (args_name, args))
693+
else:
694+
writer.append('%s = JSArray(%s)' % (args_name, args))
695+
689696
if node.starargs:
690697
writer.append('%s.push.apply(%s, %s)' % (args_name, args_name, self.visit(node.starargs)))
691698
writer.append('%s = JSObject(%s)' % (kwargs_name, kwargs))
699+
692700
if node.kwargs:
693701
kwargs = self.visit(node.kwargs)
694702
code = "JS('for (var name in %s) { %s[name] = %s[name]; }')" % (kwargs, kwargs_name, kwargs)
695703
writer.append(code)
696704

697-
name = self.visit(node.func)
698705
if call_has_args:
699706
if name == 'dict':
700707
return 'get_attribute(%s, "__call__")(%s, JSObject(js_object=%s))' % (name, args_name, kwargs_name)

runtime/builtins.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,15 @@ def next(self):
5050

5151
class tuple:
5252
def __init__(self, js_object=None):
53-
if js_object:
54-
self.js_object = js_object
55-
else:
56-
self.js_object = JSArray()
53+
self.js_object = JSArray()
54+
if JS('js_object instanceof Array'):
55+
arr = self.js_object
56+
i = 0; length = JS('js_object.length')
57+
while i < length:
58+
JS('arr.push( js_object[i] )')
59+
i += 1
60+
elif js_object:
61+
raise TypeError
5762

5863
def __getitem__(self, index):
5964
__array = self.js_object

tests/test_tuple.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
j += 1
1717

1818
def test():
19-
global a, b
19+
global a, b, c, d
2020
print('--testing literal style--')
2121
a = (1,2,3) ## literal style
2222
show( a )

0 commit comments

Comments
 (0)