Ruby  2.4.2p198(2017-09-14revision59899)
parser.h
Go to the documentation of this file.
1 #ifndef _PARSER_H_
2 #define _PARSER_H_
3 
4 #include "ruby.h"
5 
6 #ifndef HAVE_RUBY_RE_H
7 #include "re.h"
8 #endif
9 
10 #ifdef HAVE_RUBY_ST_H
11 #include "ruby/st.h"
12 #else
13 #include "st.h"
14 #endif
15 
16 #define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key))
17 
18 /* unicode */
19 
20 typedef unsigned long UTF32; /* at least 32 bits */
21 typedef unsigned short UTF16; /* at least 16 bits */
22 typedef unsigned char UTF8; /* typically 8 bits */
23 
24 #define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
25 #define UNI_SUR_HIGH_START (UTF32)0xD800
26 #define UNI_SUR_HIGH_END (UTF32)0xDBFF
27 #define UNI_SUR_LOW_START (UTF32)0xDC00
28 #define UNI_SUR_LOW_END (UTF32)0xDFFF
29 
30 typedef struct JSON_ParserStruct {
32  char *source;
33  long len;
34  char *memo;
37  int allow_nan;
45 } JSON_Parser;
46 
47 #define GET_PARSER \
48  GET_PARSER_INIT; \
49  if (!json->Vsource) rb_raise(rb_eTypeError, "uninitialized instance")
50 #define GET_PARSER_INIT \
51  JSON_Parser *json; \
52  TypedData_Get_Struct(self, JSON_Parser, &JSON_Parser_type, json)
53 
54 #define MinusInfinity "-Infinity"
55 #define EVIL 0x666
56 
57 static UTF32 unescape_unicode(const unsigned char *p);
58 static int convert_UTF32_to_UTF8(char *buf, UTF32 ch);
59 static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting);
60 static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting);
61 static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
62 static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
63 static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting);
64 static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd);
65 static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
67 static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self);
68 static VALUE cParser_parse(VALUE self);
69 static void JSON_mark(void *json);
70 static void JSON_free(void *json);
71 static VALUE cJSON_parser_s_allocate(VALUE klass);
72 static VALUE cParser_source(VALUE self);
73 #ifndef ZALLOC
74 #define ZALLOC(type) ((type *)ruby_zalloc(sizeof(type)))
75 static inline void *ruby_zalloc(size_t n)
76 {
77  void *p = ruby_xmalloc(n);
78  memset(p, 0, n);
79  return p;
80 }
81 #endif
82 #ifdef TypedData_Make_Struct
84 #define NEW_TYPEDDATA_WRAPPER 1
85 #else
86 #define TypedData_Make_Struct(klass, type, ignore, json) Data_Make_Struct(klass, type, NULL, JSON_free, json)
87 #define TypedData_Get_Struct(self, JSON_Parser, ignore, json) Data_Get_Struct(self, JSON_Parser, json)
88 #endif
89 
90 #endif
static VALUE cParser_source(VALUE self)
int create_additions
Definition: parser.h:42
unsigned char UTF8
Definition: parser.h:22
static UTF32 unescape_unicode(const unsigned char *p)
char * memo
Definition: parser.h:34
int parsing_name
Definition: parser.h:38
static void JSON_mark(void *json)
static const rb_data_type_t JSON_Parser_type
Definition: parser.h:83
static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
static VALUE cJSON_parser_s_allocate(VALUE klass)
static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
unsigned long UTF32
Definition: generator.h:29
VALUE object_class
Definition: parser.h:40
static void JSON_free(void *json)
int argc
Definition: ruby.c:183
int symbolize_names
Definition: parser.h:39
unsigned char buf[MIME_BUF_SIZE]
Definition: nkf.c:4309
unsigned long VALUE
Definition: ruby.h:85
static VALUE result
Definition: nkf.c:40
static int convert_UTF32_to_UTF8(char *buf, UTF32 ch)
static char * JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
void * ruby_xmalloc(size_t size)
Definition: gc.c:7931
static char * JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
static char * JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
unsigned short UTF16
Definition: parser.h:21
char * source
Definition: parser.h:32
FBuffer * fbuffer
Definition: parser.h:44
VALUE array_class
Definition: parser.h:41
static char * JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result)
VALUE Vsource
Definition: parser.h:31
VALUE match_string
Definition: parser.h:43
unsigned long UTF32
Definition: parser.h:20
static VALUE cParser_parse(VALUE self)
VALUE create_id
Definition: parser.h:35
static VALUE convert_encoding(VALUE source)
struct JSON_ParserStruct JSON_Parser
char ** argv
Definition: ruby.c:184
static char * JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
static char * JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)