From dcd5f617484ec113177972990a82ec22cd65414e Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Fri, 9 Apr 2021 01:03:29 +0200 Subject: [PATCH] fewer direct accesses to code vector --- src/cs_parser.cc | 1 + src/cs_state.cc | 1 - src/cs_val.cc | 6 +----- src/cs_vm.cc | 17 ++++------------- 4 files changed, 6 insertions(+), 19 deletions(-) diff --git a/src/cs_parser.cc b/src/cs_parser.cc index 2e6bd8f..a17cd64 100644 --- a/src/cs_parser.cc +++ b/src/cs_parser.cc @@ -1595,6 +1595,7 @@ 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)); diff --git a/src/cs_state.cc b/src/cs_state.cc index 1ddb6e2..3aa35c7 100644 --- a/src/cs_state.cc +++ b/src/cs_state.cc @@ -659,7 +659,6 @@ static any_value do_run( { parser_state ps{ts, gs}; ps.src_name = file; - gs.code.reserve(64); ps.gen_main(code, VAL_ANY); } std::uint32_t *cbuf = bcode_alloc(ts.istate, gs.code.size()); diff --git a/src/cs_val.cc b/src/cs_val.cc index ff11e64..745307b 100644 --- a/src/cs_val.cc +++ b/src/cs_val.cc @@ -270,11 +270,7 @@ bcode_ref any_value::force_code(state &cs) { break; } gen_state gs{state_p{cs}.ts()}; - { - parser_state ps{state_p{cs}.ts(), gs}; - gs.code.reserve(64); - ps.gen_main(get_string()); - } + parser_state{state_p{cs}.ts(), gs}.gen_main(get_string()); uint32_t *cbuf = bcode_alloc(state_p{cs}.ts().istate, gs.code.size()); std::memcpy(cbuf, gs.code.data(), gs.code.size() * sizeof(std::uint32_t)); auto *bc = reinterpret_cast(cbuf + 1); diff --git a/src/cs_vm.cc b/src/cs_vm.cc index 9dfa4e2..13797fc 100644 --- a/src/cs_vm.cc +++ b/src/cs_vm.cc @@ -240,9 +240,7 @@ bool exec_alias( ts.callstack = &aliaslink; if (!aast.node->code) { gen_state gs{ts}; - parser_state ps{ts, gs}; - gs.code.reserve(64); - ps.gen_main(aast.node->val_s.get_string()); + parser_state{ts, gs}.gen_main(aast.node->val_s.get_string()); /* i wish i could steal the memory somehow */ uint32_t *code = bcode_alloc(ts.istate, gs.code.size()); memcpy(code, gs.code.data(), gs.code.size() * sizeof(uint32_t)); @@ -696,12 +694,9 @@ std::uint32_t *vm_exec( case value_type::FLOAT: gs.gen_main_float(arg.get_float()); break; - case value_type::STRING: { - parser_state ps{ts, gs}; - gs.code.reserve(64); - ps.gen_main(arg.get_string()); + case value_type::STRING: + parser_state{ts, gs}.gen_main(arg.get_string()); break; - } default: gs.gen_main_null(); break; @@ -724,11 +719,7 @@ std::uint32_t *vm_exec( std::string_view s = arg.get_string(); if (!s.empty()) { gen_state gs{ts}; - { - parser_state ps{ts, gs}; - gs.code.reserve(64); - ps.gen_main(s); - } + parser_state{ts, gs}.gen_main(s); std::uint32_t *cbuf = bcode_alloc( ts.istate, gs.code.size() );