[pypy-svn] r33916 - in pypy/dist/pypy/lang/js: . test
fijal at codespeak.net
fijal at codespeak.net
Mon Oct 30 18:08:29 CET 2006
Author: fijal
Date: Mon Oct 30 18:08:27 2006
New Revision: 33916
Modified:
pypy/dist/pypy/lang/js/astgen.py
pypy/dist/pypy/lang/js/interpreter.py
pypy/dist/pypy/lang/js/test/test_interp.py
Log:
First attempt about making real JS objects.
Modified: pypy/dist/pypy/lang/js/astgen.py
==============================================================================
--- pypy/dist/pypy/lang/js/astgen.py (original)
+++ pypy/dist/pypy/lang/js/astgen.py Mon Oct 30 18:08:27 2006
@@ -66,7 +66,7 @@
elif tp == 'SEMICOLON':
return Semicolon(from_dict(d['expression']))
elif tp == 'NUMBER':
- return Number(int(d['value']))
+ return Number(float(d['value']))
elif tp == 'IDENTIFIER':
return Identifier(d['value'])
elif tp == 'LIST':
Modified: pypy/dist/pypy/lang/js/interpreter.py
==============================================================================
--- pypy/dist/pypy/lang/js/interpreter.py (original)
+++ pypy/dist/pypy/lang/js/interpreter.py Mon Oct 30 18:08:27 2006
@@ -1,6 +1,7 @@
from pypy.lang.js.astgen import *
from pypy.lang.js.context import ExecutionContext
+from pypy.lang.js.jsobj import W_Number, W_String
def writer(x):
print x
@@ -13,11 +14,25 @@
class __extend__(Number):
def call(self, context):
- return self.num
+ return W_Number(self.num)
class __extend__(Plus):
def call(self, context=None):
- return self.left.call(context) + self.right.call(context)
+ left = self.left.call(context).GetValue()
+ right = self.right.call(context).GetValue()
+ prim_left = left.ToPrimitive()
+ prim_right = right.ToPrimitive()
+ # INSANE
+ if isinstance(prim_left, W_String) or isinstance(prim_right, W_String):
+ str_left = prim_left.ToString()
+ str_right = prim_right.ToString()
+ return W_String(str_left + str_right)
+ else:
+ num_left = prim_left.ToNumber()
+ num_right = prim_right.ToNumber()
+ # XXX: obey all the rules
+ return W_Number(num_left + num_right)
+ #return self.left.call(context).add(self.right.call(context))
class __extend__(Semicolon):
def call(self, context=None):
Modified: pypy/dist/pypy/lang/js/test/test_interp.py
==============================================================================
--- pypy/dist/pypy/lang/js/test/test_interp.py (original)
+++ pypy/dist/pypy/lang/js/test/test_interp.py Mon Oct 30 18:08:27 2006
@@ -11,7 +11,7 @@
class TestInterp(object):
def test_simple(self):
- assert Plus(Number(3), Number(4)).call() == 7
+ assert Plus(Number(3), Number(4)).call().floatval == 7
# s = Script([Semicolon(Plus(Number(3), Number(4)))], [], [])
# s.call()
l = []
@@ -32,3 +32,5 @@
def test_var_assign(self):
self.assert_prints(parse_d("x=3;print(x);"), ["3"])
+ self.assert_prints(parse_d("x=3;y=4;print(x+y);"), ["7"])
+
More information about the Pypy-commit
mailing list