Merge changes I40e7f7c1,I6542c6eb

* changes:
  Return to jtry1..jtry10 to save space
  Statically import fail/0 instead of defining new fields
diff --git a/src/builtin/PRED_regex_match_3.java b/src/builtin/PRED_regex_match_3.java
index 5d796f5..a96779a 100644
--- a/src/builtin/PRED_regex_match_3.java
+++ b/src/builtin/PRED_regex_match_3.java
@@ -1,7 +1,6 @@
 package com.googlecode.prolog_cafe.builtin;
 import com.googlecode.prolog_cafe.exceptions.IllegalTypeException;
 import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
-import com.googlecode.prolog_cafe.lang.ChoicePointFrame;
 import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
 import com.googlecode.prolog_cafe.lang.ListTerm;
 import com.googlecode.prolog_cafe.lang.Operation;
@@ -10,7 +9,6 @@
 import com.googlecode.prolog_cafe.lang.SymbolTerm;
 import com.googlecode.prolog_cafe.lang.Term;
 
-import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -59,7 +57,7 @@
 
       engine.r1 = new JavaObjectTerm(matcher);
       engine.r2 = arg3;
-      return engine.jtry(regex_check, regex_next, new ChoicePointFrame.S2(engine));
+      return engine.jtry2(regex_check, regex_next);
   }
 
   private static final class PRED_regex_check extends Operation {
@@ -94,7 +92,7 @@
         return engine.fail();
       }
 
-      return engine.jtry(regex_check, regex_next, new ChoicePointFrame.S2(engine));
+      return engine.jtry2(regex_check, regex_next);
     }
   }
 
diff --git a/src/compiler/am2j.pl b/src/compiler/am2j.pl
index 04a39b4..2121f86 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 '),
@@ -468,16 +469,10 @@
 write_java0(try(Li,Lj), _, Out) :- !, 
 	clause(current_arity(A), _),
 	tab(Out, 8),
-	write(Out, 'return engine.jtry('),
+	write(Out, 'return engine.jtry'), write(Out, A), write(Out, '('),
 	write_index(Li, Out), 
 	write(Out, ', '),
 	write_index(Lj, Out),
-	write(Out, ', '),
-	( A == 0 ->
-		write(Out, 'new S0()')
-		;
-		write(Out, 'new S'), write(Out, A), write(Out, '(engine)')
-	),
 	write(Out, ');'), nl(Out).
 write_java0(retry(Li,Lj), _, Out) :- !, 
 	tab(Out, 8),
@@ -1170,6 +1165,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..2cbe84c 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(_)),
@@ -250,7 +253,7 @@
 	assert_import('com.googlecode.prolog_cafe.builtin'),
 	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 +818,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/ChoicePointFrame.java b/src/lang/ChoicePointFrame.java
index 908586a..f94dd90 100644
--- a/src/lang/ChoicePointFrame.java
+++ b/src/lang/ChoicePointFrame.java
@@ -9,7 +9,7 @@
  * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
  * @version 1.0
  */
-public abstract class ChoicePointFrame {
+class ChoicePointFrame {
     ChoicePointFrame prior;
 
     long timeStamp;
@@ -31,13 +31,10 @@
       return t;
     }
 
-    public static final class S0 extends ChoicePointFrame {
-    }
-
-    public static final class S1 extends ChoicePointFrame {
+    static final class S1 extends ChoicePointFrame {
       private final Term r1;
 
-      public S1(Prolog engine) {
+      S1(Prolog engine) {
         this.r1 = engine.r1;
       }
 
@@ -47,10 +44,10 @@
       }
     }
 
-    public static final class S2 extends ChoicePointFrame {
+    static final class S2 extends ChoicePointFrame {
       private final Term r1, r2;
 
-      public S2(Prolog engine) {
+      S2(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
       }
@@ -61,10 +58,10 @@
       }
     }
 
-    public static final class S3 extends ChoicePointFrame {
+    static final class S3 extends ChoicePointFrame {
       private final Term r1, r2, r3;
 
-      public S3(Prolog engine) {
+      S3(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
@@ -78,10 +75,10 @@
       }
     }
 
-    public static final class S4 extends ChoicePointFrame {
+    static final class S4 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4;
 
-      public S4(Prolog engine) {
+      S4(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
@@ -97,10 +94,10 @@
       }
     }
 
-    public static final class S5 extends ChoicePointFrame {
+    static final class S5 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4, r5;
 
-      public S5(Prolog engine) {
+      S5(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
@@ -118,10 +115,10 @@
       }
     }
 
-    public static final class S6 extends ChoicePointFrame {
+    static final class S6 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4, r5, r6;
 
-      public S6(Prolog engine) {
+      S6(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
@@ -141,10 +138,10 @@
       }
     }
 
-    public static final class S7 extends ChoicePointFrame {
+    static final class S7 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4, r5, r6, r7;
 
-      public S7(Prolog engine) {
+      S7(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
@@ -166,10 +163,10 @@
       }
     }
 
-    public static class S8 extends ChoicePointFrame {
+    static class S8 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4, r5, r6, r7, r8;
 
-      public S8(Prolog engine) {
+      S8(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
@@ -193,7 +190,7 @@
       }
     }
 
-    public static class S9 extends ChoicePointFrame {
+    static class S9 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4, r5, r6, r7, r8, r9;
 
       S9(Prolog engine) {
@@ -222,10 +219,10 @@
       }
     }
 
-    public static class S10 extends ChoicePointFrame {
+    static class S10 extends ChoicePointFrame {
       private final Term r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
 
-      public S10(Prolog engine) {
+      S10(Prolog engine) {
         this.r1 = engine.r1;
         this.r2 = engine.r2;
         this.r3 = engine.r3;
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 {
diff --git a/src/lang/Prolog.java b/src/lang/Prolog.java
index 231ab2c..4279f99 100644
--- a/src/lang/Prolog.java
+++ b/src/lang/Prolog.java
@@ -139,7 +139,7 @@
 	CPFTimeStamp = Long.MIN_VALUE;
 
 	// Creates an initial choice point frame.
-	ChoicePointFrame initialFrame = new ChoicePointFrame.S0();
+	ChoicePointFrame initialFrame = new ChoicePointFrame();
 	initialFrame.b0 = B0;
 	initialFrame.bp = Failure.FAILURE;
 	initialFrame.tr = trail.top();
@@ -261,8 +261,20 @@
       stack.top.restore(this);
     }
 
+    public Operation jtry0(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame()); }
+    public Operation jtry1(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S1(this)); }
+    public Operation jtry2(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S2(this)); }
+    public Operation jtry3(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S3(this)); }
+    public Operation jtry4(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S4(this)); }
+    public Operation jtry5(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S5(this)); }
+    public Operation jtry6(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S6(this)); }
+    public Operation jtry7(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S7(this)); }
+    public Operation jtry8(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S8(this)); }
+    public Operation jtry9(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S8(this)); }
+    public Operation jtry10(Operation p, Operation next) { return jtry(p, next, new ChoicePointFrame.S8(this)); }
+
     /** Creates a new choice point frame. */
-    public Operation jtry(Operation p, Operation next, ChoicePointFrame entry) {
+    private Operation jtry(Operation p, Operation next, ChoicePointFrame entry) {
       entry.cont = cont;
       entry.b0 = B0;
       entry.bp = next;