protected override IMethodNode CreateMethodEntrypointNode(MethodDesc method) { if (method.HasCustomAttribute("System.Runtime", "RuntimeImportAttribute")) { return(new RuntimeImportMethodNode(method)); } if (CompilationModuleGroup.ContainsMethod(method)) { return(NonExternMethodSymbol(method, false)); } return(new ExternMethodSymbolNode(this, method)); }
protected override IMethodNode CreateUnboxingStubNode(MethodDesc method) { if (method.IsCanonicalMethod(CanonicalFormKind.Any) && !method.HasInstantiation) { // Unboxing stubs to canonical instance methods need a special unboxing instantiating stub that unboxes // 'this' and also provides an instantiation argument (we do a calling convention conversion). // The unboxing instantiating stub is emitted by UTC. if (CompilationModuleGroup.ContainsMethod(method)) { return(NonExternMethodSymbol(method, true)); } return(new ExternMethodSymbolNode(this, method, true)); } else { // Otherwise we just unbox 'this' and don't touch anything else. return(new UnboxingStubNode(method)); } }