mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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
This commit is contained in:
parent
b60cc77902
commit
4a84c27e3e
16 changed files with 570 additions and 1695 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue