clang  8.0.0
Public Types | Public Member Functions | List of all members
clang::Scope Class Reference

Scope - A scope is a transient data structure that is used while parsing the program. More...

#include "clang/Sema/Scope.h"

Public Types

enum  ScopeFlags {
  FnScope = 0x01, BreakScope = 0x02, ContinueScope = 0x04, DeclScope = 0x08,
  ControlScope = 0x10, ClassScope = 0x20, BlockScope = 0x40, TemplateParamScope = 0x80,
  FunctionPrototypeScope = 0x100, FunctionDeclarationScope = 0x200, AtCatchScope = 0x400, ObjCMethodScope = 0x800,
  SwitchScope = 0x1000, TryScope = 0x2000, FnTryCatchScope = 0x4000, OpenMPDirectiveScope = 0x8000,
  OpenMPLoopDirectiveScope = 0x10000, OpenMPSimdDirectiveScope = 0x20000, EnumScope = 0x40000, SEHTryScope = 0x80000,
  SEHExceptScope = 0x100000, SEHFilterScope = 0x200000, CompoundStmtScope = 0x400000, ClassInheritanceScope = 0x800000
}
 ScopeFlags - These are bitfields that are or'd together when creating a scope, which defines the sorts of things the scope contains. More...
 
using decl_range = llvm::iterator_range< DeclSetTy::iterator >
 
using using_directives_range = llvm::iterator_range< UsingDirectivesTy::iterator >
 

Public Member Functions

 Scope (Scope *Parent, unsigned ScopeFlags, DiagnosticsEngine &Diag)
 
unsigned getFlags () const
 getFlags - Return the flags for this scope. More...
 
void setFlags (unsigned F)
 
bool isBlockScope () const
 isBlockScope - Return true if this scope correspond to a closure. More...
 
const ScopegetParent () const
 getParent - Return the scope that this is nested in. More...
 
ScopegetParent ()
 
const ScopegetFnParent () const
 getFnParent - Return the closest scope that is a function body. More...
 
ScopegetFnParent ()
 
const ScopegetMSLastManglingParent () const
 
ScopegetMSLastManglingParent ()
 
ScopegetContinueParent ()
 getContinueParent - Return the closest scope that a continue statement would be affected by. More...
 
const ScopegetContinueParent () const
 
ScopegetBreakParent ()
 getBreakParent - Return the closest scope that a break statement would be affected by. More...
 
const ScopegetBreakParent () const
 
ScopegetBlockParent ()
 
const ScopegetBlockParent () const
 
ScopegetTemplateParamParent ()
 
const ScopegetTemplateParamParent () const
 
unsigned getDepth () const
 Returns the depth of this scope. The translation-unit has scope depth 0. More...
 
unsigned getFunctionPrototypeDepth () const
 Returns the number of function prototype scopes in this scope chain. More...
 
unsigned getNextFunctionPrototypeIndex ()
 Return the number of parameters declared in this function prototype, increasing it by one for the next call. More...
 
decl_range decls () const
 
bool decl_empty () const
 
void AddDecl (Decl *D)
 
void RemoveDecl (Decl *D)
 
void incrementMSManglingNumber ()
 
void decrementMSManglingNumber ()
 
unsigned getMSLastManglingNumber () const
 
unsigned getMSCurManglingNumber () const
 
bool isDeclScope (Decl *D)
 isDeclScope - Return true if this is the scope that the specified decl is declared in. More...
 
DeclContextgetEntity () const
 
void setEntity (DeclContext *E)
 
bool hasErrorOccurred () const
 
bool hasUnrecoverableErrorOccurred () const
 
bool isFunctionScope () const
 isFunctionScope() - Return true if this scope is a function scope. More...
 
bool isClassScope () const
 isClassScope - Return true if this scope is a class/struct/union scope. More...
 
bool isInCXXInlineMethodScope () const
 isInCXXInlineMethodScope - Return true if this scope is a C++ inline method scope or is inside one. More...
 
bool isInObjcMethodScope () const
 isInObjcMethodScope - Return true if this scope is, or is contained in, an Objective-C method body. More...
 
bool isInObjcMethodOuterScope () const
 isInObjcMethodOuterScope - Return true if this scope is an Objective-C method outer most body. More...
 
bool isTemplateParamScope () const
 isTemplateParamScope - Return true if this scope is a C++ template parameter scope. More...
 
bool isFunctionPrototypeScope () const
 isFunctionPrototypeScope - Return true if this scope is a function prototype scope. More...
 
