environment print_cmd(parser & p) { if (p.curr() == scanner::token_kind::String) { p.regular_stream() << p.get_str_val() << endl; p.next(); } else if (p.curr_is_token_or_id(g_raw)) { p.next(); expr e = p.parse_expr(); p.regular_stream() << e << endl; } else if (p.curr_is_token_or_id(g_options)) { p.next(); p.regular_stream() << p.ios().get_options() << endl; } else { throw parser_error("invalid print command", p.pos()); } return p.env(); }