summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2023-12-27 16:55:03 +0900
committergit <svn-admin@ruby-lang.org>2024-10-17 08:54:46 +0000
commitfb84aa550183dd923d287779c242a12f81e17493 (patch)
tree636b31ba6e754a49bf9f1950c52482e6b899989a
parent3911189fba46714eec886452b934258e001dd12b (diff)
[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
-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 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);