protected internal override void VisitStoreIndirect(StoreIndirect node, object data) { StackTypes stack = data as StackTypes; Verifier.ProcessStInd(node.Type, stack); //looks like ProcessStInd method functions correctly in case of STOBJ AddTask(node.Next,stack); }
protected override void VisitStoreIndirect(StoreIndirect downNode, object o) { PointerValue ptr = this.state.Stack.Pop() as PointerValue; this.storeVar(downNode, ptr, o); }
protected internal virtual void VisitStoreIndirect(StoreIndirect node, object data) { throw new NodeNotSupportedException(node); }
protected internal override void VisitStoreIndirect(StoreIndirect node, object data) { if(node.Type.Equals( typeof(IntPtr) )) generator.Emit(OpCodes.Stind_I); else if(node.Type.Equals( typeof(sbyte) )) generator.Emit(OpCodes.Stind_I1); else if(node.Type.Equals( typeof(short) )) generator.Emit(OpCodes.Stind_I2); else if(node.Type.Equals( typeof(int) )) generator.Emit(OpCodes.Stind_I4); else if(node.Type.Equals( typeof(long) )) generator.Emit(OpCodes.Stind_I8); else if(node.Type.Equals( typeof(UIntPtr) )) generator.Emit(OpCodes.Stind_I); else if(node.Type.Equals( typeof(byte) )) generator.Emit(OpCodes.Stind_I1); else if(node.Type.Equals( typeof(ushort) )) generator.Emit(OpCodes.Stind_I2); else if(node.Type.Equals( typeof(uint) )) generator.Emit(OpCodes.Stind_I4); else if(node.Type.Equals( typeof(ulong) )) generator.Emit(OpCodes.Stind_I8); else if(node.Type.Equals( typeof(float) )) generator.Emit(OpCodes.Stind_R4); else if(node.Type.Equals( typeof(double) )) generator.Emit(OpCodes.Stind_R8); else if(node.Type.IsValueType) generator.Emit(OpCodes.Stobj, node.Type); else generator.Emit(OpCodes.Stind_Ref); AddTask(node.Next,null); }