示例#1
0
        public ExpressionScriptProvided Resolve(
            string name,
            int numParameters)
        {
            var key = new NameAndParamNum(name, numParameters);

            // try self-originated protected types first
            ExpressionScriptProvided localExpr = _locals.Scripts.Get(key);
            if (localExpr != null) {
                return localExpr;
            }

            try {
                var expression = _path.GetAnyModuleExpectSingle(
                    new NameAndParamNum(name, numParameters),
                    _moduleUses);
                if (expression != null) {
                    if (!_isFireAndForget &&
                        !NameAccessModifierExtensions.Visible(
                        expression.First.Visibility,
                        expression.First.ModuleName,
                        _moduleName)) {
                        return null;
                    }

                    _moduleDependencies.AddPathScript(key, expression.Second);
                    return expression.First;
                }
            }
            catch (PathException e) {
                throw CompileTimeResolverUtil.MakePathAmbiguous(PathRegistryObjectType.SCRIPT, name, e);
            }

            return null;
        }
示例#2
0
        public void NewScript(ExpressionScriptProvided detail)
        {
            if (!detail.Visibility.IsModuleProvidedAccessModifier()) {
                throw new IllegalStateException("Invalid visibility for contexts");
            }

            var key = new NameAndParamNum(detail.Name, detail.ParameterNames.Length);
            var existing = Scripts.Get(key);
            if (existing != null) {
                throw new IllegalStateException("Duplicate script has been encountered for name '" + key + "'");
            }

            Scripts.Put(key, detail);
        }
示例#3
0
 public void AddPathScript(
     NameAndParamNum key,
     string moduleName)
 {
     pathScripts.Add(new NameParamNumAndModule(key.Name, key.ParamNum, moduleName));
 }