void n_init_decl::code_gen(status& stat, std::ostream& out) { if (left != NULL) { stat.set_decl(false); // let the id node know that a variable is being declared left->code_gen(stat, out); stat.set_decl(false); } if (right != NULL) // if variable is initialised to value { if (stat.global_var()) { std::stringstream amount; right->print(amount); out << "\t" << amount.str() << "\n"; } else { stat.lock_register(out); stat.set_assign_expr(); // evaluate assign expr right->code_gen(stat, out); stat.set_assign_var(); // let the id node know that a variable is being set to a value left->code_gen(stat, out); stat.set_assign_var(); stat.unlock_register(out); stat.set_assign_expr(); } } else if (stat.global_var()) out << "\n"; return; }
void n_param_decl::code_gen(status& stat, std::ostream& out) { if (left != NULL) left->code_gen(stat, out); if (right != NULL) { stat.set_decl(true); right->code_gen(stat, out); stat.set_decl(false); } return; }