Author: Armin Rigo <[email protected]>
Branch: reverse-debugger
Changeset: r85123:1f9da349e92c
Date: 2016-06-13 12:03 +0200
http://bitbucket.org/pypy/pypy/changeset/1f9da349e92c/
Log: Don't record the reads out of the small funcset arrays
diff --git a/rpython/rlib/revdb.py b/rpython/rlib/revdb.py
--- a/rpython/rlib/revdb.py
+++ b/rpython/rlib/revdb.py
@@ -47,7 +47,8 @@
def creation_time_of(x):
"""Returns the time at which the object 'x' was created.
More precisely, returns t such that object 'x' was created when
- current_time()==t; this means that the object exists from time t+1.
+ current_time()==t; this means that the object exists at the stop
+ point number t+1, but does not exist yet at the stop point number t.
"""
return llop.revdb_creation_time_of(lltype.SignedLongLong, x)
diff --git a/rpython/rtyper/rpbc.py b/rpython/rtyper/rpbc.py
--- a/rpython/rtyper/rpbc.py
+++ b/rpython/rtyper/rpbc.py
@@ -414,7 +414,8 @@
if self.s_pbc.can_be_None:
self.descriptions.insert(0, None)
POINTER_TABLE = Array(self.pointer_repr.lowleveltype,
- hints={'nolength': True, 'immutable': True})
+ hints={'nolength': True, 'immutable': True,
+ 'static_immutable': True})
pointer_table = malloc(POINTER_TABLE, len(self.descriptions),
immortal=True)
for i, desc in enumerate(self.descriptions):
@@ -564,7 +565,8 @@
if r_to in r_from._conversion_tables:
return r_from._conversion_tables[r_to]
else:
- t = malloc(Array(Char, hints={'nolength': True, 'immutable': True}),
+ t = malloc(Array(Char, hints={'nolength': True, 'immutable': True,
+ 'static_immutable': True}),
len(r_from.descriptions), immortal=True)
l = []
for i, d in enumerate(r_from.descriptions):
diff --git a/rpython/translator/revdb/test/test_basic.py
b/rpython/translator/revdb/test/test_basic.py
--- a/rpython/translator/revdb/test/test_basic.py
+++ b/rpython/translator/revdb/test/test_basic.py
@@ -59,12 +59,15 @@
return self.cur == len(self.buffer)
-def compile(self, entry_point, argtypes, backendopt=True):
+def compile(self, entry_point, argtypes, backendopt=True,
+ withsmallfuncsets=None):
t = Translation(entry_point, None, gc="boehm")
self.t = t
t.config.translation.reverse_debugger = True
t.config.translation.rweakref = False
t.config.translation.lldebug0 = True
+ if withsmallfuncsets is not None:
+ t.config.translation.withsmallfuncsets = withsmallfuncsets
if not backendopt:
t.disable(["backendopt_lltype"])
t.annotate()
@@ -171,6 +174,40 @@
x = rdb.next('q'); assert x == 0 # number of stop points
assert rdb.done()
+ @py.test.mark.parametrize('limit', [3, 5])
+ def test_dont_record_small_funcset_conversions(self, limit):
+ def f1():
+ return 111
+ def f2():
+ return 222
+ def f3():
+ return 333
+ def g(n):
+ if n & 1:
+ return f1
+ else:
+ return f2
+ def main(argv):
+ x = g(len(argv)) # can be f1 or f2
+ if len(argv) > 5:
+ x = f3 # now can be f1 or f2 or f3
+ print x()
+ return 9
+ self.compile(main, [], backendopt=False, withsmallfuncsets=limit)
+ for input, expected_output in [
+ ('2 3', '111\n'),
+ ('2 3 4', '222\n'),
+ ('2 3 4 5 6 7', '333\n'),
+ ]:
+ out = self.run(input)
+ assert out == expected_output
+ rdb = self.fetch_rdb([self.exename] + input.split())
+ # write() call
+ x = rdb.next(); assert x == len(out)
+ x = rdb.next('i'); assert x == 0 # errno
+ x = rdb.next('q'); assert x == 0 # number of stop points
+ assert rdb.done()
+
class InteractiveTests(object):
EOF = pexpect.EOF
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit