public override void Execute(Context vmContext, HxInstruction instruction) { var str = (string)instruction.Operand.GetObject(); var prefix = Helper.ReadPrefix(str); var mdtoken = int.Parse(str.Substring(1)); switch (prefix) { // method case 0: vmContext.Stack.Push(typeof(Ldtoken).Module.ResolveMethod(mdtoken)); break; // member ref case 1: vmContext.Stack.Push(((MethodBase)typeof(Ldtoken).Module.ResolveMember(mdtoken)).MethodHandle); break; // ifield case 2: vmContext.Stack.Push(typeof(Ldtoken).Module.ResolveType(mdtoken)); break; // itypedeforref case 3: vmContext.Stack.Push(typeof(Ldtoken).Module.ResolveField(mdtoken).FieldHandle); break; } vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var x = vmContext.Stack.Pop(); var y = vmContext.Stack.Pop(); if (x.IsInt16()) { vmContext.Stack.Push((short)x.GetObject() << (short)y.GetObject()); } else if (x.IsInt32()) { vmContext.Stack.Push((int)x.GetObject() << (int)y.GetObject()); } else if (x.IsUInt16()) { vmContext.Stack.Push((ushort)x.GetObject() << (ushort)y.GetObject()); } else if (x.IsByte()) { vmContext.Stack.Push((byte)x.GetObject() << (byte)y.GetObject()); } else if (x.IsSByte()) { vmContext.Stack.Push((sbyte)x.GetObject() << (sbyte)y.GetObject()); } vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var arr = (Array)vmContext.Stack.Pop().GetObject(); vmContext.Stack.Push(arr.Length); vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var y = vmContext.Stack.Pop().GetObject(); var x = vmContext.Stack.Pop().GetObject(); vmContext.Stack.Push(y.Equals(x)); vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var y = vmContext.Stack.Pop(); var x = vmContext.Stack.Pop(); if (!x.IsNumeric() || !y.IsNumeric()) ///|| !x.Same(y) { throw new Exception("Uhm, something went wrong while emulating Clt"); } if (x.IsInt16()) { vmContext.Stack.Push((short)x.GetObject() < (short)y.GetObject()); } else if (x.IsInt32()) { vmContext.Stack.Push((int)x.GetObject() < (int)y.GetObject()); } else if (x.IsInt64()) { vmContext.Stack.Push((long)x.GetObject() < (long)y.GetObject()); } else if (x.IsUInt16()) { vmContext.Stack.Push((ushort)x.GetObject() < (ushort)y.GetObject()); } else if (x.IsUInt32()) { vmContext.Stack.Push((uint)x.GetObject() < (uint)y.GetObject()); } else if (x.IsUInt64()) { vmContext.Stack.Push((ulong)x.GetObject() < (ulong)y.GetObject()); } else if (x.IsDouble()) { vmContext.Stack.Push((double)x.GetObject() < (double)y.GetObject()); } else if (x.IsByte()) { vmContext.Stack.Push((byte)x.GetObject() < (byte)y.GetObject()); } else if (x.IsDecimal()) { vmContext.Stack.Push((decimal)x.GetObject() < (decimal)y.GetObject()); } else if (x.IsSByte()) { vmContext.Stack.Push((sbyte)x.GetObject() < (sbyte)y.GetObject()); } else if (x.IsFloat()) { vmContext.Stack.Push((float)x.GetObject() < (float)y.GetObject()); } vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { // dynamics may work too, possibly even better var y = vmContext.Stack.Pop(); var x = vmContext.Stack.Pop(); if (x.IsInt16()) { vmContext.Stack.Push((short)x.GetObject() + (short)y.GetObject()); } else if (x.IsInt32()) { vmContext.Stack.Push((int)x.GetObject() + (int)y.GetObject()); } else if (x.IsInt64()) { vmContext.Stack.Push((long)x.GetObject() + (long)y.GetObject()); } else if (x.IsUInt16()) { vmContext.Stack.Push((ushort)x.GetObject() + (ushort)y.GetObject()); } else if (x.IsUInt32()) { vmContext.Stack.Push((uint)x.GetObject() + (uint)y.GetObject()); } else if (x.IsUInt64()) { vmContext.Stack.Push((ulong)x.GetObject() + (ulong)y.GetObject()); } else if (x.IsDouble()) { vmContext.Stack.Push((double)x.GetObject() + (double)y.GetObject()); } else if (x.IsByte()) { vmContext.Stack.Push((byte)x.GetObject() + (byte)y.GetObject()); } else if (x.IsDecimal()) { vmContext.Stack.Push((decimal)x.GetObject() + (decimal)y.GetObject()); } else if (x.IsSByte()) { vmContext.Stack.Push((sbyte)x.GetObject() + (sbyte)y.GetObject()); } else if (x.IsFloat()) { vmContext.Stack.Push((float)x.GetObject() + (float)y.GetObject()); } vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var y = vmContext.Stack.Pop(); var x = vmContext.Stack.Pop(); if (x.IsInt16()) { vmContext.Stack.Push((short)x.GetObject() % (short)y.GetObject()); } else if (x.IsInt32()) { vmContext.Stack.Push((int)x.GetObject() % (int)y.GetObject()); } else if (x.IsInt64()) { vmContext.Stack.Push((long)x.GetObject() % (long)y.GetObject()); } else if (x.IsUInt16()) { vmContext.Stack.Push((ushort)x.GetObject() % (ushort)y.GetObject()); } else if (x.IsUInt32()) { vmContext.Stack.Push((uint)x.GetObject() % (uint)y.GetObject()); } else if (x.IsUInt64()) { vmContext.Stack.Push((ulong)x.GetObject() % (ulong)y.GetObject()); } else if (x.IsDouble()) { vmContext.Stack.Push((double)x.GetObject() % (double)y.GetObject()); } else if (x.IsByte()) { vmContext.Stack.Push((byte)x.GetObject() % (byte)y.GetObject()); } else if (x.IsDecimal()) { vmContext.Stack.Push((decimal)x.GetObject() % (decimal)y.GetObject()); } else if (x.IsSByte()) { vmContext.Stack.Push((sbyte)x.GetObject() % (sbyte)y.GetObject()); } else if (x.IsFloat()) { vmContext.Stack.Push((float)x.GetObject() % (float)y.GetObject()); } vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var str = (string)instruction.Operand.GetObject(); var id = Helper.ReadPrefix(str); var mdtoken = int.Parse(str.Substring(1)); var fi = ForceResolveField(mdtoken); var v = fi.GetValue(id == 0 ? vmContext.Stack.Pop().GetObject() : null); vmContext.Stack.Push(v); vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var m = ForceResolveConstructor((int)instruction.Operand.GetObject()); var pm = Helper.GetMethodParameters(vmContext, m.GetParameters()); var inst = m.Invoke(pm); if (inst != null) { vmContext.Stack.Push(inst); } vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var str = (string)instruction.Operand.GetObject(); var prefix = Helper.ReadPrefix(str); var idx = int.Parse(str.Substring(1)); if (prefix == 0) { vmContext.Stack.Push(vmContext.Locals.Get(idx)); } else { var item = vmContext.Stack.Pop(); vmContext.Locals.Update(idx, item); } vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var x = vmContext.Stack.Pop(); if (x.IsInt16()) { vmContext.Stack.Push(~(short)x.GetObject()); } else if (x.IsInt32()) { vmContext.Stack.Push(~(int)x.GetObject()); } else if (x.IsInt64()) { vmContext.Stack.Push(~(long)x.GetObject()); } else if (x.IsUInt16()) { vmContext.Stack.Push(~(ushort)x.GetObject()); } else if (x.IsUInt32()) { vmContext.Stack.Push(~(uint)x.GetObject()); } else if (x.IsUInt64()) { vmContext.Stack.Push(~(ulong)x.GetObject()); } else if (x.IsByte()) { vmContext.Stack.Push(~(byte)x.GetObject()); } else if (x.IsSByte()) { vmContext.Stack.Push(~(sbyte)x.GetObject()); } vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var prefix = (int)instruction.Operand.GetObject(); if (prefix == 0) { var idx = (int)vmContext.Stack.Pop().GetObject(); var arr = (Array)vmContext.Stack.Pop().GetObject(); vmContext.Stack.Push(arr.GetValue(idx)); } else if (prefix == 1) { var obj = vmContext.Stack.Pop().GetObject(); var idx = (int)vmContext.Stack.Pop().GetObject(); var arr = (Array)vmContext.Stack.Pop().GetObject(); arr.SetValue(obj, idx); } vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var id = (int)instruction.Operand.GetObject(); dynamic item = vmContext.Stack.Pop().GetObject(); // should work switch (id) { case 0: // convert to float Conv_R4 vmContext.Stack.Push(Convert.ToSingle(item)); break; case 1: // convert to double Conv_R8 vmContext.Stack.Push(Convert.ToDouble(item)); break; default: break; } vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var v = vmContext.Stack.Pop(); int x; if (v.IsBool()) { x = (bool)v.GetObject() ? 1 : 0; } else { x = (int)v.GetObject(); } if (x == 1) { vmContext.Index = (int)instruction.Operand.GetObject(); } else { vmContext.Index++; } }
public override void Execute(Context vmContext, HxInstruction instruction) { vmContext.Index = (int)instruction.Operand.GetObject(); }
public override void Execute(Context vmContext, HxInstruction instruction) { vmContext.Stack.Push(instruction.Operand); vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { // hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { vmContext.Stack.Push(vmContext.Stack.Count == 0 ? new Value(null) : vmContext.Stack.Pop().GetObject()); vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { var str = (string)instruction.Operand.GetObject(); var type = Helper.ReadPrefix(str); var prefix = Helper.ReadPrefix(str, 1); var mdtoken = int.Parse(str.Substring(2)); switch (prefix) { // constructor case 0: { var m = ForceResolveConstructor(mdtoken); var pm = Helper.GetMethodParameters(vmContext, m.GetParameters()); var inst = m.Invoke(pm); if (inst != null) { vmContext.Stack.Push(inst); } break; } // method case 1: { var m = ForceResolveMethod(mdtoken); var pm = Helper.GetMethodParameters(vmContext, m.GetParameters()); object target = null; if (!m.IsStatic) { target = vmContext.Stack.Pop().GetObject(); } var ret = m.Invoke(target, pm); if (ret != null) { vmContext.Stack.Push(ret); } break; } // member ref case 2: { var m = ForceResolveMember(mdtoken); var pm = Helper.GetMethodParameters(vmContext, m.GetParameters()); object target = null; if (!m.IsStatic) { target = vmContext.Stack.Pop().GetObject(); } var ret = m.Invoke(target, pm); if (ret != null) { vmContext.Stack.Push(ret); } break; } } vmContext.Index++; }
public override void Execute(Context vmContext, HxInstruction instruction) { // do nothing really vmContext.Index++; }
public abstract void Execute(Context vmContext, HxInstruction instruction);
public override void Execute(Context vmContext, HxInstruction instruction) { vmContext.Stack.Pop(); vmContext.Index++; }