[ruby/json] Directly use generate_json_string for object keys

... instead of `generate_json`.

Since the object key is already confirmed to be a string, using a
generic dispatch function brings an unnecessary overhead.

This speeds up `JSON.generate` by about 3% in a benchmark.

e125072130
This commit is contained in:
Yusuke Endoh 2023-12-27 16:55:03 +09:00 committed by git
parent 3911189fba
commit fb84aa5501

View file

@ -1,6 +1,10 @@
#include "../fbuffer/fbuffer.h" #include "../fbuffer/fbuffer.h"
#include "generator.h" #include "generator.h"
#ifndef RB_UNLIKELY
#define RB_UNLIKELY(cond) (cond)
#endif
static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject, static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject,
mHash, mArray, mHash, mArray,
#ifdef RUBY_INTEGER_UNIFICATION #ifdef RUBY_INTEGER_UNIFICATION
@ -678,7 +682,7 @@ json_object_i(VALUE key, VALUE val, VALUE _arg)
break; break;
} }
generate_json(buffer, Vstate, state, key_to_s); generate_json_string(buffer, Vstate, state, key_to_s);
fbuffer_append(buffer, delim2, delim2_len); fbuffer_append(buffer, delim2, delim2_len);
generate_json(buffer, Vstate, state, val); generate_json(buffer, Vstate, state, val);