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