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

Reply via email to