package project;
import java.util.*;
import org.overture.codegen.runtime.*;
import org.overture.codegen.vdm2jml.runtime.*;
@SuppressWarnings("all")
//@ nullable_by_default
final public class Entry {
/*@ public ghost static boolean invChecksOn = true; @*/
private Entry() {}
public static Object Run() {
IO.println("Before useOk");
{
final Number ignorePattern_1 = useOk();
//@ assert Utils.is_nat(ignorePattern_1);
/* skip */
}
IO.println("After useOk");
IO.println("Before useNotOk");
{
final Number ignorePattern_2 = useNotOk();
//@ assert Utils.is_nat(ignorePattern_2);
/* skip */
}
IO.println("After useNotOk");
return 0L;
}
public static Number useOk() {
project.Entrytypes.R1 r1 =
new project.Entrytypes.R1(
new project.Entrytypes.R2(new project.Entrytypes.R3(new project.Entrytypes.R4(5L))));
//@ assert Utils.is_(r1,project.Entrytypes.R1.class);
Number atomicTmp_1 = 10L;
//@ assert Utils.is_int(atomicTmp_1);
Number atomicTmp_2 = 3L;
//@ assert Utils.is_int(atomicTmp_2);
Number atomicTmp_3 = 5L;
//@ assert Utils.is_int(atomicTmp_3);
{
/* Start of atomic statement */
//@ set invChecksOn = false;
project.Entrytypes.R2 stateDes_1 = r1.get_r2();
Object stateDes_2 = stateDes_1.get_t3();
project.Entrytypes.R4 apply_1 = null;
if (stateDes_2 instanceof project.Entrytypes.R3) {
apply_1 = ((project.Entrytypes.R3) stateDes_2).get_r4();
} else {
throw new RuntimeException("Missing member: r4");
}
project.Entrytypes.R4 stateDes_3 = apply_1;
//@ assert stateDes_3 != null;
stateDes_3.set_x(atomicTmp_1);
project.Entrytypes.R2 stateDes_4 = r1.get_r2();
Object stateDes_5 = stateDes_4.get_t3();
project.Entrytypes.R4 apply_2 = null;
if (stateDes_5 instanceof project.Entrytypes.R3) {
apply_2 = ((project.Entrytypes.R3) stateDes_5).get_r4();
} else {
throw new RuntimeException("Missing member: r4");
}
project.Entrytypes.R4 stateDes_6 = apply_2;
//@ assert stateDes_6 != null;
stateDes_6.set_x(atomicTmp_2);
project.Entrytypes.R2 stateDes_7 = r1.get_r2();
Object stateDes_8 = stateDes_7.get_t3();
project.Entrytypes.R4 apply_3 = null;
if (stateDes_8 instanceof project.Entrytypes.R3) {
apply_3 = ((project.Entrytypes.R3) stateDes_8).get_r4();
} else {
throw new RuntimeException("Missing member: r4");
}
project.Entrytypes.R4 stateDes_9 = apply_3;
//@ assert stateDes_9 != null;
stateDes_9.set_x(atomicTmp_3);
//@ set invChecksOn = true;
//@ assert stateDes_3.valid();
//@ assert ((Utils.is_(stateDes_2,project.Entrytypes.R3.class) || Utils.is_(stateDes_2,project.Entrytypes.X.class)) && inv_Entry_T3(stateDes_2));
//@ assert stateDes_2 instanceof project.Entrytypes.X ==> ((project.Entrytypes.X) stateDes_2).valid();
//@ assert stateDes_2 instanceof project.Entrytypes.R3 ==> ((project.Entrytypes.R3) stateDes_2).valid();
//@ assert Utils.is_(stateDes_1,project.Entrytypes.R2.class);
//@ assert stateDes_1.valid();
//@ assert Utils.is_(r1,project.Entrytypes.R1.class);
//@ assert r1.valid();
//@ assert stateDes_6.valid();
//@ assert ((Utils.is_(stateDes_5,project.Entrytypes.R3.class) || Utils.is_(stateDes_5,project.Entrytypes.X.class)) && inv_Entry_T3(stateDes_5));
//@ assert stateDes_5 instanceof project.Entrytypes.X ==> ((project.Entrytypes.X) stateDes_5).valid();
//@ assert stateDes_5 instanceof project.Entrytypes.R3 ==> ((project.Entrytypes.R3) stateDes_5).valid();
//@ assert Utils.is_(stateDes_4,project.Entrytypes.R2.class);
//@ assert stateDes_4.valid();
//@ assert stateDes_9.valid();
//@ assert ((Utils.is_(stateDes_8,project.Entrytypes.R3.class) || Utils.is_(stateDes_8,project.Entrytypes.X.class)) && inv_Entry_T3(stateDes_8));
//@ assert stateDes_8 instanceof project.Entrytypes.X ==> ((project.Entrytypes.X) stateDes_8).valid();
//@ assert stateDes_8 instanceof project.Entrytypes.R3 ==> ((project.Entrytypes.R3) stateDes_8).valid();
//@ assert Utils.is_(stateDes_7,project.Entrytypes.R2.class);
//@ assert stateDes_7.valid();
} /* End of atomic statement */
Number ret_1 = 0L;
//@ assert Utils.is_nat(ret_1);
return ret_1;
}
public static Number useNotOk() {
project.Entrytypes.R1 r1 =
new project.Entrytypes.R1(
new project.Entrytypes.R2(new project.Entrytypes.R3(new project.Entrytypes.R4(5L))));
//@ assert Utils.is_(r1,project.Entrytypes.R1.class);
Number atomicTmp_4 = 3L;
//@ assert Utils.is_int(atomicTmp_4);
{
/* Start of atomic statement */
//@ set invChecksOn = false;
project.Entrytypes.R2 stateDes_10 = r1.get_r2();
Object stateDes_11 = stateDes_10.get_t3();
project.Entrytypes.R4 apply_4 = null;
if (stateDes_11 instanceof project.Entrytypes.R3) {
apply_4 = ((project.Entrytypes.R3) stateDes_11).get_r4();
} else {
throw new RuntimeException("Missing member: r4");
}
project.Entrytypes.R4 stateDes_12 = apply_4;
//@ assert stateDes_12 != null;
stateDes_12.set_x(atomicTmp_4);
//@ set invChecksOn = true;
//@ assert stateDes_12.valid();
//@ assert ((Utils.is_(stateDes_11,project.Entrytypes.R3.class) || Utils.is_(stateDes_11,project.Entrytypes.X.class)) && inv_Entry_T3(stateDes_11));
//@ assert stateDes_11 instanceof project.Entrytypes.X ==> ((project.Entrytypes.X) stateDes_11).valid();
//@ assert stateDes_11 instanceof project.Entrytypes.R3 ==> ((project.Entrytypes.R3) stateDes_11).valid();
//@ assert Utils.is_(stateDes_10,project.Entrytypes.R2.class);
//@ assert stateDes_10.valid();
//@ assert Utils.is_(r1,project.Entrytypes.R1.class);
//@ assert r1.valid();
} /* End of atomic statement */
Number ret_2 = 0L;
//@ assert Utils.is_nat(ret_2);
return ret_2;
}
public String toString() {
return "Entry{}";
}
/*@ pure @*/
/*@ helper @*/
public static Boolean inv_Entry_T3(final Object check_t3) {
Object t3 = ((Object) check_t3);
Boolean andResult_1 = false;
Boolean orResult_1 = false;
if (!(Utils.is_(t3, project.Entrytypes.R3.class))) {
orResult_1 = true;
} else {
project.Entrytypes.R4 apply_9 = null;
if (t3 instanceof project.Entrytypes.R3) {
apply_9 = ((project.Entrytypes.R3) t3).get_r4();
} else {
throw new RuntimeException("Missing member: r4");
}
orResult_1 = !(Utils.equals(apply_9.get_x(), 10L));
}
if (orResult_1) {
Boolean orResult_2 = false;
if (!(Utils.is_(t3, project.Entrytypes.X.class))) {
orResult_2 = true;
} else {
Boolean apply_10 = null;
if (t3 instanceof project.Entrytypes.X) {
apply_10 = ((project.Entrytypes.X) t3).get_b();
} else {
throw new RuntimeException("Missing member: b");
}
orResult_2 = apply_10;
}
if (orResult_2) {
andResult_1 = true;
}
}
return andResult_1;
}
}