remove parser_state::gen_main

master
Daniel Kolesa 2021-04-10 00:54:28 +02:00
parent 1bc94bf5af
commit 63023f8c5e
7 changed files with 18 additions and 19 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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() {

View File

@ -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) {

View File

@ -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);

View File

@ -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;

View File

@ -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();