Statically import fail/0 instead of defining new fields The compiler almost always created a new field in every predicate named fail_0, initialized to the static instance inside of Failure. Instead drop the label and statically import fail_0. Change-Id: I6542c6eb91e997dc6f32e6680dede943cb034deb
diff --git a/src/compiler/am2j.pl b/src/compiler/am2j.pl index 04a39b4..846ea83 100644 --- a/src/compiler/am2j.pl +++ b/src/compiler/am2j.pl
@@ -130,6 +130,12 @@ write(Out, 'import '), write_package(P, Out), write(Out, '.*;'), nl(Out). +write_java0(import_static(P,F), _, Out) :- !, + write(Out, 'import static '), + write_package(P, Out), + write(Out, '.'), + write(Out, F), + write(Out, ';'), nl(Out). write_java0(import_package(P,FA), _, Out) :- !, write(Out, 'import '), write_package(P, Out), @@ -143,12 +149,7 @@ write_java0((Label: Instruction), In, Out) :- !, write_label(Label, Out), write_java0(Instruction, In, Out). -write_java0(label(fail/0), _, Out) :- !, - tab(Out, 4), - write(Out, 'static final Operation '), - write_index(fail/0, Out), - write(Out, ' = com.googlecode.prolog_cafe.lang.Failure.FAIL_0'), - write(Out, ';'), nl(Out). +write_java0(label(fail/0), _, _) :- !. write_java0(label(L), _, Out) :- !, tab(Out, 4), write(Out, 'static final Operation '), @@ -1170,6 +1171,7 @@ + end_predicate(p, f/n) + import_package(p) ++ import_static(p, f/n) + import_package(p, f/n) + main(f/n, public): [Instructions]
diff --git a/src/compiler/pl2am.pl b/src/compiler/pl2am.pl index dca9608..8700a80 100644 --- a/src/compiler/pl2am.pl +++ b/src/compiler/pl2am.pl
@@ -102,6 +102,7 @@ end_predicate(p, f/n) import_package(p) + import_static(p, f/n) import_package(p, f/n) main(f/n, public): [Instructions] @@ -162,6 +163,7 @@ :- dynamic package_name/1. :- dynamic public_predicates/2. :- dynamic import_package/2. +:- dynamic import_static/2. :- dynamic internal_declarations/1. :- dynamic file_name/1. :- dynamic dummy_clause_counter/1. @@ -205,6 +207,7 @@ retractall(package_name(_)), retractall(public_predicates(_,_)), retractall(import_package(_,_)), + retractall(import_static(_,_)), retractall(internal_declarations(_)), retractall(file_name(_)), retractall(dummy_clause_counter(_)), @@ -251,6 +254,7 @@ assert_import('com.googlecode.prolog_cafe.exceptions'), assert_import('com.googlecode.prolog_cafe.lang'), assert_import('com.googlecode.prolog_cafe.lang.ChoicePointFrame'), + assert(import_static('com.googlecode.prolog_cafe.lang.Failure', fail_0)), assert_dummy_package, assert_dummy_public. @@ -815,16 +819,23 @@ %%% Import Declarations generate_import --> + {findall((P,C), import_static(P, C), S)}, + gen_importstatic(S), {findall((P,C), import_package(P, C), X)}, - gen_import(X). + gen_importpkg(X). -gen_import([]) --> !. -gen_import([(P,'*')|Xs]) --> !, +gen_importstatic([]) --> !. +gen_importstatic([(P,C)|Xs]) --> + [import_static(P, C)], + gen_importstatic(Xs). + +gen_importpkg([]) --> !. +gen_importpkg([(P,'*')|Xs]) --> !, [import_package(P)], - gen_import(Xs). -gen_import([(P,C)|Xs]) --> + gen_importpkg(Xs). +gen_importpkg([(P,C)|Xs]) --> [import_package(P, C)], - gen_import(Xs). + gen_importpkg(Xs). %%% Information generate_info(Functor, Arity) -->
diff --git a/src/lang/Failure.java b/src/lang/Failure.java index 15c3c04..7b109a0 100644 --- a/src/lang/Failure.java +++ b/src/lang/Failure.java
@@ -22,7 +22,7 @@ /** Returns a string representation of this <code>Failure</code>. */ public String toString(){ return "Failure"; } - public static final Operation FAIL_0 = new PRED_fail_0(); + public static final Operation fail_0 = new PRED_fail_0(); private static final class PRED_fail_0 extends Operation { @Override public Operation exec(Prolog engine) throws PrologException {