diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-03-15 08:55:58 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-03-15 08:55:58 +0000 |
commit | 601d06f3e31323c219099f9d19ee23280d653bb9 (patch) | |
tree | 23be24100ddfa8ea10edb12019e2cc3a8a69b1ce /parse.y | |
parent | 7bb210b3035d2a28bcbdaec1570b019fac951ebb (diff) |
* class.c (rb_define_class): should handle autoload.
* class.c (rb_define_module): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@2208 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 21 |
1 files changed, 13 insertions, 8 deletions
@@ -380,7 +380,7 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem if (in_def || in_single) { yyerror("BEGIN in method"); } - local_push(); + local_push(1); } '{' compstmt '}' { @@ -1249,7 +1249,7 @@ primary : literal if (in_def || in_single) yyerror("class definition in method body"); class_nest++; - local_push(); + local_push(1); $<num>$ = ruby_sourceline; } compstmt @@ -1270,7 +1270,7 @@ primary : literal $<num>$ = in_single; in_single = 0; class_nest++; - local_push(); + local_push(1); } compstmt kEND @@ -1287,7 +1287,7 @@ primary : literal if (in_def || in_single) yyerror("module definition in method body"); class_nest++; - local_push(); + local_push(1); $<num>$ = ruby_sourceline; } compstmt @@ -1305,7 +1305,7 @@ primary : literal $<id>$ = cur_mid; cur_mid = $2; in_def++; - local_push(); + local_push(1); } f_arglist compstmt @@ -1333,7 +1333,7 @@ primary : literal { value_expr($2); in_single++; - local_push(); + local_push(1); lex_state = EXPR_END; /* force for args */ } f_arglist @@ -4684,11 +4684,12 @@ static struct local_vars { int nofree; int cnt; int dlev; + struct RVarmap* dyna_vars; struct local_vars *prev; } *lvtbl; static void -local_push() +local_push(int dyna_init) { struct local_vars *local; @@ -4698,7 +4699,10 @@ local_push() local->cnt = 0; local->tbl = 0; local->dlev = 0; + local->dyna_vars = ruby_dyna_vars; lvtbl = local; + + if (dyna_init) ruby_dyna_vars = (struct RVarmap* )0; } static void @@ -4710,6 +4714,7 @@ local_pop() if (!lvtbl->nofree) free(lvtbl->tbl); else lvtbl->tbl[0] = lvtbl->cnt; } + ruby_dyna_vars = lvtbl->dyna_vars; free(lvtbl); lvtbl = local; } @@ -4772,7 +4777,7 @@ local_id(id) static void top_local_init() { - local_push(); + local_push(0); lvtbl->cnt = ruby_scope->local_tbl?ruby_scope->local_tbl[0]:0; if (lvtbl->cnt > 0) { lvtbl->tbl = ALLOC_N(ID, lvtbl->cnt+3); |