clang 22.0.0git
clang::interp::LocalScope< Emitter > Class Template Reference

Generic scope for local variables. More...

#include "/work/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/AST/ByteCode/Compiler.h"

Inheritance diagram for clang::interp::LocalScope< Emitter >:
[legend]

Public Member Functions

 LocalScope (Compiler< Emitter > *Ctx, ScopeKind Kind=ScopeKind::Block)
 ~LocalScope () override
 Emit a Destroy op for this scope.
bool destroyLocals (const Expr *E=nullptr) override
 Explicit destruction of local variables.
void addLocal (Scope::Local Local) override
void forceInit () override
 Force-initialize this scope.
bool emitDestructors (const Expr *E=nullptr) override
void removeStoredOpaqueValues ()
void removeIfStoredOpaqueValue (const Scope::Local &Local)
Public Member Functions inherited from clang::interp::VariableScope< Emitter >
 VariableScope (Compiler< Emitter > *Ctx, ScopeKind Kind=ScopeKind::Block)
virtual ~VariableScope ()
void addForScopeKind (const Scope::Local &Local, ScopeKind Kind)
 Like addExtended, but adds to the nearest scope of the given kind.
VariableScopegetParent () const
ScopeKind getKind () const

Public Attributes

UnsignedOrNone Idx = std::nullopt
 Index of the scope in the chain.
Public Attributes inherited from clang::interp::VariableScope< Emitter >
bool LocalsAlwaysEnabled = true
 Whether locals added to this scope are enabled by default.

Additional Inherited Members

Protected Attributes inherited from clang::interp::VariableScope< Emitter >
Compiler< Emitter > * Ctx
 Compiler instance.
VariableScopeParent
 Link to the parent scope.
ScopeKind Kind

Detailed Description

template<class Emitter>
class clang::interp::LocalScope< Emitter >

Generic scope for local variables.

Definition at line 526 of file Compiler.h.

Constructor & Destructor Documentation

◆ LocalScope()

◆ ~LocalScope()

template<class Emitter>
clang::interp::LocalScope< Emitter >::~LocalScope ( )
inlineoverride

Emit a Destroy op for this scope.

Definition at line 532 of file Compiler.h.

References Idx, and removeStoredOpaqueValues().

Member Function Documentation

◆ addLocal()

template<class Emitter>
void clang::interp::LocalScope< Emitter >::addLocal ( Scope::Local Local)
inlineoverridevirtual

◆ destroyLocals()

◆ emitDestructors()

template<class Emitter>
bool clang::interp::LocalScope< Emitter >::emitDestructors ( const Expr * E = nullptr)
inlineoverridevirtual

Reimplemented from clang::interp::VariableScope< Emitter >.

Definition at line 574 of file Compiler.h.

References Idx, and removeIfStoredOpaqueValue().

Referenced by destroyLocals().

◆ forceInit()

template<class Emitter>
void clang::interp::LocalScope< Emitter >::forceInit ( )
inlineoverridevirtual

Force-initialize this scope.

Usually, scopes are lazily initialized when the first local variable is created, but in scenarios with conditonal operators, we need to ensure scope is initialized just in case one of the arms will create a local and the other won't. In such a case, the InitScope() op would be part of the arm that created the local.

Reimplemented from clang::interp::VariableScope< Emitter >.

Definition at line 566 of file Compiler.h.

References Idx.

◆ removeIfStoredOpaqueValue()

template<class Emitter>
void clang::interp::LocalScope< Emitter >::removeIfStoredOpaqueValue ( const Scope::Local & Local)
inline

Definition at line 619 of file Compiler.h.

Referenced by emitDestructors(), and removeStoredOpaqueValues().

◆ removeStoredOpaqueValues()

template<class Emitter>
void clang::interp::LocalScope< Emitter >::removeStoredOpaqueValues ( )
inline

Definition at line 610 of file Compiler.h.

References Idx, and removeIfStoredOpaqueValue().

Referenced by ~LocalScope().

Member Data Documentation

◆ Idx

template<class Emitter>
UnsignedOrNone clang::interp::LocalScope< Emitter >::Idx = std::nullopt

Index of the scope in the chain.

Definition at line 629 of file Compiler.h.

Referenced by addLocal(), destroyLocals(), emitDestructors(), forceInit(), removeStoredOpaqueValues(), and ~LocalScope().


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