[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