[pypy-svn] r23452 - in pypy/dist/pypy/translator/js: . src test

ericvrp at codespeak.net ericvrp at codespeak.net
Fri Feb 17 12:49:19 CET 2006


Author: ericvrp
Date: Fri Feb 17 12:49:18 2006
New Revision: 23452

Modified:
   pypy/dist/pypy/translator/js/codewriter.py
   pypy/dist/pypy/translator/js/opwriter.py
   pypy/dist/pypy/translator/js/src/ll_stackless.js
   pypy/dist/pypy/translator/js/test/browsertest.py
   pypy/dist/pypy/translator/js/test/test_stackless.py
   pypy/dist/pypy/translator/js/test/test_struct.py
Log:
genjs fixes for
 * returning rpystrings to tests
 * malloc varsize arrays


Modified: pypy/dist/pypy/translator/js/codewriter.py
==============================================================================
--- pypy/dist/pypy/translator/js/codewriter.py	(original)
+++ pypy/dist/pypy/translator/js/codewriter.py	Fri Feb 17 12:49:18 2006
@@ -212,6 +212,9 @@
                 self.append(code + ";")
                 self.append("slp_stack_depth--")
                 selfdecl = self.decl.split('(')[0]
+                #XXX TODO use c/stackless.py...
+                #curpos = block.operations.index(op)
+                #vars = list(variables_to_save_across_op(block, curpos)) 
                 usedvars = ', '.join(self._usedvars.keys())
                 usedvarnames = '"' + '", "'.join(self._usedvars.keys()) + '"'
                 self.append('if (slp_frame_stack_bottom) {')

Modified: pypy/dist/pypy/translator/js/opwriter.py
==============================================================================
--- pypy/dist/pypy/translator/js/opwriter.py	(original)
+++ pypy/dist/pypy/translator/js/opwriter.py	Fri Feb 17 12:49:18 2006
@@ -313,7 +313,10 @@
             #    gets a length of zero instead of length op.args[1]
             #    This could be a problem in cases like test_typed.py -k test_str_join , but javascript
             #    mostly does the right array resizing later on when we need it!
-            #assert len(op.args) == 1
+            l = len(op.args)
+            #assert l == 1
+            if l > 1:   #l is the length of the varsize array at the end of struct
+                log.mallocvarsize('len(op.args)='+str(l) + ", op.args[1]="+str(op.args[1]) )
             self.codewriter.malloc(targetvar, '{%s};' % self._structtype_repr(arg_type))
     malloc_varsize = malloc
 

Modified: pypy/dist/pypy/translator/js/src/ll_stackless.js
==============================================================================
--- pypy/dist/pypy/translator/js/src/ll_stackless.js	(original)
+++ pypy/dist/pypy/translator/js/src/ll_stackless.js	Fri Feb 17 12:49:18 2006
@@ -204,6 +204,9 @@
         slp_main_loop();
         result = slp_return_value;
     }
+    if (typeof(result) == typeof({})) {
+        result = result.chars;  //assume it's a rpystring
+    }
     return result;
 }
 

Modified: pypy/dist/pypy/translator/js/test/browsertest.py
==============================================================================
--- pypy/dist/pypy/translator/js/test/browsertest.py	(original)
+++ pypy/dist/pypy/translator/js/test/browsertest.py	Fri Feb 17 12:49:18 2006
@@ -37,6 +37,9 @@
 
 function handle_result(result) {
     var resultform = document.forms['resultform'];
+    if (typeof(result) == typeof({})) {
+        result = result.chars;  //assume it's a rpystring
+    }
     resultform.result.value = result;
     resultform.submit();
 };

Modified: pypy/dist/pypy/translator/js/test/test_stackless.py
==============================================================================
--- pypy/dist/pypy/translator/js/test/test_stackless.py	(original)
+++ pypy/dist/pypy/translator/js/test/test_stackless.py	Fri Feb 17 12:49:18 2006
@@ -69,7 +69,6 @@
     assert data.strip() == '100'
 
 def test_stackless_arguments():
-    py.test.skip("issue with returning rpystrings's because they are actually structs")
     def f(n, d, t):
         if n > 0:
             res = f(n-1, d, t)

Modified: pypy/dist/pypy/translator/js/test/test_struct.py
==============================================================================
--- pypy/dist/pypy/translator/js/test/test_struct.py	(original)
+++ pypy/dist/pypy/translator/js/test/test_struct.py	Fri Feb 17 12:49:18 2006
@@ -36,6 +36,9 @@
 A = lltype.Array(P)
 Agc = lltype.GcArray(P)
 
+VA = lltype.Array(lltype.Signed)
+VSgc = lltype.GcStruct("VSgc", ('myvar1', lltype.Signed), ('myvarsizearray', VA))
+
 
 def test_struct1():
     s = lltype.malloc(S, immortal=True)
@@ -85,3 +88,12 @@
         return a[0].myvar2.myvar6.myvar3 + a[n-1].myvar2.myvar6.myvar3
     f = compile_function(array3, [int])
     assert f(3) == array3(3)
+
+def test_varsizestruct1():
+    py.test.skip("issue with malloc_varsize structs")
+    def varsizestruct1(n):
+        vs = lltype.malloc(VSgc, n+5)
+        vs.myvarsizearray[0] = 123
+        return vs.myvar1 + vs.myvarsizearray[0] + len(vs.myvarsizearray)
+    f = compile_function(varsizestruct1, [int])
+    assert f(0) == varsizestruct1(0)



More information about the Pypy-commit mailing list