void Header(YSParseNode HeaderNode) { List <string> Resource_Sources = new List <string> (); YSLinker Linker = new YSLinker(); foreach (YSParseNode HeaderItem in HeaderNode.Children) { if (HeaderItem.Type == NType.Import) { Resource_Sources.Add(HeaderItem.Children [0].Token.Content); } else { Error("Unrecognized header type"); } } foreach (YSLinker.Resource Resource in Linker.LoadResources(Resource_Sources.ToArray())) { ScopeFrame ResourceScope = new ScopeFrame(Resource.Name, ScopeFrame.FrameTypes.Structure); STATE.PushScope(ResourceScope); Yumascript.LPIProcess(ref STATE, Resource.Content); StructureFrame SFrame = STATE.PopScopeNoSave(); IDPacket ResourceFrameID = IDPacket.CreateIDPacket(STATE, Resource.Name, IdentityType.Structure); STATE.PutGeneric(ResourceFrameID, SFrame); } }
//identity void Structure(YSParseNode StructureNode) { Debug("Initializing Structure.."); Current = StructureNode; string StructureName = StructureNode.Children [0].Token.Content; ExpectNonExistance(StructureName); StructureFrame structure = new StructureFrame(); int CINDEX = 0; //find parent string ParentName = ""; if (StructureNode.Children.Count > 1) { if (StructureNode.Children [++CINDEX].Type == NType.Terminal) { ParentName = StructureNode.Children [++CINDEX].Token.Content; } //TODO register as child of parent IDPacket SID = IDPacket.CreateIDPacket(STATE, StructureName, IdentityType.Structure); STATE.PutGeneric(SID, structure); STATE.PushScope(new ScopeFrame(structure, StructureName, ScopeFrame.FrameTypes.Structure)); while (CINDEX < StructureNode.Children.Count) { //Debug ("CINDEX " + CINDEX); VarCreate(StructureNode.Children[CINDEX++]); } STATE.PopScopeNoSave(); IDPacket newStructure = IDPacket.CreateIDPacket(STATE, StructureName, IdentityType.Structure); STATE.PutGeneric(newStructure, structure); } Debug("Exit Structure"); }
//identity void Structure(YSParseNode StructureNode) { Debug ("Initializing Structure.."); Current = StructureNode; string StructureName = StructureNode.Children [0].Token.Content; ExpectNonExistance (StructureName); StructureFrame structure = new StructureFrame (); int CINDEX = 0; //find parent string ParentName = ""; if (StructureNode.Children.Count > 1) { if (StructureNode.Children [++CINDEX].Type == NType.Terminal) { ParentName = StructureNode.Children [++CINDEX].Token.Content; } //TODO register as child of parent IDPacket SID = IDPacket.CreateIDPacket (STATE, StructureName, IdentityType.Structure); STATE.PutGeneric (SID, structure); STATE.PushScope (new ScopeFrame(structure, StructureName, ScopeFrame.FrameTypes.Structure)); while (CINDEX < StructureNode.Children.Count) { //Debug ("CINDEX " + CINDEX); VarCreate (StructureNode.Children[CINDEX++]); } STATE.PopScopeNoSave (); IDPacket newStructure = IDPacket.CreateIDPacket (STATE, StructureName, IdentityType.Structure); STATE.PutGeneric (newStructure, structure); } Debug ("Exit Structure"); }