豊福です。

  def foo(@x, @y = 0) のように仮引数のところにインス
タンス変数を使えるようにするパッチです。
といってもちょっとやってみたというレベルで、
def Bar.foo(@x, ...) の方もまだ入れてません。
(採用されないなら無駄骨になるから (^_^;)

  def foo(@x, @y = 0)
を
  def foo(_@x, _@y = 0)
    @x = _@x
    @y = _@y
に対応させるという泥くさい方法なのでダメかな。
---
                        豊福
                        toyofuku / juice.or.jp

*** parse.y.org	Fri Sep 17 01:11:25 1999
--- parse.y	Wed Oct 27 22:19:34 1999
***************
*** 61,66 ****
--- 61,70 ----
  static int compile_for_eval = 0;
  static ID cur_mid = 0;
  
+ static ID ivarg_id[64];
+ static ID tvarg_id[64];
+ static int n_ivarg;
+ 
  static NODE *cond();
  static NODE *logop();
  
***************
*** 1179,1184 ****
--- 1183,1189 ----
  			    yyerror("nested method definition");
  			cur_mid = $2;
  			local_push();
+ 			n_ivarg = 0;
  		    }
  		  f_arglist
  		  compstmt
***************
*** 1185,1190 ****
--- 1190,1200 ----
  		  kEND
  		    {
  		        /* NOEX_PRIVATE for toplevel */
+ 			if (n_ivarg) {
+ 				while (--n_ivarg >= 0) {
+ 					$5 = block_append(newline_node(NEW_IASGN(ivarg_id[n_ivarg], NEW_LVAR(tvarg_id[n_ivarg]))), $5);
+ 				}
+ 			}
  			$$ = NEW_DEFN($2, $4, $5, class_nest?0:1);
  		        fixpos($$, $4);
  		        local_pop();
***************
*** 1525,1531 ****
--- 1535,1554 ----
  			local_cnt($1);
  			$$ = 1;
  		    }
+ 		| tIVAR
+ 		    {
+ 			ID id;
+ 			char buf[64];
  
+ 			sprintf(buf, "_%s", rb_id2name($1));
+ 			id = rb_intern(buf);
+ 			local_cnt(id);
+ 			ivarg_id[n_ivarg] = $1;
+ 			tvarg_id[n_ivarg] = id;
+ 			n_ivarg++;
+ 			$$ = 1;
+ 		    }
+ 
  f_arg		: f_norm_arg
  		| f_arg ',' f_norm_arg
  		    {
***************
*** 1540,1546 ****
--- 1563,1582 ----
  			    yyerror("duplicate optional argument name");
  			$$ = assignable($1, $3);
  		    }
+ 		| tIVAR '=' arg
+ 		    {
+ 			ID id;
+ 			char buf[32];
  
+ 			sprintf(buf, "_%s", rb_id2name($1));
+ 			id = rb_intern(buf);
+ 			local_cnt(id);
+ 			ivarg_id[n_ivarg] = $1;
+ 			tvarg_id[n_ivarg] = id;
+ 			n_ivarg++;
+ 			$$ = assignable(id, $3);
+ 		    }
+ 
  f_optarg	: f_opt
  		    {
  			$$ = NEW_BLOCK($1);