16#include <gyoji-frontend.hpp>
17#include <gyoji-mir.hpp>
41 size_t get_basic_block_id()
const;
42 size_t get_location()
const;
44 size_t basic_block_id;
109 void dump(
int indent)
const;
118 const Scope *get_child()
const;
143 class LocalVariable {
184 Scope(
bool _is_unsafe);
194 size_t _loop_break_blockid,
195 size_t _loop_continue_blockid
206 void dump(
int indent)
const;
215 bool is_loop()
const;
226 size_t get_loop_break_blockid()
const;
228 size_t get_loop_continue_blockid()
const;
236 Scope *get_parent()
const;
238 void set_parent(
Scope *_parent);
248 bool scope_is_unsafe;
249 size_t loop_break_blockid;
250 size_t loop_continue_blockid;
290 size_t get_block()
const;
291 bool is_resolved()
const;
329 bool _root_is_unsafe,
356 size_t _loop_break_blockid,
357 size_t _loop_continue_blockid
384 size_t label_block_id,
391 void label_declare(
std::string label_name,
size_t label_blockid);
446 size_t get_loop_break_blockid()
const;
447 size_t get_loop_continue_blockid()
const;
481 const Scope *get_current()
const;
Compiler Context.
Definition gyoji-context.hpp:44
References a location in the source-file.
Definition source-reference.hpp:30
A named label inside a scope.
Definition function-scope.hpp:278
~FunctionLabel()
Move along, nothing to see here.
Definition function-scope.cpp:720
Location inside a specific basic block.
Definition function-scope.hpp:37
Primitive operation in a scope.
Definition function-scope.hpp:60
ScopeOperationType
Definition function-scope.hpp:63
@ GOTO_DEFINITION
Definition function-scope.hpp:75
@ CHILD_SCOPE
Definition function-scope.hpp:80
@ VAR_DECL
Definition function-scope.hpp:67
@ LABEL_DEFINITION
Definition function-scope.hpp:71
~ScopeOperation()
Move along, nothing to see here.
Definition function-scope.cpp:84
Tracks variables declared in each scope along with abels and goto statements in a highly simplified i...
Definition function-scope.hpp:326
void label_define(std::string label_name, const Gyoji::context::SourceReference &_source_ref)
Definition function-scope.cpp:319
std::vector< std::string > get_variables_to_unwind_for_label(std::string &label) const
bool add_variable(std::string variable_name, const Gyoji::mir::Type *mir_type, const Gyoji::context::SourceReference &source_ref)
Definition function-scope.cpp:476
std::vector< std::string > get_variables_to_unwind_for_root() const
Definition function-scope.cpp:413
bool is_unsafe() const
Definition function-scope.cpp:463
std::vector< std::string > get_variables_to_unwind_for_scope() const
Definition function-scope.cpp:430
void scope_pop()
Definition function-scope.cpp:297
bool check(std::vector< std::pair< const ScopeOperation *, std::vector< const ScopeOperation * > > > &goto_fixups) const
Definition function-scope.cpp:586
bool is_in_loop() const
Definition function-scope.cpp:547
void scope_push_loop(const Gyoji::context::SourceReference &_source_ref, size_t _loop_break_blockid, size_t _loop_continue_blockid)
Definition function-scope.cpp:281
~ScopeTracker()
Move along, nothing to see here.
Definition function-scope.cpp:263
void scope_push(bool is_unsafe, const Gyoji::context::SourceReference &_source_ref)
Definition function-scope.cpp:269
const LocalVariable * get_variable(std::string variable_name) const
Definition function-scope.cpp:397
Represents variable declarations, labels, and goto inside a lexical scope.
Definition function-scope.hpp:178
~Scope()
Move along, nothing to see here.
Definition function-scope.cpp:186
bool is_unsafe() const
Definition function-scope.cpp:211
const LocalVariable * get_variable(std::string name) const
Definition function-scope.cpp:196
This represents a type as declared in a translation unit.
Definition types.hpp:313
Converts the strongly-typed syntax tree into the MIR representation.
Definition function-lowering.hpp:37