summaryrefslogtreecommitdiff
path: root/ext/json/generator
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2019-10-17 13:30:09 -0700
committerAaron Patterson <tenderlove@ruby-lang.org>2019-10-17 13:30:09 -0700
commit9026e12f93bb0f3f63d7449cdb5eabb2e660088f (patch)
tree290fad182af2cafdfd2952e052548007acbe48c5 /ext/json/generator
parentee821e90741ebedc6c7a3bb0e8b67e59f3a44022 (diff)
Look up constant instead of caching in a global
The global can go bad if the compactor runs, so we need to look up the constant instead of caching it in a global.
Diffstat (limited to 'ext/json/generator')
-rw-r--r--ext/json/generator/generator.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/ext/json/generator/generator.c b/ext/json/generator/generator.c
index 443b4d3e794..e9961618a9d 100644
--- a/ext/json/generator/generator.c
+++ b/ext/json/generator/generator.c
@@ -15,7 +15,7 @@ static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject,
#endif
mFloat, mString, mString_Extend,
mTrueClass, mFalseClass, mNilClass, eGeneratorError,
- eNestingError, CRegexp_MULTILINE, CJSON_SAFE_STATE_PROTOTYPE,
+ eNestingError, CRegexp_MULTILINE,
i_SAFE_STATE_PROTOTYPE;
static ID i_to_s, i_to_json, i_new, i_indent, i_space, i_space_before,
@@ -1082,10 +1082,8 @@ static VALUE cState_from_state_s(VALUE self, VALUE opts)
} else if (rb_obj_is_kind_of(opts, rb_cHash)) {
return rb_funcall(self, i_new, 1, opts);
} else {
- if (NIL_P(CJSON_SAFE_STATE_PROTOTYPE)) {
- CJSON_SAFE_STATE_PROTOTYPE = rb_const_get(mJSON, i_SAFE_STATE_PROTOTYPE);
- }
- return rb_funcall(CJSON_SAFE_STATE_PROTOTYPE, i_dup, 0);
+ VALUE prototype = rb_const_get(mJSON, i_SAFE_STATE_PROTOTYPE);
+ return rb_funcall(prototype, i_dup, 0);
}
}
@@ -1499,5 +1497,4 @@ void Init_generator(void)
i_encode = rb_intern("encode");
#endif
i_SAFE_STATE_PROTOTYPE = rb_intern("SAFE_STATE_PROTOTYPE");
- CJSON_SAFE_STATE_PROTOTYPE = Qnil;
}