[pypy-commit] pypy stmgc-c7: Fixes

arigo noreply at buildbot.pypy.org
Sat Apr 19 14:06:01 CEST 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: stmgc-c7
Changeset: r70769:1969f1e4875a
Date: 2014-04-19 14:05 +0200
http://bitbucket.org/pypy/pypy/changeset/1969f1e4875a/

Log:	Fixes

diff --git a/rpython/translator/stm/src_stm/extracode.h b/rpython/translator/stm/src_stm/extracode.h
--- a/rpython/translator/stm/src_stm/extracode.h
+++ b/rpython/translator/stm/src_stm/extracode.h
@@ -43,35 +43,46 @@
 /*** HACK: hard-coded logic to expand the marker into     ***/
 /*** a string, suitable for running in PyPy               ***/
 
+typedef struct pypy_rpy_string0 RPyStringSpace0;
+
 static long g_co_filename_ofs;
 static long g_co_name_ofs;
 static long g_co_firstlineno_ofs;
 static long g_co_lnotab_ofs;
 
-static char *_RPyString_AsString_Real(RPyString *obj)
+static long _fetch_lngspace0(object_t *base, long ofs)
 {
-    stm_char *src = _RPyString_AsString(obj);
-    return STM_SEGMENT->segment_base + (uintptr_t)src;
+    char *src = STM_SEGMENT->segment_base + (uintptr_t)base;
+    return *(long *)(src + ofs);
+}
+
+static RPyStringSpace0 *_fetch_rpyspace0(object_t *base, long ofs)
+{
+    char *src = STM_SEGMENT->segment_base + (uintptr_t)base;
+    char *str = *(char **)(src + ofs);
+    char *str0 = STM_SEGMENT->segment_base + (uintptr_t)str;
+    return (RPyStringSpace0 *)str0;
 }
 
 static void _stm_expand_marker_for_pypy(uintptr_t odd_number,
                                         object_t *following_object,
                                         char *outputbuf, size_t outputbufsize)
 {
-    RPyString *co_filename =
-        *(RPyString **)(((char *)following_object) + g_co_filename_ofs);
-    RPyString *co_name =
-        *(RPyString **)(((char *)following_object) + g_co_name_ofs);
-    long co_firstlineno =
-        *(long *)(((char *)following_object) + g_co_firstlineno_ofs);
-    RPyString *co_lnotab =
-        *(RPyString **)(((char *)following_object) + g_co_lnotab_ofs);
+    long co_firstlineno;
+    RPyStringSpace0 *co_filename;
+    RPyStringSpace0 *co_name;
+    RPyStringSpace0 *co_lnotab;
+
+    co_filename    = _fetch_rpyspace0(following_object, g_co_filename_ofs);
+    co_name        = _fetch_rpyspace0(following_object, g_co_name_ofs);
+    co_firstlineno = _fetch_lngspace0(following_object, g_co_firstlineno_ofs);
+    co_lnotab      = _fetch_rpyspace0(following_object, g_co_lnotab_ofs);
 
     char *ntrunc = "", *fntrunc = "";
 
     long remaining = outputbufsize - 32;
     long nlen = RPyString_Size(co_name);
-    char *name = _RPyString_AsString_Real(co_name);
+    char *name = _RPyString_AsString(co_name);
     if (nlen > remaining / 2) {
         nlen = remaining / 2;
         ntrunc = "...";
@@ -79,7 +90,7 @@
     remaining -= nlen;
 
     long fnlen = RPyString_Size(co_filename);
-    char *fn = _RPyString_AsString_Real(co_filename);
+    char *fn = _RPyString_AsString(co_filename);
     if (fnlen > remaining) {
         fn += (fnlen - remaining);
         fnlen = remaining;
@@ -87,7 +98,7 @@
     }
 
     long tablen = RPyString_Size(co_lnotab);
-    char *tab = _RPyString_AsString_Real(co_lnotab);
+    char *tab = _RPyString_AsString(co_lnotab);
     uintptr_t next_instr = odd_number >> 1;
     long line = co_firstlineno;
     uintptr_t i, addr = 0;
diff --git a/rpython/translator/stm/test/test_ztranslated.py b/rpython/translator/stm/test/test_ztranslated.py
--- a/rpython/translator/stm/test/test_ztranslated.py
+++ b/rpython/translator/stm/test/test_ztranslated.py
@@ -509,19 +509,24 @@
             for i in range(10):
                 p = llop.stm_expand_marker(rffi.CCHARP)
                 print rffi.charp2str(p)
-                rstm.update_marker_num(i * 2 + 1)
+                rstm.update_marker_num((i+1) * 2 + 1)
             rstm.pop_marker()
             print 'stopping', pycode.co_name
 
         def main(argv):
             pycode1 = PyCode("/tmp/foobar.py", "baz", 40, "\x00\x01\x05\x01")
             pycode2 = PyCode("/tmp/foobaz.py", "bar", 70, "\x00\x01\x04\x02")
+            pycode3 = PyCode(
+                "/tmp/some/where/very/very/long/path/bla/br/project/foobaz.py",
+                "some_extremely_longish_and_boring_function_name",
+                80, "\x00\x01\x04\x02")
             llop.stm_setup_expand_marker_for_pypy(
                 lltype.Void, pycode1,
                 "co_filename", "co_name", "co_firstlineno", "co_lnotab")
 
             run_interpreter(pycode1)
             run_interpreter(pycode2)
+            run_interpreter(pycode3)
             return 0
 
         t, cbuilder = self.compile(main)
@@ -550,3 +555,6 @@
                 'File "/tmp/foobaz.py", line 73, in bar\n'
                 'File "/tmp/foobaz.py", line 73, in bar\n'
                 'stopping bar\n') in data
+        assert ('starting some_extremely_longish_and_boring_function_name\n'
+                'File "...bla/br/project/foobaz.py", line 81,'
+                ' in some_extremely_longish_a...\n') in data


More information about the pypy-commit mailing list