bool isAtCatchScope () const
 isAtCatchScope - Return true if this scope is @catch. More...
 
bool isSwitchScope () const
 isSwitchScope - Return true if this scope is a switch scope. More...
 
bool isOpenMPDirectiveScope () const
 Determines whether this scope is the OpenMP directive scope. More...
 
bool isOpenMPLoopDirectiveScope () const
 Determine whether this scope is some OpenMP loop directive scope (for example, 'omp for', 'omp simd'). More...
 
bool isOpenMPSimdDirectiveScope () const
 Determine whether this scope is (or is nested into) some OpenMP loop simd directive scope (for example, 'omp simd', 'omp for simd'). More...
 
bool isOpenMPLoopScope () const
 Determine whether this scope is a loop having OpenMP loop directive attached. More...
 
bool isTryScope () const
 Determine whether this scope is a C++ 'try' block. More...
 
bool isSEHTryScope () const
 Determine whether this scope is a SEH '__try' block. More...
 
bool isSEHExceptScope () const
 Determine whether this scope is a SEH '__except' block. More...
 
bool isCompoundStmtScope () const
 Determine whether this scope is a compound statement scope. More...
 
bool Contains (const Scope &rhs) const
 Returns if rhs has a higher scope depth than this. More...
 
bool containedInPrototypeScope () const
 containedInPrototypeScope - Return true if this or a parent scope is a FunctionPrototypeScope. More...
 
void PushUsingDirective (UsingDirectiveDecl *UDir)
 
using_directives_range using_directives ()
 
void addNRVOCandidate (VarDecl *VD)
 
void setNoNRVO ()
 
void mergeNRVOIntoParent ()
 
void Init (Scope *parent, unsigned flags)
 Init - This is used by the parser to implement scope caching. More...
 
void AddFlags (unsigned Flags)
 Sets up the specified scope flags and adjusts the scope state variables accordingly. More...
 
void dumpImpl (raw_ostream &OS) const
 
void dump () const
 

Detailed Description

Scope - A scope is a transient data structure that is used while parsing the program.

It assists with resolving identifiers to the appropriate declaration.

Definition at line 41 of file Scope.h.

Member Typedef Documentation

◆ decl_range

using clang::Scope::decl_range = llvm::iterator_range<DeclSetTy::iterator>

Definition at line 279 of file Scope.h.

◆ using_directives_range

using clang::Scope::using_directives_range = llvm::iterator_range<UsingDirectivesTy::iterator>

Definition at line 463 of file Scope.h.

Member Enumeration Documentation

◆ ScopeFlags

ScopeFlags - These are bitfields that are or'd together when creating a scope, which defines the sorts of things the scope contains.

Enumerator
FnScope 

This indicates that the scope corresponds to a function, which means that labels are set here.

BreakScope 

This is a while, do, switch, for, etc that can have break statements embedded into it.

ContinueScope 

This is a while, do, for, which can have continue statements embedded into it.

DeclScope 

This is a scope that can contain a declaration.

Some scopes just contain loop constructs but don't contain decls.

ControlScope 

The controlling scope in a if/switch/while/for statement.

ClassScope 

The scope of a struct/union/class definition.

BlockScope 

This is a scope that corresponds to a block/closure object.

Blocks serve as top-level scopes for some objects like labels, they also prevent things like break and continue. BlockScopes always have the FnScope and DeclScope flags set as well.

TemplateParamScope 

This is a scope that corresponds to the template parameters of a C++ template.

Template parameter scope starts at the 'template' keyword and ends when the template declaration ends.

FunctionPrototypeScope 

This is a scope that corresponds to the parameters within a function prototype.

FunctionDeclarationScope 

This is a scope that corresponds to the parameters within a function prototype for a function declaration (as opposed to any other kind of function declarator).

Always has FunctionPrototypeScope set as well.

AtCatchScope 

This is a scope that corresponds to the Objective-C @catch statement.

ObjCMethodScope 

This scope corresponds to an Objective-C method body.

It always has FnScope and DeclScope set as well.

SwitchScope 

This is a scope that corresponds to a switch statement.

TryScope 

This is the scope of a C++ try statement.

FnTryCatchScope 

This is the scope for a function-level C++ try or catch scope.

OpenMPDirectiveScope 

This is the scope of OpenMP executable directive.

OpenMPLoopDirectiveScope 

This is the scope of some OpenMP loop directive.

OpenMPSimdDirectiveScope 

This is the scope of some OpenMP simd directive.

