Author: Stephan <step...@stzal.com> 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 - - -@specialize.argtype(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 + + +@specialize.argtype(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 pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit