From: Akinori MUSHA Date: 2002-05-04T03:29:09+09:00 Subject: [ruby-dev:17006] Re: strict prototype for c++ At Fri, 3 May 2002 05:46:00 +0900, Takaaki Tateishi wrote: > At Fri, 3 May 2002 04:43:10 +0900, > >  他の関数と同様に > > > > void rb_gc_mark_maybe _((VALUE)); > > void rb_gc_mark _((VALUE)); > > > > でいいんじゃないでしょうか。1.7 でもそうなっているようです。 > > はい,もちろんその方がよいと思います.以前にも同様の議論があり, > [ruby-dev:13972] を受けての意見です.  そうかあ。確かにバグではないけど、各種プラットフォーム・処理系 対応の一環と考えれば、安定版にも適用していいと思いますけどね。 (前回はあれで十分だった) > rubyをコンパイルするときにはrb_gc_mark()を使って,拡張ライブラリ > で使う(C++で使われる)場合にはrb_gc_mark(VALUE)を使えばいいのでは > ないかと思ったためです. > これならとりあえずeval.c,gc.cなどに手を加えなくて済むと思います.  「C++だから」という条件はどうにも気持ちが悪いですね。 ;)  さっと作業したところ、添付のように30行くらい直せばwarningは抑制 できました。もしこれでよければ、(まつもとさんにお手間は取らせず) 私が commit しますが、どうでしょうか? -- / /__ __ Akinori.org / MUSHA.org / ) ) ) ) / FreeBSD.org / Ruby-lang.org Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp "Somewhere out of a memory.. of lighted streets on quiet nights.." Index: intern.h =================================================================== RCS file: /src/ruby/intern.h,v retrieving revision 1.35.2.19 diff -u -r1.35.2.19 intern.h --- intern.h 2002/03/07 11:19:28 1.35.2.19 +++ intern.h 2002/05/03 18:03:49 @@ -189,8 +189,8 @@ void rb_gc_mark_locations _((VALUE*, VALUE*)); void rb_mark_tbl _((struct st_table*)); void rb_mark_hash _((struct st_table*)); -void rb_gc_mark_maybe(); -void rb_gc_mark(); +void rb_gc_mark_maybe _((VALUE)); +void rb_gc_mark _((VALUE)); void rb_gc_force_recycle _((VALUE)); void rb_gc _((void)); char *rb_source_filename _((const char *)); Index: eval.c =================================================================== RCS file: /src/ruby/eval.c,v retrieving revision 1.137.2.111 diff -u -r1.137.2.111 eval.c --- eval.c 2002/05/01 09:37:57 1.137.2.111 +++ eval.c 2002/05/03 18:03:50 @@ -5849,12 +5849,12 @@ link = end_procs; while (link) { - rb_gc_mark(link->data); + rb_gc_mark((VALUE)link->data); link = link->next; } link = ephemeral_end_procs; while (link) { - rb_gc_mark(link->data); + rb_gc_mark((VALUE)link->data); link = link->next; } /* static global mark */ @@ -6081,14 +6081,14 @@ { while (data) { rb_gc_mark_frame(&data->frame); - rb_gc_mark(data->scope); - rb_gc_mark(data->var); - rb_gc_mark(data->body); - rb_gc_mark(data->self); - rb_gc_mark(data->dyna_vars); - rb_gc_mark(data->klass); - rb_gc_mark(data->tag); - rb_gc_mark(data->wrapper); + rb_gc_mark((VALUE)data->scope); + rb_gc_mark((VALUE)data->var); + rb_gc_mark((VALUE)data->body); + rb_gc_mark((VALUE)data->self); + rb_gc_mark((VALUE)data->dyna_vars); + rb_gc_mark((VALUE)data->klass); + rb_gc_mark((VALUE)data->tag); + rb_gc_mark((VALUE)data->wrapper); data = data->prev; } } @@ -6611,7 +6611,7 @@ rb_gc_mark(data->oklass); rb_gc_mark(data->klass); rb_gc_mark(data->recv); - rb_gc_mark(data->body); + rb_gc_mark((VALUE)data->body); } static VALUE @@ -7147,10 +7147,10 @@ rb_gc_mark(th->klass); rb_gc_mark(th->wrapper); - rb_gc_mark(th->cref); + rb_gc_mark((VALUE)th->cref); - rb_gc_mark(th->scope); - rb_gc_mark(th->dyna_vars); + rb_gc_mark((VALUE)th->scope); + rb_gc_mark((VALUE)th->dyna_vars); rb_gc_mark(th->errinfo); rb_gc_mark(th->last_line); rb_gc_mark(th->last_match); Index: gc.c =================================================================== RCS file: /src/ruby/gc.c,v retrieving revision 1.48.2.22 diff -u -r1.48.2.22 gc.c --- gc.c 2002/03/07 11:19:28 1.48.2.22 +++ gc.c 2002/05/03 18:03:50 @@ -476,7 +476,7 @@ void rb_gc_mark_maybe(obj) - void *obj; + VALUE obj; { if (is_pointer_to_heap(obj)) { rb_gc_mark(obj); @@ -485,7 +485,7 @@ void rb_gc_mark(ptr) - void *ptr; + VALUE ptr; { register RVALUE *obj = RANY(ptr); @@ -517,7 +517,7 @@ case NODE_MASGN: case NODE_RESCUE: case NODE_RESBODY: - rb_gc_mark(obj->as.node.u2.node); + rb_gc_mark((VALUE)obj->as.node.u2.node); /* fall through */ case NODE_BLOCK: /* 1,3 */ case NODE_ARRAY: @@ -531,7 +531,7 @@ case NODE_CALL: case NODE_DEFS: case NODE_OP_ASGN1: - rb_gc_mark(obj->as.node.u1.node); + rb_gc_mark((VALUE)obj->as.node.u1.node); /* fall through */ case NODE_SUPER: /* 3 */ case NODE_FCALL: @@ -554,7 +554,7 @@ case NODE_MATCH3: case NODE_OP_ASGN_OR: case NODE_OP_ASGN_AND: - rb_gc_mark(obj->as.node.u1.node); + rb_gc_mark((VALUE)obj->as.node.u1.node); /* fall through */ case NODE_METHOD: /* 2 */ case NODE_NOT: @@ -590,7 +590,7 @@ case NODE_SCOPE: /* 2,3 */ case NODE_CLASS: case NODE_BLOCK_PASS: - rb_gc_mark(obj->as.node.u3.node); + rb_gc_mark((VALUE)obj->as.node.u3.node); obj = RANY(obj->as.node.u2.node); goto Top; @@ -628,10 +628,10 @@ default: if (is_pointer_to_heap(obj->as.node.u1.node)) { - rb_gc_mark(obj->as.node.u1.node); + rb_gc_mark((VALUE)obj->as.node.u1.node); } if (is_pointer_to_heap(obj->as.node.u2.node)) { - rb_gc_mark(obj->as.node.u2.node); + rb_gc_mark((VALUE)obj->as.node.u2.node); } if (is_pointer_to_heap(obj->as.node.u3.node)) { obj = RANY(obj->as.node.u3.node); @@ -745,7 +745,7 @@ p = heaps[i]; pend = p + heaps_limits[i]; while (p < pend) { if (!(p->as.basic.flags&FL_MARK) && BUILTIN_TYPE(p) == T_NODE) - rb_gc_mark(p); + rb_gc_mark((VALUE)p); p++; } } @@ -1041,8 +1041,8 @@ } } rb_gc_mark(ruby_class); - rb_gc_mark(ruby_scope); - rb_gc_mark(ruby_dyna_vars); + rb_gc_mark((VALUE)ruby_scope); + rb_gc_mark((VALUE)ruby_dyna_vars); if (finalizer_table) { rb_mark_tbl(finalizer_table); } Index: variable.c =================================================================== RCS file: /src/ruby/variable.c,v retrieving revision 1.29.2.18 diff -u -r1.29.2.18 variable.c --- variable.c 2002/05/01 09:37:59 1.29.2.18 +++ variable.c 2002/05/03 18:03:50 @@ -388,7 +388,7 @@ val_marker(data) void *data; { - if (data) rb_gc_mark_maybe(data); + if (data) rb_gc_mark_maybe((VALUE)data); } static VALUE @@ -411,7 +411,7 @@ static void var_marker(var) - VALUE **var; + VALUE *var; { if (var) rb_gc_mark_maybe(*var); } @@ -435,7 +435,7 @@ (*entry->marker)(entry->data); trace = entry->trace; while (trace) { - if (trace->data) rb_gc_mark_maybe(trace->data); + if (trace->data) rb_gc_mark_maybe((VALUE)trace->data); trace = trace->next; } return ST_CONTINUE;