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