void ActivationBlock::generate_post() { if (this->activity == DEFINITION) { // get locals string name = this->record->get_symbol_name(); SymbolListPtr named_items = this->get_analyzer()->get_symtable()->find(name); SymbolListPtr locals = SymTable::filter_nest_level(SymTable::filter_data(named_items), this->get_nesting_level()); unsigned long locals_size = locals->size(); // move stack ptr minus local variables if (locals_size > 0) { write_raw("PUSH SP"); write_raw("PUSH #" + conv_string(locals_size)); write_raw("SUBS "); write_raw("POP SP"); } write_raw("RET\n"); } else { // call if (this->activation == PROCEDURE) { } else if (this->activation == FUNCTION) { } } }
string SemanticAnalyzer::generate_label() { string label = "L" + conv_string(this->label_count); label_count++; return label; }
BigInt::reference BigInt::operator= ( string s ) { sign_ = s[0] == '-'; buffer = conv_string ( s ); return normalize(); }
BigInt::BigInt ( const char* s ) : sign_(false), buffer ( conv_string(s) ) { if ( s[0] == '-' ) sign_ = true; normalize(); }