remove parser_state::gen_main
parent
1bc94bf5af
commit
63023f8c5e
|
@ -326,6 +326,16 @@ void gen_state::gen_local(std::uint32_t nargs) {
|
|||
code.push_back(BC_INST_LOCAL | (nargs << 8));
|
||||
}
|
||||
|
||||
void gen_state::gen_main(std::string_view v, std::string_view src) {
|
||||
parser_state ps{ts, *this};
|
||||
ps.source = v.data();
|
||||
ps.send = v.data() + v.size();
|
||||
ps.src_name = src;
|
||||
code.push_back(BC_INST_START);
|
||||
ps.parse_block(VAL_ANY);
|
||||
code.push_back(BC_INST_EXIT);
|
||||
}
|
||||
|
||||
void gen_state::gen_main_null() {
|
||||
code.reserve(code.size() + 4);
|
||||
code.push_back(BC_INST_START);
|
||||
|
|
|
@ -75,6 +75,9 @@ struct gen_state {
|
|||
|
||||
void gen_local(std::uint32_t nargs);
|
||||
|
||||
void gen_main(
|
||||
std::string_view s, std::string_view src = std::string_view{}
|
||||
);
|
||||
void gen_main_null();
|
||||
void gen_main_integer(integer_type v);
|
||||
void gen_main_float(float_type v);
|
||||
|
|
|
@ -1483,15 +1483,6 @@ endstatement:
|
|||
}
|
||||
}
|
||||
|
||||
void parser_state::gen_main(std::string_view s, int ret_type) {
|
||||
source = s.data();
|
||||
send = s.data() + s.size();
|
||||
gs.code.reserve(gs.code.size() + 8);
|
||||
gs.code.push_back(BC_INST_START);
|
||||
parse_block(VAL_ANY);
|
||||
gs.code.push_back(BC_INST_EXIT | ((ret_type < VAL_ANY) ? (ret_type << BC_INST_RET) : 0));
|
||||
}
|
||||
|
||||
/* list parser public implementation */
|
||||
|
||||
LIBCUBESCRIPT_EXPORT bool list_parser::parse() {
|
||||
|
|
|
@ -51,7 +51,6 @@ struct parser_state {
|
|||
std::string_view get_word();
|
||||
|
||||
void parse_block(int ret_type, int term = '\0');
|
||||
void gen_main(std::string_view s, int ret_type = VAL_ANY);
|
||||
|
||||
void next_char() {
|
||||
if (source == send) {
|
||||
|
|
|
@ -656,11 +656,7 @@ static any_value do_run(
|
|||
) {
|
||||
any_value ret{*ts.pstate};
|
||||
gen_state gs{ts};
|
||||
{
|
||||
parser_state ps{ts, gs};
|
||||
ps.src_name = file;
|
||||
ps.gen_main(code, VAL_ANY);
|
||||
}
|
||||
gs.gen_main(code, file);
|
||||
auto cref = gs.steal_ref();
|
||||
bcode *p = cref;
|
||||
vm_exec(ts, p->get_raw(), ret);
|
||||
|
|
|
@ -270,7 +270,7 @@ bcode_ref any_value::force_code(state &cs) {
|
|||
break;
|
||||
}
|
||||
gen_state gs{state_p{cs}.ts()};
|
||||
parser_state{state_p{cs}.ts(), gs}.gen_main(get_string());
|
||||
gs.gen_main(get_string());
|
||||
auto bc = gs.steal_ref();
|
||||
set_code(bc);
|
||||
return bc;
|
||||
|
|
|
@ -240,7 +240,7 @@ bool exec_alias(
|
|||
ts.callstack = &aliaslink;
|
||||
if (!aast.node->code) {
|
||||
gen_state gs{ts};
|
||||
parser_state{ts, gs}.gen_main(aast.node->val_s.get_string());
|
||||
gs.gen_main(aast.node->val_s.get_string());
|
||||
aast.node->code = gs.steal_ref();
|
||||
}
|
||||
bcode_ref coderef = aast.node->code;
|
||||
|
@ -692,7 +692,7 @@ std::uint32_t *vm_exec(
|
|||
gs.gen_main_float(arg.get_float());
|
||||
break;
|
||||
case value_type::STRING:
|
||||
parser_state{ts, gs}.gen_main(arg.get_string());
|
||||
gs.gen_main(arg.get_string());
|
||||
break;
|
||||
default:
|
||||
gs.gen_main_null();
|
||||
|
@ -709,7 +709,7 @@ std::uint32_t *vm_exec(
|
|||
std::string_view s = arg.get_string();
|
||||
if (!s.empty()) {
|
||||
gen_state gs{ts};
|
||||
parser_state{ts, gs}.gen_main(s);
|
||||
gs.gen_main(s);
|
||||
arg.set_code(gs.steal_ref());
|
||||
} else {
|
||||
arg.force_none();
|
||||
|
|
Loading…
Reference in New Issue