/// <summary>TCRFUN_DECLARATION_NO_DUPLICATE_NAME</summary> /// <param name="node">LINKAGE SECTION node</param> /// <param name="profile">Parameters for original function</param> private void CheckNoLinkageItemIsAParameter(LinkageSection node, ParametersProfile profile) { if (node == null) { return; // no LINKAGE SECTION } var linkage = new List <DataDefinition>(); AddEntries(linkage, node); foreach (var description in linkage) { var used = Validate(profile.ReturningParameter, description.Name); if (used != null) { AddErrorAlreadyParameter(description, description.QualifiedName); continue; } used = GetParameter(profile.InputParameters, description.Name); if (used != null) { AddErrorAlreadyParameter(description, description.QualifiedName); continue; } used = GetParameter(profile.OutputParameters, description.Name); if (used != null) { AddErrorAlreadyParameter(description, description.QualifiedName); continue; } used = GetParameter(profile.InoutParameters, description.Name); if (used != null) { AddErrorAlreadyParameter(description, description.QualifiedName); continue; } } }
private static void CheckParameters([NotNull] ParametersProfile profile, Node node) { var parameters = profile.Parameters; foreach (var parameter in profile.InputParameters) { CheckParameter(parameter, node); } foreach (var parameter in profile.InoutParameters) { CheckParameter(parameter, node); } foreach (var parameter in profile.OutputParameters) { CheckParameter(parameter, node); } if (profile.ReturningParameter != null) { CheckParameter(profile.ReturningParameter, node); parameters.Add(profile.ReturningParameter); } foreach ( var duplicatedParameter in parameters.GroupBy(p => p.Name).Where(g => g.Skip(1).Any()).SelectMany(g => g)) //Group on parameter.Name //where group contains more than one item //reexpand to get all duplicated parameters { DiagnosticUtils.AddError(node, string.Format("Parameter with name '{0}' declared multiple times", duplicatedParameter.Name), duplicatedParameter); } }
public ParametersProfileNode(ParametersProfile profile) : base(profile) { InputParameters = new List <ParameterDescription>(); InoutParameters = new List <ParameterDescription>(); OutputParameters = new List <ParameterDescription>(); ReturningParameter = null; }
/// <summary>Creates functions or procedure</summary> public Function(QualifiedName name, IList <ParameterDescriptionEntry> inputs, IList <ParameterDescriptionEntry> outputs, IList <ParameterDescriptionEntry> inouts, ParameterDescriptionEntry returning, AccessModifier visibility = AccessModifier.Private) { QualifiedName = name; Profile = new ParametersProfile(); Profile.InputParameters = inputs ?? new List <ParameterDescriptionEntry>(); Profile.OutputParameters = outputs ?? new List <ParameterDescriptionEntry>(); Profile.InoutParameters = inouts ?? new List <ParameterDescriptionEntry>(); Profile.ReturningParameter = returning; Visibility = visibility; }
private void CheckParameters([NotNull] ParametersProfile profile, CodeElement ce, ParserRuleContext context, Node node) { foreach (var parameter in profile.InputParameters) { CheckParameter(parameter, ce, context, node); } foreach (var parameter in profile.InoutParameters) { CheckParameter(parameter, ce, context, node); } foreach (var parameter in profile.OutputParameters) { CheckParameter(parameter, ce, context, node); } if (profile.ReturningParameter != null) { CheckParameter(profile.ReturningParameter, ce, context, node); } }
private void CreateOrUpdateLinkageSection(Compiler.Nodes.FunctionDeclaration node, ParametersProfile profile) { var linkage = node.Get<Compiler.Nodes.LinkageSection>("linkage"); var parameters = profile.InputParameters.Count + profile.InoutParameters.Count + profile.OutputParameters.Count + (profile.ReturningParameter != null? 1:0); IReadOnlyList<DataDefinition> data = new List<DataDefinition>().AsReadOnly(); if (linkage == null && parameters > 0) { var datadiv = node.Get<Compiler.Nodes.DataDivision>("data-division"); if (datadiv == null) { datadiv = new DataDivision(); children.Add(datadiv); } linkage = new LinkageSection(); datadiv.Add(linkage); } if (linkage != null) data = linkage.Children(); // TCRFUN_CODEGEN_PARAMETERS_ORDER var generated = new List<string>(); foreach(var parameter in profile.InputParameters) { if (!generated.Contains(parameter.Name) && !Contains(data, parameter.Name)) { linkage.Add(CreateParameterEntry(parameter, node.SymbolTable)); generated.Add(parameter.Name); } } foreach(var parameter in profile.InoutParameters) { if (!generated.Contains(parameter.Name) && !Contains(data, parameter.Name)) { linkage.Add(CreateParameterEntry(parameter, node.SymbolTable)); generated.Add(parameter.Name); } } foreach(var parameter in profile.OutputParameters) { if (!generated.Contains(parameter.Name) && !Contains(data, parameter.Name)) { linkage.Add(CreateParameterEntry(parameter, node.SymbolTable)); generated.Add(parameter.Name); } } if (profile.ReturningParameter != null) { if (!generated.Contains(profile.ReturningParameter.Name) && !Contains(data, profile.ReturningParameter.Name)) { linkage.Add(CreateParameterEntry(profile.ReturningParameter, node.SymbolTable)); generated.Add(profile.ReturningParameter.Name); } } }
public static ParametersProfile GetParametersProfile(this HttpContext context) { var profile = new ParametersProfile(); profile.CurrentContext = context; if (!profile.IsCurrentContextEmpty) { profile.Request = context.Request; profile.Session = context.Session; if (!profile.IsRequestEmpty) { profile.Form = context.Request.Form; profile.Params = context.Request.Params; profile.RequestCookies = context.Request.Cookies; } profile.Response = context.Response; if (!profile.IsResponseEmpty) { profile.ResponseCookies = context.Response.Cookies; } } return(profile); }
private void CheckParameters(ParametersProfile profile, CodeElement ce, ParserRuleContext context) { foreach(var parameter in profile.InputParameters) CheckParameter(parameter, ce, context); foreach(var parameter in profile.InoutParameters) CheckParameter(parameter, ce, context); foreach(var parameter in profile.OutputParameters) CheckParameter(parameter, ce, context); if (profile.ReturningParameter != null) CheckParameter(profile.ReturningParameter, ce, context); }
/// <summary>TCRFUN_DECLARATION_NO_DUPLICATE_NAME</summary> /// <param name="node">LINKAGE SECTION node</param> /// <param name="profile">Parameters for original function</param> private void CheckNoLinkageItemIsAParameter(LinkageSection node, ParametersProfile profile) { if (node == null) return; // no LINKAGE SECTION var linkage = new List<DataDefinition>(); AddEntries(linkage, node); foreach(var description in linkage) { var used = Validate(profile.ReturningParameter, description.Name); if (used != null) { AddErrorAlreadyParameter(description, description.QualifiedName); continue; } used = GetParameter(profile.InputParameters, description.Name); if (used != null) { AddErrorAlreadyParameter(description, description.QualifiedName); continue; } used = GetParameter(profile.OutputParameters, description.Name); if (used != null) { AddErrorAlreadyParameter(description, description.QualifiedName); continue; } used = GetParameter(profile.InoutParameters, description.Name); if (used != null) { AddErrorAlreadyParameter(description, description.QualifiedName); continue; } } }
private void CreateOrUpdateLinkageSection(Compiler.Nodes.FunctionDeclaration node, ParametersProfile profile) { var linkage = node.Get <Compiler.Nodes.LinkageSection>("linkage"); var parameters = profile.InputParameters.Count + profile.InoutParameters.Count + profile.OutputParameters.Count + (profile.ReturningParameter != null? 1:0); IReadOnlyList <DataDefinition> data = new List <DataDefinition>().AsReadOnly(); if (linkage == null && parameters > 0) { var datadiv = node.Get <Compiler.Nodes.DataDivision>("data-division"); if (datadiv == null) { datadiv = new DataDivision(); children.Add(datadiv); } linkage = new LinkageSection(); datadiv.Add(linkage); } if (linkage != null) { data = linkage.Children().ToList(); } // TCRFUN_CODEGEN_PARAMETERS_ORDER var generated = new List <string>(); foreach (var parameter in profile.InputParameters) { if (!generated.Contains(parameter.Name) && !Contains(data, parameter.Name)) { linkage.Add(CreateParameterEntry(parameter, node.SymbolTable)); generated.Add(parameter.Name); } } foreach (var parameter in profile.InoutParameters) { if (!generated.Contains(parameter.Name) && !Contains(data, parameter.Name)) { linkage.Add(CreateParameterEntry(parameter, node.SymbolTable)); generated.Add(parameter.Name); } } foreach (var parameter in profile.OutputParameters) { if (!generated.Contains(parameter.Name) && !Contains(data, parameter.Name)) { linkage.Add(CreateParameterEntry(parameter, node.SymbolTable)); generated.Add(parameter.Name); } } if (profile.ReturningParameter != null) { if (!generated.Contains(profile.ReturningParameter.Name) && !Contains(data, profile.ReturningParameter.Name)) { linkage.Add(CreateParameterEntry(profile.ReturningParameter, node.SymbolTable)); generated.Add(profile.ReturningParameter.Name); } } }
private void DeclareProceduresParametersIntoLinkage(Compiler.Nodes.FunctionDeclaration node, Compiler.Nodes.LinkageSection linkage, ParametersProfile profile) { var data = linkage.Children(); // TCRFUN_CODEGEN_PARAMETERS_ORDER var generated = new List <string>(); foreach (var parameter in profile.InputParameters) { if (!generated.Contains(parameter.Name) && !Contains(data, parameter.Name)) { linkage.Add(CreateParameterEntry(parameter, node.SymbolTable)); generated.Add(parameter.Name); } } foreach (var parameter in profile.InoutParameters) { if (!generated.Contains(parameter.Name) && !Contains(data, parameter.Name)) { linkage.Add(CreateParameterEntry(parameter, node.SymbolTable)); generated.Add(parameter.Name); } } foreach (var parameter in profile.OutputParameters) { if (!generated.Contains(parameter.Name) && !Contains(data, parameter.Name)) { linkage.Add(CreateParameterEntry(parameter, node.SymbolTable)); generated.Add(parameter.Name); } } if (profile.ReturningParameter != null) { if (!generated.Contains(profile.ReturningParameter.Name) && !Contains(data, profile.ReturningParameter.Name)) { linkage.Add(CreateParameterEntry(profile.ReturningParameter, node.SymbolTable)); generated.Add(profile.ReturningParameter.Name); } } }