Пример #1
0
        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));
        }
Пример #2
0
        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));
            }
        }