[macruby-changes] [1281] MacRuby/branches/experimental/parse.y
source_changes at macosforge.org
source_changes at macosforge.org
Tue Mar 31 04:05:18 PDT 2009
Revision: 1281
http://trac.macosforge.org/projects/ruby/changeset/1281
Author: vincent.isambart at gmail.com
Date: 2009-03-31 04:05:18 -0700 (Tue, 31 Mar 2009)
Log Message:
-----------
x=42; 1.times { 1.times { p x } } should now work
Modified Paths:
--------------
MacRuby/branches/experimental/parse.y
Modified: MacRuby/branches/experimental/parse.y
===================================================================
--- MacRuby/branches/experimental/parse.y 2009-03-31 09:55:27 UTC (rev 1280)
+++ MacRuby/branches/experimental/parse.y 2009-03-31 11:05:18 UTC (rev 1281)
@@ -8899,12 +8899,41 @@
dyna_pop_gen(struct parser_params *parser)
{
struct vtable *tmp;
+ struct vtable *prev_vars = NULL, *prev_args = NULL;
+ prev_vars = lvtbl->vars->prev;
+ prev_args = lvtbl->args->prev;
+
+ if ((prev_vars != NULL) && (prev_vars->prev != NULL)) {
+ // copy vars in the outer block if they are not already there
+ // and if they are in an even outer scope
+ int i;
+ for (i = 0; i < lvtbl->vars->pos; ++i) {
+ struct vtable *pprev_vars = NULL, *pprev_args = NULL;
+ ID id = lvtbl->vars->tbl[i];
+
+ if (vtable_included(prev_vars, id) || vtable_included(prev_args, id)) {
+ continue;
+ }
+
+ pprev_vars = prev_vars->prev;
+ pprev_args = prev_args->prev;
+ while (pprev_vars != NULL) {
+ if (vtable_included(pprev_vars, id) || vtable_included(pprev_args, id)) {
+ vtable_add(prev_vars, id);
+ break;
+ }
+ pprev_vars = pprev_vars->prev;
+ pprev_args = pprev_args->prev;
+ }
+ }
+ }
+
tmp = lvtbl->args;
- GC_WB(&lvtbl->args, lvtbl->args->prev);
+ GC_WB(&lvtbl->args, prev_args);
vtable_free(tmp);
tmp = lvtbl->vars;
- GC_WB(&lvtbl->vars, lvtbl->vars->prev);
+ GC_WB(&lvtbl->vars, prev_vars);
vtable_free(tmp);
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090331/094b8840/attachment.html>
More information about the macruby-changes
mailing list