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

Reply via email to