// Return FALSE when compilation has finished bool compiler::compile_token(const std::string& s, parser& p) { if ( s.empty() ) { m.load_halt(); resolve_forwards(); return false; } else if ( ishalt(s) ) m.load_halt(); else if ( iscomment(s) ) p.skip_line(); else if ( isliteral(s) ) compile_literal(s); else if ( islabel(s) ) m.addlabel(s.c_str(), m.pos()); else { Op op = tok2op(s); if ( op == NOP_END ) error("Unknown operation: " + s); m.load(op); } return true; }