A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://clang.llvm.org/doxygen/DeclPrinter_8cpp_source.html below:

clang: lib/AST/DeclPrinter.cpp Source File

25#include "llvm/Support/raw_ostream.h" 26using namespace clang

;

29 class

DeclPrinter :

public DeclVisitor

<DeclPrinter> {

34 bool

PrintInstantiation;

36

raw_ostream& Indent() {

return

Indent(Indentation); }

37

raw_ostream& Indent(

unsigned

Indentation);

55 const ASTContext

&Context,

unsigned

Indentation = 0,

56 bool

PrintInstantiation =

false

)

57

: Out(Out), Policy(Policy), Context(Context), Indentation(Indentation),

58

PrintInstantiation(PrintInstantiation) {}

60 void

VisitDeclContext(

DeclContext

*DC,

bool

Indent =

true

);

87 void

VisitClassTemplateSpecializationDecl(

89 void

VisitClassTemplatePartialSpecializationDecl(

116 bool

OmitTemplateKW =

false

);

123

prettyPrintAttributes(

const Decl

*

D

,

124

AttrPosAsWritten Pos = AttrPosAsWritten::Default);

125 void

prettyPrintPragmas(

Decl

*

D

);

126 void

printDeclType(

QualType T

, StringRef DeclName,

bool

Pack =

false

);

131 bool

PrintInstantiation)

const

{

136 unsigned

Indentation,

bool

PrintInstantiation)

const

