private void EmitUserDefinedLiftedOperator(EmitContext ec) { LocalBuilder local = ec.EmitStored(this.operand); ec.EmitNullableGetValue(local); ec.EmitCall(this.method); }
void EmitUserDefinedLiftedOperator(EmitContext ec) { var local = ec.EmitStored(operand); ec.EmitNullableGetValue(local); ec.EmitCall(method); }
private void EmitCoalesce(EmitContext ec) { ILGenerator ig = ec.ig; Label label = ig.DefineLabel(); Label label2 = ig.DefineLabel(); LocalBuilder localBuilder = ec.EmitStored(left); bool flag = localBuilder.LocalType.IsNullable(); if (flag) { ec.EmitNullableHasValue(localBuilder); } else { ec.EmitLoad(localBuilder); } ig.Emit(OpCodes.Brfalse, label2); if (flag && !base.Type.IsNullable()) { ec.EmitNullableGetValue(localBuilder); } else { ec.EmitLoad(localBuilder); } ig.Emit(OpCodes.Br, label); ig.MarkLabel(label2); ec.Emit(right); ig.MarkLabel(label); }
void EmitCoalesce(EmitContext ec) { var ig = ec.ig; var done = ig.DefineLabel(); var load_right = ig.DefineLabel(); var left = ec.EmitStored(this.left); var left_is_nullable = left.LocalType.IsNullable(); if (left_is_nullable) { ec.EmitNullableHasValue(left); } else { ec.EmitLoad(left); } ig.Emit(OpCodes.Brfalse, load_right); if (left_is_nullable && !Type.IsNullable()) { ec.EmitNullableGetValue(left); } else { ec.EmitLoad(left); } ig.Emit(OpCodes.Br, done); ig.MarkLabel(load_right); ec.Emit(this.right); ig.MarkLabel(done); }