Nodes.cpp revision 360784
167754Smsmith//===- Nodes.cpp ----------------------------------------------*- C++ -*-=====// 267754Smsmith// 377424Smsmith// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 467754Smsmith// See https://llvm.org/LICENSE.txt for license information. 567754Smsmith// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 667754Smsmith// 767754Smsmith//===----------------------------------------------------------------------===// 867754Smsmith#include "clang/Tooling/Syntax/Nodes.h" 967754Smsmith#include "clang/Basic/TokenKinds.h" 1067754Smsmith 11202771Sjkimusing namespace clang; 1270243Smsmith 1367754Smsmithllvm::raw_ostream &syntax::operator<<(llvm::raw_ostream &OS, NodeKind K) { 1467754Smsmith switch (K) { 1567754Smsmith case NodeKind::Leaf: 1667754Smsmith return OS << "Leaf"; 1767754Smsmith case NodeKind::TranslationUnit: 1867754Smsmith return OS << "TranslationUnit"; 1967754Smsmith case NodeKind::UnknownExpression: 2067754Smsmith return OS << "UnknownExpression"; 2167754Smsmith case NodeKind::UnknownStatement: 2267754Smsmith return OS << "UnknownStatement"; 2367754Smsmith case NodeKind::DeclarationStatement: 2467754Smsmith return OS << "DeclarationStatement"; 2567754Smsmith case NodeKind::EmptyStatement: 2667754Smsmith return OS << "EmptyStatement"; 2767754Smsmith case NodeKind::SwitchStatement: 2867754Smsmith return OS << "SwitchStatement"; 2967754Smsmith case NodeKind::CaseStatement: 3067754Smsmith return OS << "CaseStatement"; 3167754Smsmith case NodeKind::DefaultStatement: 3267754Smsmith return OS << "DefaultStatement"; 3367754Smsmith case NodeKind::IfStatement: 3467754Smsmith return OS << "IfStatement"; 3567754Smsmith case NodeKind::ForStatement: 3667754Smsmith return OS << "ForStatement"; 3767754Smsmith case NodeKind::WhileStatement: 3867754Smsmith return OS << "WhileStatement"; 3967754Smsmith case NodeKind::ContinueStatement: 4067754Smsmith return OS << "ContinueStatement"; 4167754Smsmith case NodeKind::BreakStatement: 4267754Smsmith return OS << "BreakStatement"; 4367754Smsmith case NodeKind::ReturnStatement: 4467754Smsmith return OS << "ReturnStatement"; 4567754Smsmith case NodeKind::RangeBasedForStatement: 4667754Smsmith return OS << "RangeBasedForStatement"; 4767754Smsmith case NodeKind::ExpressionStatement: 4867754Smsmith return OS << "ExpressionStatement"; 4967754Smsmith case NodeKind::CompoundStatement: 5067754Smsmith return OS << "CompoundStatement"; 5167754Smsmith case NodeKind::UnknownDeclaration: 5267754Smsmith return OS << "UnknownDeclaration"; 5367754Smsmith case NodeKind::EmptyDeclaration: 5467754Smsmith return OS << "EmptyDeclaration"; 5567754Smsmith case NodeKind::StaticAssertDeclaration: 5667754Smsmith return OS << "StaticAssertDeclaration"; 5767754Smsmith case NodeKind::LinkageSpecificationDeclaration: 5867754Smsmith return OS << "LinkageSpecificationDeclaration"; 5967754Smsmith case NodeKind::SimpleDeclaration: 6067754Smsmith return OS << "SimpleDeclaration"; 6167754Smsmith case NodeKind::NamespaceDefinition: 6267754Smsmith return OS << "NamespaceDefinition"; 6367754Smsmith case NodeKind::NamespaceAliasDefinition: 6467754Smsmith return OS << "NamespaceAliasDefinition"; 6567754Smsmith case NodeKind::UsingNamespaceDirective: 6667754Smsmith return OS << "UsingNamespaceDirective"; 6767754Smsmith case NodeKind::UsingDeclaration: 6867754Smsmith return OS << "UsingDeclaration"; 6967754Smsmith case NodeKind::TypeAliasDeclaration: 7067754Smsmith return OS << "TypeAliasDeclaration"; 7167754Smsmith } 7267754Smsmith llvm_unreachable("unknown node kind"); 7367754Smsmith} 7467754Smsmith 7567754Smsmithllvm::raw_ostream &syntax::operator<<(llvm::raw_ostream &OS, NodeRole R) { 7667754Smsmith switch (R) { 7767754Smsmith case syntax::NodeRole::Detached: 7867754Smsmith return OS << "Detached"; 7967754Smsmith case syntax::NodeRole::Unknown: 8067754Smsmith return OS << "Unknown"; 8167754Smsmith case syntax::NodeRole::OpenParen: 8267754Smsmith return OS << "OpenParen"; 8367754Smsmith case syntax::NodeRole::CloseParen: 8467754Smsmith return OS << "CloseParen"; 8567754Smsmith case syntax::NodeRole::IntroducerKeyword: 8667754Smsmith return OS << "IntroducerKeyword"; 8767754Smsmith case syntax::NodeRole::BodyStatement: 8867754Smsmith return OS << "BodyStatement"; 8967754Smsmith case syntax::NodeRole::CaseStatement_value: 9067754Smsmith return OS << "CaseStatement_value"; 9167754Smsmith case syntax::NodeRole::IfStatement_thenStatement: 9267754Smsmith return OS << "IfStatement_thenStatement"; 9367754Smsmith case syntax::NodeRole::IfStatement_elseKeyword: 9467754Smsmith return OS << "IfStatement_elseKeyword"; 9567754Smsmith case syntax::NodeRole::IfStatement_elseStatement: 9667754Smsmith return OS << "IfStatement_elseStatement"; 9767754Smsmith case syntax::NodeRole::ReturnStatement_value: 9867754Smsmith return OS << "ReturnStatement_value"; 9967754Smsmith case syntax::NodeRole::ExpressionStatement_expression: 10067754Smsmith return OS << "ExpressionStatement_expression"; 10167754Smsmith case syntax::NodeRole::CompoundStatement_statement: 10267754Smsmith return OS << "CompoundStatement_statement"; 10367754Smsmith case syntax::NodeRole::StaticAssertDeclaration_condition: 10467754Smsmith return OS << "StaticAssertDeclaration_condition"; 10567754Smsmith case syntax::NodeRole::StaticAssertDeclaration_message: 10667754Smsmith return OS << "StaticAssertDeclaration_message"; 10767754Smsmith } 10867754Smsmith llvm_unreachable("invalid role"); 10967754Smsmith} 11067754Smsmith 11167754Smsmithsyntax::Leaf *syntax::SwitchStatement::switchKeyword() { 11267754Smsmith return llvm::cast_or_null<syntax::Leaf>( 11367754Smsmith findChild(syntax::NodeRole::IntroducerKeyword)); 11467754Smsmith} 11567754Smsmith 11667754Smsmithsyntax::Statement *syntax::SwitchStatement::body() { 11777424Smsmith return llvm::cast_or_null<syntax::Statement>( 11867754Smsmith findChild(syntax::NodeRole::BodyStatement)); 119193341Sjkim} 120193341Sjkim 121193341Sjkimsyntax::Leaf *syntax::CaseStatement::caseKeyword() { 122193341Sjkim return llvm::cast_or_null<syntax::Leaf>( 123193341Sjkim findChild(syntax::NodeRole::IntroducerKeyword)); 124193341Sjkim} 12567754Smsmith 12667754Smsmithsyntax::Expression *syntax::CaseStatement::value() { 12777424Smsmith return llvm::cast_or_null<syntax::Expression>( 12891116Smsmith findChild(syntax::NodeRole::CaseStatement_value)); 12967754Smsmith} 130151937Sjkim 13167754Smsmithsyntax::Statement *syntax::CaseStatement::body() { 132151937Sjkim return llvm::cast_or_null<syntax::Statement>( 133151937Sjkim findChild(syntax::NodeRole::BodyStatement)); 134151937Sjkim} 135151937Sjkim 136202771Sjkimsyntax::Leaf *syntax::DefaultStatement::defaultKeyword() { 137151937Sjkim return llvm::cast_or_null<syntax::Leaf>( 138151937Sjkim findChild(syntax::NodeRole::IntroducerKeyword)); 139151937Sjkim} 140151937Sjkim 141151937Sjkimsyntax::Statement *syntax::DefaultStatement::body() { 142202771Sjkim return llvm::cast_or_null<syntax::Statement>( 143151937Sjkim findChild(syntax::NodeRole::BodyStatement)); 144151937Sjkim} 145151937Sjkim 146151937Sjkimsyntax::Leaf *syntax::IfStatement::ifKeyword() { 147151937Sjkim return llvm::cast_or_null<syntax::Leaf>( 148151937Sjkim findChild(syntax::NodeRole::IntroducerKeyword)); 149151937Sjkim} 15067754Smsmith 15167754Smsmithsyntax::Statement *syntax::IfStatement::thenStatement() { 15287031Smsmith return llvm::cast_or_null<syntax::Statement>( 15367754Smsmith findChild(syntax::NodeRole::IfStatement_thenStatement)); 154151937Sjkim} 15587031Smsmith 15687031Smsmithsyntax::Leaf *syntax::IfStatement::elseKeyword() { 15767754Smsmith return llvm::cast_or_null<syntax::Leaf>( 15867754Smsmith findChild(syntax::NodeRole::IfStatement_elseKeyword)); 15967754Smsmith} 16077424Smsmith 161123315Snjlsyntax::Statement *syntax::IfStatement::elseStatement() { 162123315Snjl return llvm::cast_or_null<syntax::Statement>( 16367754Smsmith findChild(syntax::NodeRole::IfStatement_elseStatement)); 16467754Smsmith} 16567754Smsmith 166151937Sjkimsyntax::Leaf *syntax::ForStatement::forKeyword() { 16787031Smsmith return llvm::cast_or_null<syntax::Leaf>( 16867754Smsmith findChild(syntax::NodeRole::IntroducerKeyword)); 16977424Smsmith} 17067754Smsmith 17177424Smsmithsyntax::Statement *syntax::ForStatement::body() { 17277424Smsmith return llvm::cast_or_null<syntax::Statement>( 17367754Smsmith findChild(syntax::NodeRole::BodyStatement)); 17467754Smsmith} 175167802Sjkim 17667754Smsmithsyntax::Leaf *syntax::WhileStatement::whileKeyword() { 17783174Smsmith return llvm::cast_or_null<syntax::Leaf>( 17877424Smsmith findChild(syntax::NodeRole::IntroducerKeyword)); 17967754Smsmith} 180107325Siwasaki 181107325Siwasakisyntax::Statement *syntax::WhileStatement::body() { 182193267Sjkim return llvm::cast_or_null<syntax::Statement>( 18377424Smsmith findChild(syntax::NodeRole::BodyStatement)); 184167802Sjkim} 185193267Sjkim 18699679Siwasakisyntax::Leaf *syntax::ContinueStatement::continueKeyword() { 18799679Siwasaki return llvm::cast_or_null<syntax::Leaf>( 18877424Smsmith findChild(syntax::NodeRole::IntroducerKeyword)); 18977424Smsmith} 19067754Smsmith 19177424Smsmithsyntax::Leaf *syntax::BreakStatement::breakKeyword() { 19277424Smsmith return llvm::cast_or_null<syntax::Leaf>( 19377424Smsmith findChild(syntax::NodeRole::IntroducerKeyword)); 19477424Smsmith} 195123315Snjl 19667754Smsmithsyntax::Leaf *syntax::ReturnStatement::returnKeyword() { 19777424Smsmith return llvm::cast_or_null<syntax::Leaf>( 19877424Smsmith findChild(syntax::NodeRole::IntroducerKeyword)); 19977424Smsmith} 20077424Smsmith 20177424Smsmithsyntax::Expression *syntax::ReturnStatement::value() { 20267754Smsmith return llvm::cast_or_null<syntax::Expression>( 20367754Smsmith findChild(syntax::NodeRole::ReturnStatement_value)); 204167802Sjkim} 205197104Sjkim 206167802Sjkimsyntax::Leaf *syntax::RangeBasedForStatement::forKeyword() { 207167802Sjkim return llvm::cast_or_null<syntax::Leaf>( 208197104Sjkim findChild(syntax::NodeRole::IntroducerKeyword)); 209197104Sjkim} 210107325Siwasaki 211197104Sjkimsyntax::Statement *syntax::RangeBasedForStatement::body() { 212107325Siwasaki return llvm::cast_or_null<syntax::Statement>( 213107325Siwasaki findChild(syntax::NodeRole::BodyStatement)); 214107325Siwasaki} 215107325Siwasaki 216123315Snjlsyntax::Expression *syntax::ExpressionStatement::expression() { 21777424Smsmith return llvm::cast_or_null<syntax::Expression>( 218123315Snjl findChild(syntax::NodeRole::ExpressionStatement_expression)); 219123315Snjl} 220123315Snjl 221123315Snjlsyntax::Leaf *syntax::CompoundStatement::lbrace() { 222123315Snjl return llvm::cast_or_null<syntax::Leaf>( 223123315Snjl findChild(syntax::NodeRole::OpenParen)); 224123315Snjl} 225123315Snjl 226123315Snjlstd::vector<syntax::Statement *> syntax::CompoundStatement::statements() { 227123315Snjl std::vector<syntax::Statement *> Children; 228123315Snjl for (auto *C = firstChild(); C; C = C->nextSibling()) { 229123315Snjl if (C->role() == syntax::NodeRole::CompoundStatement_statement) 230123315Snjl Children.push_back(llvm::cast<syntax::Statement>(C)); 23177424Smsmith } 23277424Smsmith return Children; 23377424Smsmith} 23477424Smsmith 235167802Sjkimsyntax::Leaf *syntax::CompoundStatement::rbrace() { 236167802Sjkim return llvm::cast_or_null<syntax::Leaf>( 237167802Sjkim findChild(syntax::NodeRole::CloseParen)); 238167802Sjkim} 23977424Smsmith 240138287Smarkssyntax::Expression *syntax::StaticAssertDeclaration::condition() { 241138287Smarks return llvm::cast_or_null<syntax::Expression>( 242138287Smarks findChild(syntax::NodeRole::StaticAssertDeclaration_condition)); 243138287Smarks} 244138287Smarks 245193267Sjkimsyntax::Expression *syntax::StaticAssertDeclaration::message() { 246138287Smarks return llvm::cast_or_null<syntax::Expression>( 247138287Smarks findChild(syntax::NodeRole::StaticAssertDeclaration_message)); 248167802Sjkim} 249193267Sjkim