For example, it is used for 'omp simd', 'omp for simd'. This flag is propagated to children scopes.

EnumScope 

This scope corresponds to an enum.

SEHTryScope 

This scope corresponds to an SEH try.

SEHExceptScope 

This scope corresponds to an SEH except.

SEHFilterScope 

We are currently in the filter expression of an SEH except block.

CompoundStmtScope 

This is a compound statement scope.

ClassInheritanceScope 

We are between inheritance colon and the real class/struct definition scope.

Definition at line 45 of file Scope.h.

Constructor & Destructor Documentation

◆ Scope()

clang::Scope::Scope ( Scope Parent,
unsigned  ScopeFlags,
DiagnosticsEngine Diag 
)
inline

Definition at line 212 of file Scope.h.

Member Function Documentation

◆ AddDecl()

void clang::Scope::AddDecl ( Decl D)
inline

◆ AddFlags()

void Scope::AddFlags ( unsigned  Flags)

Sets up the specified scope flags and adjusts the scope state variables accordingly.

Definition at line 108 of file Scope.cpp.

◆ addNRVOCandidate()

void clang::Scope::addNRVOCandidate ( VarDecl VD)
inline

Definition at line 470 of file Scope.h.

Referenced by clang::Sema::ActOnReturnStmt(), and mergeNRVOIntoParent().

◆ containedInPrototypeScope()

bool Scope::containedInPrototypeScope ( ) const

containedInPrototypeScope - Return true if this or a parent scope is a FunctionPrototypeScope.

Definition at line 98 of file Scope.cpp.

◆ Contains()

bool clang::Scope::Contains ( const Scope rhs) const
inline

Returns if rhs has a higher scope depth than this.

The caller is responsible for calling this only if one of the two scopes is an ancestor of the other.

Definition at line 452 of file Scope.h.

◆ decl_empty()

bool clang::Scope::decl_empty ( ) const
inline

Definition at line 285 of file Scope.h.

◆ decls()

decl_range clang::Scope::decls ( ) const
inline

Definition at line 281 of file Scope.h.

Referenced by LookupVisibleDecls().

◆ decrementMSManglingNumber()

void clang::Scope::decrementMSManglingNumber ( )
inline

Definition at line 302 of file Scope.h.

◆ dump()

LLVM_DUMP_METHOD void Scope::dump ( ) const

Definition at line 137 of file Scope.cpp.

References dumpImpl().

◆ dumpImpl()

void Scope::dumpImpl ( raw_ostream &  OS) const

◆ getBlockParent() [1/2]

Scope* clang::Scope::getBlockParent ( )
inline

Definition at line 257 of file Scope.h.

◆ getBlockParent() [2/2]

const Scope* clang::Scope::getBlockParent ( ) const
inline

Definition at line 258 of file Scope.h.

◆ getBreakParent() [1/2]

Scope* clang::Scope::getBreakParent ( )
inline

getBreakParent - Return the closest scope that a break statement would be affected by.

Definition at line 250 of file Scope.h.

Referenced by AddKeywordsToConsumer().

◆ getBreakParent() [2/2]

const Scope* clang::Scope::getBreakParent ( ) const
inline

Definition at line 253 of file Scope.h.

◆ getContinueParent() [1/2]

Scope* clang::Scope::getContinueParent ( )
inline

getContinueParent - Return the closest scope that a continue statement would be affected by.

Definition at line 240 of file Scope.h.

Referenced by AddKeywordsToConsumer().

◆ getContinueParent() [2/2]

const Scope* clang::Scope::getContinueParent ( ) const
inline

Definition at line 244 of file Scope.h.

◆ getDepth()

unsigned clang::Scope::getDepth ( ) const
inline

Returns the depth of this scope. The translation-unit has scope depth 0.

Definition at line 264 of file Scope.h.

References Depth.

◆ getEntity()

DeclContext* clang::Scope::getEntity ( ) const
inline

◆ getFlags()

unsigned clang::Scope::getFlags ( ) const
inline

getFlags - Return the flags for this scope.

Definition at line 218 of file Scope.h.

Referenced by clang::Sema::ActOnUsingDirective(), clang::Sema::CheckTemplateDeclScope(), dumpImpl(), IsInFnTryBlockHandler(), and SetupFixedPointError().

◆ getFnParent() [1/2]

const Scope* clang::Scope::getFnParent ( ) const
inline

getFnParent - Return the closest scope that is a function body.

Definition at line 230 of file Scope.h.

Referenced by clang::Sema::ActOnReturnStmt(), clang::Sema::CodeCompleteInPreprocessorConditionalExclusion(), and IsInFnTryBlockHandler().

◆ getFnParent() [2/2]

Scope* clang::Scope::getFnParent ( )
inline

Definition at line 231 of file Scope.h.

◆ getFunctionPrototypeDepth()

unsigned clang::Scope::getFunctionPrototypeDepth ( ) const
inline

Returns the number of function prototype scopes in this scope chain.

Definition at line 268 of file Scope.h.

◆ getMSCurManglingNumber()

unsigned clang::Scope::getMSCurManglingNumber ( ) const
inline

Definition at line 315 of file Scope.h.

Referenced by dumpImpl().

◆ getMSLastManglingNumber()

unsigned clang::Scope::getMSLastManglingNumber ( ) const
inline

Definition at line 309 of file Scope.h.

Referenced by dumpImpl().

◆ getMSLastManglingParent() [1/2]

const Scope* clang::Scope::getMSLastManglingParent ( ) const
inline

Definition at line 233 of file Scope.h.

◆ getMSLastManglingParent() [2/2]

Scope* clang::Scope::getMSLastManglingParent ( )
inline

Definition at line 236 of file Scope.h.

◆ getNextFunctionPrototypeIndex()

unsigned clang::Scope::getNextFunctionPrototypeIndex ( )
inline

Return the number of parameters declared in this function prototype, increasing it by one for the next call.

Definition at line 274 of file Scope.h.

◆ getParent() [1/2]

const Scope* clang::Scope::getParent ( ) const
inline

◆ getParent() [2/2]

Scope* clang::Scope::getParent ( )
inline

Definition at line 227 of file Scope.h.

◆ getTemplateParamParent() [1/2]

Scope* clang::Scope::getTemplateParamParent ( )
inline

◆ getTemplateParamParent() [2/2]

const Scope* clang::Scope::getTemplateParamParent ( ) const
inline

Definition at line 261 of file Scope.h.

◆ hasErrorOccurred()

bool clang::Scope::hasErrorOccurred ( ) const
inline

Definition at line 328 of file Scope.h.

References clang::DiagnosticErrorTrap::hasErrorOccurred().

◆ hasUnrecoverableErrorOccurred()

bool clang::Scope::hasUnrecoverableErrorOccurred ( ) const
inline

◆ incrementMSManglingNumber()

void clang::Scope::incrementMSManglingNumber ( )
inline

Definition at line 295 of file Scope.h.

Referenced by clang::Sema::incrementMSManglingNumber().

◆ Init()

void Scope::Init ( Scope parent,
unsigned  flags 
)

Init - This is used by the parser to implement scope caching.

Definition at line 88 of file Scope.cpp.

References clang::DiagnosticErrorTrap::reset().

Referenced by clang::Parser::EnterScope().

◆ isAtCatchScope()

bool clang::Scope::isAtCatchScope ( ) const
inline

isAtCatchScope - Return true if this scope is @catch.

Definition at line 387 of file Scope.h.

Referenced by clang::Sema::ActOnObjCAtThrowStmt().

◆ isBlockScope()

bool clang::Scope::isBlockScope ( ) const
inline

isBlockScope - Return true if this scope correspond to a closure.

Definition at line 223 of file Scope.h.

◆ isClassScope()

bool clang::Scope::isClassScope ( ) const
inline

isClassScope - Return true if this scope is a class/struct/union scope.

Definition at line 338 of file Scope.h.

Referenced by AddKeywordsToConsumer().

◆ isCompoundStmtScope()

bool clang::Scope::isCompoundStmtScope ( ) const
inline

Determine whether this scope is a compound statement scope.

Definition at line 444 of file Scope.h.

◆ isDeclScope()

bool clang::Scope::isDeclScope ( Decl D)
inline

isDeclScope - Return true if this is the scope that the specified decl is declared in.

Definition at line 321 of file Scope.h.

Referenced by buildDeclareReductionRef(), and mergeNRVOIntoParent().

◆ isFunctionPrototypeScope()

bool clang::Scope::isFunctionPrototypeScope ( ) const
inline

isFunctionPrototypeScope - Return true if this scope is a function prototype scope.

Definition at line 382 of file Scope.h.

◆ isFunctionScope()

bool clang::Scope::isFunctionScope ( ) const
inline

isFunctionScope() - Return true if this scope is a function scope.

Definition at line 335 of file Scope.h.

◆ isInCXXInlineMethodScope()

bool clang::Scope::isInCXXInlineMethodScope ( ) const
inline

isInCXXInlineMethodScope - Return true if this scope is a C++ inline method scope or is inside one.

Definition at line 344 of file Scope.h.

◆ isInObjcMethodOuterScope()

bool clang::Scope::isInObjcMethodOuterScope ( ) const
inline

isInObjcMethodOuterScope - Return true if this scope is an Objective-C method outer most body.

Definition at line 365 of file Scope.h.

◆ isInObjcMethodScope()

bool clang::Scope::isInObjcMethodScope ( ) const
inline

isInObjcMethodScope - Return true if this scope is, or is contained in, an Objective-C method body.

Note that this method is not constant time.

Definition at line 354 of file Scope.h.

Referenced by CheckArrayDesignatorSyntax(), and takeDeclAttributes().

◆ isOpenMPDirectiveScope()

bool clang::Scope::isOpenMPDirectiveScope ( ) const
inline

Determines whether this scope is the OpenMP directive scope.

Definition at line 406 of file Scope.h.

◆ isOpenMPLoopDirectiveScope()

bool clang::Scope::isOpenMPLoopDirectiveScope ( ) const
inline

Determine whether this scope is some OpenMP loop directive scope (for example, 'omp for', 'omp simd').

Definition at line 412 of file Scope.h.

Referenced by isOpenMPLoopScope().

◆ isOpenMPLoopScope()

bool clang::Scope::isOpenMPLoopScope ( ) const
inline

Determine whether this scope is a loop having OpenMP loop directive attached.

Definition at line 429 of file Scope.h.

References isOpenMPLoopDirectiveScope(), and P.

◆ isOpenMPSimdDirectiveScope()

bool clang::Scope::isOpenMPSimdDirectiveScope ( ) const
inline

Determine whether this scope is (or is nested into) some OpenMP loop simd directive scope (for example, 'omp simd', 'omp for simd').

Definition at line 423 of file Scope.h.

◆ isSEHExceptScope()

bool clang::Scope::isSEHExceptScope ( ) const
inline

Determine whether this scope is a SEH '__except' block.

Definition at line 441 of file Scope.h.

◆ isSEHTryScope()

bool clang::Scope::isSEHTryScope ( ) const
inline

Determine whether this scope is a SEH '__try' block.

Definition at line 438 of file Scope.h.

Referenced by clang::Sema::ActOnSEHLeaveStmt().

◆ isSwitchScope()

bool clang::Scope::isSwitchScope ( ) const
inline

isSwitchScope - Return true if this scope is a switch scope.

Definition at line 392 of file Scope.h.

◆ isTemplateParamScope()

bool clang::Scope::isTemplateParamScope ( ) const
inline

isTemplateParamScope - Return true if this scope is a C++ template parameter scope.

Definition at line 376 of file Scope.h.

Referenced by clang::Sema::ActOnUsingDirective(), diagnoseDynamicExceptionSpecification(), and findOuterContext().

◆ isTryScope()

bool clang::Scope::isTryScope ( ) const
inline

Determine whether this scope is a C++ 'try' block.

Definition at line 435 of file Scope.h.

◆ mergeNRVOIntoParent()

void Scope::mergeNRVOIntoParent ( )

Definition at line 122 of file Scope.cpp.

References addNRVOCandidate(), getEntity(), getParent(), isDeclScope(), and setNoNRVO().

◆ PushUsingDirective()

void clang::Scope::PushUsingDirective ( UsingDirectiveDecl UDir)
inline

Definition at line 458 of file Scope.h.

Referenced by clang::Sema::PushUsingDirective().

◆ RemoveDecl()

void clang::Scope::RemoveDecl ( Decl D)
inline

Definition at line 291 of file Scope.h.

Referenced by clang::Sema::HideUsingShadowDecl().

◆ setEntity()

void clang::Scope::setEntity ( DeclContext E)
inline

Definition at line 326 of file Scope.h.

◆ setFlags()

void clang::Scope::setFlags ( unsigned  F)
inline

Definition at line 220 of file Scope.h.

References setFlags().

Referenced by setFlags().

◆ setNoNRVO()

void clang::Scope::setNoNRVO ( )
inline

Definition at line 481 of file Scope.h.

References dump().

Referenced by clang::Sema::ActOnReturnStmt(), and mergeNRVOIntoParent().

◆ using_directives()

using_directives_range clang::Scope::using_directives ( )
inline

Definition at line 465 of file Scope.h.


The documentation for this class was generated from the following files: