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 {