a7 = args[0];
a8 = args[1];
} else if (a3.isVariable()){
a7 = new VariableTerm(engine);
a8 = new VariableTerm(engine);
((VariableTerm) a3).bind(new ListTerm(a7, a8), engine.trail);
} else {
return engine.fail();
}
a7 = a7.dereference();
if (a7.isStructure()){
if (! s14.equals(((StructureTerm)a7).functor()))
return engine.fail();
Term[] args = ((StructureTerm)a7).args();
if (! a6.unify(args[0], engine.trail))
return engine.fail();
a9 = args[1];
} else if (a7.isVariable()){
a9 = new VariableTerm(engine);
Term[] args = {a6, a9};
((VariableTerm) a7).bind(new StructureTerm(s14, args), engine.trail);
} else {
return engine.fail();
}
a4 = a4.dereference();
if (a4.isList()){
Term[] args = {((ListTerm)a4).car(), ((ListTerm)a4).cdr()};
a10 = args[0];
a11 = args[1];
} else if (a4.isVariable()){
a10 = new VariableTerm(engine);
a11 = new VariableTerm(engine);
((VariableTerm) a4).bind(new ListTerm(a10, a11), engine.trail);
} else {
return engine.fail();
}
a10 = a10.dereference();
if (a10.isStructure()){
if (! s15.equals(((StructureTerm)a10).functor()))
return engine.fail();
Term[] args = ((StructureTerm)a10).args();
if (! a6.unify(args[0], engine.trail))
return engine.fail();
if (! a9.unify(args[1], engine.trail))
return engine.fail();
} else if (a10.isVariable()){
Term[] args = {a6, a9};
((VariableTerm) a10).bind(new StructureTerm(s15, args), engine.trail);
} else {
return engine.fail();
}
//START inline expansion of $neck_cut
engine.neckCut();
//END inline expansion
Term[] y1 = {a6, a9};
a12 = new StructureTerm(s15, y1);
a13 = new ListTerm(a12, a5);
return new PRED_$read_tokens_4(a1, a8, a11, a13, cont);
}