本文整理汇总了C#中System.Reflection.Emit.CodeGenerator.EmitObjectArrayPopulation方法的典型用法代码示例。如果您正苦于以下问题:C# CodeGenerator.EmitObjectArrayPopulation方法的具体用法?C# CodeGenerator.EmitObjectArrayPopulation怎么用?C# CodeGenerator.EmitObjectArrayPopulation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Reflection.Emit.CodeGenerator
的用法示例。
在下文中一共展示了CodeGenerator.EmitObjectArrayPopulation方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Emit
internal override PhpTypeCode Emit(CodeGenerator codeGenerator)
{
Debug.Assert(access == AccessType.Read || access == AccessType.None);
Statistics.AST.AddNode("Class.Concat." + expressions.Count);
PhpTypeCode result;
//
// For low numbers call specialized methods
switch (expressions.Count)
{
case 1:
result = expressions[0].Emit(codeGenerator);
if (result != PhpTypeCode.PhpBytes && result != PhpTypeCode.String)
{
var lbl = codeGenerator.IL.DefineLabel();
codeGenerator.EmitBoxing(result);
codeGenerator.IL.Emit(OpCodes.Dup);
codeGenerator.IL.Emit(OpCodes.Isinst,typeof(PhpBytes));
// IF (STACK)
codeGenerator.IL.Emit(OpCodes.Brtrue_S,lbl);
if (true)
{
codeGenerator.IL.Emit(OpCodes.Call, Methods.Convert.ObjectToString);
}
// ELSE
codeGenerator.IL.MarkLabel(lbl, true);
//END IF
result = PhpTypeCode.Object;
}
break;
case 2:
result = EmitConcat(codeGenerator, expressions[0], expressions[1]);
break;
default:
codeGenerator.EmitObjectArrayPopulation(expressions);
codeGenerator.IL.Emit(OpCodes.Call, Methods.Operators.Concat.ObjectArray);
result = PhpTypeCode.Object; // string, PhpBytes
break;
}
switch (access)
{
case AccessType.Read:
// do nothing
break;
case AccessType.None:
// pop result from stack
codeGenerator.IL.Emit(OpCodes.Pop);
result = PhpTypeCode.Void;
break;
}
return result;
}