From fb84aa550183dd923d287779c242a12f81e17493 Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Wed, 27 Dec 2023 16:55:03 +0900 Subject: [PATCH] [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. https://github.com/ruby/json/commit/e125072130 --- ext/json/generator/generator.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ext/json/generator/generator.c b/ext/json/generator/generator.c index 92fd33369f..3100e985f8 100644 --- a/ext/json/generator/generator.c +++ b/ext/json/generator/generator.c @@ -1,6 +1,10 @@ #include "../fbuffer/fbuffer.h" #include "generator.h" +#ifndef RB_UNLIKELY +#define RB_UNLIKELY(cond) (cond) +#endif + static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject, mHash, mArray, #ifdef RUBY_INTEGER_UNIFICATION @@ -678,7 +682,7 @@ json_object_i(VALUE key, VALUE val, VALUE _arg) break; } - generate_json(buffer, Vstate, state, key_to_s); + generate_json_string(buffer, Vstate, state, key_to_s); fbuffer_append(buffer, delim2, delim2_len); generate_json(buffer, Vstate, state, val);