# HG changeset patch # User Sigurd Meldgaard # Date 1260782862 -3600 # Node ID b57cf4ece1f254dafbe8399f635c64fda01fccda # Parent 32d6f31a8be2884b869052b7398af12683c896d1 ideal functionality: now uses inlineCallbacks diff -r 32d6f31a8be2 -r b57cf4ece1f2 pysmcl/ideal_functionality.py --- a/pysmcl/ideal_functionality.py Mon Dec 14 10:26:14 2009 +0100 +++ b/pysmcl/ideal_functionality.py Mon Dec 14 10:27:42 2009 +0100 @@ -1,14 +1,15 @@ import inspect +from twisted.internet.defer import inlineCallbacks import pysmcl.ast_wrapper as ast import pysmcl.compatibility_check import pysmcl.pretty_print import pysmcl.secret_annotator import pysmcl.secret_ifs +from pysmcl.runtime_sugar import runtime_sugar from pysmcl.bad_calls import bad_calls - -def ideal_functionality(args): +def ideal_functionality(range={}): def ideal_functionality_helper(f): print "ideal" source_str = inspect.getsource(f) @@ -27,9 +28,14 @@ t = transform_ifs.visit(function_ast) pysmcl.secret_annotator.secret_analysis(function_ast) bad_calls(function_ast) + runtime_sugar(function_ast) t.decorator_list.pop() # pysmcl.proof_burden.proof_burden(t) pysmcl.pretty_print.PrettyPrinter().visit(t) - exec compile(ast.Module([t]), "", "exec") - return eval(function_ast.name) + g = f.__globals__ + env = {} + ast.increment_lineno(t, 3) + exec compile(ast.Module([t]), f.__code__.co_filename, "exec") in g, env + f = env[function_ast.name] + return inlineCallbacks(f) return ideal_functionality_helper