// Path: ngscript-core/src/main/java/org/ngscript/runtime/vo/VmMemRef.java
// public class VmMemRef {
// 
//     private Object value;
//     @Getter
//     private final boolean immutable;
// 
//     public VmMemRef() {
//         this(null, false);
//     }
// 
//     public VmMemRef(Object obj_v) {
//         this(obj_v, false);
//     }
// 
//     public VmMemRef(Object value, boolean immutable) {
//         this.value = value;
//         this.immutable = immutable;
//     }
// 
//     public void write(Object v) {
//         if (immutable && value != null) {
//             throw new RuntimeException("immutable");
//         }
//         this.value = v;
//     }
// 
//     public Object read() {
//         return this.value;
//     }
// 
//     @Override
//     public String toString() {
//         return "VmMemRef{" + "value=" + value + '}';
//     }
// 
// }
// 
// Path: ngscript-core/src/main/java/org/ngscript/runtime/vo/undefined.java
// public class undefined {
// 
//     private undefined() {
//     }
// 
//     @Override
//     public String toString() {
//         return "undefined";
//     }
// 
//     public static final undefined value = new undefined();
// }


import org.ngscript.runtime.vo.VmMemRef;
import org.ngscript.runtime.vo.undefined;
    static boolean testEq(Object obj1, Object obj2) {
        if (obj1 == obj2) {
            return true;
        }
        if (obj1 == null || obj2 == null) {
            return false;
        }
        return obj1.toString().equals(obj2.toString());
    }

    static boolean testValue(Object testObj) {
        boolean val = false;
        if (testObj == null) {
            val = false;
        } else if (testObj instanceof Boolean) {
            val = ((Boolean) testObj);
        } else if (testObj instanceof Integer) {
            val = ((Integer) testObj) != 0;
        } else if (testObj instanceof Double) {
            val = Math.abs((Double) testObj) > Double.MIN_NORMAL;
        } else if (testObj instanceof undefined) {
            val = false;
        } else {
            //is an object
            val = true;
        }
        return val;
    }

    static void addEax(VirtualMachine vm, int num, boolean rewrite) {
// Path: ngscript-core/src/main/java/org/ngscript/runtime/vo/VmMemRef.java
// public class VmMemRef {
// 
//     private Object value;
//     @Getter
//     private final boolean immutable;
// 
//     public VmMemRef() {
//         this(null, false);
//     }
// 
//     public VmMemRef(Object obj_v) {
//         this(obj_v, false);
//     }
// 
//     public VmMemRef(Object value, boolean immutable) {
//         this.value = value;
//         this.immutable = immutable;
//     }
// 
//     public void write(Object v) {
//         if (immutable && value != null) {
//             throw new RuntimeException("immutable");
//         }
//         this.value = v;
//     }
// 
//     public Object read() {
//         return this.value;
//     }
// 
//     @Override
//     public String toString() {
//         return "VmMemRef{" + "value=" + value + '}';
//     }
// 
// }
// 
// Path: ngscript-core/src/main/java/org/ngscript/runtime/vo/undefined.java
// public class undefined {
// 
//     private undefined() {
//     }
// 
//     @Override
//     public String toString() {
//         return "undefined";
//     }
// 
//     public static final undefined value = new undefined();
// }


// Path: ngscript-core/src/main/java/org/ngscript/runtime/OpUtils.java
import org.ngscript.runtime.vo.VmMemRef;
import org.ngscript.runtime.vo.undefined;

    static boolean testEq(Object obj1, Object obj2) {
        if (obj1 == obj2) {
            return true;
        }
        if (obj1 == null || obj2 == null) {
            return false;
        }
        return obj1.toString().equals(obj2.toString());
    }

    static boolean testValue(Object testObj) {
        boolean val = false;
        if (testObj == null) {
            val = false;
        } else if (testObj instanceof Boolean) {
            val = ((Boolean) testObj);
        } else if (testObj instanceof Integer) {
            val = ((Integer) testObj) != 0;
        } else if (testObj instanceof Double) {
            val = Math.abs((Double) testObj) > Double.MIN_NORMAL;
        } else if (testObj instanceof undefined) {
            val = false;
        } else {
            //is an object
            val = true;
        }
        return val;
    }

    static void addEax(VirtualMachine vm, int num, boolean rewrite) {
        VmMemRef addr = (VmMemRef) vm.eax.read();