Ejemplo n.º 1
0
    IDPacket IdentityStructure(YSParseNode IStructureNode)
    {
        Debug("Resolving structure identity");
        Current = IStructureNode;
        string         StructureName = IStructureNode.Children [0].Token.Content;
        StructureFrame Frame;
        GenericFrame   GFrame;

        Debug("Attempting to find structure " + StructureName + " in " + STATE.current_scope.Name);
        IDPacket SID = IDPacket.CreateIDPacket(STATE, StructureName, IdentityType.Structure);

        STATE.TryGetGeneric(SID, out GFrame);
        Frame = (StructureFrame)GFrame;

        ScopeFrame SF = new ScopeFrame(STATE.current_scope, StructureName, ScopeFrame.FrameTypes.Structure);

        SF.MergeForScope(StructureName, Frame);
        STATE.PushScope(SF);

        IDPacket ReturnPacket = null;

        if (IStructureNode.Children.Count > 1)
        {
            //child Identity
            YSParseNode INode = IStructureNode.Children [1];
            if (INode.Type != NType.Identity &&
                INode.Type != NType.IdentityStructure &&
                INode.Type != NType.IdentityFunction)
            {
                Error("Structure child is not an Identity");
            }
            Debug("Attempting to find identity " + INode.Children [0].Token.Content + " in " + STATE.current_scope.Name);
            ReturnPacket = Identity(INode);
        }
        else
        {
            Error("Structure chain has no children");
        }

        STATE.PopScopeNoSave();

        if (ReturnPacket == null)
        {
            Error("Attempting to resolve a structure chain that ends improperly");
        }

        return(ReturnPacket);
    }
Ejemplo n.º 2
0
    IDPacket IdentityStructure(YSParseNode IStructureNode)
    {
        Debug ("Resolving structure identity");
        Current = IStructureNode;
        string StructureName = IStructureNode.Children [0].Token.Content;
        StructureFrame Frame;
        GenericFrame GFrame;
        Debug ("Attempting to find structure " + StructureName + " in " + STATE.current_scope.Name);
        IDPacket SID = IDPacket.CreateIDPacket (STATE, StructureName, IdentityType.Structure);
        STATE.TryGetGeneric (SID, out GFrame);
        Frame = (StructureFrame)GFrame;

        ScopeFrame SF = new ScopeFrame (STATE.current_scope, StructureName, ScopeFrame.FrameTypes.Structure);
        SF.MergeForScope (StructureName, Frame);
        STATE.PushScope (SF);

        IDPacket ReturnPacket = null;
        if (IStructureNode.Children.Count > 1) {
            //child Identity
            YSParseNode INode = IStructureNode.Children [1];
            if (INode.Type != NType.Identity
                && INode.Type != NType.IdentityStructure
                && INode.Type != NType.IdentityFunction)
                Error ("Structure child is not an Identity");
            Debug ("Attempting to find identity " + INode.Children [0].Token.Content + " in " + STATE.current_scope.Name);
            ReturnPacket = Identity (INode);
        } else {
            Error ("Structure chain has no children");
        }

        STATE.PopScopeNoSave ();

        if (ReturnPacket == null)
            Error ("Attempting to resolve a structure chain that ends improperly");

        return ReturnPacket;
    }