remove old smallmap

This commit is contained in:
blueloveTH 2024-06-16 21:47:18 +08:00
parent 4b2b92c1ba
commit a634d046be
4 changed files with 9 additions and 14 deletions

View File

@ -64,12 +64,14 @@ struct CodeEmitContext{
int level;
vector<StrName> global_names;
CodeEmitContext(VM* vm, CodeObject_ co, int level) : vm(vm), co(co), level(level) {}
CodeEmitContext(VM* vm, CodeObject_ co, int level) : vm(vm), co(co), level(level) {
c11_smallmap_s2n__ctor(&_co_consts_string_dedup_map);
}
int curr_iblock = 0;
bool is_compiling_class = false;
small_map<std::string_view, int> _co_consts_string_dedup_map;
c11_smallmap_s2n _co_consts_string_dedup_map;
int get_loop() const noexcept;
CodeBlock* enter_block(CodeBlockType type) noexcept;
@ -119,6 +121,7 @@ struct CodeEmitContext{
// clean
void s_clean() noexcept{
s_debug_info("s_clean");
c11_smallmap_s2n__dtor(&_co_consts_string_dedup_map);
for(Expr* e: _s_expr) delete_expr(e);
_s_expr.clear();
}

View File

@ -188,7 +188,6 @@ public:
PyObject* __last_exception;
PyObject* __curr_class;
PyVar __cached_object_new;
small_map<std::string_view, PyVar> __cached_op_funcs;
FuncDecl_ __dynamic_func_decl;
PyVar __vectorcall_buffer[PK_MAX_CO_VARNAMES];

View File

@ -123,14 +123,14 @@ int CodeEmitContext::add_varname(StrName name) noexcept{
}
int CodeEmitContext::add_const_string(std::string_view key) noexcept{
int* val = _co_consts_string_dedup_map.try_get(key);
uint16_t* val = c11_smallmap_s2n__try_get(&_co_consts_string_dedup_map, {key.data(), (int)key.size()});
if(val) {
return *val;
} else {
co->consts.push_back(VAR(key));
int index = co->consts.size() - 1;
key = co->consts.back().obj_get<Str>().sv();
_co_consts_string_dedup_map.insert(key, index);
c11_smallmap_s2n__set(&_co_consts_string_dedup_map, {key.data(), (int)key.size()}, index);
return index;
}
}

View File

@ -265,15 +265,8 @@ bool VM::py_eq(PyVar lhs, PyVar rhs) {
}
PyVar VM::py_op(std::string_view name) {
PyVar func;
auto it = __cached_op_funcs.try_get(name);
if(it == nullptr) {
func = py_import("operator")->attr()[StrName::get(name)];
__cached_op_funcs.insert(name, func);
} else {
func = *it;
}
return func;
// TODO: cache the result
return py_import("operator")->attr()[StrName::get(name)];
}
i64 VM::normalized_index(i64 index, int size) {