internal override void Emit(EmitContext ec) { var ig = ec.ig; var false_target = ig.DefineLabel(); var end_target = ig.DefineLabel(); test.Emit(ec); ig.Emit(OpCodes.Brfalse, false_target); if_true.Emit(ec); ig.Emit(OpCodes.Br, end_target); ig.MarkLabel(false_target); if_false.Emit(ec); ig.MarkLabel(end_target); }
internal void EmitBody(EmitContext ec) { body.Emit(ec); EmitPopIfNeeded(ec); ec.ig.Emit(OpCodes.Ret); }
void EmitNullEquality (EmitContext ec, Expression e) { var ig = ec.ig; if (IsLiftedToNull) { e.Emit (ec); if (e.Type != typeof (void)) ig.Emit (OpCodes.Pop); ec.EmitNullableNew (typeof (bool?)); return; } var se = ec.EmitStored (e); ec.EmitNullableHasValue (se); if (NodeType == ExpressionType.Equal) { ig.Emit (OpCodes.Ldc_I4_0); ig.Emit (OpCodes.Ceq); } }
public void Emit(Expression expression) { expression.Emit(this); }
void EmitFieldAssignment(EmitContext ec, FieldInfo field, LocalBuilder local) { ec.EmitLoadSubject(local); expression.Emit(ec); ec.ig.Emit(OpCodes.Stfld, field); }
void EmitArrayAccess(EmitContext ec) { left.Emit(ec); right.Emit(ec); ec.ig.Emit(OpCodes.Ldelem, this.Type); }
public void EmitLoadEnum(Expression expression) { expression.Emit(this); ig.Emit(OpCodes.Box, expression.Type); }
void EmitArrayLength(EmitContext ec) { operand.Emit(ec); ec.ig.Emit(OpCodes.Ldlen); }