Пример #1
0
    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);
        }
    }
Пример #2
0
    //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");
    }
Пример #3
0
    //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");
    }