1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 18:14:21 +03:00
inform7/inter/codegen-module/Chapter 4/Variables.w

32 lines
1.2 KiB
OpenEdge ABL

[CodeGen::Var::] Variables.
To generate the initial state of storage for variables.
@ =
int variables_written = FALSE, prepare_counter = 0, knowledge_counter = 0;
void CodeGen::Var::prepare(code_generation *gen) {
variables_written = FALSE;
prepare_counter = 0;
knowledge_counter = 0;
InterTree::traverse(gen->from, CodeGen::Var::visitor1, gen, NULL, VARIABLE_IST);
}
void CodeGen::Var::visitor1(inter_tree *I, inter_tree_node *P, void *state) {
code_generation *gen = (code_generation *) state;
inter_symbol *var_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_VAR_IFLD);
prepare_counter = CodeGen::Targets::prepare_variable(gen, P, var_name, prepare_counter);
}
void CodeGen::Var::knowledge(code_generation *gen) {
if (variables_written == FALSE) {
variables_written = TRUE;
InterTree::traverse(gen->from, CodeGen::Var::visitor2, gen, NULL, VARIABLE_IST);
}
}
void CodeGen::Var::visitor2(inter_tree *I, inter_tree_node *P, void *state) {
code_generation *gen = (code_generation *) state;
inter_symbol *var_name = InterSymbolsTables::symbol_from_frame_data(P, DEFN_VAR_IFLD);
knowledge_counter = CodeGen::Targets::declare_variable(gen, P, var_name, knowledge_counter, prepare_counter);
}