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