protected void AssertVariableDeclaration(string src, string identifier, string type, AccessModifiers access = AccessModifiers.Unspecified, QualifierFlags qualifiers = QualifierFlags.None, object?value = null) { DeclStatNode decl = this.AssertDeclarationNode(src, type, access, qualifiers); Assert.That(decl.DeclaratorList.Parent, Is.EqualTo(decl)); VarDeclNode var = decl.DeclaratorList.Declarators.Single().As <VarDeclNode>(); Assert.That(var.Parent, Is.EqualTo(decl.DeclaratorList)); Assert.That(var.Identifier, Is.EqualTo(identifier)); Assert.That(var.Children.First().As <IdNode>().Identifier, Is.EqualTo(identifier)); if (value is { })
protected DeclStatNode AssertDeclarationNode(string src, string type, AccessModifiers access = AccessModifiers.Unspecified, QualifierFlags qualifiers = QualifierFlags.None) { ASTNode ast = this.GenerateAST(src); DeclStatNode decl = ast is SourceNode block ? this.ExtractDeclarationFromBlock(block) : ast.As <DeclStatNode>(); Assert.That(decl.Children, Has.Exactly(2).Items); Assert.That(decl.Specifiers.Parent, Is.EqualTo(decl)); Assert.That(decl.Specifiers.Modifiers.AccessModifiers, Is.EqualTo(access)); Assert.That(decl.Specifiers.Modifiers.QualifierFlags, Is.EqualTo(qualifiers)); Assert.That(decl.Specifiers.TypeName, Is.EqualTo(type)); Assert.That(decl.Specifiers.Children, Is.Empty); return(decl); }
public void VariableDeclarationDifferenceTest1() { ASTNode ast1 = new DeclStatNode( 1, new DeclSpecsNode(1, "public static", "int"), new DeclListNode( 1, new VarDeclNode( 2, new IdNode(2, "x"), new ArithmExprNode( 3, new LitExprNode(4, 2), ArithmOpNode.FromSymbol(4, "+"), new LitExprNode(4, 1) ) ) ) ); ASTNode ast2 = new DeclStatNode( 2, new DeclSpecsNode(2, "public static", "int"), new DeclListNode( 2, new VarDeclNode( 2, new IdNode(2, "x"), new ArithmExprNode( 3, new LitExprNode(4, 1), ArithmOpNode.FromSymbol(4, "+"), new LitExprNode(4, 1) ) ) ) ); AssertNodes(ast1, ast2, eq: false); }
public virtual TResult Visit(DeclStatNode node) => this.VisitChildren(node);