コード例 #1
0
        internal void EnsureParameters(FunctionAnalysisUnit unit)
        {
            var astParams = Function.FunctionDefinition.Parameters;

            for (int i = 0; i < astParams.Count; ++i)
            {
                VariableDef param;
                if (!TryGetVariable(astParams[i].Name, out param))
                {
                    var n = (Node)astParams[i].NameExpression ?? astParams[i];
                    if (astParams[i].Kind == ParameterKind.List)
                    {
                        param = _seqParameters = _seqParameters ?? new ListParameterVariableDef(unit, n);
                    }
                    else if (astParams[i].Kind == ParameterKind.Dictionary)
                    {
                        param = _dictParameters = _dictParameters ?? new DictParameterVariableDef(unit, n);
                    }
                    else
                    {
                        param = new LocatedVariableDef(unit.ProjectEntry, n);
                    }
                    AddVariable(astParams[i].Name, param);
                }
            }
        }
コード例 #2
0
ファイル: FunctionScope.cs プロジェクト: szh2bg/PTVS
        internal void EnsureParameters(FunctionAnalysisUnit unit, bool usePlaceholders)
        {
            var astParams = Function.FunctionDefinition.ParametersInternal;

            for (int i = 0; i < astParams.Length; ++i)
            {
                var p    = astParams[i];
                var name = p?.Name;
                if (string.IsNullOrEmpty(name))
                {
                    continue;
                }

                var node = (Node)astParams[i].NameExpression ?? astParams[i];

                if (astParams[i].Kind == ParameterKind.List)
                {
                    if (_seqParameters == null)
                    {
                        _seqParameters = new ListParameterVariableDef(unit, p, name);
                        AddParameter(unit, name, p, usePlaceholders ? null : _seqParameters);
                    }
                }
                else if (astParams[i].Kind == ParameterKind.Dictionary)
                {
                    if (_dictParameters == null)
                    {
                        _dictParameters = new DictParameterVariableDef(unit, p, name);
                        AddParameter(unit, name, p, usePlaceholders ? null : _dictParameters);
                    }
                }
                else if (!_parameters.ContainsKey(name))
                {
                    var v = _parameters[name] = new LocatedVariableDef(unit.ProjectEntry, new EncodedLocation(unit, p));
                    if (i == 0 &&
                        p.Kind == ParameterKind.Normal &&
                        !Function.IsStatic &&
                        Function.FunctionDefinition.Parent is ClassDefinition)
                    {
                        AddParameter(unit, name, p, v);
                    }
                    else
                    {
                        AddParameter(unit, name, p, usePlaceholders ? null : v);
                    }
                }
            }
        }
コード例 #3
0
ファイル: InterpreterScope.cs プロジェクト: scfunknown/PTVS
        public VariableDef AddLocatedVariable(string name, Node location, AnalysisUnit unit, ParameterKind paramKind = ParameterKind.Normal)
        {
            VariableDef value;

            if (!TryGetVariable(name, out value))
            {
                VariableDef def;
                switch (paramKind)
                {
                case ParameterKind.List: def = new ListParameterVariableDef(unit, location); break;

                case ParameterKind.Dictionary: def = new DictParameterVariableDef(unit, location); break;

                default: def = new LocatedVariableDef(unit.DeclaringModule.ProjectEntry, location); break;
                }
                return(AddVariable(name, def));
            }
            else if (!(value is LocatedVariableDef))
            {
                VariableDef def;
                switch (paramKind)
                {
                case ParameterKind.List: def = new ListParameterVariableDef(unit, location, value); break;

                case ParameterKind.Dictionary: def = new DictParameterVariableDef(unit, location, value); break;

                default: def = new LocatedVariableDef(unit.DeclaringModule.ProjectEntry, location, value); break;
                }
                return(AddVariable(name, def));
            }
            else
            {
                ((LocatedVariableDef)value).Node             = location;
                ((LocatedVariableDef)value).DeclaringVersion = unit.ProjectEntry.AnalysisVersion;
            }
            return(value);
        }
コード例 #4
0
ファイル: FunctionScope.cs プロジェクト: borota/JTVS
 internal void EnsureParameters(FunctionAnalysisUnit unit, FunctionScope scopeWithDefaultParameters = null)
 {
     var astParams = Function.FunctionDefinition.Parameters;
     for (int i = 0; i < astParams.Count; ++i) {
         VariableDef param, defParam;
         if (!Variables.TryGetValue(astParams[i].Name, out param)) {
             if (astParams[i].Kind == ParameterKind.List) {
                 param = _seqParameters = _seqParameters ?? new ListParameterVariableDef(unit, astParams[i]);
             } else if (astParams[i].Kind == ParameterKind.Dictionary) {
                 param = _dictParameters = _dictParameters ?? new DictParameterVariableDef(unit, astParams[i]);
             } else {
                 param = new LocatedVariableDef(unit.ProjectEntry, astParams[i]);
             }
             if (scopeWithDefaultParameters != null && scopeWithDefaultParameters != this &&
                 scopeWithDefaultParameters.Variables.TryGetValue(astParams[i].Name, out defParam)) {
                 defParam.CopyTo(param);
             }
             AddVariable(astParams[i].Name, param);
         }
     }
 }
コード例 #5
0
ファイル: InterpreterScope.cs プロジェクト: borota/JTVS
 public VariableDef AddLocatedVariable(string name, Node location, AnalysisUnit unit, ParameterKind paramKind = ParameterKind.Normal)
 {
     VariableDef value;
     if (!Variables.TryGetValue(name, out value)) {
         VariableDef def;
         switch (paramKind) {
             case ParameterKind.List: def = new ListParameterVariableDef(unit, location); break;
             case ParameterKind.Dictionary: def = new DictParameterVariableDef(unit, location); break;
             default: def = new LocatedVariableDef(unit.DeclaringModule.ProjectEntry, location); break;
         }
         return AddVariable(name, def);
     } else if (!(value is LocatedVariableDef)) {
         VariableDef def;
         switch (paramKind) {
             case ParameterKind.List: def = new ListParameterVariableDef(unit, location, value); break;
             case ParameterKind.Dictionary: def = new DictParameterVariableDef(unit, location, value); break;
             default: def = new LocatedVariableDef(unit.DeclaringModule.ProjectEntry, location, value); break;
         }
         return AddVariable(name, def);
     } else {
         ((LocatedVariableDef)value).Node = location;
         ((LocatedVariableDef)value).DeclaringVersion = unit.ProjectEntry.AnalysisVersion;
     }
     return value;
 }