From 875b92d9dece3bd6ab9e4abea476c765763539bd Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Thu, 25 Dec 2025 19:19:26 +0900 Subject: [PATCH] Use typed data APIs Untyped data APIs are deprecated. --- ext/yajl/yajl_ext.c | 20 ++++++++++++++++++-- ext/yajl/yajl_ext.h | 6 ++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/ext/yajl/yajl_ext.c b/ext/yajl/yajl_ext.c index 76319db6..2b838856 100644 --- a/ext/yajl/yajl_ext.c +++ b/ext/yajl/yajl_ext.c @@ -159,6 +159,14 @@ static void yajl_encoder_wrapper_mark(void * wrapper) { } } +static const rb_data_type_t yajl_encoder_wrapper_type = { + "YAJL::Encoder", + { + yajl_encoder_wrapper_mark, + yajl_encoder_wrapper_free, + } +}; + static VALUE yajl_key_to_string(VALUE obj) { switch (TYPE(obj)) { case T_STRING: @@ -309,6 +317,14 @@ void yajl_parser_wrapper_mark(void * wrapper) { } } +static const rb_data_type_t yajl_parser_wrapper_type = { + "YAJL::Parser", + { + yajl_parser_wrapper_mark, + yajl_parser_wrapper_free, + } +}; + void yajl_parse_chunk(const unsigned char * chunk, unsigned int len, yajl_handle parser) { yajl_status stat; @@ -486,7 +502,7 @@ static VALUE rb_yajl_parser_new(int argc, VALUE * argv, VALUE klass) { } cfg = (yajl_parser_config){allowComments, checkUTF8}; - obj = Data_Make_Struct(klass, yajl_parser_wrapper, yajl_parser_wrapper_mark, yajl_parser_wrapper_free, wrapper); + obj = TypedData_Make_Struct(klass, yajl_parser_wrapper, &yajl_parser_wrapper_type, wrapper); wrapper->parser = yajl_alloc(&callbacks, &cfg, &rb_alloc_funcs, (void *)obj); wrapper->nestedArrayLevel = 0; wrapper->nestedHashLevel = 0; @@ -1089,7 +1105,7 @@ static VALUE rb_yajl_encoder_new(int argc, VALUE * argv, VALUE klass) { } cfg = (yajl_gen_config){beautify, (const char *)indentString, htmlSafe}; - obj = Data_Make_Struct(klass, yajl_encoder_wrapper, yajl_encoder_wrapper_mark, yajl_encoder_wrapper_free, wrapper); + obj = TypedData_Make_Struct(klass, yajl_encoder_wrapper, &yajl_encoder_wrapper_type, wrapper); wrapper->indentString = actualIndent; wrapper->encoder = yajl_gen_alloc(&cfg, &rb_alloc_funcs); wrapper->on_progress_callback = Qnil; diff --git a/ext/yajl/yajl_ext.h b/ext/yajl/yajl_ext.h index bab2543b..96117cb6 100644 --- a/ext/yajl/yajl_ext.h +++ b/ext/yajl/yajl_ext.h @@ -58,8 +58,10 @@ static ID intern_io_read, intern_call, intern_keys, intern_to_s, intern_to_json, intern_has_key, intern_to_sym, intern_as_json; 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; -#define GetParser(obj, sval) Data_Get_Struct(obj, yajl_parser_wrapper, sval); -#define GetEncoder(obj, sval) Data_Get_Struct(obj, yajl_encoder_wrapper, sval); +static const rb_data_type_t yajl_parser_wrapper_type, yajl_encoder_wrapper_type; + +#define GetParser(obj, sval) TypedData_Get_Struct(obj, yajl_parser_wrapper, &yajl_parser_wrapper_type, sval) +#define GetEncoder(obj, sval) TypedData_Get_Struct(obj, yajl_encoder_wrapper, &yajl_encoder_wrapper_type, sval) static void yajl_check_and_fire_callback(void * ctx); static void yajl_set_static_value(void * ctx, VALUE val);