diff options
author | Jean Boussier <[email protected]> | 2024-11-05 16:35:58 +0100 |
---|---|---|
committer | Jean Boussier <[email protected]> | 2024-11-05 18:00:36 +0100 |
commit | ca8f21ace86e9c7ab184b3f0087ff458c06b178c (patch) | |
tree | e5a4c05ba4bff8d9dc19963936d2c81248200881 /ext/json/generator/generator.c | |
parent | e8522f06b51f86214d28259118c736ac8951d8cd (diff) |
[ruby/json] Resync
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/12003
Diffstat (limited to 'ext/json/generator/generator.c')
-rw-r--r-- | ext/json/generator/generator.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/ext/json/generator/generator.c b/ext/json/generator/generator.c index c32b5ce093..80539af6c8 100644 --- a/ext/json/generator/generator.c +++ b/ext/json/generator/generator.c @@ -1,5 +1,27 @@ +#include "ruby.h" #include "../fbuffer/fbuffer.h" -#include "generator.h" + +#include <math.h> +#include <ctype.h> + +/* ruby api and some helpers */ + +typedef struct JSON_Generator_StateStruct { + VALUE indent; + VALUE space; + VALUE space_before; + VALUE object_nl; + VALUE array_nl; + + long max_nesting; + long depth; + long buffer_initial_length; + + bool allow_nan; + bool ascii_only; + bool script_safe; + bool strict; +} JSON_Generator_State; #ifndef RB_UNLIKELY #define RB_UNLIKELY(cond) (cond) @@ -31,6 +53,7 @@ struct generate_json_data { generator_func func; }; +static VALUE cState_from_state_s(VALUE self, VALUE opts); static VALUE cState_partial_generate(VALUE self, VALUE obj, generator_func); static void generate_json(FBuffer *buffer, struct generate_json_data *data, JSON_Generator_State *state, VALUE obj); static void generate_json_object(FBuffer *buffer, struct generate_json_data *data, JSON_Generator_State *state, VALUE obj); @@ -1013,6 +1036,10 @@ static VALUE generate_json_rescue(VALUE d, VALUE exc) struct generate_json_data *data = (struct generate_json_data *)d; fbuffer_free(data->buffer); + if (RBASIC_CLASS(exc) == rb_path2class("Encoding::UndefinedConversionError")) { + exc = rb_exc_new_str(eGeneratorError, rb_funcall(exc, rb_intern("message"), 0)); + } + rb_exc_raise(exc); return Qundef; |