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); }
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); }
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)); }