[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