Author: Stephan <[email protected]>
Branch:
Changeset: r134:782b15488733
Date: 2011-10-06 15:20 +0200
http://bitbucket.org/pypy/lang-js/changeset/782b15488733/
Log: removed Property encapsulation from ExecutionContext
diff --git a/js/jsexecution_context.py b/js/jsexecution_context.py
--- a/js/jsexecution_context.py
+++ b/js/jsexecution_context.py
@@ -20,39 +20,44 @@
raise ThrowException(W_String("ReferenceError: %s is not defined"
% identifier))
def get_property_value(self, name):
- return self._get_property(name).value
+ return self._identifier_get(name)
def get_property_flags(self, name):
- return self._get_property(name).flags
+ self._identifier_get(name)
+ idx = self._map_indexof(name)
+ return self._property_flags.get(idx, 0)
- def _get_property(self,name):
- from js.jsobj import Property
- p = self._identifier_get(name)
- assert isinstance(p, Property)
- return p
+ def set_property_value(self, name, value):
+ self._identifier_set(name, value)
+
+ def set_local_property_value(self, name, value):
+ self._identifier_set_local(name, value)
+
+ def set_property_flags(self, name, flags):
+ idx = self._map_indexof(name)
+ self._property_flags[idx] = flags
def assign(self, name, value):
- from js.jsobj import RO, Property
+ from js.jsobj import READ_ONLY, Property
assert name is not None
try:
- p = self._get_property(name)
- if p.flags & RO:
+ if self.get_property_flags(name) & READ_ONLY:
return
- p.value = value
+ self.set_property_value(name, value)
except KeyError:
self.get_global_context().put(name, value, flags=0)
def declare_variable(self, identifier, flags=DONT_DELETE):
from js.jsobj import w_Undefined, Property
self._map_addname(identifier)
- p = Property(identifier, w_Undefined, flags)
- self._identifier_set_local(identifier, p)
+ self.set_local_property_value(identifier, w_Undefined)
+ self.set_property_flags(identifier, flags)
def get_local_value(self, idx):
val = self._map_dict_getindex(idx)
if val is None:
raise KeyError
- return val.value
+ return val
def _identifier_set_local(self, identifier, value):
self._map_dict_set(identifier, value)
@@ -87,8 +92,8 @@
raise KeyError
def assign_local(self, idx, value):
- prop = self._map_dict_getindex(idx)
- prop.value = value
+ self._map_dict_getindex(idx)
+ self._map_dict_setindex(idx, value)
def get_global(self):
return self.get_global_context().to_context_object()
@@ -117,6 +122,7 @@
self.parent = parent
self.ctx_obj = None
self._init_stack()
+ self._property_flags = {}
def _init_function_context(self, parent, func):
self = jit.hint(self, access_directly=True, fresh_virtualizable=True)
diff --git a/js/test/test_execution_context.py
b/js/test/test_execution_context.py
--- a/js/test/test_execution_context.py
+++ b/js/test/test_execution_context.py
@@ -117,8 +117,8 @@
def test_resolve_identifier(self):
parent = new_context()
context = new_context(parent)
- parent._identifier_set_local('foo', Property('foo', 0))
- context._identifier_set_local('bar', Property('foo', 1))
+ parent._identifier_set_local('foo', 0)
+ context._identifier_set_local('bar', 1)
ctx = None
assert context.resolve_identifier(ctx, 'foo') == 0
@@ -128,37 +128,32 @@
def test_assign(self):
parent = new_context()
context = new_context(parent)
- p_foo = Property('foo', 0)
- p_bar = Property('foo', 1)
- parent._identifier_set_local('foo', p_foo)
- context._identifier_set_local('bar', p_bar)
+ parent._identifier_set_local('foo', 0)
+ context._identifier_set_local('bar', 1)
context.assign('foo', 4)
context.assign('bar', 8)
- assert p_foo.value == 4
- assert p_bar.value == 8
+ assert context.get_property_value('foo') == 4
+ assert context.get_property_value('bar') == 8
def test_assign_local_precedence(self):
parent = new_context()
context = new_context(parent)
- p_foo_0 = Property('foo', 0)
- p_foo_1 = Property('foo', 1)
- parent._identifier_set_local('foo', p_foo_0)
- context._identifier_set_local('foo', p_foo_1)
+ parent._identifier_set_local('foo', 0)
+ context._identifier_set_local('foo', 1)
context.assign('foo', 42)
- assert p_foo_0.value == 0
- assert p_foo_1.value == 42
+ assert parent.get_property_value('foo') == 0
+ assert context.get_property_value('foo') == 42
def test_declare_variable(self):
ctx = None
parent = new_context()
context = new_context(parent)
- p_foo = Property('foo', 0)
- parent._identifier_set_local('foo', p_foo)
+ parent._identifier_set_local('foo', 0)
assert context.resolve_identifier(ctx, 'foo') == 0
@@ -167,8 +162,8 @@
context.assign('foo', 42)
- assert p_foo.value == 0
- assert context._identifier_get_local('foo').value == 42
+ assert parent.get_property_value('foo') == 0
+ assert context._identifier_get_local('foo') == 42
assert context.resolve_identifier(ctx, 'foo') == 42
def test_get_local_value(self):
@@ -189,8 +184,7 @@
parent = new_context()
context = new_context(parent)
- p_foo = Property('foo', 0)
- parent._identifier_set_local('foo', p_foo)
+ parent._identifier_set_local('foo', 0)
py.test.raises(KeyError, context.get_local_value, 0)
def test_assign_global_default(self):
@@ -198,11 +192,11 @@
parent = new_context(global_ctx)
context = new_context(parent)
- context.assign('foo', 0)
+ context.assign('foo', 23)
py.test.raises(KeyError, context._identifier_get_local, 'foo')
py.test.raises(KeyError, parent._identifier_get_local, 'foo')
- assert global_ctx._identifier_get_local('foo')
- parent.assign('bar', 0)
+ assert global_ctx._identifier_get_local('foo') == 23
+ parent.assign('bar', 42)
py.test.raises(KeyError, context._identifier_get_local, 'bar')
py.test.raises(KeyError, parent._identifier_get_local, 'bar')
- assert global_ctx._identifier_get_local('bar')
+ assert global_ctx._identifier_get_local('bar') == 42
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit