[pypy-commit] lang-js default: changed map mixin constructors for jit

stepahn noreply at buildbot.pypy.org
Fri Dec 28 11:32:25 CET 2012


Author: Stephan <stephan at stzal.com>
Branch: 
Changeset: r127:cb3a8c7f0f53
Date: 2011-09-18 15:26 +0200
http://bitbucket.org/pypy/lang-js/changeset/cb3a8c7f0f53/

Log:	changed map mixin constructors for jit

diff --git a/js/jsexecution_context.py b/js/jsexecution_context.py
--- a/js/jsexecution_context.py
+++ b/js/jsexecution_context.py
@@ -3,10 +3,10 @@
 
 class JSContext(MapMixin, MapDictMixin):
     def __init__(self, parent=None):
-        #MapDictMixin.__init__(self)
-        self._map_next_index = 0
-        self._map_indexes = {}
-        self._map_dict_values = []
+        self._init_js_context(parent)
+
+    def _init_js_context(self, parent=None):
+        self._init_map_dict(0)
         self.parent = parent
         self.ctx_obj = None
 
@@ -112,7 +112,10 @@
 
 class ActivationContext(JSContext):
     def __init__(self, parent, this, args):
-        JSContext.__init__(self, parent)
+        self._init_acitvation_context(parent, this, args)
+
+    def _init_acitvation_context(self, parent, this, args):
+        self._init_js_context(parent)
         self._map_dict_values_init_with_size(2)
 
         if this is not None:
@@ -120,23 +123,30 @@
 
         self.put('arguments', args)
 
-class GlobalContext(DynamicMapDictMixin, JSContext, StackMixin):
-    #_virtualizable2_ = ['stack[*]', 'stack_pointer']
+class ExecutionContext(JSContext, StackMixin):
+    #_virtualizable2_ = ['stack[*]', 'stack_pointer', '_map_dict_values[*]', '_map_next_index']
     def __init__(self, parent=None):
-        JSContext.__init__(self, parent)
-        StackMixin.__init__(self)
-        DynamicMapDictMixin.__init__(self)
+        self._init_execution_context(parent)
+
+    def _init_execution_context(self, parent):
+        self._init_js_context(parent)
+        self._init_stack()
+
+class GlobalContext(DynamicMapDictMixin, ExecutionContext):
+    def __init__(self, parent=None):
+        self._init_global_context(parent)
+
+    def _init_global_context(self, parent):
+        self._init_execution_context(parent)
         # TODO size of gloabl context
-
-class ExecutionContext(JSContext, StackMixin):
-    #_virtualizable2_ = ['stack[*]', 'stack_pointer']
-    def __init__(self, parent=None):
-        JSContext.__init__(self, parent)
-        StackMixin.__init__(self)
+        self._init_dynamic_map_dict()
 
 class WithExecutionContext(ExecutionContext):
     def __init__(self, parent, obj):
-        ExecutionContext.__init__(self, parent)
+        self._init_with_execution_context(parent, obj)
+
+    def _init_with_execution_context(self, parent, obj):
+        self._init_execution_context(parent)
         self.ctx_obj = obj
         self.stack = parent.stack
         self.stack_pointer = parent.stack_pointer
@@ -148,13 +158,18 @@
 
 class FunctionContext(ExecutionContext):
     def __init__(self, parent, func):
-        ExecutionContext.__init__(self, parent)
+        self._init_function_context(parent, func)
+
+    def _init_function_context(self, parent, func):
+        self._init_execution_context(parent)
         if func.scope:
-            from js.utils import init_mapdict_with_map
-            init_mapdict_with_map(self, func.scope.local_variables)
+            self._init_map_dict_with_map(func.scope.local_variables)
 
 class CatchContext(ExecutionContext):
     def __init__(self, parent, param, exception):
+        self._init_catch_context(parent, param, exception)
+
+    def _init_catch_context(self, parent, param, exception):
+        self._init_execution_context(parent)
+        self._map_dict_values_init_with_size(1)
         self.put(param, exception)
-        ExecutionContext.__init__(self, parent)
-        self._map_dict_values_init_with_size(1)
diff --git a/js/utils.py b/js/utils.py
--- a/js/utils.py
+++ b/js/utils.py
@@ -5,6 +5,9 @@
 class StackMixin(object):
     _mixin_ = True
     def __init__(self):
+        self._init_stack()
+
+    def _init_stack(self):
         self.stack = [None]
         self.stack_pointer = 0
 
@@ -46,6 +49,9 @@
     _mixin_ = True
 
     def __init__(self):
+        self._init_map()
+
+    def _init_map(self):
         self._map_indexes = {}
         self._map_next_index = 0
 
@@ -58,6 +64,9 @@
         return self._map_indexes.get(name, self._MAP_NOT_FOUND)
 
     def _map_addname(self, name):
+        return self._map_addname_no_resize(name)
+
+    def _map_addname_no_resize(self, name):
         if self._map_indexof(name) == self._MAP_NOT_FOUND:
             self._map_indexes[name] = self._map_get_next_index()
         return self._map_indexof(name)
@@ -65,11 +74,8 @@
     def _map_delname(self, name):
         self._map_indexes[name] = self._MAP_NOT_FOUND
 
-
 class Map(MapMixin):
     NOT_FOUND = MapMixin._MAP_NOT_FOUND
-    def __init__(self):
-        MapMixin.__init__(self)
 
     def __repr__(self):
         return "%s:\n  %s" %(object.__repr__(self), repr(self._map_indexes))
@@ -86,9 +92,18 @@
 class MapDictMixin(object):
     _mixin_ = True
     def __init__(self, size = 99):
-        MapMixin.__init__(self)
+        self._init_map_dict(size)
+
+    def _init_map_dict(self, size = 99):
+        self._init_map()
         self._map_dict_values_init_with_size(size)
 
+    def _init_map_dict_with_map(self, map):
+        indexes = map._map_indexes
+        self._map_dict_values_init_with_size(len(indexes))
+        self._map_indexes = indexes
+        self._map_next_index = map._map_next_index
+
     def _map_dict_values_init_with_size(self, size):
         self._map_dict_values = [None] * size
 
@@ -114,15 +129,7 @@
 
 class MapDict(Map, MapDictMixin):
     def __init__(self, size = 99):
-        Map.__init__(self)
-        MapDictMixin.__init__(self, size)
-
-    #@classmethod
-    #def with_map(cls, m):
-        #self = cls(len(m.indexes))
-        #self.indexes = m.indexes
-        #self.next_index = m.next_index
-        #return self
+        self._init_map_dict(size)
 
     def __repr__(self):
         return "%s;\n  %s" %(Map.__repr__(self), repr(self._map_dict_values))
@@ -144,30 +151,14 @@
 
 class DynamicMapDictMixin(object):
     _mixin_ = True
-    def __init__(self):
-        MapDictMixin.__init__(self, 0)
+    def _init_dynamic_map_dict(self):
+        self._init_map_dict(0)
 
     def _map_addname(self, name):
         while len(self._map_dict_values) <= self._map_next_index:
-            self._map_dict_values.append(None)
-        return MapMixin._map_addname(self, name)
+            self._map_dict_values = self._map_dict_values + [None]
+        return self._map_addname_no_resize(name)
 
 class DynamicMapDict(DynamicMapDictMixin, MapDict):
     def __init__(self):
-        DynamicMapDictMixin.__init__(self)
-
-def mapdict_with_map(m):
-    assert isinstance(m, Map)
-    indexes = m._map_indexes
-    md = MapDict(len(indexes))
-    md._map_indexes = indexes
-    md._map_next_index = m._map_next_index
-    return md
-
-def init_mapdict_with_map(mapdict, map):
-    assert isinstance(map, MapMixin)
-    assert isinstance(mapdict, MapDictMixin)
-    indexes = map._map_indexes
-    MapDictMixin.__init__(mapdict, len(indexes))
-    mapdict._map_indexes = indexes
-    mapdict._map_next_index = map._map_next_index
+        self._init_dynamic_map_dict()


More information about the pypy-commit mailing list