本文整理汇总了C#中System.Reflection.Emit.CodeGenerator.LeaveMethodDeclaration方法的典型用法代码示例。如果您正苦于以下问题:C# CodeGenerator.LeaveMethodDeclaration方法的具体用法?C# CodeGenerator.LeaveMethodDeclaration怎么用?C# CodeGenerator.LeaveMethodDeclaration使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Reflection.Emit.CodeGenerator
的用法示例。
在下文中一共展示了CodeGenerator.LeaveMethodDeclaration方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Emit
internal override void Emit(CodeGenerator/*!*/ codeGenerator)
{
Statistics.AST.AddNode("Class.MethodDecl");
base.Emit(codeGenerator);
// emit attributes on return value, generic and regular parameters:
signature.Emit(codeGenerator);
typeSignature.Emit(codeGenerator);
if(method.IsDllImport) {
//TODO: Support for DllImport
Debug.Assert(false, "DllImport - not supported");
} else if(!method.IsAbstract)
{
// returns immediately if the method is abstract:
codeGenerator.EnterMethodDeclaration(method);
// emits the arg-full overload:
codeGenerator.EmitArgfullOverloadBody(method, body, entireDeclarationPosition, declarationBodyPosition);
// restores original code generator settings:
codeGenerator.LeaveMethodDeclaration();
}
else
{
// static abstract method is non-abstract in CLR => needs to have a body:
if (method.IsStatic)
{
ILEmitter il = new ILEmitter(method.ArgFullInfo);
il.Emit(OpCodes.Ldstr, method.DeclaringType.FullName);
il.Emit(OpCodes.Ldstr, method.FullName);
codeGenerator.EmitPhpException(il, Methods.PhpException.AbstractMethodCalled);
il.Emit(OpCodes.Ldnull);
il.Emit(OpCodes.Ret);
}
}
// emits stubs for overridden/implemented methods and export stubs:
codeGenerator.EmitOverrideAndExportStubs(method);
}