Author: Stephan <[email protected]>
Branch: 
Changeset: r191:48038111f307
Date: 2012-05-21 12:04 +0200
http://bitbucket.org/pypy/lang-js/changeset/48038111f307/

Log:    wip

diff --git a/js/astbuilder.py b/js/astbuilder.py
--- a/js/astbuilder.py
+++ b/js/astbuilder.py
@@ -683,6 +683,6 @@
 
 def parse_to_ast(code):
     from js.jsparser import parse, ParseError
-    parse_tree = parse(code)
+    parse_tree = parse(code.encode('utf-8'))
     ast = parse_tree_to_ast(parse_tree)
     return ast
diff --git a/js/baseop.py b/js/baseop.py
--- a/js/baseop.py
+++ b/js/baseop.py
@@ -7,6 +7,7 @@
 
 from pypy.rlib.rarithmetic import r_uint, intmask, ovfcheck
 from pypy.rlib.rfloat import  INFINITY, NAN, isnan, isinf
+from js.builtins_number import w_NAN
 
 import math
 
@@ -66,10 +67,23 @@
     fright = nright.ToNumber()
     return W_FloatNumber(fleft * fright)
 
-def mod(ctx, nleft, nright): # XXX this one is really not following spec
-    fleft = nleft.ToNumber()
-    fright = nright.ToNumber()
-    return W_FloatNumber(math.fmod(fleft, fright))
+def mod(ctx, w_left, w_right):
+    left = w_left.ToNumber()
+    right = w_right.ToNumber()
+
+    if isnan(left) or isnan(right):
+        return w_NAN
+
+    if isinf(left) or right == 0:
+        return w_NAN
+
+    if isinf(right):
+        return w_left
+
+    if left == 0:
+        return w_left
+
+    return W_FloatNumber(math.fmod(left, right))
 
 def division(ctx, nleft, nright):
     # XXX optimise for ints and floats
diff --git a/js/builtins_global.py b/js/builtins_global.py
--- a/js/builtins_global.py
+++ b/js/builtins_global.py
@@ -250,7 +250,6 @@
         return x
 
     src = x.to_string()
-    src = src.encode('utf-8')
     try:
         ast = parse_to_ast(src)
     except ParseError, e:
diff --git a/js/functions.py b/js/functions.py
--- a/js/functions.py
+++ b/js/functions.py
@@ -145,7 +145,7 @@
 
 class JsEvalCode(JsExecutableCode):
     def _opcodes_from_code_(self):
-        return self._js_code_.to_global_opcodes()
+        return self._js_code_.to_eval_opcodes()
 
     def is_eval_code(self):
         return True
diff --git a/js/interpreter.py b/js/interpreter.py
--- a/js/interpreter.py
+++ b/js/interpreter.py
@@ -8,7 +8,7 @@
 def load_file(filename):
     from js.astbuilder import parse_to_ast
 
-    f = open_file_as_stream(filename)
+    f = open_file_as_stream(str(filename))
     src = f.readall()
     ast = parse_to_ast(src)
     f.close()
diff --git a/js/jscode.py b/js/jscode.py
--- a/js/jscode.py
+++ b/js/jscode.py
@@ -165,6 +165,11 @@
         self.emit('LOAD_UNDEFINED')
         return self.opcodes
 
+    def to_eval_opcodes(self):
+        self.unlabel()
+        self.unpop_or_undefined()
+        return self.opcodes
+
     def to_global_opcodes(self):
         self.unlabel()
         self.unpop_or_undefined()
diff --git a/js/jsobj.py b/js/jsobj.py
--- a/js/jsobj.py
+++ b/js/jsobj.py
@@ -23,6 +23,7 @@
         return self
 
     def ToObject(self):
+        import pdb; pdb.set_trace()
         raise JsTypeError()
 
     def ToNumber(self):
diff --git a/js/opcodes.py b/js/opcodes.py
--- a/js/opcodes.py
+++ b/js/opcodes.py
@@ -631,9 +631,9 @@
         from js.jsobj import W_BasicObject
         assert isinstance(obj, W_BasicObject)
 
-        for prop in obj._properties_.values():
+        for key, prop in obj._properties_.items():
             if prop.enumerable is True:
-                props.append(prop.value)
+                props.append(_w(key))
 
         from js.jsobj import W_Iterator
         iterator = W_Iterator(props)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to