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