nw::script::AstResolver

struct AstResolver : public nw::script::BaseVisitor

Public Types

using ScopeMap = std::unordered_map<String, ScopeDecl>
using ScopeStack = Vector<ScopeMap>
using EnvStack = Vector<immer::map<String, Export>>

Public Functions

inline AstResolver(Nss *parent, Context *ctx, bool command_script = false)
virtual ~AstResolver() = default
inline void begin_scope(bool global = false)
inline void declare(NssToken token, Declaration *decl, bool is_type = false)
inline void define(NssToken token, bool is_type = false)
inline void end_scope(bool global = false)
inline immer::map<String, Export> symbol_table() const
inline const Declaration *resolve(StringView token, SourceRange range, bool is_type)
inline virtual void visit(Ast *script) override
inline void match_function_decls(const FunctionDecl *decl, const FunctionDecl *def)
inline bool all_control_flow_paths_return(const AstNode *node)
inline virtual void visit(FunctionDecl *decl) override
inline virtual void visit(FunctionDefinition *decl) override
inline virtual void visit(StructDecl *decl) override
inline virtual void visit(VarDecl *decl) override
inline virtual void visit(AssignExpression *expr) override
inline virtual void visit(BinaryExpression *expr) override
inline virtual void visit(CallExpression *expr) override
inline virtual void visit(ComparisonExpression *expr) override
inline virtual void visit(ConditionalExpression *expr) override
inline virtual void visit(DotExpression *expr) override
inline virtual void visit(EmptyExpression *expr) override
inline virtual void visit(GroupingExpression *expr) override
inline virtual void visit(LiteralExpression *expr) override
inline virtual void visit(LiteralVectorExpression *expr) override
inline virtual void visit(LogicalExpression *expr) override
inline virtual void visit(PostfixExpression *expr) override
inline virtual void visit(UnaryExpression *expr) override
inline virtual void visit(VariableExpression *expr) override
inline virtual void visit(BlockStatement *stmt) override
inline virtual void visit(DeclList *stmt) override
inline virtual void visit(DoStatement *stmt) override
inline virtual void visit(EmptyStatement *stmt) override
inline virtual void visit(ExprStatement *stmt) override
inline virtual void visit(IfStatement *stmt) override
inline virtual void visit(ForStatement *stmt) override
inline virtual void visit(JumpStatement *stmt) override
inline virtual void visit(LabelStatement *stmt) override
inline virtual void visit(SwitchStatement *stmt) override
inline virtual void visit(WhileStatement *stmt) override

Public Members

Nss *parent_ = nullptr
Context *ctx_ = nullptr
ScopeStack scope_stack_
EnvStack env_stack_
int loop_stack_ = 0
int switch_stack_ = 0
FunctionDefinition *func_def_stack_ = nullptr
bool is_command_script_ = false