Ejemplo n.º 1
0
        /// <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;
                }
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
 public ParametersProfileNode(ParametersProfile profile) : base(profile)
 {
     InputParameters    = new List <ParameterDescription>();
     InoutParameters    = new List <ParameterDescription>();
     OutputParameters   = new List <ParameterDescription>();
     ReturningParameter = null;
 }
Ejemplo n.º 4
0
 /// <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;
 }
Ejemplo n.º 5
0
 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);
         }
     }
 }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
 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);
 }
Ejemplo n.º 9
0
 /// <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; }
     }
 }
Ejemplo n.º 10
0
        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);
                }
            }
        }
Ejemplo n.º 11
0
        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);
                }
            }
        }