From ead193ee3ba17b32e19cd05917fef92e2f53218c Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Wed, 7 May 2025 17:08:28 -0700 Subject: [PATCH] move enum value by-name lookup onto cached fastpath --- src/eval/eval_ir.c | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/src/eval/eval_ir.c b/src/eval/eval_ir.c index dc406f93..b78a8aa3 100644 --- a/src/eval/eval_ir.c +++ b/src/eval/eval_ir.c @@ -412,29 +412,19 @@ E_TYPE_ACCESS_FUNCTION_DEF(default) if(match.kind == E_MemberKind_Null) { E_Type *type = e_type_from_key(check_type_key); - if(type->enum_vals != 0) + String8 lookup_string = exprr->string; + String8 lookup_string_append_1 = push_str8f(scratch.arena, "%S_%S", type->name, lookup_string); + String8 lookup_string_append_2 = push_str8f(scratch.arena, "%S%S", type->name, lookup_string); + E_EnumVal enum_val = {0}; + if(enum_val.name.size == 0) { enum_val = e_type_enum_val_from_key_name__cached(check_type_key, lookup_string); } + if(enum_val.name.size == 0) { enum_val = e_type_enum_val_from_key_name__cached(check_type_key, lookup_string_append_1); } + if(enum_val.name.size == 0) { enum_val = e_type_enum_val_from_key_name__cached(check_type_key, lookup_string_append_2); } + if(enum_val.name.size != 0) { - String8 lookup_string = exprr->string; - String8 lookup_string_append_1 = push_str8f(scratch.arena, "%S_%S", type->name, lookup_string); - String8 lookup_string_append_2 = push_str8f(scratch.arena, "%S%S", type->name, lookup_string); - E_EnumVal *enum_val_match = 0; - for EachIndex(idx, type->count) - { - if(str8_match(type->enum_vals[idx].name, lookup_string, 0) || - str8_match(type->enum_vals[idx].name, lookup_string_append_1, 0) || - str8_match(type->enum_vals[idx].name, lookup_string_append_2, 0)) - { - enum_val_match = &type->enum_vals[idx]; - break; - } - } - if(enum_val_match != 0) - { - r_found = 1; - r_type = check_type_key; - r_value = enum_val_match->val; - r_is_constant_value = 1; - } + r_found = 1; + r_type = check_type_key; + r_value = enum_val.val; + r_is_constant_value = 1; } } scratch_end(scratch);