本文整理汇总了C#中Pchp.CodeAnalysis.CodeGen.CodeGenerator.EmitConvertToBool方法的典型用法代码示例。如果您正苦于以下问题:C# CodeGenerator.EmitConvertToBool方法的具体用法?C# CodeGenerator.EmitConvertToBool怎么用?C# CodeGenerator.EmitConvertToBool使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Pchp.CodeAnalysis.CodeGen.CodeGenerator
的用法示例。
在下文中一共展示了CodeGenerator.EmitConvertToBool方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Emit
internal override TypeSymbol Emit(CodeGenerator cg)
{
var result_type = cg.DeclaringCompilation.GetTypeFromTypeRef(cg.Routine, this.TypeRefMask);
if (this.IfTrue != null)
{
object trueLbl = new object();
object endLbl = new object();
// Cond ? True : False
cg.EmitConvert(this.Condition, cg.CoreTypes.Boolean); // i4
cg.Builder.EmitBranch(ILOpCode.Brtrue, trueLbl);
// false:
cg.EmitConvert(this.IfFalse, result_type);
cg.Builder.EmitBranch(ILOpCode.Br, endLbl);
cg.Builder.AdjustStack(-1); // workarounds assert in ILBuilder.MarkLabel, we're doing something wrong with ILBuilder
// trueLbl:
cg.Builder.MarkLabel(trueLbl);
cg.EmitConvert(this.IfTrue, result_type);
// endLbl:
cg.Builder.MarkLabel(endLbl);
}
else
{
object trueLbl = new object();
object endLbl = new object();
// Cond ?: False
// <stack> = <cond_var> = Cond
var cond_type = cg.Emit(this.Condition);
var cond_var = cg.GetTemporaryLocal(cond_type);
cg.Builder.EmitOpCode(ILOpCode.Dup);
cg.Builder.EmitLocalStore(cond_var);
cg.EmitConvertToBool(cond_type, this.Condition.TypeRefMask);
cg.Builder.EmitBranch(ILOpCode.Brtrue, trueLbl);
// false:
cg.EmitConvert(this.IfFalse, result_type);
cg.Builder.EmitBranch(ILOpCode.Br, endLbl);
cg.Builder.AdjustStack(-1); // workarounds assert in ILBuilder.MarkLabel, we're doing something wrong with ILBuilder
// trueLbl:
cg.Builder.MarkLabel(trueLbl);
cg.Builder.EmitLocalLoad(cond_var);
cg.EmitConvert(cond_type, this.Condition.TypeRefMask, result_type);
// endLbl:
cg.Builder.MarkLabel(endLbl);
//
cg.ReturnTemporaryLocal(cond_var);
}
//
if (Access.IsNone)
{
cg.EmitPop(result_type);
result_type = cg.CoreTypes.Void;
}
//
return result_type;
}