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