[pypy-svn] r43536 - in pypy/dist/pypy/lang/js: . test
santagada at codespeak.net
santagada at codespeak.net
Mon May 21 18:05:58 CEST 2007
Author: santagada
Date: Mon May 21 18:05:57 2007
New Revision: 43536
Modified:
pypy/dist/pypy/lang/js/astbuilder.py
pypy/dist/pypy/lang/js/jsgrammar.txt
pypy/dist/pypy/lang/js/operations.py
pypy/dist/pypy/lang/js/test/test_astbuilder.py
Log:
"new" preliminar support
Modified: pypy/dist/pypy/lang/js/astbuilder.py
==============================================================================
--- pypy/dist/pypy/lang/js/astbuilder.py (original)
+++ pypy/dist/pypy/lang/js/astbuilder.py Mon May 21 18:05:57 2007
@@ -102,7 +102,6 @@
return left
visit_additiveexpression = binaryop
visit_multiplicativeexpression = binaryop
- visit_memberexpression = binaryop
visit_bitwisexorexpression = binaryop
visit_bitwiseandexpression = binaryop
visit_bitwiseorexpression = binaryop
@@ -110,6 +109,18 @@
visit_logicalorexpression = binaryop
visit_logicalandexpression = binaryop
+ def visit_memberexpression(self, node):
+ if isinstance(node.children[0], Symbol) and \
+ node.children[0].additional_info == 'new': # XXX could be a identifier?
+ # "new case"
+ pos = self.get_pos(node)
+ left = self.dispatch(node.children[1])
+ right = self.dispatch(node.children[2])
+ exp = operations.Call(pos, left, right)
+ return operations.New(pos, exp)
+ else:
+ return self.binaryop(node)
+
def literalop(self, node):
pos = self.get_pos(node);
@@ -215,3 +226,11 @@
def visit_emptystatement(self, node):
return operations.astundef
+ def visit_newexpression(self, node):
+ if len(node.children) == 1:
+ return self.dispatch(node.children[0])
+ else:
+ pos = self.get_pos(node)
+ val = self.dispatch(node.children[0])
+ return operations.New(pos, val)
+
Modified: pypy/dist/pypy/lang/js/jsgrammar.txt
==============================================================================
--- pypy/dist/pypy/lang/js/jsgrammar.txt (original)
+++ pypy/dist/pypy/lang/js/jsgrammar.txt Mon May 21 18:05:57 2007
@@ -213,8 +213,8 @@
| "[" expression ["]"]
;
-newexpression : "new" newexpression
- | <memberexpression>
+newexpression : <memberexpression>
+ | "new" newexpression
;
callexpression : memberexpression arguments >callexpressiona<*
Modified: pypy/dist/pypy/lang/js/operations.py
==============================================================================
--- pypy/dist/pypy/lang/js/operations.py (original)
+++ pypy/dist/pypy/lang/js/operations.py Mon May 21 18:05:57 2007
@@ -693,14 +693,13 @@
##############################################################################
class New(UnaryOp):
- opcode = 'NEW'
-
def eval(self, ctx):
x = self.expr.eval(ctx).GetValue()
if not isinstance(x, W_PrimitiveObject):
raise TypeError()
return x.Construct(ctx=ctx)
+
class NewWithArgs(BinaryOp):
opcode = 'NEW_WITH_ARGS'
Modified: pypy/dist/pypy/lang/js/test/test_astbuilder.py
==============================================================================
--- pypy/dist/pypy/lang/js/test/test_astbuilder.py (original)
+++ pypy/dist/pypy/lang/js/test/test_astbuilder.py Mon May 21 18:05:57 2007
@@ -3,7 +3,10 @@
from pypy.lang.js import operations
def to_ast(s):
- ASTBuilder().dispatch(parse(s))
+ print s
+ tp = parse(s)
+ print tp
+ ASTBuilder().dispatch(tp)
def test_simple():
yield to_ast, "1;"
@@ -13,7 +16,9 @@
yield to_ast, "x[1];"
yield to_ast, "true;"
yield to_ast, "false;"
- yield to_ast, "null;"
+ yield to_ast, "null;"
+ yield to_ast, "f();"
+ yield to_ast, "new f();"
#yield to_ast, ""
def test_funcvarfinder():
More information about the Pypy-commit
mailing list