public override void Init(AstContext context, ParseTreeNode parseNode) { // _(".class") + classAttr + id + extendsClause + implClause var idChildren = AstChildren.Empty() .Add(".class") .Add <ClassAttrAstNode>() .Add <IdAstNode>() .Add <ExtendsClauseAstNode>() .Add <ImplClauseAstNode>(); if (idChildren.PopulateWith(parseNode)) { ClassName = idChildren.Child3.Value; ExtendsClassName = idChildren.Child4.ClassName; ClassAttributes = idChildren.Child2.ClassAttributes; return; } // _(".class") + classAttr + name1 + extendsClause + implClause var name1Children = AstChildren.Empty() .Add(".class") .Add <ClassAttrAstNode>() .Add <Name1AstNode>() .Add <ExtendsClauseAstNode>() .Add <ImplClauseAstNode>(); if (name1Children.PopulateWith(parseNode)) { ClassName = name1Children.Child3.Value; ExtendsClassName = name1Children.Child4.ClassName; ClassAttributes = name1Children.Child2.ClassAttributes; return; } throw new InitAstNodeException(nameof(ClassHeadAstNode)); }
public override void Init(AstContext context, ParseTreeNode parseNode) { // Empty var emptyChildren = AstChildren.Empty(); if (emptyChildren.PopulateWith(parseNode)) { // TODO - handle return; } // classAttr + _("private") var privateChildren = AstChildren.Empty() .Add <ClassAttrAstNode>() .Add("private"); if (privateChildren.PopulateWith(parseNode)) { ClassAttributes |= privateChildren.Child1.ClassAttributes; return; } // classAttr + _("auto") var autoChildren = AstChildren.Empty() .Add <ClassAttrAstNode>() .Add("auto"); if (autoChildren.PopulateWith(parseNode)) { ClassAttributes |= autoChildren.Child1.ClassAttributes; return; } // classAttr + _("ansi") var ansiChildren = AstChildren.Empty() .Add <ClassAttrAstNode>() .Add("ansi"); if (ansiChildren.PopulateWith(parseNode)) { ClassAttributes |= ansiChildren.Child1.ClassAttributes; return; } // classAttr + _("beforefieldinit") var beforeFieldInitChildren = AstChildren.Empty() .Add <ClassAttrAstNode>() .Add("beforefieldinit"); if (beforeFieldInitChildren.PopulateWith(parseNode)) { ClassAttributes |= beforeFieldInitChildren.Child1.ClassAttributes; return; } // classAttr + _("public") var publicChildren = AstChildren.Empty() .Add <ClassAttrAstNode>() .Add("public"); if (publicChildren.PopulateWith(parseNode)) { ClassAttributes |= publicChildren.Child1.ClassAttributes; return; } // classAttr + _("abstract") var abstractChildren = AstChildren.Empty() .Add <ClassAttrAstNode>() .Add("abstract"); if (abstractChildren.PopulateWith(parseNode)) { ClassAttributes |= abstractChildren.Child1.ClassAttributes; return; } // classAttr + _("sealed") var sealedChildren = AstChildren.Empty() .Add <ClassAttrAstNode>() .Add("sealed"); if (sealedChildren.PopulateWith(parseNode)) { ClassAttributes |= sealedChildren.Child1.ClassAttributes; return; } // classAttr + _("sequential") var sequentialChildren = AstChildren.Empty() .Add <ClassAttrAstNode>() .Add("sequential"); if (sequentialChildren.PopulateWith(parseNode)) { ClassAttributes |= sequentialChildren.Child1.ClassAttributes | CilClassAttributes.Sequential; return; } // classAttr + _("nested") + _("private") var nestedPrivateChildren = AstChildren.Empty() .Add <ClassAttrAstNode>() .Add("nested") .Add("private"); if (nestedPrivateChildren.PopulateWith(parseNode)) { ClassAttributes |= nestedPrivateChildren.Child1.ClassAttributes; return; } // classAttr + _("explicit") var explicitChildren = AstChildren.Empty() .Add <ClassAttrAstNode>() .Add("explicit"); if (explicitChildren.PopulateWith(parseNode)) { ClassAttributes |= explicitChildren.Child1.ClassAttributes; return; } // classAttr + _("interface") var interfaceChildren = AstChildren.Empty() .Add <ClassAttrAstNode>() .Add("interface"); if (interfaceChildren.PopulateWith(parseNode)) { ClassAttributes |= interfaceChildren.Child1.ClassAttributes | CilClassAttributes.Interface; return; } throw new NotImplementedException(); }