summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-struct
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-06-06 09:25:29 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-06-06 09:25:29 +0900
commitccd871bcca0e55fd08bbe00ad4fd7c380d720780 (patch)
tree8bf586852fba6cc139667a2f96d43f4da0befd09 /mrbgems/mruby-struct
parentb533917aa643762a0e315c22d9de65d5e9f954b3 (diff)
downloadmruby-ccd871bcca0e55fd08bbe00ad4fd7c380d720780.tar.gz
mruby-ccd871bcca0e55fd08bbe00ad4fd7c380d720780.zip
reduce calling mrb_sym2name_len() from struct.c; ref #2365
Diffstat (limited to 'mrbgems/mruby-struct')
-rw-r--r--mrbgems/mruby-struct/src/struct.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c
index 9d749a152..930384806 100644
--- a/mrbgems/mruby-struct/src/struct.c
+++ b/mrbgems/mruby-struct/src/struct.c
@@ -211,16 +211,16 @@ mrb_struct_set_m(mrb_state *mrb, mrb_value obj)
}
static mrb_bool
-mrb_is_local_id(mrb_state *mrb, mrb_sym id)
+is_local_id(mrb_state *mrb, const char *name)
{
- const char *name = mrb_sym2name_len(mrb, id, NULL);
+ if (!name) return FALSE;
return !ISUPPER(name[0]);
}
static mrb_bool
-mrb_is_const_id(mrb_state *mrb, mrb_sym id)
+is_const_id(mrb_state *mrb, const char *name)
{
- const char *name = mrb_sym2name_len(mrb, id, NULL);
+ if (!name) return FALSE;
return ISUPPER(name[0]);
}
@@ -240,7 +240,7 @@ make_struct(mrb_state *mrb, mrb_value name, mrb_value members, struct RClass * k
/* old style: should we warn? */
name = mrb_str_to_str(mrb, name);
id = mrb_obj_to_sym(mrb, name);
- if (!mrb_is_const_id(mrb, id)) {
+ if (!is_const_id(mrb, mrb_sym2name_len(mrb, id, NULL))) {
mrb_name_error(mrb, id, "identifier %S needs to be constant", name);
}
if (mrb_const_defined_at(mrb, klass, id)) {
@@ -262,7 +262,9 @@ make_struct(mrb_state *mrb, mrb_value name, mrb_value members, struct RClass * k
ai = mrb_gc_arena_save(mrb);
for (i=0; i< len; i++) {
mrb_sym id = mrb_symbol(ptr_members[i]);
- if (mrb_is_local_id(mrb, id) || mrb_is_const_id(mrb, id)) {
+ const char *name = mrb_sym2name_len(mrb, id, NULL);
+
+ if (is_local_id(mrb, name) || is_const_id(mrb, name)) {
if (i < N_REF_FUNC) {
mrb_define_method_id(mrb, c, id, ref_func[i], MRB_ARGS_NONE());
}
@@ -429,6 +431,8 @@ inspect_struct(mrb_state *mrb, mrb_value s, mrb_bool recur)
for (i=0; i<len; i++) {
mrb_value slot;
mrb_sym id;
+ const char *name;
+ mrb_int len;
if (i > 0) {
mrb_str_cat_lit(mrb, str, ", ");
@@ -438,11 +442,8 @@ inspect_struct(mrb_state *mrb, mrb_value s, mrb_bool recur)
}
slot = ptr_members[i];
id = mrb_symbol(slot);
- if (mrb_is_local_id(mrb, id) || mrb_is_const_id(mrb, id)) {
- const char *name;
- mrb_int len;
-
- name = mrb_sym2name_len(mrb, id, &len);
+ name = mrb_sym2name_len(mrb, id, &len);
+ if (is_local_id(mrb, name) || is_const_id(mrb, name)) {
mrb_str_append(mrb, str, mrb_str_new(mrb, name, len));
}
else {