Author: fperrad
Date: Mon Apr 24 23:34:53 2006
New Revision: 12416
Modified:
trunk/languages/lua/Lua/build.pm
trunk/languages/lua/Lua/lua51.yp
trunk/languages/lua/Lua/parser.pm
trunk/languages/lua/t/scope.t
Log:
Lua :
- fix a scoping bug
Modified: trunk/languages/lua/Lua/build.pm
==============================================================================
--- trunk/languages/lua/Lua/build.pm (original)
+++ trunk/languages/lua/Lua/build.pm Mon Apr 24 23:34:53 2006
@@ -64,12 +64,16 @@
$parser->YYData->{symbtab_cst} = new SymbTabConst($parser);
unshift @{ $parser->YYData->{scopef} }, $parser->YYData->{scope};
$parser->YYData->{scope} = [];
+ unshift @{ $parser->YYData->{scopef} }, $parser->YYData->{lex_num};
+ $parser->YYData->{lex_num} = 0;
## warn "PushScopeF\n";
}
sub PopScopeF {
my ($parser) = @_;
+ my $lex_num = shift @{ $parser->YYData->{scopef} };
+ $parser->YYData->{lex_num} = $lex_num;
my $scope = shift @{ $parser->YYData->{scopef} };
$parser->YYData->{scope} = $scope;
my $symbtab = shift @{ $parser->YYData->{scopef} };
@@ -85,6 +89,7 @@
unshift @{ $parser->YYData->{scope} }, $parser->YYData->{symbtab};
$parser->YYData->{symbtab} = new SymbTabVar($parser);
+ $parser->YYData->{lex_num} ++;
## warn "PushScope\n";
}
@@ -93,6 +98,7 @@
my $symbtab = shift @{ $parser->YYData->{scope} };
$parser->YYData->{symbtab} = $symbtab;
+ $parser->YYData->{lex_num} ++;
## warn "PopScope\n";
}
@@ -772,7 +778,7 @@
my $defn = $parser->YYData->{symbtab}->LookupS($idf);
unless ( defined $defn ) {
my $name;
- $name = 'var_' . scalar( @{ $parser->YYData->{scope} } ) . '_' . $idf;
+ $name = 'var_' . $parser->YYData->{lex_num} . '_' . $idf;
$defn = new defn( $name, 'local', 'pmc', undef, $idf );
push @opcodes, new LocalDir( $parser,
'prolog' => 1,
Modified: trunk/languages/lua/Lua/lua51.yp
==============================================================================
--- trunk/languages/lua/Lua/lua51.yp (original)
+++ trunk/languages/lua/Lua/lua51.yp Mon Apr 24 23:34:53 2006
@@ -633,6 +633,7 @@
$parser->YYData->{srcname_mtime} = $st[9];
$parser->_InitLexico();
$parser->YYData->{functs} = [];
+ $parser->YYData->{lex_num} = 0;
$parser->YYData->{scope} = [];
$parser->YYData->{scopef} = [];
$parser->YYData->{symbtab} = new SymbTabVar($parser);
Modified: trunk/languages/lua/Lua/parser.pm
==============================================================================
--- trunk/languages/lua/Lua/parser.pm (original)
+++ trunk/languages/lua/Lua/parser.pm Mon Apr 24 23:34:53 2006
@@ -3772,6 +3772,7 @@
$parser->YYData->{srcname_mtime} = $st[9];
$parser->_InitLexico();
$parser->YYData->{functs} = [];
+ $parser->YYData->{lex_num} = 0;
$parser->YYData->{scope} = [];
$parser->YYData->{scopef} = [];
$parser->YYData->{symbtab} = new SymbTabVar($parser);
Modified: trunk/languages/lua/t/scope.t
==============================================================================
--- trunk/languages/lua/t/scope.t (original)
+++ trunk/languages/lua/t/scope.t Mon Apr 24 23:34:53 2006
@@ -45,9 +45,6 @@
10
OUT
-SKIP: {
-skip( 'while exp', 1 );
-
language_output_is( 'lua', <<'CODE', <<'OUT', 'scope' );
x = 10
local i = 1
@@ -81,7 +78,6 @@
10
10
OUT
-}
language_output_is( 'lua', <<'CODE', <<'OUT', 'scope' );
local a, b = 1, 10