示例#1
0
        private RequestDirective BuildDirective(Node dirNode, DirectiveLocation atLocation, RequestObjectBase parent)
        {
            var dirName = dirNode.ChildNodes[0].ChildNodes[1].GetText(); // child0 is dirName-> @+name

            _path.Push(dirName);
            try {
                var dirDef = LookupDirective(dirName, dirNode);
                if (dirDef == null)
                {
                    return(null); // error is already logged
                }
                if (!dirDef.Registration.Locations.IsSet(atLocation))
                {
                    AddError($"Directive @{dirName} may not be placed at this location ({atLocation}). Valid locations: [{dirDef.Registration.Locations}].", dirNode);
                    return(null);
                }
                var dir = new RequestDirective()
                {
                    Def = dirDef, Location = atLocation, Name = dirName, SourceLocation = dirNode.GetLocation(), Parent = parent
                };
                var argListNode = dirNode.FindChild(TermNames.ArgListOpt);
                dir.Args = BuildArguments(argListNode.ChildNodes, dir);
                return(dir);
            } finally {
                _path.Pop();
            }
        }
示例#2
0
        public object[] StaticArgValues; // dirs that do not use variables, or model directives

        public RuntimeDirective(RequestDirective reqDir, int index)
        {
            Source          = reqDir;
            Index           = index;
            Owner           = reqDir.Parent;
            Def             = reqDir.Def;
            Location        = reqDir.Location;
            MappedArgs      = reqDir.MappedArgs;
            StaticArgValues = reqDir.MappedArgs.TryEvaluateStaticArgValues();
        }