Author: Stephan <[email protected]>
Branch:
Changeset: r103:2358eb3eac9c
Date: 2011-06-16 12:43 +0200
http://bitbucket.org/pypy/lang-js/changeset/2358eb3eac9c/
Log: moved Stack into utils package
diff --git a/js/jscode.py b/js/jscode.py
--- a/js/jscode.py
+++ b/js/jscode.py
@@ -19,48 +19,6 @@
class AlreadyRun(Exception):
pass
-class Stack(object):
- _virtualizable2_ = ['content[*]', 'pointer']
- def __init__(self, size):
- self = hint(self, access_directly = True, fresh_virtualizable = True)
- self.content = [None] * size
- self.pointer = 0
-
- def __repr__(self):
- return "Stack %(content)s@%(pointer)d" % {'pointer': self.pointer,
'content': self.content}
-
- def pop(self):
- e = self.top()
- i = self.pointer - 1
- assert i >= 0
- self.content[i] = None
- self.pointer = i
- return e
-
- def top(self):
- i = self.pointer - 1
- if i < 0:
- raise IndexError
- return self.content[i]
-
- def append(self, element):
- assert isinstance(element, W_Root)
- i = self.pointer
- assert i >= 0
- self.content[i] = element
- self.pointer = i + 1
-
- @jit.unroll_safe
- def pop_n(self, n):
- l = [None] * n
- for i in range(n-1, -1, -1):
- l[i] = self.pop()
- debug.make_sure_not_resized(l)
- return l
-
- def check(self):
- assert self.pointer == 1
-
class JsCode(object):
""" That object stands for code of a single javascript function
"""
@@ -187,6 +145,7 @@
self.opcodes = make_sure_not_resized(code)
def run(self, ctx, check_stack=True):
+ from js.utils import Stack
stack = Stack(len(self.opcodes) * 2)
try:
return self.run_bytecode(ctx, stack, check_stack)
diff --git a/js/test/test_stack.py b/js/test/test_stack.py
--- a/js/test/test_stack.py
+++ b/js/test/test_stack.py
@@ -1,11 +1,8 @@
import py
-from js import interpreter
-from js.jscode import Stack
+from js.utils import Stack
from js.jsobj import W_IntNumber
-jsint = interpreter.Interpreter()
-ctx = jsint.w_Global
one = W_IntNumber(1)
two = W_IntNumber(2)
three = W_IntNumber(3)
diff --git a/js/utils.py b/js/utils.py
new file mode 100644
--- /dev/null
+++ b/js/utils.py
@@ -0,0 +1,46 @@
+# encoding: utf-8
+from js.jsobj import W_Root
+from pypy.rlib.jit import hint
+from pypy.rlib import jit, debug
+
+class Stack(object):
+ _virtualizable2_ = ['content[*]', 'pointer']
+ def __init__(self, size):
+ self = hint(self, access_directly = True, fresh_virtualizable = True)
+ self.content = [None] * size
+ self.pointer = 0
+
+ def __repr__(self):
+ return "<Stack %(content)s@%(pointer)d>" % {'pointer': self.pointer,
'content': self.content}
+
+ def pop(self):
+ e = self.top()
+ i = self.pointer - 1
+ assert i >= 0
+ self.content[i] = None
+ self.pointer = i
+ return e
+
+ def top(self):
+ i = self.pointer - 1
+ if i < 0:
+ raise IndexError
+ return self.content[i]
+
+ def append(self, element):
+ assert isinstance(element, W_Root)
+ i = self.pointer
+ assert i >= 0
+ self.content[i] = element
+ self.pointer = i + 1
+
+ @jit.unroll_safe
+ def pop_n(self, n):
+ l = [None] * n
+ for i in range(n-1, -1, -1):
+ l[i] = self.pop()
+ debug.make_sure_not_resized(l)
+ return l
+
+ def check(self):
+ assert self.pointer == 1
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit