summaryrefslogtreecommitdiff
path: root/ext/json
diff options
context:
space:
mode:
Diffstat (limited to 'ext/json')
-rw-r--r--ext/json/generator/generator.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/ext/json/generator/generator.c b/ext/json/generator/generator.c
index 1213f42497..c32b5ce093 100644
--- a/ext/json/generator/generator.c
+++ b/ext/json/generator/generator.c
@@ -732,7 +732,11 @@ json_object_i(VALUE key, VALUE val, VALUE _arg)
VALUE key_to_s;
switch(rb_type(key)) {
case T_STRING:
- key_to_s = key;
+ if (RB_LIKELY(RBASIC_CLASS(key) == rb_cString)) {
+ key_to_s = key;
+ } else {
+ key_to_s = rb_funcall(key, i_to_s, 0);
+ }
break;
case T_SYMBOL:
key_to_s = rb_sym2str(key);