public ExternalProcedure ResolveProcedure(string moduleName, int ordinal, IPlatform platform) { foreach (var program in project.Programs) { if (!program.EnvironmentMetadata.Modules.TryGetValue(moduleName, out var mod)) { continue; } if (mod.ServicesByOrdinal.TryGetValue(ordinal, out var svc)) { EnsureSignature(program, svc); if (svc.Signature != null) { return(new ExternalProcedure(svc.Name, svc.Signature, svc.Characteristics)); } else { // We have a name for the external procedure, but can't find a proper signature for it. // So we make a "dumb" one. It's better than nothing. eventListener.Warn( new NullCodeLocation(moduleName), "Unable to resolve signature for {0}", svc.Name); return(new ExternalProcedure(svc.Name, new FunctionType())); } } } return(platform.LookupProcedureByOrdinal(moduleName, ordinal)); }
public ExternalProcedure ResolveProcedure(string moduleName, int ordinal, IPlatform platform) { foreach (var program in project.Programs) { if (!program.EnvironmentMetadata.Modules.TryGetValue(moduleName, out var mod)) { continue; } if (mod.ServicesByOrdinal.TryGetValue(ordinal, out var svc)) { EnsureSignature(program, svc); return(new ExternalProcedure(svc.Name, svc.Signature, svc.Characteristics)); } } return(platform.LookupProcedureByOrdinal(moduleName, ordinal)); }
public ExternalProcedure ResolveProcedure(string moduleName, int ordinal, IPlatform platform) { foreach (var program in project.Programs) { ModuleDescriptor mod; if (!program.Metadata.Modules.TryGetValue(moduleName, out mod)) continue; SystemService svc; if (mod.ServicesByVector.TryGetValue(ordinal, out svc)) { return new ExternalProcedure(svc.Name, svc.Signature, svc.Characteristics); } } return platform.LookupProcedureByOrdinal(moduleName, ordinal); }