[pypy-svn] r68778 - in pypy/branch/logging/pypy: config doc/config rlib rlib/test
arigo at codespeak.net
arigo at codespeak.net
Tue Oct 27 10:45:43 CET 2009
Author: arigo
Date: Tue Oct 27 10:45:43 2009
New Revision: 68778
Added:
pypy/branch/logging/pypy/doc/config/translation.rlog.txt (contents, props changed)
Modified:
pypy/branch/logging/pypy/config/translationoption.py
pypy/branch/logging/pypy/rlib/rlog.py
pypy/branch/logging/pypy/rlib/test/test_rlog.py
Log:
Add a general translation option, --rlog or --no-rlog, to enable
or disable rlog in translated programs.
Modified: pypy/branch/logging/pypy/config/translationoption.py
==============================================================================
--- pypy/branch/logging/pypy/config/translationoption.py (original)
+++ pypy/branch/logging/pypy/config/translationoption.py Tue Oct 27 10:45:43 2009
@@ -41,6 +41,11 @@
},
cmdline="-b --backend"),
+ BoolOption("rlog",
+ "Includes logging code (at runtime, set PYPYLOG=file)",
+ default=True,
+ cmdline="--rlog"),
+
# gc
ChoiceOption("gc", "Garbage Collection Strategy",
["boehm", "ref", "marksweep", "semispace", "statistics",
Added: pypy/branch/logging/pypy/doc/config/translation.rlog.txt
==============================================================================
--- (empty file)
+++ pypy/branch/logging/pypy/doc/config/translation.rlog.txt Tue Oct 27 10:45:43 2009
@@ -0,0 +1,3 @@
+Enable general logging. When true, the translated program will look
+for the PYPYLOG env var, and if set to a file name, it will dump
+various information into that file.
Modified: pypy/branch/logging/pypy/rlib/rlog.py
==============================================================================
--- pypy/branch/logging/pypy/rlib/rlog.py (original)
+++ pypy/branch/logging/pypy/rlib/rlog.py Tue Oct 27 10:45:43 2009
@@ -26,18 +26,26 @@
_about_ = has_log
def compute_result_annotation(self):
- from pypy.annotation import model as annmodel
- return annmodel.s_Bool
+ translator = self.bookkeeper.annotator.translator
+ if translator.config.translation.rlog:
+ from pypy.annotation import model as annmodel
+ return annmodel.s_Bool
+ else:
+ return self.bookkeeper.immutablevalue(False)
def specialize_call(self, hop):
- from pypy.annotation import model as annmodel
from pypy.rpython.lltypesystem import lltype
- logwriter = get_logwriter(hop.rtyper)
- annhelper = hop.rtyper.getannmixlevel()
- c_func = annhelper.constfunc(logwriter.has_log, [],
- annmodel.s_Bool)
- hop.exception_cannot_occur()
- return hop.genop('direct_call', [c_func], resulttype=lltype.Bool)
+ translator = hop.rtyper.annotator.translator
+ if translator.config.translation.rlog:
+ from pypy.annotation import model as annmodel
+ logwriter = get_logwriter(hop.rtyper)
+ annhelper = hop.rtyper.getannmixlevel()
+ c_func = annhelper.constfunc(logwriter.has_log, [],
+ annmodel.s_Bool)
+ hop.exception_cannot_occur()
+ return hop.genop('direct_call', [c_func], resulttype=lltype.Bool)
+ else:
+ return hop.inputconst(lltype.Bool, False)
class DebugLogEntry(ExtRegistryEntry):
@@ -45,56 +53,60 @@
def compute_result_annotation(self, s_category, s_message, **kwds_s):
from pypy.annotation import model as annmodel
- assert s_category.is_constant()
- assert s_message.is_constant()
translator = self.bookkeeper.annotator.translator
- try:
- logcategories = translator._logcategories
- except AttributeError:
- logcategories = translator._logcategories = {}
- try:
- cat = logcategories[s_category.const]
- except KeyError:
- num = len(logcategories) + 1
- logcategories[s_category.const] = LogCategory(s_category.const,
- s_message.const,
- num)
- else:
- assert cat.message == s_message.const, (
- "log category %r is used with different messages:\n\t%s\n\t%s"
- % (s_category.const, cat.message, s_message.const))
+ if translator.config.translation.rlog:
+ assert s_category.is_constant()
+ assert s_message.is_constant()
+ translator = self.bookkeeper.annotator.translator
+ try:
+ logcategories = translator._logcategories
+ except AttributeError:
+ logcategories = translator._logcategories = {}
+ try:
+ cat = logcategories[s_category.const]
+ except KeyError:
+ num = len(logcategories) + 1
+ logcategories[s_category.const] = LogCategory(s_category.const,
+ s_message.const,
+ num)
+ else:
+ assert cat.message == s_message.const, (
+ "log category %r is used with different messages:\n\t%s\n"
+ "\t%s" % (s_category.const, cat.message, s_message.const))
return annmodel.s_None
def specialize_call(self, hop, **kwds_i):
- from pypy.annotation import model as annmodel
from pypy.rpython.lltypesystem import lltype
- logwriter = get_logwriter(hop.rtyper)
translator = hop.rtyper.annotator.translator
- cat = translator._logcategories[hop.args_s[0].const]
- ann = {
- 'd': annmodel.SomeInteger(),
- 'f': annmodel.SomeFloat(),
- 's': annmodel.SomeString(can_be_None=True),
- }
- annhelper = hop.rtyper.getannmixlevel()
- args_s = [ann[t] for t in cat.types]
- c_func = annhelper.constfunc(cat.gen_call(logwriter), args_s,
- annmodel.s_None)
- args_v = [c_func]
- for name, typechar in cat.entries:
- arg = kwds_i['i_'+name]
- if typechar == 'd':
- v = hop.inputarg(lltype.Signed, arg=arg)
- elif typechar == 'f':
- v = hop.inputarg(lltype.Float, arg=arg)
- elif typechar == 's':
- v = hop.inputarg(hop.rtyper.type_system.rstr.string_repr,
- arg=arg)
- else:
- assert 0, typechar
- args_v.append(v)
- hop.exception_cannot_occur()
- hop.genop('direct_call', args_v)
+ if translator.config.translation.rlog:
+ from pypy.annotation import model as annmodel
+ logwriter = get_logwriter(hop.rtyper)
+ translator = hop.rtyper.annotator.translator
+ cat = translator._logcategories[hop.args_s[0].const]
+ ann = {
+ 'd': annmodel.SomeInteger(),
+ 'f': annmodel.SomeFloat(),
+ 's': annmodel.SomeString(can_be_None=True),
+ }
+ annhelper = hop.rtyper.getannmixlevel()
+ args_s = [ann[t] for t in cat.types]
+ c_func = annhelper.constfunc(cat.gen_call(logwriter), args_s,
+ annmodel.s_None)
+ args_v = [c_func]
+ for name, typechar in cat.entries:
+ arg = kwds_i['i_'+name]
+ if typechar == 'd':
+ v = hop.inputarg(lltype.Signed, arg=arg)
+ elif typechar == 'f':
+ v = hop.inputarg(lltype.Float, arg=arg)
+ elif typechar == 's':
+ v = hop.inputarg(hop.rtyper.type_system.rstr.string_repr,
+ arg=arg)
+ else:
+ assert 0, typechar
+ args_v.append(v)
+ hop.exception_cannot_occur()
+ hop.genop('direct_call', args_v)
return hop.inputconst(lltype.Void, None)
def get_logwriter(rtyper):
Modified: pypy/branch/logging/pypy/rlib/test/test_rlog.py
==============================================================================
--- pypy/branch/logging/pypy/rlib/test/test_rlog.py (original)
+++ pypy/branch/logging/pypy/rlib/test/test_rlog.py Tue Oct 27 10:45:43 2009
@@ -250,6 +250,19 @@
assert entries[1][2] == [133, 132.5]
assert entries[2][2] == ['hi there']
- def test_interpret(self):
+ def test_interpret_f(self):
interpret(self.f.im_func, [132], malloc_check=False)
self.check_result()
+
+ def test_interpret_g(self):
+ def never_called():
+ xyz
+ def g():
+ rlog.debug_log("Aa", "hello %(foo)d", foo=5)
+ if rlog.has_log():
+ never_called()
+ from pypy.config import translationoption
+ config = translationoption.get_combined_translation_config(
+ overrides={"translation.rlog": False})
+ interpret(g, [], config=config)
+ assert not os.path.exists(self.pypylog)
More information about the Pypy-commit
mailing list