示例#1
0
        private ExternalProcedure LookupProcedure(string moduleName, string importName, IPlatform platform)
        {
            if (!string.IsNullOrEmpty(moduleName))
            {
                foreach (var program in project.Programs)
                {
                    if (program.EnvironmentMetadata.Modules.TryGetValue(moduleName, out var mod) &&
                        mod.ServicesByName.TryGetValue(importName, out var svc))
                    {
                        return(new ExternalProcedure(svc.Name, svc.Signature, svc.Characteristics));
                    }
                }
            }

            foreach (var program in project.Programs)
            {
                if (program.EnvironmentMetadata.Signatures.TryGetValue(importName, out var sig))
                {
                    var chr = platform.LookupCharacteristicsByName(importName);
                    if (chr != null)
                    {
                        return(new ExternalProcedure(importName, sig, chr));
                    }
                    else
                    {
                        return(new ExternalProcedure(importName, sig));
                    }
                }
            }

            return(platform.LookupProcedureByName(moduleName, importName));
        }
示例#2
0
        public ExternalProcedure ResolveProcedure(string moduleName, string importName, IPlatform platform)
        {
            if (!string.IsNullOrEmpty(moduleName))
            {
                foreach (var program in project.Programs)
                {
                    ModuleDescriptor mod;
                    if (!program.EnvironmentMetadata.Modules.TryGetValue(moduleName, out mod))
                        continue;

                    SystemService svc;
                    if (mod.ServicesByName.TryGetValue(importName, out svc))
                    {
                        return new ExternalProcedure(svc.Name, svc.Signature, svc.Characteristics);
                    }
                }
            }

            foreach (var program in project.Programs)
            {
                FunctionType sig;
                if (program.EnvironmentMetadata.Signatures.TryGetValue(importName, out sig))
                {
                    var chr = platform.LookupCharacteristicsByName(importName);
                    if (chr != null)
                        return new ExternalProcedure(importName, sig, chr);
                    else
                        return new ExternalProcedure(importName, sig);
                }
            }

            return platform.LookupProcedureByName(moduleName, importName);
        }
示例#3
0
        public ExternalProcedure ResolveProcedure(string moduleName, string importName, IPlatform platform)
        {
            if (!string.IsNullOrEmpty(moduleName))
            {
                foreach (var program in project.Programs)
                {
                    ModuleDescriptor mod;
                    if (!program.EnvironmentMetadata.Modules.TryGetValue(moduleName, out mod))
                    {
                        continue;
                    }

                    SystemService svc;
                    if (mod.ServicesByName.TryGetValue(importName, out svc))
                    {
                        return(new ExternalProcedure(svc.Name, svc.Signature, svc.Characteristics));
                    }
                }
            }

            foreach (var program in project.Programs)
            {
                FunctionType sig;
                if (program.EnvironmentMetadata.Signatures.TryGetValue(importName, out sig))
                {
                    var chr = platform.LookupCharacteristicsByName(importName);
                    if (chr != null)
                    {
                        return(new ExternalProcedure(importName, sig, chr));
                    }
                    else
                    {
                        return(new ExternalProcedure(importName, sig));
                    }
                }
            }

            return(platform.LookupProcedureByName(moduleName, importName));
        }