package jp.ac.kobe_u.cs.prolog.builtin;
import jp.ac.kobe_u.cs.prolog.lang.IntegerTerm;
import jp.ac.kobe_u.cs.prolog.lang.Predicate;
import jp.ac.kobe_u.cs.prolog.lang.Prolog;
import jp.ac.kobe_u.cs.prolog.lang.StructureTerm;
import jp.ac.kobe_u.cs.prolog.lang.SymbolTerm;
import jp.ac.kobe_u.cs.prolog.lang.Term;
import jp.ac.kobe_u.cs.prolog.lang.VariableTerm;
/*
This file is generated by Prolog Cafe.
PLEASE DO NOT EDIT!
*/
/**
<code>'$trace_init'/0</code> defined in builtins.pl<br>
@author Mutsunori Banbara (banbara@kobe-u.ac.jp)
@author Naoyuki Tamura (tamura@kobe-u.ac.jp)
@version 1.0
*/
class PRED_$trace_init_0 extends Predicate {
static SymbolTerm s1 = SymbolTerm.makeSymbol(":", 2);
static SymbolTerm s2 = SymbolTerm.makeSymbol("jp.ac.kobe_u.cs.prolog.builtin");
static SymbolTerm s3 = SymbolTerm.makeSymbol("$leap_flag", 1);
static SymbolTerm s4 = SymbolTerm.makeSymbol("$current_leash", 1);
static SymbolTerm s5 = SymbolTerm.makeSymbol("$current_spypoint", 3);
static SymbolTerm s6 = SymbolTerm.makeSymbol("no");
static Term[] s7 = {s6};
static StructureTerm s8 = new StructureTerm(s3, s7);
static Term[] s9 = {s2, s8};
static StructureTerm s10 = new StructureTerm(s1, s9);
static SymbolTerm s11 = SymbolTerm.makeSymbol("call");
static Term[] s12 = {s11};
static StructureTerm s13 = new StructureTerm(s4, s12);
static Term[] s14 = {s2, s13};
static StructureTerm s15 = new StructureTerm(s1, s14);
static SymbolTerm s16 = SymbolTerm.makeSymbol("exit");
static Term[] s17 = {s16};
static StructureTerm s18 = new StructureTerm(s4, s17);
static Term[] s19 = {s2, s18};
static StructureTerm s20 = new StructureTerm(s1, s19);
static SymbolTerm s21 = SymbolTerm.makeSymbol("redo");
static Term[] s22 = {s21};
static StructureTerm s23 = new StructureTerm(s4, s22);
static Term[] s24 = {s2, s23};
static StructureTerm s25 = new StructureTerm(s1, s24);
static SymbolTerm s26 = SymbolTerm.makeSymbol("fail");
static Term[] s27 = {s26};
static StructureTerm s28 = new StructureTerm(s4, s27);
static Term[] s29 = {s2, s28};
static StructureTerm s30 = new StructureTerm(s1, s29);
public PRED_$trace_init_0(Predicate cont) {
this.cont = cont;
}
public PRED_$trace_init_0(){}
public void setArgument(Term[] args, Predicate cont) {
this.cont = cont;
}
public int arity() { return 0; }
public String toString() {
return "$trace_init";
}
public Predicate exec(Prolog engine) {
// '$trace_init':-retractall('$leap_flag'(A)),retractall('$current_leash'(B)),retractall('$current_spypoint'(C,D,E)),assertz('$leap_flag'(no)),assertz('$current_leash'(call)),assertz('$current_leash'(exit)),assertz('$current_leash'(redo)),assertz('$current_leash'(fail)),!
engine.setB0();
Term a1, a2, a3, a4, a5, a6, a7;
Predicate p1, p2, p3, p4, p5, p6, p7, p8;
// '$trace_init':-['$get_level'(A),retractall('jp.ac.kobe_u.cs.prolog.builtin':'$leap_flag'(B)),retractall('jp.ac.kobe_u.cs.prolog.builtin':'$current_leash'(C)),retractall('jp.ac.kobe_u.cs.prolog.builtin':'$current_spypoint'(D,E,F)),assertz('jp.ac.kobe_u.cs.prolog.builtin':'$leap_flag'(no)),assertz('jp.ac.kobe_u.cs.prolog.builtin':'$current_leash'(call)),assertz('jp.ac.kobe_u.cs.prolog.builtin':'$current_leash'(exit)),assertz('jp.ac.kobe_u.cs.prolog.builtin':'$current_leash'(redo)),assertz('jp.ac.kobe_u.cs.prolog.builtin':'$current_leash'(fail)),'$cut'(A)]
a1 = new VariableTerm(engine);
//START inline expansion of $get_level(a(1))
if (! a1.unify(new IntegerTerm(engine.B0), engine.trail)) {
return engine.fail();
}
//END inline expansion
Term[] y1 = {new VariableTerm(engine)};
a2 = new StructureTerm(s3, y1);
Term[] y2 = {s2, a2};
a3 = new StructureTerm(s1, y2);
Term[] y3 = {new VariableTerm(engine)};
a4 = new StructureTerm(s4, y3);
Term[] y4 = {s2, a4};
a5 = new StructureTerm(s1, y4);
Term[] y5 = {new VariableTerm(engine), new VariableTerm(engine), new VariableTerm(engine)};
a6 = new StructureTerm(s5, y5);
Term[] y6 = {s2, a6};
a7 = new StructureTerm(s1, y6);
p1 = new PRED_$cut_1(a1, cont);
p2 = new PRED_assertz_1(s30, p1);
p3 = new PRED_assertz_1(s25, p2);
p4 = new PRED_assertz_1(s20, p3);
p5 = new PRED_assertz_1(s15, p4);
p6 = new PRED_assertz_1(s10, p5);
p7 = new PRED_retractall_1(a7, p6);
p8 = new PRED_retractall_1(a5, p7);
return new PRED_retractall_1(a3, p8);
}
}