[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