From 4a84c27e3ee50c4989591fcde2b7a10c5ccc0395 Mon Sep 17 00:00:00 2001 From: naruse Date: Wed, 1 Dec 2010 16:26:13 +0000 Subject: * ext/json: Update github/flori/json from 1.4.2+ to e22b2f2bdfe6a9b0. this fixes some bugs. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30003 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/json/generator/generator.h | 48 +++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 10 deletions(-) (limited to 'ext/json/generator/generator.h') diff --git a/ext/json/generator/generator.h b/ext/json/generator/generator.h index 35c66af379..e47f507b0d 100644 --- a/ext/json/generator/generator.h +++ b/ext/json/generator/generator.h @@ -50,10 +50,10 @@ /* fbuffer implementation */ typedef struct FBufferStruct { - unsigned int initial_length; + unsigned long initial_length; char *ptr; - unsigned int len; - unsigned int capa; + unsigned long len; + unsigned long capa; } FBuffer; #define FBUFFER_INITIAL_LENGTH 4096 @@ -63,15 +63,17 @@ typedef struct FBufferStruct { #define FBUFFER_CAPA(fb) (fb->capa) #define FBUFFER_PAIR(fb) FBUFFER_PTR(fb), FBUFFER_LEN(fb) -static char *fstrndup(const char *ptr, int len); +static char *fstrndup(const char *ptr, unsigned long len); static FBuffer *fbuffer_alloc(); -static FBuffer *fbuffer_alloc_with_length(unsigned initial_length); +static FBuffer *fbuffer_alloc_with_length(unsigned long initial_length); static void fbuffer_free(FBuffer *fb); +static void fbuffer_free_only_buffer(FBuffer *fb); static void fbuffer_clear(FBuffer *fb); -static void fbuffer_append(FBuffer *fb, const char *newstr, unsigned int len); +static void fbuffer_append(FBuffer *fb, const char *newstr, unsigned long len); static void fbuffer_append_long(FBuffer *fb, long number); static void fbuffer_append_char(FBuffer *fb, char newchr); static FBuffer *fbuffer_dup(FBuffer *fb); +static VALUE fbuffer_to_s(FBuffer *fb); /* unicode defintions */ @@ -97,7 +99,7 @@ static const int halfShift = 10; /* used for shifting by 10 bits */ static const UTF32 halfBase = 0x0010000UL; static const UTF32 halfMask = 0x3FFUL; -static unsigned char isLegalUTF8(const UTF8 *source, int length); +static unsigned char isLegalUTF8(const UTF8 *source, unsigned long length); static void unicode_escape(char *buf, UTF16 character); static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16 character); static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string); @@ -122,15 +124,29 @@ typedef struct JSON_Generator_StateStruct { long max_nesting; char allow_nan; char ascii_only; + long depth; } JSON_Generator_State; #define GET_STATE(self) \ JSON_Generator_State *state; \ Data_Get_Struct(self, JSON_Generator_State, state) +#define GENERATE_JSON(type) \ + FBuffer *buffer; \ + VALUE Vstate; \ + JSON_Generator_State *state; \ + \ + rb_scan_args(argc, argv, "01", &Vstate); \ + Vstate = cState_from_state_s(cState, Vstate); \ + Data_Get_Struct(Vstate, JSON_Generator_State, state); \ + buffer = cState_prepare_buffer(Vstate); \ + generate_json_##type(buffer, Vstate, state, self); \ + return fbuffer_to_s(buffer) + static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self); static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self); -static VALUE mInteger_to_json(int argc, VALUE *argv, VALUE self); +static VALUE mFixnum_to_json(int argc, VALUE *argv, VALUE self); +static VALUE mBignum_to_json(int argc, VALUE *argv, VALUE self); static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self); static VALUE mString_included_s(VALUE self, VALUE modul); static VALUE mString_to_json(int argc, VALUE *argv, VALUE self); @@ -146,8 +162,17 @@ static JSON_Generator_State *State_allocate(); static VALUE cState_s_allocate(VALUE klass); static VALUE cState_configure(VALUE self, VALUE opts); static VALUE cState_to_h(VALUE self); -static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj, long depth); -static VALUE cState_partial_generate(VALUE self, VALUE obj, VALUE depth); +static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_object(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_array(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_null(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_false(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_true(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_fixnum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_bignum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_float(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static VALUE cState_partial_generate(VALUE self, VALUE obj); static VALUE cState_generate(VALUE self, VALUE obj); static VALUE cState_initialize(int argc, VALUE *argv, VALUE self); static VALUE cState_from_state_s(VALUE self, VALUE opts); @@ -165,5 +190,8 @@ static VALUE cState_max_nesting(VALUE self); static VALUE cState_max_nesting_set(VALUE self, VALUE depth); static VALUE cState_allow_nan_p(VALUE self); static VALUE cState_ascii_only_p(VALUE self); +static VALUE cState_depth(VALUE self); +static VALUE cState_depth_set(VALUE self, VALUE depth); +static FBuffer *cState_prepare_buffer(VALUE self); #endif -- cgit v1.2.3