[pypy-commit] lang-js default: added/fixed virtualizable annotations

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


Author: Stephan <stephan at stzal.com>
Branch: 
Changeset: r131:4d5f04c3a59d
Date: 2011-10-04 13:05 +0200
http://bitbucket.org/pypy/lang-js/changeset/4d5f04c3a59d/

Log:	added/fixed virtualizable annotations

diff --git a/js/jscode.py b/js/jscode.py
--- a/js/jscode.py
+++ b/js/jscode.py
@@ -151,8 +151,7 @@
     old_stack = ctx.stack
     old_stack_pointer = ctx.stack_pointer
 
-    ctx.stack_pointer = 0
-    ctx.stack = [None] * size
+    ctx._init_stack(size)
     return old_stack, old_stack_pointer
 
 @jit.dont_look_inside
diff --git a/js/jsexecution_context.py b/js/jsexecution_context.py
--- a/js/jsexecution_context.py
+++ b/js/jsexecution_context.py
@@ -1,14 +1,16 @@
 from js.utils import StackMixin, MapMixin, MapDictMixin
 from js.jsobj import DONT_DELETE
 
+from pypy.rlib import jit, debug
+
 class ExecutionContext(MapDictMixin, MapMixin, StackMixin):
-    #_virtualizable2_ = ['stack[*]', 'stack_pointer', '_map_dict_values[*]', '_map_next_index']
+    _virtualizable2_ = ['stack[*]', 'stack_pointer', '_map_dict_values[*]', '_map_next_index']
     def __init__(self, parent=None):
         self._init_execution_context(parent)
 
     def resolve_identifier(self, ctx, identifier):
         if self.ctx_obj is not None and self.ctx_obj.HasProperty(identifier):
-                return self.ctx_obj.Get(ctx, identifier);
+            return self.ctx_obj.Get(ctx, identifier);
 
         try:
             return self.get_property_value(identifier)
@@ -110,17 +112,20 @@
         return True
 
     def _init_execution_context(self, parent):
+        self = jit.hint(self, access_directly=True, fresh_virtualizable=True)
         self._init_map_dict(0)
         self.parent = parent
         self.ctx_obj = None
         self._init_stack()
 
     def _init_function_context(self, parent, func):
+        self = jit.hint(self, access_directly=True, fresh_virtualizable=True)
         self._init_execution_context(parent)
         if func.scope:
             self._init_map_dict_with_map(func.scope.local_variables)
 
     def _init_acitvation_context(self, parent, this, args):
+        self = jit.hint(self, access_directly=True, fresh_virtualizable=True)
         self._init_execution_context(parent)
         self._map_dict_values_init_with_size(2)
 
@@ -130,15 +135,16 @@
         self.put('arguments', args)
 
     def _init_catch_context(self, parent, param, exception):
+        self = jit.hint(self, access_directly=True, fresh_virtualizable=True)
         self._init_execution_context(parent)
         self._map_dict_values_init_with_size(1)
         self.put(param, exception)
 
     def _init_with_execution_context(self, parent, obj):
+        self = jit.hint(self, access_directly=True, fresh_virtualizable=True)
         self._init_execution_context(parent)
         self.ctx_obj = obj
-        self.stack = parent.stack
-        self.stack_pointer = parent.stack_pointer
+        self._init_stack(len(parent.stack))
 
     def _init_global_context(self):
         self._init_execution_context(None)
diff --git a/js/utils.py b/js/utils.py
--- a/js/utils.py
+++ b/js/utils.py
@@ -7,8 +7,8 @@
     def __init__(self):
         self._init_stack()
 
-    def _init_stack(self):
-        self.stack = [None]
+    def _init_stack(self, size = 1):
+        self.stack = [None] * size
         self.stack_pointer = 0
 
     def pop(self):
@@ -130,6 +130,7 @@
         self._map_delname(name)
 
     def _map_dict_setindex(self, idx, value):
+        assert idx >= 0
         self._map_dict_values[idx] = value
 
     def _map_addname(self, name):


More information about the pypy-commit mailing list