{

137

DeclPrinter Printer(Out, Policy,

getASTContext

(), Indentation,

139

Printer.Visit(

const_cast<Decl

*

>

(

this

));

143 bool

OmitTemplateKW)

const

{

149 bool

OmitTemplateKW)

const

{

150

DeclPrinter Printer(Out, Policy, Context);

151

Printer.printTemplateParameters(

this

, OmitTemplateKW);

165 else if

(

const ArrayType

*ATy = dyn_cast<ArrayType>(BaseType))

166

BaseType = ATy->getElementType();

168

BaseType = FTy->getReturnType();

170

BaseType = VTy->getElementType();

174

BaseType = ATy->getDeducedType();

176

BaseType = PTy->desugar();

186 return

TDD->getUnderlyingType();

187 if

(

ValueDecl

* VD = dyn_cast<ValueDecl>(

D

))

188 return

VD->getType();

194 unsigned

Indentation) {

196

(*Begin)->print(Out, Policy, Indentation);

207 bool

isFirst =

true

;

215 if

(!isFirst) Out <<

", "

;

220

(*Begin)->print(Out, SubPolicy, Indentation);

230 ASTContext

&Ctx = cast<TranslationUnitDecl>(DC)->getASTContext();

232

Printer.VisitDeclContext(

const_cast<DeclContext

*

>

(

this

),

false

);

235

raw_ostream& DeclPrinter::Indent(

unsigned

Indentation) {

236 for

(

unsigned

i = 0; i != Indentation; ++i)

247 return

DeclPrinter::AttrPosAsWritten::Left;

249 if

(

C

.getSourceManager().isBeforeInTranslationUnit(ALoc, DLoc))

250 return

DeclPrinter::AttrPosAsWritten::Left;

252 return

DeclPrinter::AttrPosAsWritten::Right;

256bool

DeclPrinter::prettyPrintAttributes(

const Decl

*

D

,

257

AttrPosAsWritten Pos

) {

258 bool

hasPrinted =

false

;

262 for

(

auto

*A : Attrs) {

263 if

(A->isInherited() || A->isImplicit())

268 switch

(A->getKind()) {

270#define PRAGMA_SPELLING_ATTR(X) case attr::X: 271#include "clang/Basic/AttrList.inc" 275

assert(APos != AttrPosAsWritten::Default &&

276 "Default not a valid for an attribute location"

);

277 if

(Pos == AttrPosAsWritten::Default || Pos == APos) {

278 if

(Pos != AttrPosAsWritten::Left)

280

A->printPretty(Out, Policy);

282 if

(Pos == AttrPosAsWritten::Left)

292void

DeclPrinter::prettyPrintPragmas(

Decl

*

D

) {

298 for

(

auto

*A : Attrs) {

299 switch

(A->getKind()) {

301#define PRAGMA_SPELLING_ATTR(X) case attr::X: 302#include "clang/Basic/AttrList.inc" 303

A->printPretty(Out, Policy);

313void

DeclPrinter::printDeclType(

QualType T

, StringRef DeclName,

bool

Pack) {

319 T

= PET->getPattern();

321 T

.print(Out, Policy, (Pack ?

"..."

:

""

) + DeclName, Indentation);

334 if

(AccessSpelling.empty())

335

llvm_unreachable(

"No access specifier!"

);

336

Out << AccessSpelling;

340

std::string &Proto) {

341 bool

HasInitializerList =

false

;

342 for

(

const auto

*BMInitializer : CDecl->

inits

()) {

343 if

(BMInitializer->isInClassMemberInitializer())

345 if

(!BMInitializer->isWritten())

348 if

(!HasInitializerList) {

352

HasInitializerList =

true

;

356 if

(BMInitializer->isAnyMemberInitializer()) {

357 FieldDecl

*FD = BMInitializer->getAnyMember();

359

}

else if

(BMInitializer->isDelegatingInitializer()) {

365 if

(

Expr

*

Init

= BMInitializer->getInit()) {

366 bool

OutParens = !isa<InitListExpr>(

Init

);

372 Init

= Tmp->getSubExpr();

376 Expr

*SimpleInit =

nullptr

;

377 Expr

**Args =

nullptr

;

378 unsigned

NumArgs = 0;

380

Args = ParenList->getExprs();

381

NumArgs = ParenList->getNumExprs();

383

dyn_cast<CXXConstructExpr>(

Init

)) {

384

Args = Construct->getArgs();

385

NumArgs = Construct->getNumArgs();

390

SimpleInit->

printPretty

(Out,

nullptr

, Policy, Indentation,

"\n"

,

393 for

(

unsigned

I = 0; I != NumArgs; ++I) {

394

assert(Args[I] !=

nullptr

&&

"Expected non-null Expr"

);

395 if

(isa<CXXDefaultArgExpr>(Args[I]))

400

Args[I]->

printPretty

(Out,

nullptr

, Policy, Indentation,

"\n"

,

411 if

(BMInitializer->isPackExpansion())

420void

DeclPrinter::VisitDeclContext(

DeclContext

*DC,

bool

Indent) {

433 if

(isa<ObjCIvarDecl>(*

D

))

442 if

(

auto

FD = dyn_cast<FunctionDecl>(*

D

))

444

!isa<ClassTemplateSpecializationDecl>(DC))

460 if

(!Decls.empty() && !CurDeclType.

isNull

()) {

462 if

(!BaseType.

isNull

() && isa<ElaboratedType>(BaseType) &&

463

cast<ElaboratedType>(BaseType)->getOwnedTagDecl() == Decls[0]) {

464

Decls.push_back(*

D

);

471

ProcessDeclGroup(Decls);

475 if

(isa<TagDecl>(*

D

) && !cast<TagDecl>(*D)->isFreeStanding()) {

476

Decls.push_back(*

D

);

480 if

(isa<AccessSpecDecl>(*

D

)) {

493 const char

*Terminator =

nullptr

;

494 if

(isa<OMPThreadPrivateDecl>(*

D

) || isa<OMPDeclareReductionDecl>(*

D

) ||

495

isa<OMPDeclareMapperDecl>(*

D

) || isa<OMPRequiresDecl>(*

D

) ||

496

isa<OMPAllocateDecl>(*

D

))

497

Terminator =

nullptr

;

498 else if

(isa<ObjCMethodDecl>(*

D

) && cast<ObjCMethodDecl>(*D)->hasBody())

499

Terminator =

nullptr

;

500 else if

(

auto

FD = dyn_cast<FunctionDecl>(*

D

)) {

501 if

(FD->doesThisDeclarationHaveABody() && !FD->isDefaulted())

502

Terminator =

nullptr

;

505

}

else if

(

auto

TD = dyn_cast<FunctionTemplateDecl>(*

D

)) {

506 if

(TD->getTemplatedDecl()->doesThisDeclarationHaveABody())

507

Terminator =

nullptr

;

513

Terminator =

nullptr

;

514 else if

(isa<EnumConstantDecl>(*

D

)) {

525

((isa<FunctionDecl>(*

D

) &&

526

cast<FunctionDecl>(*D)->doesThisDeclarationHaveABody()) ||

527

(isa<FunctionTemplateDecl>(*

D

) &&

528

cast<FunctionTemplateDecl>(*D)->getTemplatedDecl()->doesThisDeclarationHaveABody())))

535 if

(

D

->

hasAttr

<OMPDeclareTargetDeclAttr>())

536

Out <<

"#pragma omp end declare target\n"

;

540

ProcessDeclGroup(Decls);

547

VisitDeclContext(

D

,

false

);

555

Out <<

"__module_private__ "

;

557 QualType

Ty =

D

->getTypeSourceInfo()->getType();

558

Ty.

print

(Out, Policy,

D

->getName(), Indentation);

559

prettyPrintAttributes(

D

);

563

Out <<

"using "

<< *

D

;

564

prettyPrintAttributes(

D

);

565

Out <<

" = "

<<

D

->getTypeSourceInfo()->getType().getAsString(Policy);

568void

DeclPrinter::VisitEnumDecl(

EnumDecl

*

D

) {

570

Out <<

"__module_private__ "

;

572 if

(

D

->isScoped()) {

573 if

(

D

->isScopedUsingClassTag())

579

prettyPrintAttributes(

D

);

581 if

(

D

->getDeclName())

582

Out <<

' '

<<

D

->getDeclName();

585

Out <<

" : "

<<

D

->getIntegerType().stream(Policy);

587 if

(

D

->isCompleteDefinition()) {

589

VisitDeclContext(

D

);

594void

DeclPrinter::VisitRecordDecl(

RecordDecl

*

D

) {

596

Out <<

"__module_private__ "

;

597

Out <<

D

->getKindName();

599

prettyPrintAttributes(

D

);

601 if

(

D

->getIdentifier())

604 if

(

D

->isCompleteDefinition()) {

606

VisitDeclContext(

D

);

613

prettyPrintAttributes(

D

);

616 Init

->printPretty(Out,

nullptr

, Policy, Indentation,

"\n"

, &Context);

623

std::string Proto =

"explicit"

;

624

llvm::raw_string_ostream EOut(Proto);

637

llvm::raw_ostream &Out) {

646 if

(!

D

->getDescribedFunctionTemplate() &&

647

!

D

->isFunctionTemplateSpecialization()) {

648

prettyPrintPragmas(

D

);

649

prettyPrintAttributes(

D

, AttrPosAsWritten::Left);

652 if

(

D

->isFunctionTemplateSpecialization())

653

Out <<

"template<> "

;

654 else if

(!

D

->getDescribedFunctionTemplate()) {

655 for

(

unsigned

I = 0, NumTemplateParams =

D

->getNumTemplateParameterLists();

656

I < NumTemplateParams; ++I)

657

printTemplateParameters(

D

->getTemplateParameterList(I));

664 switch

(

D

->getStorageClass()) {

666 case SC_Extern

: Out <<

"extern "

;

break

;

667 case SC_Static

: Out <<

"static "

;

break

;

670

llvm_unreachable(

"invalid for functions"

);

673 if

(

D

->isInlineSpecified()) Out <<

"inline "

;

674 if

(

D

->isVirtualAsWritten()) Out <<

"virtual "

;

676 if

(

D

->isConstexprSpecified() && !

D

->isExplicitlyDefaulted())

677

Out <<

"constexpr "

;

678 if

(

D

->isConsteval()) Out <<

"consteval "

;

679 else if

(

D

->isImmediateFunction())

680

Out <<

"immediate "

;

687

SubPolicy.SuppressSpecifiers =

false

;

691

Proto +=

D

->getQualifiedNameAsString();

693

llvm::raw_string_ostream OS(Proto);

696

NS->print(OS, Policy);

699 D

->getNameInfo().printName(OS, Policy);

704 if

(

D

->isFunctionTemplateSpecialization()) {

705

llvm::raw_string_ostream POut(Proto);

706

DeclPrinter TArgPrinter(POut, SubPolicy, Context, Indentation);

707 const auto

*TArgAsWritten =

D

->getTemplateSpecializationArgsAsWritten();

709

TArgPrinter.printTemplateArguments(TArgAsWritten->arguments(),

nullptr

);

711 D

->getTemplateSpecializationArgs())

712

TArgPrinter.printTemplateArguments(TArgs->asArray(),

nullptr

);

716 while

(

const ParenType

*PT = dyn_cast<ParenType>(Ty)) {

717

Proto =

'('

+ Proto +

')'

;

718

Ty = PT->getInnerType();

723 if

(

D

->hasWrittenPrototype())

724

FT = dyn_cast<FunctionProtoType>(AFT);

728

llvm::raw_string_ostream POut(Proto);

729

DeclPrinter ParamPrinter(POut, SubPolicy, Context, Indentation);

730 for

(

unsigned

i = 0, e =

D

->getNumParams(); i != e; ++i) {

731 if

(i) POut <<

", "

;

732

ParamPrinter.VisitParmVarDecl(

D

->getParamDecl(i));

736 if

(

D

->getNumParams()) POut <<

", "

;

738

}

else if

(!

D

->getNumParams() && !Context.

getLangOpts

().CPlusPlus) {

743

}

else if

(

D

->doesThisDeclarationHaveABody() && !

D

->hasPrototype()) {

744 for

(

unsigned

i = 0, e =

D

->getNumParams(); i != e; ++i) {

747

Proto +=

D

->getParamDecl(i)->getNameAsString();

757

Proto +=

" volatile"

;

759

Proto +=

" restrict"

;

786

Proto +=

" noexcept"

;

789

llvm::raw_string_ostream EOut(Proto);

791

Indentation,

"\n"

, &Context);

798

PrintConstructorInitializers(CDecl, Proto);

799

}

else if

(!ConversionDecl && !isa<CXXDestructorDecl>(

D

)) {

803

Out << Proto <<

" -> "

;

810

AFT->getReturnType().print(Out, Policy, Proto);

815 if

(

Expr

*TrailingRequiresClause =

D

->getTrailingRequiresClause()) {

816

Out <<

" requires "

;

817

TrailingRequiresClause->printPretty(Out,

nullptr

, SubPolicy, Indentation,

821

Ty.

print

(Out, Policy, Proto);

824

prettyPrintAttributes(

D

, AttrPosAsWritten::Right);

826 if

(

D

->isPureVirtual())

828 else if

(

D

->isDeletedAsWritten()) {

832

M->outputString(Out);

835

}

else if

(

D

->isExplicitlyDefaulted())

836

Out <<

" = default"

;

837 else if

(

D

->doesThisDeclarationHaveABody()) {

839 if

(!

D

->hasPrototype() &&

D

->getNumParams()) {

843

DeclPrinter ParamPrinter(Out, SubPolicy, Context, Indentation);

845 for

(

unsigned

i = 0, e =

D

->getNumParams(); i != e; ++i) {

847

ParamPrinter.VisitParmVarDecl(

D

->getParamDecl(i));

857 if

(!Policy.

TerseOutput

&& isa<CXXConstructorDecl>(*

D

))

863void

DeclPrinter::VisitFriendDecl(

FriendDecl

*

D

) {

865 unsigned

NumTPLists =

D

->getFriendTypeNumTemplateParameterLists();

866 for

(

unsigned

i = 0; i < NumTPLists; ++i)

867

printTemplateParameters(

D

->getFriendTypeTemplateParameterList(i));

869

Out << TSI->getType().getAsString(Policy);

872

dyn_cast<FunctionDecl>(

D

->getFriendDecl())) {

874

VisitFunctionDecl(FD);

877

dyn_cast<FunctionTemplateDecl>(

D

->getFriendDecl())) {

879

VisitFunctionTemplateDecl(FTD);

882

dyn_cast<ClassTemplateDecl>(

D

->getFriendDecl())) {

884

VisitRedeclarableTemplateDecl(CTD);

887 if

(

D

->isPackExpansion())

891void

DeclPrinter::VisitFieldDecl(

FieldDecl

*

D

) {

896

Out <<

"__module_private__ "

;

899

stream(Policy,

D

->getName(), Indentation);

901 if

(

D

->isBitField()) {

903 D

->getBitWidth()->printPretty(Out,

nullptr

, Policy, Indentation,

"\n"

,

907 Expr

*

Init

=

D

->getInClassInitializer();

913 Init

->printPretty(Out,

nullptr

, Policy, Indentation,

"\n"

, &Context);

915

prettyPrintAttributes(

D

);

918void

DeclPrinter::VisitLabelDecl(

LabelDecl

*

D

) {

922void

DeclPrinter::VisitVarDecl(

VarDecl

*

D

) {

923

prettyPrintPragmas(

D

);

925

prettyPrintAttributes(

D

, AttrPosAsWritten::Left);

927 if

(

const auto

*Param = dyn_cast<ParmVarDecl>(

D

);

928

Param && Param->isExplicitObjectParameter())

932

?

D

->getTypeSourceInfo()->getType()

940 switch

(

D

->getTSCSpec()) {

947

Out <<

"_Thread_local "

;

950

Out <<

"thread_local "

;

955

Out <<

"__module_private__ "

;

957 if

(

D

->isConstexpr()) {

958

Out <<

"constexpr "

;

959 T

.removeLocalConst();

969

?

D

->getIdentifier()->deuglifiedName()

972

prettyPrintAttributes(

D

, AttrPosAsWritten::Right);

976 bool

ImplicitInit =

false

;

977 if

(

D

->isCXXForRangeDecl()) {

979

ImplicitInit =

true

;

981

dyn_cast<CXXConstructExpr>(

Init

->IgnoreImplicit())) {

983

!Construct->isListInitialization()) {

984

ImplicitInit = Construct->getNumArgs() == 0 ||

985

Construct->getArg(0)->isDefaultArgument();

995

SubPolicy.SuppressSpecifiers =

false

;

996

SubPolicy.IncludeTagDefinition =

false

;

997 Init

->printPretty(Out,

nullptr

, SubPolicy, Indentation,

"\n"

, &Context);

1010 D

->getAsmString()->printPretty(Out,

nullptr

, Policy, Indentation,

"\n"

,

1016

assert(

D

->getStmt());

1017 D

->getStmt()->printPretty(Out,

nullptr

, Policy, Indentation,

"\n"

, &Context);

1020void

DeclPrinter::VisitImportDecl(

ImportDecl

*

D

) {

1021

Out <<

"@import "

<<

D

->getImportedModule()->getFullModuleName()

1026

Out <<

"static_assert("

;

1027 D

->getAssertExpr()->printPretty(Out,

nullptr

, Policy, Indentation,

"\n"

,

1029 if

(

Expr

*

E

=

D

->getMessage()) {

1031 E

->

printPretty

(Out,

nullptr

, Policy, Indentation,

"\n"

, &Context);

1040 if

(

D

->isInline())

1043

Out <<

"namespace "

;

1044 if

(

D

->getDeclName())

1045

Out <<

D

->getDeclName() <<

' '

;

1048

VisitDeclContext(

D

);

1053

Out <<

"using namespace "

;

1054 if

(

D

->getQualifier())

1055 D

->getQualifier()->

print

(Out, Policy);

1056

Out << *

D

->getNominatedNamespaceAsWritten();

1060

Out <<

"namespace "

<< *

D

<<

" = "

;

1061 if

(

D

->getQualifier())

1062 D

->getQualifier()->

print

(Out, Policy);

1063

Out << *

D

->getAliasedNamespace();

1066void

DeclPrinter::VisitEmptyDecl(

EmptyDecl

*

D

) {

1067

prettyPrintAttributes(

D

);

1073

Out <<

"__module_private__ "

;

1075

Out <<

D

->getKindName() <<

' '

;

1079 if

(prettyPrintAttributes(

D

, AttrPosAsWritten::Left))

1082 if

(

D

->getIdentifier()) {

1083 if

(

auto

*NNS =

D

->getQualifier())

1084

NNS->print(Out, Policy);

1087 if

(

auto

*S = dyn_cast<ClassTemplateSpecializationDecl>(

D

)) {

1089

S->getSpecializedTemplate()->getTemplateParameters();

1091

S->getTemplateArgsAsWritten();

1093

printTemplateArguments(TArgAsWritten->

arguments

(), TParams);

1095

printTemplateArguments(S->getTemplateArgs().asArray(), TParams);

1099

prettyPrintAttributes(

D

, AttrPosAsWritten::Right);

1101 if

(

D

->isCompleteDefinition()) {

1104 if

(

D

->getNumBases()) {

1107

BaseEnd =

D

->bases_end();

Base

!= BaseEnd; ++

Base

) {

1108 if

(

Base

!=

D

->bases_begin())

1111 if

(

Base

->isVirtual())

1119

Out <<

Base

->getType().getAsString(Policy);

1121 if

(

Base

->isPackExpansion())

1133

VisitDeclContext(

D

);

1145 "unknown language in linkage specification"

);

1149

Out <<

"extern \""

<< l <<

"\" "

;

1150 if

(

D

->hasBraces()) {

1152

VisitDeclContext(

D

);

1155

Visit(*

D

->decls_begin());

1159 bool

OmitTemplateKW) {

1166 if

(!OmitTemplateKW)

1167

Out <<

"template "

;

1170 bool

NeedComma =

false

;

1171 for

(

const Decl

*Param : *Params) {

1172 if

(Param->isImplicit())

1180 if

(

const auto

*TTP = dyn_cast<TemplateTypeParmDecl>(Param)) {

1181

VisitTemplateTypeParmDecl(TTP);

1182

}

else if

(

auto

NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {

1183

VisitNonTypeTemplateParmDecl(NTTP);

1184

}

else if

(

auto

TTPD = dyn_cast<TemplateTemplateParmDecl>(Param)) {

1185

VisitTemplateDecl(TTPD);

1192 if

(

const Expr

*RequiresClause = Params->getRequiresClause()) {

1193

Out <<

" requires "

;

1194

RequiresClause->printPretty(Out,

nullptr

, Policy, Indentation,

"\n"

,

1198 if

(!OmitTemplateKW)

1205 for

(

size_t

I = 0,

E

= Args.size(); I <

E

; ++I) {

1209

Args[I].print(Policy, Out,

true

);

1211

Args[I].print(Policy, Out,

1213

Policy, Params, I));

1221 for

(

size_t

I = 0,

E

= Args.size(); I <

E

; ++I) {

1225

Args[I].getArgument().print(Policy, Out,

true

);

1227

Args[I].getArgument().print(

1235void

DeclPrinter::VisitTemplateDecl(

const TemplateDecl

*

D

) {

1236

printTemplateParameters(

D

->getTemplateParameters());

1239

dyn_cast<TemplateTemplateParmDecl>(

D

)) {

1240 if

(TTP->wasDeclaredWithTypename())

1245 if

(TTP->isParameterPack())

1247 else if

(TTP->getDeclName())

1250 if

(TTP->getDeclName()) {

1252

Out << TTP->getIdentifier()->deuglifiedName();

1254

Out << TTP->getDeclName();

1256

}

else if

(

auto

*TD =

D

->getTemplatedDecl())

1258 else if

(

const auto

*Concept = dyn_cast<ConceptDecl>(

D

)) {

1259

Out <<

"concept "

<<

Concept

->getName() <<

" = "

;

1260 Concept

->getConstraintExpr()->printPretty(Out,

nullptr

, Policy, Indentation,

1266

prettyPrintPragmas(

D

->getTemplatedDecl());

1270

I < NumTemplateParams; ++I)

1273

VisitRedeclarableTemplateDecl(

D

);

1276 if

(

D

->getTemplatedDecl()->

hasAttr

<OMPDeclareTargetDeclAttr>())

1277

Out <<

"#pragma omp end declare target\n"

;

1281 if

(PrintInstantiation &&

1282

!isa<CXXDeductionGuideDecl>(

D

->getTemplatedDecl())) {

1285 if

(PrevDecl->

isDefined

(Def) && Def != PrevDecl)

1287 for

(

auto

*I :

D

->specializations())

1292

prettyPrintPragmas(I);

1299

VisitRedeclarableTemplateDecl(

D

);

1301 if

(PrintInstantiation) {

1302 for

(

auto

*I :

D

->specializations())

1304 if

(

D

->isThisDeclarationADefinition())

1313void

DeclPrinter::VisitClassTemplateSpecializationDecl(

1315

Out <<

"template<> "

;

1316

VisitCXXRecordDecl(

D

);

1319void

DeclPrinter::VisitClassTemplatePartialSpecializationDecl(

1321

printTemplateParameters(

D

->getTemplateParameters());

1322

VisitCXXRecordDecl(

D

);

1329void

DeclPrinter::PrintObjCMethodType(

ASTContext

&Ctx,

1356 unsigned First

=

true

;

1357 for

(

auto

*Param : *Params) {

1364 switch

(Param->getVariance()) {

1369

Out <<

"__covariant "

;

1373

Out <<

"__contravariant "

;

1377

Out << Param->getDeclName();

1379 if

(Param->hasExplicitBound()) {

1380

Out <<

" : "

<< Param->getUnderlyingType().getAsString(Policy);

1397

std::string::size_type pos, lastPos = 0;

1398 for

(

const auto

*PI : OMD->

parameters

()) {

1400

pos =

name

.find_first_of(

':'

, lastPos);

1403

Out <<

name

.substr(lastPos, pos - lastPos) <<

':'

;

1405

PI->getObjCDeclQualifier(),

1417

prettyPrintAttributes(OMD);

1432 bool

eolnOut =

false

;

1434

Out <<

"@implementation "

<< I <<

" : "

<< *SID;

1436

Out <<

"@implementation "

<< I;

1442 for

(

const auto

*I : OID->

ivars

()) {

1443

Indent() << I->getASTContext().getUnqualifiedObjCPointerType(I->getType()).

1453

VisitDeclContext(OID,

false

);

1464

Out <<

"@class "

<< I;

1467

PrintObjCTypeParams(TypeParams);

1473 bool

eolnOut =

false

;

1475

prettyPrintAttributes(OID);

1479

Out <<

"@interface "

<< I;

1482

PrintObjCTypeParams(TypeParams);

1490 if

(!Protocols.

empty

()) {

1492 E

= Protocols.

end

(); I !=

E

; ++I)

1493

Out << (I == Protocols.

begin

() ?

'<'

:

','

) << **I;

1501 for

(

const auto

*I : OID->

ivars

()) {

1502

Indent() << I->getASTContext()

1503

.getUnqualifiedObjCPointerType(I->getType())

1504

.getAsString(Policy) <<

' '

<< *I <<

";\n"

;

1514

VisitDeclContext(OID,

false

);

1523

Out <<

"@protocol "

<< *PID <<

";\n"

;

1528 if

(!Protocols.

empty

()) {

1529

Out <<

"@protocol "

<< *PID;

1531 E

= Protocols.

end

(); I !=

E

; ++I)

1532

Out << (I == Protocols.

begin

() ?

'<'

:

','

) << **I;

1535

Out <<

"@protocol "

<< *PID <<

'\n'

;

1536

VisitDeclContext(PID,

false

);

1541

Out <<

"@implementation "

;

1545

Out <<

"<<error-type>>"

;

1546

Out <<

'('

<< *PID <<

")\n"

;

1548

VisitDeclContext(PID,

false

);

1554

Out <<

"@interface "

;

1558

Out <<

"<<error-type>>"

;

1560

PrintObjCTypeParams(TypeParams);

1562

Out <<

"("

<< *PID <<

")\n"

;

1563 if

(PID->ivar_size() > 0) {

1566 for

(

const auto

*I : PID->ivars())

1567

Indent() << I->getASTContext().getUnqualifiedObjCPointerType(I->getType()).

1573

VisitDeclContext(PID,

false

);

1580

Out <<

"@compatibility_alias "

<< *AID

1595

Out <<

"@required\n"

;

1597

Out <<

"@optional\n"

;

1601

Out <<

"@property"

;

1606

Out << (first ?

""

:

", "

) <<

"class"

;

1611

Out << (first ?

""

:

", "

) <<

"direct"

;

1617

Out << (first ?

""

:

", "

) <<

"nonatomic"

;

1621

Out << (first ?

""

:

", "

) <<

"atomic"

;

1626

Out << (first ?

""

:

", "

) <<

"assign"

;

1630

Out << (first ?

""

:

", "

) <<

"retain"

;

1635

Out << (first ?

""

:

", "

) <<

"strong"

;

1639

Out << (first ?

""

:

", "

) <<

"copy"

;

1643

Out << (first ?

""

:

", "

) <<

"weak"

;

1648

Out << (first ?

""

:

", "

) <<

"unsafe_unretained"

;

1654

Out << (first ?

""

:

", "

) <<

"readwrite"

;

1658

Out << (first ?

""

:

", "

) <<

"readonly"

;

1663

Out << (first ?

""

:

", "

) <<

"getter = "

;

1668

Out << (first ?

""

:

", "

) <<

"setter = "

;

1679

Out << (first ?

""

:

", "

) <<

"null_resettable"

;

1681

Out << (first ?

""

:

", "

)

1693

Out <<

' '

<< TypeStr;

1694 if

(!StringRef(TypeStr).ends_with(

"*"

))

1703

Out <<

"@synthesize "

;

1705

Out <<

"@dynamic "

;

1711void

DeclPrinter::VisitUsingDecl(

UsingDecl

*

D

) {

1712 if

(!

D

->isAccessDeclaration())

1714 if

(

D

->hasTypename())

1715

Out <<

"typename "

;

1716 D

->getQualifier()->

print

(Out, Policy);

1720 for

(

const auto

*Shadow :

D

->shadows()) {

1721 if

(

const auto

*ConstructorShadow =

1722

dyn_cast<ConstructorUsingShadowDecl>(Shadow)) {

1723

assert(Shadow->getDeclContext() == ConstructorShadow->getDeclContext());

1724

Out << *ConstructorShadow->getNominatedBaseClass();

1732

Out <<

"using enum "

<<

D

->getEnumDecl();

1737

Out <<

"using typename "

;

1738 D

->getQualifier()->

print

(Out, Policy);

1739

Out <<

D

->getDeclName();

1743 if

(!

D

->isAccessDeclaration())

1745 D

->getQualifier()->

print

(Out, Policy);

1746

Out <<

D

->getDeclName();

1754

Out <<

"#pragma omp threadprivate"

;

1755 if

(!

D

->varlist_empty()) {

1757 E

=

D

->varlist_end();

1759

Out << (I ==

D

->varlist_begin() ?

'('

:

','

);

1760 NamedDecl

*ND = cast<DeclRefExpr>(*I)->getDecl();

1768 if

(

D

->isCBuffer())

1775

prettyPrintAttributes(

D

);

1778

VisitDeclContext(

D

);

1783

Out <<

"#pragma omp allocate"

;

1784 if

(!

D

->varlist_empty()) {

1786 E

=

D

->varlist_end();

1788

Out << (I ==

D

->varlist_begin() ?

'('

:

','

);

1789 NamedDecl

*ND = cast<DeclRefExpr>(*I)->getDecl();

1794 if

(!

D

->clauselist_empty()) {

1804

Out <<

"#pragma omp requires "

;

1805 if

(!

D

->clauselist_empty()) {

1807 for

(

auto

I =

D

->clauselist_begin(),

E

=

D

->clauselist_end(); I !=

E

; ++I)

1814

Out <<

"#pragma omp declare reduction ("

;

1816 const char

*OpName =

1818

assert(OpName &&

"not an overloaded operator"

);

1821

assert(

D

->getDeclName().isIdentifier());

1822 D

->printName(Out, Policy);

1825 D

->getType().

print

(Out, Policy);

1827 D

->getCombiner()->printPretty(Out,

nullptr

, Policy, 0,

"\n"

, &Context);

1829 if

(

auto

*

Init

=

D

->getInitializer()) {

1830

Out <<

" initializer("

;

1831 switch

(

D

->getInitializerKind()) {

1833

Out <<

"omp_priv("

;

1836

Out <<

"omp_priv = "

;

1841 Init

->printPretty(Out,

nullptr

, Policy, 0,

"\n"

, &Context);

1851

Out <<

"#pragma omp declare mapper ("

;

1852 D

->printName(Out, Policy);

1854 D

->getType().

print

(Out, Policy);

1856

Out <<

D

->getVarName();

1858 if

(!

D

->clauselist_empty()) {

1860 for

(

auto

*

C

:

D

->clauselists()) {

1869 D

->getInit()->printPretty(Out,

nullptr

, Policy, Indentation,

"\n"

, &Context);

1874

TC->

print

(Out, Policy);

1899void

DeclPrinter::VisitNonTypeTemplateParmDecl(

Defines the clang::ASTContext interface.

Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....

static DeclPrinter::AttrPosAsWritten getPosAsWritten(const Attr *A, const Decl *D)

static QualType getDeclType(Decl *D)

static QualType GetBaseType(QualType T)

static void MaybePrintTagKeywordIfSupressingScopes(PrintingPolicy &Policy, QualType T, llvm::raw_ostream &Out)

static void printExplicitSpecifier(ExplicitSpecifier ES, llvm::raw_ostream &Out, PrintingPolicy &Policy, unsigned Indentation, const ASTContext &Context)

Defines the C++ template declaration subclasses.

Defines the clang::Expr interface and subclasses for C++ expressions.

Defines the clang::Module class, which describes a module in the source code.

Defines the SourceManager interface.

Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...

const LangOptions & getLangOpts() const

const clang::PrintingPolicy & getPrintingPolicy() const

QualType getUnqualifiedObjCPointerType(QualType type) const

getUnqualifiedObjCPointerType - Returns version of Objective-C pointer type with lifetime qualifier r...

Represents an array type, per C99 6.7.5.2 - Array Declarators.

Attr - This represents one attribute.

SourceLocation getLoc() const

static std::optional< NullabilityKind > stripOuterNullability(QualType &T)

Strip off the top-level nullability annotation on the given type, if it's there.

Represents a C++11 auto or C++14 decltype(auto) type, possibly constrained by a type-constraint.

Represents a base class of a C++ class.

Represents a call to a C++ constructor.

Represents a C++ constructor within a class.

Represents a C++ conversion function within a class.

Represents a C++ deduction guide declaration.

TemplateDecl * getDeducedTemplate() const

Get the template for which this guide performs deduction.

Represents a C++ struct/union/class.

Declaration of a class template.

Represents a class template specialization, which refers to a class template with a given set of temp...

decl_iterator - Iterates through the declarations stored within this context.

DeclContext - This is used only as base class of specific decl types that can act as declaration cont...

DeclContext * getParent()

getParent - Returns the containing DeclContext.

bool isTranslationUnit() const

void dumpDeclContext() const

decl_iterator decls_end() const

decl_iterator decls_begin() const

A simple visitor class that helps create declaration visitors.

Decl - This represents one declaration (or definition), e.g.

bool isModulePrivate() const

Whether this declaration was marked as being private to the module in which it was defined.

ASTContext & getASTContext() const LLVM_READONLY

bool isImplicit() const

isImplicit - Indicates whether the declaration was implicitly generated by the implementation.

virtual Stmt * getBody() const

getBody - If this Decl represents a declaration for a body of code, such as a function or method defi...

ObjCDeclQualifier

ObjCDeclQualifier - 'Qualifiers' written next to the return and parameter types in method declaration...

@ OBJC_TQ_CSNullability

The nullability qualifier is set when the nullability of the result or parameter was expressed via a ...

bool isInvalidDecl() const

SourceLocation getLocation() const

static void printGroup(Decl **Begin, unsigned NumDecls, raw_ostream &Out, const PrintingPolicy &Policy, unsigned Indentation=0)

AccessSpecifier getAccess() const

void print(raw_ostream &Out, unsigned Indentation=0, bool PrintInstantiation=false) const

std::string getAsString() const

Retrieve the human-readable string for this name.

TemplateParameterList * getTemplateParameterList(unsigned index) const

unsigned getNumTemplateParameterLists() const

Represents an empty-declaration.

An instance of this object exists for each enum constant that is defined.

Store information needed for an explicit specifier.

const Expr * getExpr() const

static ExplicitSpecifier getFromDecl(FunctionDecl *Function)

bool isSpecified() const

Determine if the declaration had an explicit specifier of any kind.

Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...

This represents one expression.

Represents a member of a struct/union/class.

FriendDecl - Represents the declaration of a friend entity, which can be a function,...

Represents a function declaration or definition.

bool isThisDeclarationADefinition() const

Returns whether this specific declaration of the function is also a definition that does not contain ...

bool isDefined(const FunctionDecl *&Definition, bool CheckForPendingFriendDefinition=false) const

Returns true if the function has a definition that does not need to be instantiated.

Represents a prototype with parameter type info, e.g.

ExceptionSpecificationType getExceptionSpecType() const

Get the kind of exception specification on this function.

bool hasTrailingReturn() const

Whether this function prototype has a trailing return type.

QualType getExceptionType(unsigned i) const

Return the ith exception type, where 0 <= i < getNumExceptions().

unsigned getNumExceptions() const

Return the number of types in the exception specification.

bool hasDynamicExceptionSpec() const

Return whether this function has a dynamic (throw) exception spec.

bool isVariadic() const

Whether this function prototype is variadic.

Expr * getNoexceptExpr() const

Return the expression inside noexcept(expression), or a null pointer if there is none (because the ex...

RefQualifierKind getRefQualifier() const

Retrieve the ref-qualifier associated with this function type.

Declaration of a template function.

FunctionType - C99 6.7.5.3 - Function Declarators.

HLSLBufferDecl - Represent a cbuffer or tbuffer declaration.

One of these records is kept for each identifier that is lexed.

StringRef deuglifiedName() const

If the identifier is an "uglified" reserved name, return a cleaned form.

Describes a module import declaration, which makes the contents of the named module visible in the cu...

Represents the declaration of a label.

Represents a linkage specification.

This represents a decl that may have a name.

IdentifierInfo * getIdentifier() const

Get the identifier that names this declaration, if there is one.

DeclarationName getDeclName() const

Get the actual, stored name of the declaration, which may be a special name.

std::string getNameAsString() const

Get a human-readable name for the declaration, even if it is one of the special kinds of names (C++ c...

void printQualifiedName(raw_ostream &OS) const

Returns a human-readable qualified name for this declaration, like A::B::i, for i being member of nam...

Represents a C++ namespace alias.

Represent a C++ namespace.

Represents a C++ nested name specifier, such as "\::std::vector<int>::".

NonTypeTemplateParmDecl - Declares a non-type template parameter, e.g., "Size" in.

bool hasDefaultArgument() const

Determine whether this template parameter has a default argument.

const TemplateArgumentLoc & getDefaultArgument() const

Retrieve the default argument, if any.

bool isParameterPack() const

Whether this parameter is a non-type template parameter pack.

This represents '#pragma omp allocate ...' directive.

MutableArrayRef< Expr * >::iterator varlist_iterator

Pseudo declaration for capturing expressions.

This is a basic class for representing single OpenMP clause.

This represents '#pragma omp declare mapper ...' directive.

This represents '#pragma omp declare reduction ...' directive.

This represents '#pragma omp requires...' directive.

This represents '#pragma omp threadprivate ...' directive.

MutableArrayRef< Expr * >::iterator varlist_iterator

ObjCCategoryDecl - Represents a category declaration.

ObjCInterfaceDecl * getClassInterface()

ObjCTypeParamList * getTypeParamList() const

Retrieve the type parameter list associated with this category or extension.

ObjCCategoryImplDecl - An object of this class encapsulates a category @implementation declaration.

ObjCCompatibleAliasDecl - Represents alias of a class.

const ObjCInterfaceDecl * getClassInterface() const

const ObjCInterfaceDecl * getClassInterface() const

ObjCImplementationDecl - Represents a class definition - this is where method definitions are specifi...

std::string getNameAsString() const

Get the name of the class associated with this interface.

unsigned ivar_size() const

const ObjCInterfaceDecl * getSuperClass() const

Represents an ObjC class declaration.

unsigned ivar_size() const

ObjCTypeParamList * getTypeParamListAsWritten() const

Retrieve the type parameters written on this particular declaration of the class.

bool isThisDeclarationADefinition() const

Determine whether this particular declaration of this class is actually also a definition.

const ObjCProtocolList & getReferencedProtocols() const

const ObjCObjectType * getSuperClassType() const

Retrieve the superclass type.

ObjCInterfaceDecl * getSuperClass() const

ObjCList - This is a simple template class used to hold various lists of decls etc,...

ObjCMethodDecl - Represents an instance or class method declaration.

ObjCDeclQualifier getObjCDeclQualifier() const

ArrayRef< ParmVarDecl * > parameters() const

param_const_iterator param_end() const

param_const_iterator param_begin() const

Stmt * getBody() const override

Retrieve the body of this method, if it has one.

Selector getSelector() const

bool isInstanceMethod() const

QualType getReturnType() const

Represents a pointer to an Objective C object.

Represents one property declaration in an Objective-C interface.

Selector getSetterName() const

Selector getGetterName() const

ObjCPropertyAttribute::Kind getPropertyAttributes() const

PropertyControl getPropertyImplementation() const

ObjCPropertyImplDecl - Represents implementation declaration of a property in a class or category imp...

ObjCIvarDecl * getPropertyIvarDecl() const

Kind getPropertyImplementation() const

ObjCPropertyDecl * getPropertyDecl() const

Represents an Objective-C protocol declaration.

bool isThisDeclarationADefinition() const

Determine whether this particular declaration is also the definition.

const ObjCProtocolList & getReferencedProtocols() const

Stores a list of Objective-C type parameters for a parameterized class or a category/extension thereo...

Represents a pack expansion of types.

Sugar for parentheses used when specifying types.

Represents a parameter to a function.

PointerType - C99 6.7.5.1 - Pointer Declarators.

A (possibly-)qualified type.

bool isNull() const

Return true if this QualType doesn't point to a type yet.

void print(raw_ostream &OS, const PrintingPolicy &Policy, const Twine &PlaceHolder=Twine(), unsigned Indentation=0) const

static std::string getAsString(SplitQualType split, const PrintingPolicy &Policy)

Represents a struct/union/class.

Base for LValueReferenceType and RValueReferenceType.

std::string getAsString() const

Derive the full selector name (e.g.

void print(llvm::raw_ostream &OS) const

Prints the full selector name (e.g. "foo:bar:").

Encodes a location in the source.

Represents a C++11 static_assert declaration.

void printPretty(raw_ostream &OS, PrinterHelper *Helper, const PrintingPolicy &Policy, unsigned Indentation=0, StringRef NewlineSymbol="\n", const ASTContext *Context=nullptr) const

void printPrettyControlled(raw_ostream &OS, PrinterHelper *Helper, const PrintingPolicy &Policy, unsigned Indentation=0, StringRef NewlineSymbol="\n", const ASTContext *Context=nullptr) const

StringLiteral - This represents a string literal expression, e.g.

Represents the declaration of a struct/union/class/enum.

A template argument list.

const TemplateArgument & getArgument() const

void print(const PrintingPolicy &Policy, raw_ostream &Out, bool IncludeType) const

Print this template argument to the given output stream.

The base class of all kinds of template declarations (e.g., class, function, etc.).

Stores a list of template parameters for a TemplateDecl and its derived classes.

NamedDecl * getParam(unsigned Idx)

void print(raw_ostream &Out, const ASTContext &Context, bool OmitTemplateKW=false) const

static bool shouldIncludeTypeForArgument(const PrintingPolicy &Policy, const TemplateParameterList *TPL, unsigned Idx)

TemplateTemplateParmDecl - Declares a template template parameter, e.g., "T" in.

Declaration of a template type parameter.

bool wasDeclaredWithTypename() const

Whether this template type parameter was declared with the 'typename' keyword.

const TemplateArgumentLoc & getDefaultArgument() const

Retrieve the default argument, if any.

const TypeConstraint * getTypeConstraint() const

Returns the type constraint associated with this template parameter (if any).

bool hasDefaultArgument() const

Determine whether this template parameter has a default argument.

bool isParameterPack() const

Returns whether this is a parameter pack.

A declaration that models statements at global scope.

The top declaration context.

Represents the declaration of a typedef-name via a C++11 alias-declaration.

Models the abbreviated syntax to constrain a template type parameter: template <convertible_to<string...

A container of type source information.

bool isStructureType() const

QualType getPointeeType() const

If this is a pointer, ObjC object pointer, or block pointer, this returns the respective pointee.

bool isSpecifierType() const

Returns true if this type can be represented by some set of type specifiers.

const T * getAs() const

Member-template getAs<specific type>'.

Represents the declaration of a typedef-name via the 'typedef' type specifier.

Base class for declarations which introduce a typedef-name.

Represents a dependent using declaration which was marked with typename.

Represents a dependent using declaration which was not marked with typename.

Represents a C++ using-declaration.

Represents C++ using-directive.

Represents a C++ using-enum-declaration.

Represents a shadow declaration implicitly introduced into a scope by a (resolved) using-declaration ...

Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...

Represents a variable declaration or definition.

static const char * getStorageClassSpecifierString(StorageClass SC)

Return the string used to specify the storage class SC.

@ CInit

C-style initialization with assignment.

@ CallInit

Call-style initialization (C++98)

Represents a GCC generic vector type.

@ kind_nullability

Indicates that the nullability of the type was spelled with a property attribute rather than a type q...

RangeSelector name(std::string ID)

Given a node with a "name", (like NamedDecl, DeclRefExpr, CxxCtorInitializer, and TypeLoc) selects th...

The JSON file list parser is used to communicate input to InstallAPI.

llvm::StringRef getAccessSpelling(AccessSpecifier AS)

@ Unspecified

Whether values of this type can be null is (explicitly) unspecified.

@ ICIS_ListInit

Direct list-initialization.

@ RQ_None

No ref-qualifier was provided.

@ RQ_LValue

An lvalue ref-qualifier was provided (&).

@ RQ_RValue

An rvalue ref-qualifier was provided (&&).

StorageClass

Storage classes.

@ TSCS_thread_local

C++11 thread_local.

@ TSCS__Thread_local

C11 _Thread_local.

@ TSCS___thread

GNU __thread.

llvm::StringRef getNullabilitySpelling(NullabilityKind kind, bool isContextSensitive=false)

Retrieve the spelling of the given nullability kind.

bool isComputedNoexcept(ExceptionSpecificationType ESpecType)

bool isNoexceptExceptionSpec(ExceptionSpecificationType ESpecType)

const FunctionProtoType * T

llvm::StringRef getAsString(SyncScope S)

@ TSK_ImplicitInstantiation

This template specialization was implicitly instantiated from a template.

@ Invariant

The parameter is invariant: must match exactly.

@ Contravariant

The parameter is contravariant, e.g., X<T> is a subtype of X when the type parameter is covariant and...

@ Covariant

The parameter is covariant, e.g., X<T> is a subtype of X when the type parameter is covariant and T i...

const char * getOperatorSpelling(OverloadedOperatorKind Operator)

Retrieve the spelling of the given overloaded operator, without the preceding "operator" keyword.

@ EST_MSAny

Microsoft throw(...) extension.

AccessSpecifier

A C++ access specifier (public, private, protected), plus the special value "none" which means differ...

Represents an explicit template argument list in C++, e.g., the "<int>" in "sort<int>".

llvm::ArrayRef< TemplateArgumentLoc > arguments() const

Describes how types, statements, expressions, and declarations should be printed.

unsigned SuppressUnwrittenScope

Suppress printing parts of scope specifiers that are never written, e.g., for anonymous namespaces.

unsigned FullyQualifiedName

When true, print the fully qualified name of function declarations.

unsigned PrintCanonicalTypes

Whether to print types as written or canonically.

unsigned PolishForDeclaration

When true, do certain refinement needed for producing proper declaration tag; such as,...

unsigned CleanUglifiedParameters

Whether to strip underscores when printing reserved parameter names.

unsigned SuppressSpecifiers

Whether we should suppress printing of the actual specifiers for the given type or declaration.

unsigned SuppressTagKeyword

Whether type printing should skip printing the tag keyword.

unsigned SuppressScope

Suppresses printing of scope specifiers.

unsigned Indentation

The number of spaces to use to indent each line.

unsigned SuppressInitializers

Suppress printing of variable initializers.

unsigned IncludeTagDefinition

When true, include the body of a tag definition.

unsigned TerseOutput

Provide a 'terse' output.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4