[pypy-svn] r49943 - in pypy/dist/pypy/translator/llvm: . test
rxe at codespeak.net
rxe at codespeak.net
Wed Dec 19 22:45:37 CET 2007
Author: rxe
Date: Wed Dec 19 22:45:35 2007
New Revision: 49943
Modified:
pypy/dist/pypy/translator/llvm/genllvm.py
pypy/dist/pypy/translator/llvm/test/test_standalone.py
Log:
catch exception in entrypoint
Modified: pypy/dist/pypy/translator/llvm/genllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/genllvm.py (original)
+++ pypy/dist/pypy/translator/llvm/genllvm.py Wed Dec 19 22:45:35 2007
@@ -25,21 +25,29 @@
def augment_entrypoint(translator, entrypoint):
bk = translator.annotator.bookkeeper
graph_entrypoint = bk.getdesc(entrypoint).getuniquegraph()
- s_result = translator.annotator.binding(graph_entrypoint.getreturnvar())
get_argc = rffi.llexternal('_pypy_getargc', [], rffi.INT)
get_argv = rffi.llexternal('_pypy_getargv', [], rffi.CCHARPP)
+ import os
+
def new_entrypoint():
argc = get_argc()
argv = get_argv()
args = [rffi.charp2str(argv[i]) for i in range(argc)]
- return entrypoint(args)
+ result = 255
+ try:
+ result = entrypoint(args)
+ except Exception, exc:
+ os.write(2, 'DEBUG: An uncaught exception was raised in entrypoint: ' + str(exc) + '\n')
+
+ return result
+
entrypoint._annenforceargs_ = [s_list_of_strings]
mixlevelannotator = MixLevelHelperAnnotator(translator.rtyper)
-
- graph = mixlevelannotator.getgraph(new_entrypoint, [], s_result)
+ res = annmodel.lltype_to_annotation(lltype.Signed)
+ graph = mixlevelannotator.getgraph(new_entrypoint, [], res)
mixlevelannotator.finish()
mixlevelannotator.backend_optimize()
@@ -116,9 +124,8 @@
# XXX please dont ask!
from pypy.translator.c.genc import CStandaloneBuilder
cbuild = CStandaloneBuilder(self.translator, func, config=self.config)
- #cbuild.stackless = self.stackless
c_db = cbuild.generate_graphs_for_llinterp()
-
+
self.db = Database(self, self.translator)
self.db.gcpolicy = GcPolicy.new(self.db, self.config)
self.db.gctransformer = c_db.gctransformer
@@ -135,9 +142,6 @@
# set up externs nodes
self.setup_externs(c_db, self.db)
-
- self.translator.rtyper.specialize_more_blocks()
- self.db.setup_all()
self._checkpoint('setup_all externs')
self._print_node_stats()
@@ -175,7 +179,7 @@
self.function_count[name] += 1
Node.nodename_count[name] = self.function_count[name] + 1
name += '_%d' % self.function_count[name]
- entry_node.name = name
+ entry_node.name = name
else:
self.function_count[name] = 1
Modified: pypy/dist/pypy/translator/llvm/test/test_standalone.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/test/test_standalone.py (original)
+++ pypy/dist/pypy/translator/llvm/test/test_standalone.py Wed Dec 19 22:45:35 2007
@@ -86,3 +86,19 @@
exe_name = 'test_strtod'
compile_standalone(entry_point, exe_name=exe_name)
data = cmdexec(exe_name, '3.13e1')
+
+def test_exception_leaking():
+ def entry_point(argv):
+ if len(argv) > 5:
+ raise ValueError
+ print 'ok'
+ return 0
+
+ exe_name = 'test_exception_leaking'
+ compile_standalone(entry_point, exe_name=exe_name)
+ data = cmdexec(exe_name, 'abc', 'def')
+ assert data.startswith('ok')
+ try:
+ data = cmdexec(exe_name, 'abc', 'def', 'abc', 'def', 'abc', 'def')
+ except py.process.cmdexec.Error, exc:
+ assert exc.err.startswith('DEBUG')
More information about the Pypy-commit
mailing list