[前][次][番号順一覧][スレッド一覧]

ruby-changes:36608

From: nobu <ko1@a...>
Date: Wed, 3 Dec 2014 09:49:07 +0900 (JST)
Subject: [ruby-changes:36608] nobu:r48689 (trunk): cparse.c: typed data

nobu	2014-12-03 09:48:59 +0900 (Wed, 03 Dec 2014)

  New Revision: 48689

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=48689

  Log:
    cparse.c: typed data
    
    * ext/racc/cparse/cparse.c (cparse_params_type): use typed data.

  Modified files:
    trunk/ChangeLog
    trunk/ext/racc/cparse/cparse.c
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 48688)
+++ ChangeLog	(revision 48689)
@@ -1,3 +1,7 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Wed Dec  3 09:48:57 2014  Nobuyoshi Nakada  <nobu@r...>
+
+	* ext/racc/cparse/cparse.c (cparse_params_type): use typed data.
+
 Tue Dec  2 21:33:56 2014  Masaki Suketa <masaki.suketa@n...>
 
 	* ext/win32ole/win32ole.c: use typed data for com_hash.
Index: ext/racc/cparse/cparse.c
===================================================================
--- ext/racc/cparse/cparse.c	(revision 48688)
+++ ext/racc/cparse/cparse.c	(revision 48689)
@@ -200,6 +200,7 @@ static VALUE assert_hash _((VALUE h)); https://github.com/ruby/ruby/blob/trunk/ext/racc/cparse/cparse.c#L200
 static VALUE initialize_params _((VALUE vparams, VALUE parser, VALUE arg,
                                  VALUE lexer, VALUE lexmid));
 static void cparse_params_mark _((void *ptr));
+static size_t cparse_params_memsize _((const void *ptr));
 
 static void parse_main _((struct cparse_params *v,
                          VALUE tok, VALUE val, int resume));
