def _build_gen(func, annotation, graph=None, backendopt=True, exctrans=False, annotatorpolicy=None, nowrap=False): try: func = func.im_func except AttributeError: pass t = TranslationContext() if graph is not None: graph.func = func ann = t.buildannotator(policy=annotatorpolicy) inputcells = [ann.typeannotation(a) for a in annotation] ann.build_graph_types(graph, inputcells) t.graphs.insert(0, graph) else: ann = t.buildannotator(policy=annotatorpolicy) ann.build_types(func, annotation) if getoption('view'): t.view() t.buildrtyper(type_system="ootype").specialize() if backendopt: check_virtual_methods(ootype.ROOT) backend_optimizations(t) main_graph = t.graphs[0] if getoption('view'): t.view() return _build_gen_from_graph(main_graph, t, exctrans, nowrap)
def generate_source_for_function(func, annotation, backendopt=False): """ Given a Python function and some hints about its argument types, generates JVM sources that call it and print the result. Returns the JvmGeneratedSource object. """ if hasattr(func, "im_func"): func = func.im_func t = TranslationContext() ann = t.buildannotator() ann.build_types(func, annotation) t.buildrtyper(type_system="ootype").specialize() if backendopt: check_virtual_methods(ootype.ROOT) backend_optimizations(t) main_graph = t.graphs[0] if getoption("view"): t.view() if getoption("wd"): tmpdir = py.path.local(".") else: tmpdir = udir jvm = GenJvm(tmpdir, t, EntryPoint(main_graph, True, True)) return jvm.generate_source()
def test_checkvirtual_simple(): A = Instance("A", ROOT) B = Instance("B", A) addMethods(A, {"foo": meth(Meth([], Void)), "bar": meth(Meth([], Void))}) addMethods(B, {"foo": meth(Meth([], Void))}) check_virtual_methods() assert A._methods["foo"]._virtual == True assert A._methods["bar"]._virtual == False assert B._methods["foo"]._virtual == False
def test_checkvirtual_simple(): A = Instance("A", ROOT) B = Instance("B", A) addMethods(A, {"foo": meth(Meth([], Void)), "bar": meth(Meth([], Void))}) addMethods(B, {"foo": meth(Meth([], Void))}) check_virtual_methods() assert A._methods["foo"]._virtual == True assert A._methods["bar"]._virtual == False assert B._methods["foo"]._virtual == False
def test_checkvirtual_brother(): A = Instance("A", ROOT) B1 = Instance("B1", A) B2 = Instance("B2", A) addMethods(A, {"foo": meth(Meth([], Void)), "bar": meth(Meth([], Void))}) addMethods(B1, {"foo": meth(Meth([], Void))}) check_virtual_methods() assert A._methods["foo"]._virtual == True assert A._methods["bar"]._virtual == False assert B1._methods["foo"]._virtual == False assert "foo" not in B2._methods
def test_checkvirtual_deep(): A = Instance("A", ROOT) B = Instance("B", A) C = Instance("C", B) addMethods(A, {"foo": meth(Meth([], Void)), "bar": meth(Meth([], Void))}) addMethods(C, {"foo": meth(Meth([], Void))}) check_virtual_methods() assert A._methods["foo"]._virtual == True assert A._methods["bar"]._virtual == False assert "foo" not in B._methods assert C._methods["foo"]._virtual == False
def test_checkvirtual_brother(): A = Instance("A", ROOT) B1 = Instance("B1", A) B2 = Instance("B2", A) addMethods(A, {"foo": meth(Meth([], Void)), "bar": meth(Meth([], Void))}) addMethods(B1, {"foo": meth(Meth([], Void))}) check_virtual_methods() assert A._methods["foo"]._virtual == True assert A._methods["bar"]._virtual == False assert B1._methods["foo"]._virtual == False assert "foo" not in B2._methods
def test_checkvirtual_deep(): A = Instance("A", ROOT) B = Instance("B", A) C = Instance("C", B) addMethods(A, {"foo": meth(Meth([], Void)), "bar": meth(Meth([], Void))}) addMethods(C, {"foo": meth(Meth([], Void))}) check_virtual_methods() assert A._methods["foo"]._virtual == True assert A._methods["bar"]._virtual == False assert "foo" not in B._methods assert C._methods["foo"]._virtual == False
def generate_source_for_function(func, annotation, backendopt=False): """ Given a Python function and some hints about its argument types, generates JVM sources that call it and print the result. Returns the JvmGeneratedSource object. """ if hasattr(func, 'im_func'): func = func.im_func t = TranslationContext() ann = t.buildannotator() ann.build_types(func, annotation) t.buildrtyper(type_system="ootype").specialize() if backendopt: check_virtual_methods(ootype.ROOT) backend_optimizations(t) main_graph = t.graphs[0] if getoption('view'): t.view() if getoption('wd'): tmpdir = py.path.local('.') else: tmpdir = udir jvm = GenJvm(tmpdir, t, EntryPoint(main_graph, True, True)) return jvm.generate_source()
def test_nonvirtual(): A = Instance("A", ROOT) addMethods(A, {"foo": meth(Meth([], Void))}) check_virtual_methods() assert A._methods["foo"]._virtual == False
def test_nonvirtual(): A = Instance("A", ROOT) addMethods(A, {"foo": meth(Meth([], Void))}) check_virtual_methods() assert A._methods["foo"]._virtual == False