[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