Author: Stephan <[email protected]>
Branch:
Changeset: r335:77a0a486f6e4
Date: 2013-01-08 18:03 +0100
http://bitbucket.org/pypy/lang-js/changeset/77a0a486f6e4/
Log: moved _w to js.object_space
diff --git a/js/baseop.py b/js/baseop.py
--- a/js/baseop.py
+++ b/js/baseop.py
@@ -2,7 +2,8 @@
""" Base operations implementations
"""
-from js.jsobj import W_String, W_IntNumber, W_FloatNumber, _w
+from js.jsobj import W_String, W_IntNumber, W_FloatNumber
+from js.object_space import _w
from pypy.rlib.rarithmetic import ovfcheck
from pypy.rlib.rfloat import isnan, isinf
diff --git a/js/builtins/__init__.py b/js/builtins/__init__.py
--- a/js/builtins/__init__.py
+++ b/js/builtins/__init__.py
@@ -1,4 +1,5 @@
-from js.jsobj import w_Undefined, _w
+from js.jsobj import w_Undefined
+from js.object_space import _w
#from pypy.rlib import jit
diff --git a/js/builtins/array.py b/js/builtins/array.py
--- a/js/builtins/array.py
+++ b/js/builtins/array.py
@@ -1,6 +1,6 @@
-from js.jsobj import isnull_or_undefined, _w, w_Undefined
+from js.jsobj import isnull_or_undefined, w_Undefined
from js.builtins import get_arg
-from js.object_space import w_return
+from js.object_space import w_return, _w
def setup(global_object):
diff --git a/js/builtins/boolean.py b/js/builtins/boolean.py
--- a/js/builtins/boolean.py
+++ b/js/builtins/boolean.py
@@ -1,7 +1,6 @@
from js.jsobj import W_Boolean, W_BooleanObject
from js.execution import JsTypeError
-from js.jsobj import _w
-from js.object_space import w_return
+from js.object_space import w_return, _w
def setup(global_object):
diff --git a/js/builtins/date.py b/js/builtins/date.py
--- a/js/builtins/date.py
+++ b/js/builtins/date.py
@@ -1,9 +1,8 @@
from pypy.rlib.rfloat import NAN, isnan
-from js.jsobj import _w
import datetime
from js.builtins import get_arg
-from js.object_space import w_return, hide_on_translate
+from js.object_space import w_return, hide_on_translate, _w
from pypy.rlib.objectmodel import we_are_translated
diff --git a/js/builtins/function.py b/js/builtins/function.py
--- a/js/builtins/function.py
+++ b/js/builtins/function.py
@@ -1,9 +1,9 @@
from js.jsobj import isnull_or_undefined
from js.execution import JsTypeError
-from js.jsobj import w_Undefined, _w
+from js.jsobj import w_Undefined
from js.builtins import get_arg
from js.completion import NormalCompletion
-from js.object_space import w_return
+from js.object_space import w_return, _w
@w_return
diff --git a/js/builtins/js_math.py b/js/builtins/js_math.py
--- a/js/builtins/js_math.py
+++ b/js/builtins/js_math.py
@@ -1,9 +1,8 @@
import math
-from js.jsobj import _w
from pypy.rlib.rfloat import NAN, INFINITY, isnan, isinf
from js.builtins import get_arg
-from js.object_space import w_return
+from js.object_space import w_return, _w
def setup(global_object):
diff --git a/js/builtins/number.py b/js/builtins/number.py
--- a/js/builtins/number.py
+++ b/js/builtins/number.py
@@ -1,7 +1,7 @@
from pypy.rlib.rfloat import NAN, INFINITY
from js.execution import JsRangeError, JsTypeError
-from js.jsobj import W_Number, W_NumericObject, _w
-from js.object_space import w_return
+from js.jsobj import W_Number, W_NumericObject
+from js.object_space import w_return, _w
def setup(global_object):
diff --git a/js/builtins/object.py b/js/builtins/object.py
--- a/js/builtins/object.py
+++ b/js/builtins/object.py
@@ -1,4 +1,4 @@
-from js.jsobj import _w
+from js.object_space import _w
def to_string(this, args):
diff --git a/js/builtins/string.py b/js/builtins/string.py
--- a/js/builtins/string.py
+++ b/js/builtins/string.py
@@ -1,8 +1,8 @@
-from js.jsobj import _w, w_Undefined, W_String, W_StringObject
+from js.jsobj import w_Undefined, W_String, W_StringObject
from pypy.rlib.rfloat import NAN
from js.execution import JsTypeError
from js.builtins import get_arg
-from js.object_space import w_return
+from js.object_space import w_return, _w
from pypy.rlib.rstring import UnicodeBuilder
diff --git a/js/execution.py b/js/execution.py
--- a/js/execution.py
+++ b/js/execution.py
@@ -40,7 +40,7 @@
return self.message
def msg(self):
- from js.jsobj import _w
+ from js.object_space import _w
return _w(self._msg())
diff --git a/js/functions.py b/js/functions.py
--- a/js/functions.py
+++ b/js/functions.py
@@ -1,4 +1,4 @@
-from js.jsobj import _w
+from js.object_space import _w
class JsBaseFunction(object):
diff --git a/js/jsobj.py b/js/jsobj.py
--- a/js/jsobj.py
+++ b/js/jsobj.py
@@ -559,6 +559,7 @@
_class_ = 'String'
def __init__(self, primitive_value):
+ from js.object_space import _w
W__PrimitiveObject.__init__(self, primitive_value)
length = len(self._primitive_value_.to_string())
descr = PropertyDescriptor(value=_w(length), enumerable=False,
configurable=False, writable=False)
@@ -580,6 +581,7 @@
return None
result_string = string[index]
+ from js.object_space import _w
d = PropertyDescriptor(value=_w(result_string), enumerable=True,
writable=False, configurable=False)
return d
@@ -730,6 +732,7 @@
class W_NumberConstructor(W_BasicFunction):
# 15.7.1.1
def Call(self, args=[], this=None, calling_context=None):
+ from js.object_space import _w
if len(args) >= 1 and not isnull_or_undefined(args[0]):
return _w(args[0].ToNumber())
elif len(args) >= 1 and args[0] is w_Undefined:
@@ -749,6 +752,7 @@
class W_StringConstructor(W_BasicFunction):
def Call(self, args=[], this=None, calling_context=None):
from js.builtins import get_arg
+ from js.object_space import _w
arg0 = get_arg(args, 0, _w(u""))
strval = arg0.to_string()
return W_String(strval)
@@ -763,6 +767,7 @@
# 15.6.2
class W_BooleanConstructor(W_BasicFunction):
def Call(self, args=[], this=None, calling_context=None):
+ from js.object_space import _w
if len(args) >= 1 and not isnull_or_undefined(args[0]):
boolval = args[0].to_boolean()
return _w(boolval)
@@ -808,6 +813,7 @@
# value = _w(int(num))
#else:
# value = _w(int(time.time() * 1000))
+ from js.object_space import _w
value = _w(int(time.time() * 1000))
from js.object_space import object_space
@@ -828,6 +834,7 @@
def __init__(self, function_body, formal_parameter_list=[], scope=None,
strict=False):
W_BasicFunction.__init__(self)
from js.object_space import object_space
+ from js.object_space import _w
self._function_ = function_body
self._scope_ = scope
self._params_ = formal_parameter_list
@@ -902,6 +909,7 @@
_class_ = 'Arguments'
def __init__(self, func, names, args, env, strict=False):
+ from js.object_space import _w
W__Object.__init__(self)
self.strict = strict
_len = len(args)
@@ -948,6 +956,7 @@
# 15.4.2
class W_ArrayConstructor(W_BasicFunction):
def __init__(self):
+ from js.object_space import _w
W_BasicFunction.__init__(self)
put_property(self, u'length', _w(1), writable=False, enumerable=False,
configurable=False)
@@ -956,6 +965,7 @@
def Call(self, args=[], this=None, calling_context=None):
from js.object_space import object_space
+ from js.object_space import _w
if len(args) == 1:
_len = args[0]
@@ -1268,6 +1278,7 @@
# 15.4.5.1
def define_own_property(self, p, desc, throw=False):
+ from js.object_space import _w
old_len_desc = self.get_own_property(u'length')
assert old_len_desc is not None
old_len = old_len_desc.value.ToUInt32()
@@ -1351,36 +1362,6 @@
return W_BasicObject.define_own_property(self, p, desc, throw)
-from pypy.rlib.objectmodel import specialize
-
-
[email protected](0)
-def _w(value):
- if value is None:
- return w_Null
- elif isinstance(value, W_Root):
- return value
- elif isinstance(value, bool):
- return newbool(value)
- elif isinstance(value, int):
- return W_IntNumber(value)
- elif isinstance(value, float):
- return W_FloatNumber(value)
- elif isinstance(value, unicode):
- return W_String(value)
- elif isinstance(value, str):
- u_str = unicode(value)
- return W_String(u_str)
- elif isinstance(value, list):
- from js.object_space import object_space
- a = object_space.new_array()
- for index, item in enumerate(value):
- put_property(a, unicode(str(index)), _w(item), writable=True,
enumerable=True, configurable=True)
- return a
-
- raise TypeError("ffffuuu %s" % (value,))
-
-
def put_property(obj, name, value, writable=False, configurable=False,
enumerable=False, throw=False):
descriptor = PropertyDescriptor(value=value, writable=writable,
configurable=configurable, enumerable=enumerable)
obj.define_own_property(name, descriptor, throw)
diff --git a/js/object_space.py b/js/object_space.py
--- a/js/object_space.py
+++ b/js/object_space.py
@@ -1,8 +1,36 @@
-from js.jsobj import _w, W__Object, W_BasicFunction, W__Function,
W_DateObject, W_BooleanObject, W_StringObject, W_NumericObject, W__Array, w_Null
+from pypy.rlib.objectmodel import specialize
+
+
[email protected](0)
+def _w(value):
+ from js.jsobj import w_Null, newbool, W_IntNumber, W_FloatNumber,
W_String, W_Root, put_property
+ if value is None:
+ return w_Null
+ elif isinstance(value, W_Root):
+ return value
+ elif isinstance(value, bool):
+ return newbool(value)
+ elif isinstance(value, int):
+ return W_IntNumber(value)
+ elif isinstance(value, float):
+ return W_FloatNumber(value)
+ elif isinstance(value, unicode):
+ return W_String(value)
+ elif isinstance(value, str):
+ u_str = unicode(value)
+ return W_String(u_str)
+ elif isinstance(value, list):
+ a = object_space.new_array()
+ for index, item in enumerate(value):
+ put_property(a, unicode(str(index)), _w(item), writable=True,
enumerable=True, configurable=True)
+ return a
+
+ raise TypeError("ffffuuu %s" % (value,))
class ObjectSpace(object):
def __init__(self):
+ from js.jsobj import w_Null
self.global_context = None
self.global_object = None
self.proto_function = w_Null
@@ -18,6 +46,7 @@
return self.global_context.variable_environment()
def assign_proto(self, obj, proto=None):
+ from js.jsobj import W_BasicFunction, W_DateObject, W_BooleanObject,
W_StringObject, W_NumericObject, W__Array
if proto is not None:
obj._prototype_ = proto
return obj
@@ -39,46 +68,53 @@
return obj
def new_obj(self):
+ from js.jsobj import W__Object
obj = W__Object()
self.assign_proto(obj)
return obj
def new_func(self, function_body, formal_parameter_list=[], scope=None,
strict=False):
+ from js.jsobj import W__Function
obj = W__Function(function_body, formal_parameter_list, scope, strict)
self.assign_proto(obj)
return obj
def new_date(self, value):
+ from js.jsobj import W_DateObject
obj = W_DateObject(value)
self.assign_proto(obj)
return obj
def new_array(self, length=_w(0)):
+ from js.jsobj import W__Array
obj = W__Array(length)
self.assign_proto(obj)
return obj
def new_bool(self, value):
+ from js.jsobj import W_BooleanObject
obj = W_BooleanObject(value)
self.assign_proto(obj)
return obj
def new_string(self, value):
+ from js.jsobj import W_StringObject
obj = W_StringObject(value)
self.assign_proto(obj)
return obj
def new_number(self, value):
+ from js.jsobj import W_NumericObject
obj = W_NumericObject(value)
self.assign_proto(obj)
return obj
+
object_space = ObjectSpace()
def w_return(fn):
def f(*args):
- from js.jsobj import _w
return _w(fn(*args))
return f
diff --git a/js/opcodes.py b/js/opcodes.py
--- a/js/opcodes.py
+++ b/js/opcodes.py
@@ -1,5 +1,6 @@
from js.jsobj import W_IntNumber, W_FloatNumber, W_String, \
- w_Undefined, newbool, w_Null, _w
+ w_Undefined, newbool, w_Null
+from js.object_space import _w
from js.execution import JsTypeError
from js.baseop import plus, sub, compare, AbstractEC, StrictEC,\
compare_e, increment, decrement, mult, division, uminus, mod
diff --git a/test/ecma/conftest.py b/test/ecma/conftest.py
--- a/test/ecma/conftest.py
+++ b/test/ecma/conftest.py
@@ -3,7 +3,7 @@
from js.interpreter import Interpreter, load_file
from _pytest.runner import Failed
-from js.jsobj import _w
+from js.object_space import _w
from js.execution import JsException
from pypy.rlib.parsing.parsing import ParseError
diff --git a/test/test_interp.py b/test/test_interp.py
--- a/test/test_interp.py
+++ b/test/test_interp.py
@@ -54,7 +54,7 @@
def assertv(code, value):
from js.interpreter import Interpreter
- from js.jsobj import _w
+ from js.object_space import _w
jsint = Interpreter()
ret_val = jsint.run_src(code)
diff --git a/test/test_interpreter.py b/test/test_interpreter.py
--- a/test/test_interpreter.py
+++ b/test/test_interpreter.py
@@ -1,4 +1,4 @@
-from js.jsobj import _w
+from js.object_space import _w
from js.interpreter import Interpreter
from js.astbuilder import parse_to_ast
diff --git a/test/test_jsfunction.py b/test/test_jsfunction.py
--- a/test/test_jsfunction.py
+++ b/test/test_jsfunction.py
@@ -1,4 +1,4 @@
-from js.jsobj import _w
+from js.object_space import _w
from js.jscode import JsCode
from js.execution_context import ExecutionContext, FunctionExecutionContext,
GlobalExecutionContext, EvalExecutionContext
from js.functions import JsFunction, JsExecutableCode, JsNativeFunction,
JsGlobalCode, JsEvalCode
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit