clang API Documentation

Public Types | Public Member Functions
clang::Scope Class Reference

#include <Scope.h>

List of all members.

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
}
typedef llvm::iterator_range
< DeclSetTy::iterator > 
decl_range
typedef llvm::iterator_range
< UsingDirectivesTy::iterator > 
using_directives_range

Public Member Functions

 Scope (Scope *Parent, unsigned ScopeFlags, DiagnosticsEngine &Diag)
unsigned getFlags () const
void setFlags (unsigned F)
bool isBlockScope () const
 isBlockScope - Return true if this scope correspond to a closure.
const ScopegetParent () const
ScopegetParent ()
const ScopegetFnParent () const
ScopegetFnParent ()
const ScopegetMSLocalManglingParent () const
ScopegetMSLocalManglingParent ()
ScopegetContinueParent ()
const ScopegetContinueParent () const
ScopegetBreakParent ()
const ScopegetBreakParent () const
ScopegetBlockParent ()
const ScopegetBlockParent () const
ScopegetTemplateParamParent ()
const ScopegetTemplateParamParent () const
unsigned getFunctionPrototypeDepth () const
unsigned getNextFunctionPrototypeIndex ()
decl_range decls () const
bool decl_empty () const
void AddDecl (Decl *D)
void RemoveDecl (Decl *D)
void incrementMSLocalManglingNumber ()
void decrementMSLocalManglingNumber ()
unsigned getMSLocalManglingNumber () const
bool isDeclScope (Decl *D)
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.
bool isClassScope () const
 isClassScope - Return true if this scope is a class/struct/union scope.
bool isInCXXInlineMethodScope () const
bool isInObjcMethodScope () const
bool isInObjcMethodOuterScope () const
bool isTemplateParamScope () const
bool isFunctionPrototypeScope () const
bool isAtCatchScope () const
 isAtCatchScope - Return true if this scope is @catch.
bool isSwitchScope () const
 isSwitchScope - Return true if this scope is a switch scope.
bool isOpenMPDirectiveScope () const
 Determines whether this scope is the OpenMP directive scope.
bool isOpenMPLoopDirectiveScope () const
 Determine whether this scope is some OpenMP loop directive scope (for example, 'omp for', 'omp simd').
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').
bool isOpenMPLoopScope () const
 Determine whether this scope is a loop having OpenMP loop directive attached.
bool isTryScope () const
 Determine whether this scope is a C++ 'try' block.
bool isSEHTryScope () const
 Determine whether this scope is a SEH '__try' block.
bool containedInPrototypeScope () const
void PushUsingDirective (UsingDirectiveDecl *UDir)
using_directives_range using_directives ()
void addNRVOCandidate (VarDecl *VD)
void setNoNRVO ()
void mergeNRVOIntoParent ()
void Init (Scope *parent, unsigned flags)
void AddFlags (unsigned Flags)
 Sets up the specified scope flags and adjusts the scope state variables accordingly.
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 38 of file Scope.h.


Member Typedef Documentation

typedef llvm::iterator_range<DeclSetTy::iterator> clang::Scope::decl_range

Definition at line 258 of file Scope.h.

typedef llvm::iterator_range<UsingDirectivesTy::iterator> clang::Scope::using_directives_range

Definition at line 419 of file Scope.h.


Member Enumeration Documentation

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 a SEH try.

Definition at line 42 of file Scope.h.


Constructor & Destructor Documentation

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

Definition at line 192 of file Scope.h.

References Init().


Member Function Documentation

void clang::Scope::AddDecl ( Decl D) [inline]
void Scope::AddFlags ( unsigned  Flags)

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

Definition at line 101 of file Scope.cpp.

References BreakScope, and ContinueScope.

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

Definition at line 426 of file Scope.h.

References setNoNRVO().

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

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

Definition at line 91 of file Scope.cpp.

References getParent(), isFunctionPrototypeScope(), and S.

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

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

Definition at line 262 of file Scope.h.

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

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

Definition at line 277 of file Scope.h.

References getMSLocalManglingParent().

void Scope::dump ( ) const

Definition at line 130 of file Scope.cpp.

References dumpImpl().

void Scope::dumpImpl ( raw_ostream &  OS) const

Definition at line 239 of file Scope.h.

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

Definition at line 240 of file Scope.h.

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

Definition at line 232 of file Scope.h.

Referenced by clang::Sema::ActOnBreakStmt(), AddKeywordsToConsumer(), AddOrdinaryNameResults(), and getBreakParent().

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

Definition at line 235 of file Scope.h.

References getBreakParent().

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

Definition at line 222 of file Scope.h.

Referenced by clang::Sema::ActOnContinueStmt(), AddKeywordsToConsumer(), AddOrdinaryNameResults(), and getContinueParent().

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

Definition at line 226 of file Scope.h.

References getContinueParent().

DeclContext* clang::Scope::getEntity ( ) const [inline]
unsigned clang::Scope::getFlags ( ) const [inline]
const Scope* clang::Scope::getFnParent ( ) const [inline]

Definition at line 213 of file Scope.h.

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

Definition at line 247 of file Scope.h.

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

const Scope* clang::Scope::getMSLocalManglingParent ( ) const [inline]

Definition at line 218 of file Scope.h.

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

Definition at line 253 of file Scope.h.

References isFunctionPrototypeScope().

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

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

Definition at line 208 of file Scope.h.

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

Definition at line 243 of file Scope.h.

Definition at line 297 of file Scope.h.

References clang::DiagnosticErrorTrap::hasErrorOccurred().

Definition at line 272 of file Scope.h.

References getMSLocalManglingParent().

Referenced by Init().

void Scope::Init ( Scope parent,
unsigned  flags 
)
bool clang::Scope::isAtCatchScope ( ) const [inline]

isAtCatchScope - Return true if this scope is @catch.

Definition at line 357 of file Scope.h.

References AtCatchScope, and getFlags().

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

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

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

Definition at line 203 of file Scope.h.

References BlockScope.

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

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

Definition at line 307 of file Scope.h.

References ClassScope, and getFlags().

Referenced by clang::Sema::ActOnTag(), AddKeywordsToConsumer(), clang::Sema::CodeCompleteUsing(), clang::Sema::getNonFieldDeclScope(), and Init().

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

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

Definition at line 352 of file Scope.h.

References FunctionPrototypeScope, and getFlags().

Referenced by clang::Sema::ActOnParamDeclarator(), clang::Sema::ActOnTag(), containedInPrototypeScope(), getNextFunctionPrototypeIndex(), clang::IdentifierResolver::isDeclInScope(), and clang::Sema::isMicrosoftMissingTypename().

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

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

Definition at line 304 of file Scope.h.

References FnScope, and getFlags().

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

Definition at line 313 of file Scope.h.

References getFnParent().

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

Definition at line 334 of file Scope.h.

References ObjCMethodScope, and S.

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 323 of file Scope.h.

References ObjCMethodScope, and S.

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

Determines whether this scope is the OpenMP directive scope.

Definition at line 376 of file Scope.h.

References getFlags(), and OpenMPDirectiveScope.

Referenced by isOpenMPLoopDirectiveScope().

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

Definition at line 382 of file Scope.h.

References getFlags(), isOpenMPDirectiveScope(), and OpenMPLoopDirectiveScope.

Referenced by isOpenMPLoopScope().

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

Definition at line 399 of file Scope.h.

References getParent(), isOpenMPLoopDirectiveScope(), and P.

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

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 393 of file Scope.h.

References getFlags(), and OpenMPSimdDirectiveScope.

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

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

Definition at line 408 of file Scope.h.

References getFlags(), and SEHTryScope.

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

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

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

Definition at line 362 of file Scope.h.

References AtCatchScope, BlockScope, ClassScope, FnScope, FunctionPrototypeScope, ObjCMethodScope, S, SwitchScope, and TemplateParamScope.

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

Definition at line 346 of file Scope.h.

References getFlags(), and TemplateParamScope.

Referenced by clang::Sema::ActOnNonTypeTemplateParameter(), clang::Sema::ActOnTemplateTemplateParameter(), clang::Sema::ActOnTypeParameter(), and findOuterContext().

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

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

Definition at line 405 of file Scope.h.

References getFlags(), and TryScope.

Definition at line 115 of file Scope.cpp.

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

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

Definition at line 414 of file Scope.h.

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

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

Definition at line 268 of file Scope.h.

Referenced by clang::Sema::HideUsingShadowDecl(), and clang::Sema::PushOnScopeChains().

void clang::Scope::setEntity ( DeclContext E) [inline]
void clang::Scope::setFlags ( unsigned  F) [inline]

Definition at line 200 of file Scope.h.

void clang::Scope::setNoNRVO ( ) [inline]

Definition at line 437 of file Scope.h.

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

Definition at line 421 of file Scope.h.


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