Beispiel #1
0
        public override void Init(AstContext context, ParseTreeNode parseNode)
        {
            // asmOrRefDecl
            var asmOrRefDeclChildren = AstChildren.Empty()
                                       .Add <AsmOrRefDeclAstNode>();

            if (asmOrRefDeclChildren.PopulateWith(parseNode))
            {
                var declType = asmOrRefDeclChildren.Child1.DeclType;

                if (!declType.HasValue)
                {
                    throw new AstNodeException($"\"{nameof(declType)}\" is not specified.");
                }

                switch (declType.Value)
                {
                case AsmOrRefDeclType.Ver:
                    DeclType = AssemblyRefDeclType.Ver;
                    Version  = asmOrRefDeclChildren.Child1.Version;
                    break;

                default:
                    throw new AstNodeException($"\"{nameof(declType)}\" cannot be recognized.");
                }

                return;
            }

            // publicKeyTokenHead + bytes + _(")")
            var publicKeyTokenChildren = AstChildren.Empty()
                                         .Add <PublicKeyTokenHeadAstNode>()
                                         .Add <BytesAstNode>()
                                         .Add(")");

            if (publicKeyTokenChildren.PopulateWith(parseNode))
            {
                DeclType       = AssemblyRefDeclType.PublicKeyToken;
                PublicKeyToken = publicKeyTokenChildren.Child2.Value;

                return;
            }

            throw new NotImplementedException();
        }
        public override void Init(AstContext context, ParseTreeNode parseNode)
        {
            // _(".ver") + int32 + _(":") + int32 + _(":") + int32 + _(":") + int32
            var verChildren = AstChildren.Empty()
                              .Add(".ver")
                              .Add <Int32AstNode>()
                              .Add(":")
                              .Add <Int32AstNode>()
                              .Add(":")
                              .Add <Int32AstNode>()
                              .Add(":")
                              .Add <Int32AstNode>();

            if (verChildren.PopulateWith(parseNode))
            {
                DeclType = AsmOrRefDeclType.Ver;
                Version  = new CilAssemblyVersion
                {
                    V1 = verChildren.Child2.Value,
                    V2 = verChildren.Child4.Value,
                    V3 = verChildren.Child6.Value,
                    V4 = verChildren.Child8.Value
                };

                return;
            }

            // customAttrDecl
            var customAttrDeclChildren = AstChildren.Empty()
                                         .Add <CustomAttrDeclAstNode>();

            if (customAttrDeclChildren.PopulateWith(parseNode))
            {
                // TODO - handle
                return;
            }

            throw new NotImplementedException();
        }