public virtual void Compile(CompilationContext context) { if (Value.ItemType != TargetType) { if (!Value.ItemType.IsValueType && !TargetType.IsValueType) { Value.Compile(context); context.Emit(OpCodes.Castclass, TargetType); return; } else if (TargetType.IsValueType && !Value.ItemType.IsValueType) { new AstUnbox() { RefObj = (IAstRef)Value, UnboxedType = TargetType }.Compile(context); return; } throw new EmitMapperException(); } else { Value.Compile(context); } }
public virtual void Compile(CompilationContext context) { if (_value.itemType != _targetType) { if (!_value.itemType.IsValueType && !_targetType.IsValueType) { _value.Compile(context); context.Emit(OpCodes.Castclass, _targetType); return; } else if (_targetType.IsValueType && !_value.itemType.IsValueType) { new AstUnbox() { refObj = (IAstRef)_value, unboxedType = _targetType }.Compile(context); return; } throw new EmitMapperException(); } else { _value.Compile(context); } }
public void Compile(CompilationContext context) { targetObject.Compile(context); value.Compile(context); CompilationHelper.PrepareValueOnStack(context, fieldInfo.FieldType, value.itemType); context.Emit(OpCodes.Stfld, fieldInfo); }
/// <summary> /// </summary> /// <param name="context">The context.</param> public void Compile(CompilationContext context) { var elseLabel = context.ILGenerator.DefineLabel(); var endIfLabel = context.ILGenerator.DefineLabel(); Condition.Compile(context); context.Emit(OpCodes.Brfalse, elseLabel); if (TrueBranch != null) { TrueBranch.Compile(context); } if (FalseBranch != null) { context.Emit(OpCodes.Br, endIfLabel); } context.ILGenerator.MarkLabel(elseLabel); if (FalseBranch != null) { FalseBranch.Compile(context); } context.ILGenerator.MarkLabel(endIfLabel); }
/// <summary> /// </summary> /// <param name="context">The context.</param> public void Compile(CompilationContext context) { Value.Compile(context); if (Value.ItemType.IsValueType) { context.Emit(OpCodes.Box, ItemType); } }
public void Compile(CompilationContext context) { value.Compile(context); if (value.itemType.IsValueType()) { context.Emit(OpCodes.Box, itemType); } }
public void Compile(CompilationContext context) { Label ifNotNullLabel = context.ilGenerator.DefineLabel(); _value.Compile(context); context.Emit(OpCodes.Dup); context.Emit(OpCodes.Brtrue_S, ifNotNullLabel); context.Emit(OpCodes.Pop); _ifNullValue.Compile(context); context.ilGenerator.MarkLabel(ifNotNullLabel); }
/// <summary> /// </summary> /// <param name="context">The context.</param> public void Compile(CompilationContext context) { if (!(_value is IAstRef) && !ReflectionHelper.IsNullable(_value.ItemType)) { context.Emit(OpCodes.Ldc_I4_1); } else if (ReflectionHelper.IsNullable(_value.ItemType)) { AstBuildHelper.ReadPropertyRV(new AstValueToAddr((IAstValue)_value), _value.ItemType.GetProperty("HasValue")) .Compile(context); context.Emit(OpCodes.Ldc_I4_0); context.Emit(OpCodes.Ceq); } else { _value.Compile(context); new AstConstantNull().Compile(context); context.Emit(OpCodes.Ceq); } }
public void Compile(CompilationContext context) { Label elseLabel = context.ilGenerator.DefineLabel(); Label endIfLabel = context.ilGenerator.DefineLabel(); condition.Compile(context); context.Emit(OpCodes.Brfalse, elseLabel); if (trueBranch != null) { trueBranch.Compile(context); } if (falseBranch != null) { context.Emit(OpCodes.Br, endIfLabel); } context.ilGenerator.MarkLabel(elseLabel); if (falseBranch != null) { falseBranch.Compile(context); } context.ilGenerator.MarkLabel(endIfLabel); }
public void Compile(CompilationContext context) { value.Compile(context); CompilationHelper.PrepareValueOnStack(context, argumentType, value.itemType); context.Emit(OpCodes.Starg_S, argumentIndex); }
public void Compile(CompilationContext context) { returnValue.Compile(context); CompilationHelper.PrepareValueOnStack(context, returnType, returnValue.itemType); context.Emit(OpCodes.Ret); }
public void Compile(CompilationContext context) { value.Compile(context); CompilationHelper.PrepareValueOnStack(context, localType, value.itemType); context.Emit(OpCodes.Stloc, localIndex); }
public void Compile(CompilationContext context) { context.Emit(OpCodes.Ldc_I4_0); _value.Compile(context); context.Emit(OpCodes.Ceq); }