@@ -218,33 +219,47 @@ static VALUE reduce0 _((VALUE block_args https://github.com/ruby/ruby/blob/trunk/ext/racc/cparse/cparse.c#L219
 #endif
 
 #undef RUBY_UNTYPED_DATA_WARNING
-#define RUBY_UNTYPED_DATA_WARNING 0
+#define RUBY_UNTYPED_DATA_WARNING 1
+
+static const rb_data_type_t cparse_params_type = {
+    "racc/cparse",
+    {
+	cparse_params_mark,
+	RUBY_TYPED_DEFAULT_FREE,
+	cparse_params_memsize,
+    },
+#ifdef RUBY_TYPED_FREE_IMMEDIATELY
+    0, 0,
+    RUBY_TYPED_FREE_IMMEDIATELY,
+#endif
+};
 
 static VALUE
 racc_cparse(VALUE parser, VALUE arg, VALUE sysdebug)
 {
-    volatile VALUE vparams;
+    VALUE vparams;
     struct cparse_params *v;
 
-    vparams = Data_Make_Struct(CparseParams, struct cparse_params,
-                               cparse_params_mark, -1, v);
+    vparams = TypedData_Make_Struct(CparseParams, struct cparse_params,
+				    &cparse_params_type, v);
     D_puts("starting cparse");
     v->sys_debug = RTEST(sysdebug);
     vparams = initialize_params(vparams, parser, arg, Qnil, Qnil);
     v->lex_is_iterator = FALSE;
     parse_main(v, Qnil, Qnil, 0);
 
+    RB_GC_GUARD(vparams);
     return v->retval;
 }
 
 static VALUE
 racc_yyparse(VALUE parser, VALUE lexer, VALUE lexmid, VALUE arg, VALUE sysdebug)
 {
-    volatile VALUE vparams;
+    VALUE vparams;
     struct cparse_params *v;
 
-    vparams = Data_Make_Struct(CparseParams, struct cparse_params,
-                               cparse_params_mark, -1, v);
+    vparams = TypedData_Make_Struct(CparseParams, struct cparse_params,
+				    &cparse_params_type, v);
     v->sys_debug = RTEST(sysdebug);
     D_puts("start C yyparse");
     vparams = initialize_params(vparams, parser, arg, lexer, lexmid);
@@ -257,6 +272,7 @@ racc_yyparse(VALUE parser, VALUE lexer, https://github.com/ruby/ruby/blob/trunk/ext/racc/cparse/cparse.c#L272
                  rb_id2name(v->lexmid));
     }
 
+    RB_GC_GUARD(vparams);
     return v->retval;
 }
 
@@ -270,9 +286,8 @@ call_lexer(struct cparse_params *v) https://github.com/ruby/ruby/blob/trunk/ext/racc/cparse/cparse.c#L286
 static VALUE
 lexer_iter(VALUE data)
 {
-    struct cparse_params *v;
+    struct cparse_params *v = rb_check_typeddata(data, &cparse_params_type);
 
-    Data_Get_Struct(data, struct cparse_params, v);
     rb_funcall(v->lexer, v->lexmid, 0);
     return Qnil;
 }
@@ -287,10 +302,9 @@ call_lexer(struct cparse_params *v) https://github.com/ruby/ruby/blob/trunk/ext/racc/cparse/cparse.c#L302
 static VALUE
 lexer_i(RB_BLOCK_CALL_FUNC_ARGLIST(block_args, data))
 {
-    struct cparse_params *v;
+    struct cparse_params *v = rb_check_typeddata(data, &cparse_params_type);
     VALUE tok, val;
 
-    Data_Get_Struct(data, struct cparse_params, v);
     if (v->fin)
         rb_raise(rb_eArgError, "extra token after EndOfToken");
     extract_user_token(v, block_args, &tok, &val);
@@ -323,9 +337,8 @@ assert_integer(VALUE n) https://github.com/ruby/ruby/blob/trunk/ext/racc/cparse/cparse.c#L337
 static VALUE
 initialize_params(VALUE vparams, VALUE parser, VALUE arg, VALUE lexer, VALUE lexmid)
 {
-    struct cparse_params *v;
+    struct cparse_params *v = rb_check_typeddata(vparams, &cparse_params_type);
 
-    Data_Get_Struct(vparams, struct cparse_params, v);
     v->value_v = vparams;
     v->parser = parser;
     v->lexer = lexer;
@@ -408,6 +421,12 @@ cparse_params_mark(void *ptr) https://github.com/ruby/ruby/blob/trunk/ext/racc/cparse/cparse.c#L421
     rb_gc_mark(v->retval);
 }
 
+static size_t
+cparse_params_memsize(const void *ptr)
+{
+    return sizeof(struct cparse_params);
+}
+
 static void
 extract_user_token(struct cparse_params *v, VALUE block_args,
                    VALUE *tok, VALUE *val)
@@ -687,7 +706,7 @@ reduce(struct cparse_params *v, long act https://github.com/ruby/ruby/blob/trunk/ext/racc/cparse/cparse.c#L706
 static VALUE
 reduce0(VALUE val, VALUE data, VALUE self)
 {
-    struct cparse_params *v;
+    struct cparse_params *v = rb_check_typeddata(data, &cparse_params_type);
     VALUE reduce_to, reduce_len, method_id;
     long len;
     ID mid;
@@ -695,7 +714,6 @@ reduce0(VALUE val, VALUE data, VALUE sel https://github.com/ruby/ruby/blob/trunk/ext/racc/cparse/cparse.c#L714
     long i, k1, k2;
     VALUE goto_state;
 
-    Data_Get_Struct(data, struct cparse_params, v);
     reduce_len = rb_ary_entry(v->reduce_table, v->ruleno);
     reduce_to  = rb_ary_entry(v->reduce_table, v->ruleno+1);
     method_id  = rb_ary_entry(v->reduce_table, v->ruleno+2);
@@ -797,6 +815,8 @@ reduce0(VALUE val, VALUE data, VALUE sel https://github.com/ruby/ruby/blob/trunk/ext/racc/cparse/cparse.c#L815
 void
 Init_cparse(void)
 {
+#undef rb_intern
+#define rb_intern(str) rb_intern_const(str)
     VALUE Racc, Parser;
     ID id_racc = rb_intern("Racc");
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]