Author: Stephan <[email protected]>
Branch:
Changeset: r337:8a151cf97de6
Date: 2013-01-08 20:06 +0100
http://bitbucket.org/pypy/lang-js/changeset/8a151cf97de6/
Log: refactored boxing
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,3 @@
-from js.jsobj import w_Undefined
from js.object_space import _w
#from pypy.rlib import jit
@@ -127,7 +126,10 @@
js.builtins.js_global.setup(global_object)
-def get_arg(args, index, default=w_Undefined):
+from js.object_space import newundefined
+
+
+def get_arg(args, index, default=newundefined()):
if len(args) > index:
return args[index]
return default
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,5 @@
-from js.jsobj import isnull_or_undefined, w_Undefined
from js.builtins import get_arg
-from js.object_space import w_return, _w
+from js.object_space import w_return, _w, isnull_or_undefined, newundefined
def setup(global_object):
@@ -73,13 +72,15 @@
# 15.4.4.5
@w_return
def join(this, args):
+ from js.object_space import isundefined
+
separator = get_arg(args, 0)
o = this.ToObject()
len_val = o.get(u'length')
length = len_val.ToUInt32()
- if separator is w_Undefined:
+ if isundefined(separator):
sep = u','
else:
sep = separator.to_string()
@@ -117,7 +118,7 @@
if l == 0:
o.put(u'length', _w(0))
- return w_Undefined
+ return newundefined()
else:
indx = l - 1
indxs = unicode(str(indx))
@@ -188,7 +189,9 @@
return obj
-def sort_compare(obj, j, k, comparefn=w_Undefined):
+def sort_compare(obj, j, k, comparefn=newundefined()):
+ from js.object_space import isundefined
+
j_string = j
k_string = k
has_j = obj.has_property(j)
@@ -204,19 +207,19 @@
x = obj.get(j_string)
y = obj.get(k_string)
- if x is w_Undefined and y is w_Undefined:
+ if isundefined(x) and isundefined(y):
return 0
- if x is w_Undefined:
+ if isundefined(x):
return 1
- if y is w_Undefined:
+ if isundefined(y):
return -1
- if comparefn is not w_Undefined:
+ if not isundefined(comparefn):
if not comparefn.is_callable():
from js.execution import JsTypeError
raise JsTypeError(u'')
- res = comparefn.Call(args=[x, y], this=w_Undefined)
+ res = comparefn.Call(args=[x, y], this=newundefined())
return res.ToInteger()
x_string = x.to_string()
diff --git a/js/builtins/function.py b/js/builtins/function.py
--- a/js/builtins/function.py
+++ b/js/builtins/function.py
@@ -1,6 +1,4 @@
-from js.jsobj import isnull_or_undefined
from js.execution import JsTypeError
-from js.jsobj import w_Undefined
from js.builtins import get_arg
from js.completion import NormalCompletion
from js.object_space import w_return, _w
@@ -17,7 +15,8 @@
@w_return
def empty(this, args):
- return w_Undefined
+ from js.object_space import newundefined
+ return newundefined()
# 15.3.4.4 Function.prototype.call
@@ -38,6 +37,7 @@
# 15.3.4.3 Function.prototype.apply (thisArg, argArray)
def js_apply(ctx):
+ from js.object_space import isnull_or_undefined
func = ctx.this_binding()
args = ctx.argv()
diff --git a/js/builtins/js_global.py b/js/builtins/js_global.py
--- a/js/builtins/js_global.py
+++ b/js/builtins/js_global.py
@@ -10,8 +10,8 @@
from js.builtins import put_intimate_function, put_native_function,
put_property
from js.builtins.number import w_NAN
from js.builtins.number import w_POSITIVE_INFINITY
- from js.jsobj import w_Undefined
from pypy.rlib.objectmodel import we_are_translated
+ from js.object_space import newundefined
# 15.1.1.1
put_property(global_object, u'NaN', w_NAN, writable=False,
enumerable=False, configurable=False)
@@ -20,7 +20,7 @@
put_property(global_object, u'Infinity', w_POSITIVE_INFINITY,
writable=False, enumerable=False, configurable=False)
# 15.1.1.3
- put_property(global_object, u'undefined', w_Undefined, writable=False,
enumerable=False, configurable=False)
+ put_property(global_object, u'undefined', newundefined(), writable=False,
enumerable=False, configurable=False)
# 15.1.2.1
put_intimate_function(global_object, u'eval', js_eval, params=[u'x'])
diff --git a/js/builtins/string.py b/js/builtins/string.py
--- a/js/builtins/string.py
+++ b/js/builtins/string.py
@@ -1,4 +1,4 @@
-from js.jsobj import w_Undefined, W_String, W_StringObject
+from js.jsobj import W_String, W_StringObject
from pypy.rlib.rfloat import NAN
from js.execution import JsTypeError
from js.builtins import get_arg
@@ -111,10 +111,7 @@
# 15.5.4.4
@w_return
def char_at(this, args):
- pos = w_Undefined
-
- if len(args) > 0:
- pos = args[0]
+ pos = get_arg(args, 0)
position = pos.ToInt32()
@@ -230,6 +227,8 @@
# 15.5.4.14
@w_return
def split(this, args):
+ from js.object_space import isundefined
+
this.check_object_coercible()
separator = get_arg(args, 0, None)
@@ -237,7 +236,7 @@
string = this.to_string()
- if limit is w_Undefined:
+ if isundefined(limit):
import math
lim = int(math.pow(2, 32) - 1)
else:
diff --git a/js/environment_record.py b/js/environment_record.py
--- a/js/environment_record.py
+++ b/js/environment_record.py
@@ -1,4 +1,3 @@
-from js.jsobj import w_Undefined
from js.object_map import ROOT_MAP
@@ -89,9 +88,10 @@
# 10.2.1.1.2
def create_mutuable_binding(self, identifier, deletable):
+ from js.object_space import newundefined
assert identifier is not None and isinstance(identifier, unicode)
assert not self.has_binding(identifier)
- self._add_binding(identifier, w_Undefined)
+ self._add_binding(identifier, newundefined())
self._set_mutable_binding(identifier)
if deletable:
self._set_deletable_binding(identifier)
@@ -107,13 +107,14 @@
# 10.2.1.1.4
def get_binding_value(self, identifier, strict=False):
+ from js.object_space import newundefined
assert identifier is not None and isinstance(identifier, unicode)
if not self.has_binding(identifier):
if strict:
from js.execution import JsReferenceError
raise JsReferenceError(identifier)
else:
- return w_Undefined
+ return newundefined()
return self._get_binding(identifier)
# 10.2.1.1.5
@@ -132,7 +133,8 @@
# 10.2.1.1.6
def implicit_this_value(self):
- return w_Undefined
+ from js.object_space import newundefined
+ return newundefined()
# 10.2.1.1.7
def create_immutable_bining(self, identifier):
@@ -169,7 +171,8 @@
config_value = True
from js.jsobj import PropertyDescriptor
- desc = PropertyDescriptor(value=w_Undefined, writable=True,
enumerable=True, configurable=config_value)
+ from js.object_space import newundefined
+ desc = PropertyDescriptor(value=newundefined(), writable=True,
enumerable=True, configurable=config_value)
bindings.define_own_property(n, desc, True)
# 10.2.1.2.3
@@ -180,12 +183,13 @@
# 10.2.1.2.4
def get_binding_value(self, n, s=False):
+ from js.object_space import newundefined
assert n is not None and isinstance(n, unicode)
bindings = self.binding_object
value = bindings.has_property(n)
if value is False:
if s is False:
- return w_Undefined
+ return newundefined()
else:
from execution import JsReferenceError
raise JsReferenceError(self.__class__)
@@ -200,9 +204,10 @@
# 10.2.1.2.6
def implicit_this_value(self):
+ from js.object_space import newundefined
if self.provide_this is True:
return self.binding_object
- return w_Undefined
+ return newundefined()
class GlobalEnvironmentRecord(ObjectEnvironmentRecord):
diff --git a/js/execution_context.py b/js/execution_context.py
--- a/js/execution_context.py
+++ b/js/execution_context.py
@@ -1,5 +1,5 @@
-from js.jsobj import w_Undefined
from js.utils import StackMixin
+from js.object_space import newundefined
class ExecutionContext(StackMixin):
@@ -52,6 +52,8 @@
# 10.5
def declaration_binding_initialization(self):
+ from js.object_space import newundefined
+
env = self._variable_environment_.environment_record
strict = self._strict_
code = self._code_
@@ -71,7 +73,7 @@
for arg_name in names:
n += 1
if n > arg_count:
- v = w_Undefined
+ v = newundefined()
else:
v = args[n - 1]
arg_already_declared = env.has_binding(arg_name)
@@ -113,7 +115,7 @@
var_already_declared = env.has_binding(dn)
if var_already_declared is False:
env.create_mutuable_binding(dn, configurable_bindings)
- env.set_mutable_binding(dn, w_Undefined, False)
+ env.set_mutable_binding(dn, newundefined(), False)
def _get_refs(self, index):
assert index <= len(self._refs_)
@@ -191,9 +193,9 @@
_immutable_fields_ = ['_scope_', '_calling_context_']
_refs_resizable_ = False
- def __init__(self, code, formal_parameters=[], argv=[], this=w_Undefined,
strict=False, scope=None, w_func=None):
- from js.jsobj import isnull_or_undefined, W_BasicObject
- from js.object_space import object_space
+ def __init__(self, code, formal_parameters=[], argv=[],
this=newundefined(), strict=False, scope=None, w_func=None):
+ from js.jsobj import W_BasicObject
+ from js.object_space import object_space, isnull_or_undefined
stack_size = code.estimated_stack_size()
env_size = code.env_size() + 1 # neet do add one for the arguments
object
diff --git a/js/jsobj.py b/js/jsobj.py
--- a/js/jsobj.py
+++ b/js/jsobj.py
@@ -132,12 +132,6 @@
def ToObject(self):
raise JsTypeError(u'W_Null.ToObject')
-w_Undefined = W_Undefined()
-jit.promote(w_Undefined)
-
-w_Null = W_Null()
-jit.promote(w_Null)
-
class PropertyIdenfidier(object):
def __init__(self, name, descriptor):
@@ -187,10 +181,11 @@
_immutable_fields_ = ['_type_', '_class_', '_extensible_']
def __init__(self):
+ from js.object_space import newnull
self._property_map_ = _new_map()
self._property_slots_ = []
- self._prototype_ = w_Null
+ self._prototype_ = newnull()
W_BasicObject.define_own_property(self, u'__proto__', proto_desc)
def __str__(self):
@@ -209,17 +204,18 @@
# 8.12.3
def get(self, p):
+ from js.object_space import newundefined
assert p is not None and isinstance(p, unicode)
desc = self.get_property(p)
if desc is None:
- return w_Undefined
+ return newundefined()
if is_data_descriptor(desc):
return desc.value
if desc.has_set_getter() is False:
- return w_Undefined
+ return newundefined()
getter = desc.getter
res = getter.Call(this=self)
@@ -271,6 +267,7 @@
# 8.12.2
def get_property(self, p):
+ from js.object_space import isnull
assert p is not None and isinstance(p, unicode)
prop = self.get_own_property(p)
@@ -278,7 +275,7 @@
return prop
proto = self.prototype()
- if proto is w_Null:
+ if isnull(proto):
return None
assert isinstance(proto, W_BasicObject)
@@ -311,10 +308,11 @@
# 8.12.4
def can_put(self, p):
+ from js.object_space import isundefined, isnull_or_undefined
desc = self.get_own_property(p)
if desc is not None:
if is_accessor_descriptor(desc) is True:
- if desc.setter is w_Undefined:
+ if isundefined(desc.setter):
return False
else:
return True
@@ -322,7 +320,7 @@
proto = self.prototype()
- if proto is w_Null or proto is w_Undefined:
+ if isnull_or_undefined(proto):
return self.extensible()
assert isinstance(proto, W_BasicObject)
@@ -331,7 +329,7 @@
return self.extensible()
if is_accessor_descriptor(inherited) is True:
- if inherited.setter is w_Undefined:
+ if isundefined(inherited.setter):
return False
else:
return True
@@ -511,6 +509,7 @@
###
def _named_properties_dict(self):
+ from js.object_space import isnull_or_undefined
my_d = {}
for i in self._property_map_.keys():
my_d[i] = None
@@ -637,6 +636,7 @@
# 15.3.5.3
def has_instance(self, v):
+ from js.object_space import isnull_or_undefined
if not isinstance(v, W_BasicObject):
return False
@@ -656,6 +656,7 @@
class W_ObjectConstructor(W_BasicFunction):
def Call(self, args=[], this=None, calling_context=None):
+ from js.object_space import isnull_or_undefined
from js.builtins import get_arg
value = get_arg(args, 0)
@@ -732,10 +733,11 @@
class W_NumberConstructor(W_BasicFunction):
# 15.7.1.1
def Call(self, args=[], this=None, calling_context=None):
- from js.object_space import _w
+ from js.object_space import _w, isnull_or_undefined, isundefined
+
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:
+ elif len(args) >= 1 and isundefined(args[0]):
return _w(NAN)
else:
return _w(0.0)
@@ -767,7 +769,7 @@
# 15.6.2
class W_BooleanConstructor(W_BasicFunction):
def Call(self, args=[], this=None, calling_context=None):
- from js.object_space import _w
+ from js.object_space import _w, isnull_or_undefined
if len(args) >= 1 and not isnull_or_undefined(args[0]):
boolval = args[0].to_boolean()
return _w(boolval)
@@ -833,8 +835,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
+ from js.object_space import _w, newnull, object_space
self._function_ = function_body
self._scope_ = scope
self._params_ = formal_parameter_list
@@ -855,8 +856,8 @@
if strict is True:
raise NotImplementedError()
else:
- put_property(self, u'caller', w_Null, writable=True,
enumerable=False, configurable=False)
- put_property(self, u'arguments', w_Null, writable=True,
enumerable=False, configurable=False)
+ put_property(self, u'caller', newnull(), writable=True,
enumerable=False, configurable=False)
+ put_property(self, u'arguments', newnull(), writable=True,
enumerable=False, configurable=False)
def _to_string(self):
return self._function_.to_string()
@@ -1220,24 +1221,6 @@
return intmask(int(self._floatval_))
-def isnull_or_undefined(obj):
- if obj is w_Null or obj is w_Undefined:
- return True
- return False
-
-w_True = W_Boolean(True)
-jit.promote(w_True)
-
-w_False = W_Boolean(False)
-jit.promote(w_False)
-
-
-def newbool(val):
- if val:
- return w_True
- return w_False
-
-
class W_List(W_Root):
def __init__(self, values):
self.values = values
diff --git a/js/object_space.py b/js/object_space.py
--- a/js/object_space.py
+++ b/js/object_space.py
@@ -1,24 +1,102 @@
-from pypy.rlib.objectmodel import specialize
+from pypy.rlib.objectmodel import specialize, enforceargs
+from pypy.rlib import jit
+
+
+@enforceargs(int)
+def newint(i):
+ from js.jsobj import W_IntNumber
+ return W_IntNumber(i)
+
+
+@enforceargs(float)
+def newfloat(f):
+ from js.jsobj import W_FloatNumber
+ return W_FloatNumber(f)
+
+
+@enforceargs(unicode)
+def newstring(s):
+ from js.jsobj import W_String
+ return W_String(s)
+
+
+@enforceargs(bool)
+def _makebool(b):
+ from js.jsobj import W_Boolean
+ return W_Boolean(b)
+
+
+w_True = _makebool(True)
+jit.promote(w_True)
+
+
+w_False = _makebool(False)
+jit.promote(w_False)
+
+
+def _makeundefined():
+ from js.jsobj import W_Undefined
+ return W_Undefined()
+
+w_Undefined = _makeundefined()
+jit.promote(w_Undefined)
+
+
+def _makenull():
+ from js.jsobj import W_Null
+ return W_Null()
+
+w_Null = _makenull()
+jit.promote(w_Null)
+
+
+def isnull(value):
+ return value is w_Null
+
+
+def newnull():
+ return w_Null
+
+
+def isundefined(value):
+ return value is w_Undefined
+
+
+def newundefined():
+ return w_Undefined
+
+
+def isnull_or_undefined(obj):
+ if isnull(obj) or isundefined(obj):
+ return True
+ return False
+
+
+@enforceargs(bool)
+def newbool(val):
+ if val is True:
+ return w_True
+ return w_False
@specialize.argtype(0)
def _w(value):
- from js.jsobj import w_Null, newbool, W_IntNumber, W_FloatNumber,
W_String, W_Root, put_property
+ from js.jsobj import W_Root, put_property
if value is None:
- return w_Null
+ return newnull()
elif isinstance(value, W_Root):
return value
elif isinstance(value, bool):
return newbool(value)
elif isinstance(value, int):
- return W_IntNumber(value)
+ return newint(value)
elif isinstance(value, float):
- return W_FloatNumber(value)
+ return newfloat(value)
elif isinstance(value, unicode):
- return W_String(value)
+ return newstring(value)
elif isinstance(value, str):
u_str = unicode(value)
- return W_String(u_str)
+ return newstring(u_str)
elif isinstance(value, list):
a = object_space.new_array()
for index, item in enumerate(value):
@@ -30,16 +108,15 @@
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
- self.proto_boolean = w_Null
- self.proto_number = w_Null
- self.proto_string = w_Null
- self.proto_array = w_Null
- self.proto_date = w_Null
- self.proto_object = w_Null
+ self.proto_function = newnull()
+ self.proto_boolean = newnull()
+ self.proto_number = newnull()
+ self.proto_string = newnull()
+ self.proto_array = newnull()
+ self.proto_date = newnull()
+ self.proto_object = newnull()
self.interpreter = None
def get_global_environment(self):
diff --git a/js/opcodes.py b/js/opcodes.py
--- a/js/opcodes.py
+++ b/js/opcodes.py
@@ -1,5 +1,3 @@
-from js.jsobj import W_IntNumber, W_FloatNumber, W_String, \
- 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,\
@@ -31,9 +29,13 @@
_stack_change = 0
def eval(self, ctx):
+ from js.object_space import newbool
s4 = ctx.stack_pop()
s2 = ctx.stack_pop()
- ctx.stack_append(self.decision(ctx, s2, s4))
+ res = self.decision(ctx, s2, s4)
+ # XXX mimik behaviour of old newbool
+ res_true = res is True
+ ctx.stack_append(newbool(res_true))
def decision(self, ctx, op1, op2):
raise NotImplementedError
@@ -66,14 +68,16 @@
class Undefined(Opcode):
def eval(self, ctx):
- ctx.stack_append(w_Undefined)
+ from js.object_space import newundefined
+ ctx.stack_append(newundefined())
class LOAD_INTCONSTANT(Opcode):
_immutable_fields_ = ['w_intvalue']
def __init__(self, value):
- self.w_intvalue = W_IntNumber(int(value))
+ from js.object_space import newint
+ self.w_intvalue = newint(int(value))
def eval(self, ctx):
ctx.stack_append(self.w_intvalue)
@@ -84,20 +88,22 @@
class LOAD_BOOLCONSTANT(Opcode):
def __init__(self, value):
- self.boolval = value
+ from js.object_space import newbool
+ self.w_boolval = newbool(value)
def eval(self, ctx):
- ctx.stack_append(newbool(self.boolval))
+ ctx.stack_append(self.w_boolval)
def __str__(self):
- if self.boolval:
+ if self.w_boolval.to_boolean():
return 'LOAD_BOOLCONSTANT true'
return 'LOAD_BOOLCONSTANT false'
class LOAD_FLOATCONSTANT(Opcode):
def __init__(self, value):
- self.w_floatvalue = W_FloatNumber(float(value))
+ from js.object_space import newfloat
+ self.w_floatvalue = newfloat(float(value))
def eval(self, ctx):
ctx.stack_append(self.w_floatvalue)
@@ -110,27 +116,27 @@
_immutable_fields_ = ['strval']
def __init__(self, value):
- #assert isinstance(value, unicode)
- self.strval = value
+ from js.object_space import newstring
+ self.w_strval = newstring(value)
def eval(self, ctx):
- strval = self.strval
- #assert isinstance(strval, unicode)
- w_string = W_String(strval)
- ctx.stack_append(w_string)
+ w_strval = self.w_strval
+ ctx.stack_append(w_strval)
def __str__(self):
- return u'LOAD_STRINGCONSTANT "%s"' % (self.strval)
+ return u'LOAD_STRINGCONSTANT "%s"' % (self.w_strval.to_string())
class LOAD_UNDEFINED(Opcode):
def eval(self, ctx):
- ctx.stack_append(w_Undefined)
+ from js.object_space import newundefined
+ ctx.stack_append(newundefined())
class LOAD_NULL(Opcode):
def eval(self, ctx):
- ctx.stack_append(w_Null)
+ from js.object_space import newnull
+ ctx.stack_append(newnull())
class LOAD_VARIABLE(Opcode):
@@ -264,6 +270,7 @@
class IN(BaseBinaryOperation):
def operation(self, ctx, left, right):
from js.jsobj import W_BasicObject
+ from js.object_space import newbool
if not isinstance(right, W_BasicObject):
raise JsTypeError(u"TypeError: fffuuu!") # + repr(right)
name = left.to_string()
@@ -292,6 +299,7 @@
self.name = name
def eval(self, ctx):
+ from js.object_space import newstring
ref = ctx.get_ref(self.name)
if ref.is_unresolvable_reference():
var_type = u'undefined'
@@ -299,7 +307,7 @@
var = ref.get_value()
var_type = type_of(var)
- w_string = W_String(var_type)
+ w_string = newstring(var_type)
ctx.stack_append(w_string)
def __str__(self):
@@ -313,23 +321,27 @@
class BITAND(BaseBinaryBitwiseOp):
def operation(self, ctx, op1, op2):
- return W_IntNumber(op1 & op2)
+ from js.object_space import newint
+ return newint(op1 & op2)
class BITXOR(BaseBinaryBitwiseOp):
def operation(self, ctx, op1, op2):
- return W_IntNumber(op1 ^ op2)
+ from js.object_space import newint
+ return newint(op1 ^ op2)
class BITOR(BaseBinaryBitwiseOp):
def operation(self, ctx, op1, op2):
- return W_IntNumber(op1 | op2)
+ from js.object_space import newint
+ return newint(op1 | op2)
class BITNOT(BaseUnaryOperation):
def eval(self, ctx):
op = ctx.stack_pop().ToInt32()
- ctx.stack_append(W_IntNumber(~op))
+ from js.object_space import newint
+ ctx.stack_append(newint(~op))
class URSH(BaseBinaryBitwiseOp):
@@ -436,42 +448,42 @@
class GT(BaseBinaryComparison):
def decision(self, ctx, op1, op2):
- return newbool(compare(ctx, op1, op2))
+ return compare(ctx, op1, op2)
class GE(BaseBinaryComparison):
def decision(self, ctx, op1, op2):
- return newbool(compare_e(ctx, op1, op2))
+ return compare_e(ctx, op1, op2)
class LT(BaseBinaryComparison):
def decision(self, ctx, op1, op2):
- return newbool(compare(ctx, op2, op1))
+ return compare(ctx, op2, op1)
class LE(BaseBinaryComparison):
def decision(self, ctx, op1, op2):
- return newbool(compare_e(ctx, op2, op1))
+ return compare_e(ctx, op2, op1)
class EQ(BaseBinaryComparison):
def decision(self, ctx, op1, op2):
- return newbool(AbstractEC(ctx, op1, op2))
+ return AbstractEC(ctx, op1, op2)
class NE(BaseBinaryComparison):
def decision(self, ctx, op1, op2):
- return newbool(not AbstractEC(ctx, op1, op2))
+ return not AbstractEC(ctx, op1, op2)
class IS(BaseBinaryComparison):
def decision(self, ctx, op1, op2):
- return newbool(StrictEC(op1, op2))
+ return StrictEC(op1, op2)
class ISNOT(BaseBinaryComparison):
def decision(self, ctx, op1, op2):
- return newbool(not StrictEC(op1, op2))
+ return not StrictEC(op1, op2)
class STORE_MEMBER(Opcode):
diff --git a/test/test_interp.py b/test/test_interp.py
--- a/test/test_interp.py
+++ b/test/test_interp.py
@@ -1,10 +1,4 @@
import py
-#from js import interpreter
-#from js.operations import IntNumber, FloatNumber, Position, Plus
-#from js.jsobj import W_Root, w_Null, W___Root
-#from js.execution import ThrowException
-#from js.jscode import JsCode
-#from js.baseop import AbstractEC
xfail = py.test.mark.xfail
@@ -527,7 +521,7 @@
def test_null():
- from js.jsobj import w_Null
+ from js.object_space import w_Null
assertv("null;", w_Null)
diff --git a/test/test_lexical_environment.py b/test/test_lexical_environment.py
--- a/test/test_lexical_environment.py
+++ b/test/test_lexical_environment.py
@@ -1,5 +1,5 @@
from js.lexical_environment import DeclarativeEnvironment, ObjectEnvironment
-from js.jsobj import w_Undefined, W_BasicObject
+from js.jsobj import W_BasicObject
class TestDeclarativeEnvironment(object):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit