示例#1
0
        public ExternalProcedure ResolveProcedure(string moduleName, string importName, IPlatform platform)
        {
            var ep = LookupProcedure(moduleName, importName, platform);

            if (ep != null)
            {
                return(ep);
            }
            // Can we guess at the signature?
            var sProc = platform.SignatureFromName(importName);

            if (sProc != null)
            {
                var loader = program.CreateTypeLibraryDeserializer();
                ep = loader.LoadExternalProcedure(sProc);
                if (!ep.Signature.ParametersValid)
                {
                    // We found a imported procedure but couldn't find its signature.
                    // Perhaps it has been mangled, and we can use the stripped name.
                    var epNew = LookupProcedure(null, ep.Name, platform);
                    if (epNew != null)
                    {
                        ep = epNew;
                    }
                }
                return(ep);
            }

            return(null);
        }
示例#2
0
 public override ExternalProcedure ResolveImportedProcedure(
     IImportResolver resolver, 
     IPlatform platform, 
     AddressContext ctx)
 {
     var ep = resolver.ResolveProcedure(ModuleName, ImportName, platform);
     if (ep != null)
         return ep;
     // Can we guess at the signature?
     ep = platform.SignatureFromName(ImportName);
     if (ep != null)
         return ep;
     
     ctx.Warn("Unable to resolve imported reference {0}.", this);
     return new ExternalProcedure(this.ToString(), null);
 }
示例#3
0
        public override ExternalProcedure ResolveImportedProcedure(
            IImportResolver resolver,
            IPlatform platform,
            AddressContext ctx)
        {
            var ep = resolver.ResolveProcedure(ModuleName, ImportName, platform);

            if (ep != null)
            {
                return(ep);
            }
            // Can we guess at the signature?
            ep = platform.SignatureFromName(ImportName);
            if (ep != null)
            {
                return(ep);
            }

            ctx.Warn("Unable to resolve imported reference {0}.", this);
            return(new ExternalProcedure(this.ToString(), null));
        }