![]() |
Spicy
|
#include <local-variable.h>
Public Member Functions | |
| auto | type () const |
| auto | init () const |
| auto | typeArguments () const |
| void | setType (ASTContext *ctx, QualifiedType *t) |
| void | setInit (ASTContext *ctx, hilti::Expression *init) |
| void | setTypeArguments (ASTContext *ctx, Expressions args) |
| std::string_view | displayName () const final |
Public Member Functions inherited from hilti::Declaration | |
| const auto & | id () const |
| auto | linkage () const |
| const auto & | fullyQualifiedID () const |
| const auto & | canonicalID () const |
| auto | declarationIndex () const |
| void | setID (const ID &id) |
| void | setLinkage (declaration::Linkage linkage) |
| void | setFullyQualifiedID (ID id) |
| void | setCanonicalID (ID id) |
| node::Properties | properties () const override |
| Declaration (const Declaration &other) | |
| Declaration (Declaration &&other)=default | |
| Declaration & | operator= (const Declaration &other)=delete |
| Declaration & | operator= (Declaration &&other)=delete |
Public Member Functions inherited from hilti::Node | |
| node::Tag | nodeTag () const |
| bool | hasParent () const |
| Node * | parent (int i=1) const |
| template<typename T > | |
| T * | parent () const |
| auto | pathLength () const |
| const auto & | meta () const |
| const auto & | location () const |
| void | setMeta (Meta m) |
| auto | scope () const |
| auto | getOrCreateScope () |
| void | clearScope () |
| Result< std::pair< Declaration *, ID > > | lookupID (const ID &id, const std::string_view &what) const |
| virtual bool | inheritScope () const |
| std::string | typename_ () const |
| uint64_t | identity () const |
| const auto & | children () const |
| template<typename T > | |
| T * | child (unsigned int i) const |
| template<typename T > | |
| T * | childTryAs (unsigned int i) const |
| Node * | child (unsigned int i) const |
| template<typename T > | |
| auto | children (int begin, std::optional< int > end) const |
| template<typename T > | |
| auto | children (int begin, std::optional< int > end) |
| template<typename T > | |
| node::Set< T > | childrenOfType () const |
| bool | hasChild (const Node *n, bool recurse=false) const |
| Node * | sibling (Node *n) const |
| void | addChild (ASTContext *ctx, Node *n) |
| void | addChildren (ASTContext *ctx, const Nodes &children) |
| void | removeChild (Node *n) |
| void | removeChildren (int begin, std::optional< int > end) |
| void | setChild (ASTContext *ctx, size_t idx, Node *n) |
| void | replaceChildren (ASTContext *ctx, const Nodes &children) |
| void | replaceChild (ASTContext *ctx, Node *old, Node *new_) |
| template<typename T > | |
| bool | isA () const |
| template<typename T > | |
| bool | isA_ () const |
| template<typename T > | |
| T * | as () const |
| template<typename T > | |
| T * | as () |
| template<typename T > | |
| const T * | tryAs () const |
| template<typename T > | |
| T * | tryAs () |
| template<typename T > | |
| T * | tryAs_ () |
| void | print (std::ostream &out, bool compact, bool user_visible) const |
| std::string | print () const |
| std::string | printRaw () const |
| operator std::string () const | |
| std::string | dump () const |
| std::string | renderSelf (bool include_location=true) const |
| void | addError (std::string msg, std::vector< std::string > context={}) |
| void | addError (std::string msg, node::ErrorPriority priority, std::vector< std::string > context={}) |
| void | addError (std::string msg, const Location &l, std::vector< std::string > context={}) |
| void | addError (std::string msg, Location l, node::ErrorPriority priority, std::vector< std::string > context={}) |
| bool | hasErrors () const |
| const auto & | errors () const |
| void | clearErrors () |
| void | clearChildren () |
| void | retain () |
| void | release () |
| bool | isRetained () const |
| virtual void | dispatch (visitor::Dispatcher &v)=0 |
| virtual std::string_view | branchTag () const |
| Node & | operator= (const Node &other)=delete |
| Node & | operator= (Node &&other) noexcept=delete |
Public Member Functions inherited from hilti::node::WithDocString | |
| const std::optional< DocString > & | documentation () const |
| void | clearDocumentation () |
| void | setDocumentation (DocString doc) |
Static Public Member Functions | |
| static auto | create (ASTContext *ctx, ID id, QualifiedType *type, Expressions args, hilti::Expression *init=nullptr, Meta meta={}) |
| static auto | create (ASTContext *ctx, ID id, QualifiedType *type, hilti::Expression *init, Meta meta={}) |
| static auto | create (ASTContext *ctx, ID id, QualifiedType *type, Meta meta={}) |
| static auto | create (ASTContext *ctx, ID id, hilti::Expression *init, const Meta &meta={}) |
| static auto | create (ASTContext *ctx, ID id, const Meta &meta={}) |
Protected Member Functions | |
| LocalVariable (ASTContext *ctx, Nodes children, ID id, Meta meta) | |
| HILTI_NODE_1 (declaration::LocalVariable, Declaration, final) | |
Protected Member Functions inherited from hilti::Declaration | |
| Declaration (ASTContext *ctx, node::Tags node_tags, Nodes children, ID id, declaration::Linkage linkage, Meta meta={}) | |
| void | setDeclarationIndex (ast::DeclarationIndex index) |
| std::string | _dump () const override |
| HILTI_NODE_0 (Declaration, override) | |
Protected Member Functions inherited from hilti::Node | |
| Node (ASTContext *ctx, node::Tags node_tags, Nodes children, Meta meta) | |
| Node (ASTContext *ctx, node::Tags node_tags, Meta meta) | |
| Node (Node &&other)=default | |
| Node (const Node &other) | |
| virtual std::string | _typename () const |
| virtual Node * | _clone (ASTContext *ctx) const =0 |
Additional Inherited Members | |
Static Public Attributes inherited from hilti::Node | |
| static constexpr uint16_t | NodeLevel = 0 |
| static constexpr ::hilti::node::Tag | NodeTag = ::hilti::node::tag::Node |
| static constexpr ::hilti::node::Tags | NodeTags = {::hilti::node::tag::Node} |
AST node for a local variable declaration.
Local variables support a "special" init expression for performance optimization: If the init expression is an instance of expression::Void, the generated C++ code will not default-initialize the variable. That means it's not safe to read from it before it has been written to at least once. This avoids the overhead of the creating the default value when it's not needed, but it disables HILTI's safety property of forcing all runtime values to have well-defined content at all times.
TODO: Once we have flow-based optimization, we should be able to figure out automatically when it's safe to skip computing the default. We should then remove support for explicit expression::Void instances.
|
inlinefinalvirtual |
Returns a user-friendly descriptive name for the type of object the declaration refers to (e.g., "local variable"). This can be used in messages to the user.
Implements hilti::Declaration.