Skip to content

Commit 6501652

Browse files
authored
Merge pull request #232 from nobu/typed-data
Use typed data APIs
2 parents 6376072 + 875b92d commit 6501652

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

ext/yajl/yajl_ext.c

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,14 @@ static void yajl_encoder_wrapper_mark(void * wrapper) {
159159
}
160160
}
161161

162+
static const rb_data_type_t yajl_encoder_wrapper_type = {
163+
"YAJL::Encoder",
164+
{
165+
yajl_encoder_wrapper_mark,
166+
yajl_encoder_wrapper_free,
167+
}
168+
};
169+
162170
static VALUE yajl_key_to_string(VALUE obj) {
163171
switch (TYPE(obj)) {
164172
case T_STRING:
@@ -309,6 +317,14 @@ void yajl_parser_wrapper_mark(void * wrapper) {
309317
}
310318
}
311319

320+
static const rb_data_type_t yajl_parser_wrapper_type = {
321+
"YAJL::Parser",
322+
{
323+
yajl_parser_wrapper_mark,
324+
yajl_parser_wrapper_free,
325+
}
326+
};
327+
312328
void yajl_parse_chunk(const unsigned char * chunk, unsigned int len, yajl_handle parser) {
313329
yajl_status stat;
314330

@@ -486,7 +502,7 @@ static VALUE rb_yajl_parser_new(int argc, VALUE * argv, VALUE klass) {
486502
}
487503
cfg = (yajl_parser_config){allowComments, checkUTF8};
488504

489-
obj = Data_Make_Struct(klass, yajl_parser_wrapper, yajl_parser_wrapper_mark, yajl_parser_wrapper_free, wrapper);
505+
obj = TypedData_Make_Struct(klass, yajl_parser_wrapper, &yajl_parser_wrapper_type, wrapper);
490506
wrapper->parser = yajl_alloc(&callbacks, &cfg, &rb_alloc_funcs, (void *)obj);
491507
wrapper->nestedArrayLevel = 0;
492508
wrapper->nestedHashLevel = 0;
@@ -1089,7 +1105,7 @@ static VALUE rb_yajl_encoder_new(int argc, VALUE * argv, VALUE klass) {
10891105
}
10901106
cfg = (yajl_gen_config){beautify, (const char *)indentString, htmlSafe};
10911107

1092-
obj = Data_Make_Struct(klass, yajl_encoder_wrapper, yajl_encoder_wrapper_mark, yajl_encoder_wrapper_free, wrapper);
1108+
obj = TypedData_Make_Struct(klass, yajl_encoder_wrapper, &yajl_encoder_wrapper_type, wrapper);
10931109
wrapper->indentString = actualIndent;
10941110
wrapper->encoder = yajl_gen_alloc(&cfg, &rb_alloc_funcs);
10951111
wrapper->on_progress_callback = Qnil;

ext/yajl/yajl_ext.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,10 @@ static ID intern_io_read, intern_call, intern_keys, intern_to_s,
5858
intern_to_json, intern_has_key, intern_to_sym, intern_as_json;
5959
static ID sym_allow_comments, sym_check_utf8, sym_pretty, sym_indent, sym_terminator, sym_symbolize_keys, sym_symbolize_names, sym_html_safe, sym_entities;
6060

61-
#define GetParser(obj, sval) Data_Get_Struct(obj, yajl_parser_wrapper, sval);
62-
#define GetEncoder(obj, sval) Data_Get_Struct(obj, yajl_encoder_wrapper, sval);
61+
static const rb_data_type_t yajl_parser_wrapper_type, yajl_encoder_wrapper_type;
62+
63+
#define GetParser(obj, sval) TypedData_Get_Struct(obj, yajl_parser_wrapper, &yajl_parser_wrapper_type, sval)
64+
#define GetEncoder(obj, sval) TypedData_Get_Struct(obj, yajl_encoder_wrapper, &yajl_encoder_wrapper_type, sval)
6365

6466
static void yajl_check_and_fire_callback(void * ctx);
6567
static void yajl_set_static_value(void * ctx, VALUE val);

0 commit comments

Comments
 (0)