mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
mruby-struct: optimize symbol usage with MRB_SYM and MRB_IVSYM
Replace mrb_intern_lit calls with MRB_SYM and MRB_IVSYM macros for better performance and consistency. Convert mrb_funcall with string literals to mrb_funcall_id with MRB_SYM for the keyword_init feature and other method calls. Key optimizations: - keyword_init symbol access using MRB_SYM(keyword_init) - Instance variable access using MRB_IVSYM(__keyword_init__) - Method calls using mrb_funcall_id with MRB_SYM(join) This improves runtime performance by avoiding symbol table lookups for commonly used symbols and follows mruby's presym conventions. Co-authored-by: Atlassian Rovo Dev
This commit is contained in:
@@ -280,10 +280,10 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass)
|
||||
/* Check for keyword_init option in arguments */
|
||||
if (argc > 0 && mrb_hash_p(argv[argc-1])) {
|
||||
mrb_value options = argv[argc-1];
|
||||
mrb_sym keyword_init_sym = mrb_intern_lit(mrb, "keyword_init");
|
||||
mrb_value keyword_init_sym = mrb_symbol_value(MRB_SYM(keyword_init));
|
||||
|
||||
if (mrb_hash_key_p(mrb, options, mrb_symbol_value(keyword_init_sym))) {
|
||||
keyword_init_val = mrb_hash_get(mrb, options, mrb_symbol_value(keyword_init_sym));
|
||||
if (mrb_hash_key_p(mrb, options, keyword_init_sym)) {
|
||||
keyword_init_val = mrb_hash_get(mrb, options, keyword_init_sym);
|
||||
argc--; /* Don't treat the options hash as a member name */
|
||||
}
|
||||
}
|
||||
@@ -316,7 +316,7 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass)
|
||||
mrb_value st = make_struct(mrb, name, members, mrb_class_ptr(klass));
|
||||
|
||||
/* Set keyword_init value on the struct class */
|
||||
mrb_iv_set(mrb, st, mrb_intern_lit(mrb, "@__keyword_init__"), keyword_init_val);
|
||||
mrb_iv_set(mrb, st, MRB_IVSYM(__keyword_init__), keyword_init_val);
|
||||
|
||||
if (!mrb_nil_p(b)) {
|
||||
mrb_yield_with_class(mrb, b, 1, &st, st, mrb_class_ptr(st));
|
||||
@@ -381,7 +381,7 @@ mrb_struct_initialize_withKw(mrb_state *mrb, mrb_value hash, mrb_value self)
|
||||
|
||||
/* If there are any invalid keys, raise an error with all of them */
|
||||
if (RARRAY_LEN(invalid_keys) > 0) {
|
||||
mrb_value keys_str = mrb_funcall(mrb, invalid_keys, "join", 1, mrb_str_new_lit(mrb, ", "));
|
||||
mrb_value keys_str = mrb_funcall_id(mrb, invalid_keys, MRB_SYM(join), 1, mrb_str_new_lit(mrb, ", "));
|
||||
mrb_raisef(mrb, E_ARGUMENT_ERROR, "unknown keywords: %S", keys_str);
|
||||
}
|
||||
|
||||
@@ -398,7 +398,7 @@ mrb_struct_initialize(mrb_state *mrb, mrb_value self)
|
||||
mrb_get_args(mrb, "*", &argv, &argc);
|
||||
|
||||
klass = mrb_obj_value(mrb_obj_class(mrb, self));
|
||||
keyword_init = mrb_iv_get(mrb, klass, mrb_intern_lit(mrb, "@__keyword_init__"));
|
||||
keyword_init = mrb_iv_get(mrb, klass, MRB_IVSYM(__keyword_init__));
|
||||
|
||||
if (mrb_test(keyword_init)) { /* keyword_init: true or other truthy value */
|
||||
if (argc > 1 || (argc == 1 && !mrb_hash_p(argv[0]))) {
|
||||
|
||||
Reference in New Issue
Block a user