Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Perlito5 - js - fix scope for "for" variable
  • Loading branch information
fglock committed Mar 14, 2013
1 parent ba5acc1 commit f68d4e6
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 4 deletions.
6 changes: 5 additions & 1 deletion html/perlito5.js
Expand Up @@ -4579,12 +4579,16 @@ var p5100 = p5pkg['main'];
var v_cond;
(v_cond = (p5pkg["Perlito5::Javascript2"].to_list(p5list_to_a((new p5ArrayRef(p5list_to_a((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('cond')))), (p5num(v_level) + 1)), 0)));
if ( p5bool(p5call((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('body'), "sig", [], 0)) ) {
(p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_.p5unshift(p5list_to_a((new p5HashRef({}))));
var v_v;
(v_v = (p5call((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('body'), "sig", [], 0)));
(p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_.p5aget_hash(0)._hash_.p5hset(p5str(p5call(v_v, "perl5_name_javascript2", [], 0)), ((new p5HashRef({'decl' : 'my'}))));
var v_sig;
(v_sig = (p5call(v_v, "emit_javascript2", [(p5num(v_level) + 1)], 0)));
throw(p5context([('p5for_lex(' + ('function (' + p5str(v_sig) + ') {' + String.fromCharCode(10)) + p5str(p5call(p5context([p5call(p5pkg["Perlito5::Javascript2::LexicalBlock"], "new", p5list_to_a('block', p5call((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('body'), "stmts", [], 1), 'needs_return', 0, 'top_level', 0), 0)], 0), "emit_javascript2", [(p5num(v_level) + 2)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript2"].tab([(p5num(v_level) + 1)], 0)) + '}, ' + p5str(v_cond) + ', ' + p5str(p5pkg["Perlito5::AST::Lit::Block"].emit_javascript2_continue([v_self, v_level], 0)) + ', ' + '"' + p5str(p5or((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('label'), function () { return '' })) + '"' + ')')], p5want))
var v_s;
(v_s = (('p5for_lex(' + ('function (' + p5str(v_sig) + ') {' + String.fromCharCode(10)) + p5str(p5call(p5context([p5call(p5pkg["Perlito5::Javascript2::LexicalBlock"], "new", p5list_to_a('block', p5call((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('body'), "stmts", [], 1), 'needs_return', 0, 'top_level', 0), 0)], 0), "emit_javascript2", [(p5num(v_level) + 2)], 0)) + String.fromCharCode(10) + p5str(p5pkg["Perlito5::Javascript2"].tab([(p5num(v_level) + 1)], 0)) + '}, ' + p5str(v_cond) + ', ' + p5str(p5pkg["Perlito5::AST::Lit::Block"].emit_javascript2_continue([v_self, v_level], 0)) + ', ' + '"' + p5str(p5or((v_self || (v_self = new p5HashRef({})))._hash_.p5hget('label'), function () { return '' })) + '"' + ')')));
(p5pkg["Perlito5"]["v_VAR"] || (p5pkg["Perlito5"]["v_VAR"] = new p5ArrayRef([])))._array_.shift();
throw(p5context([v_s], p5want))
}

else {
Expand Down
5 changes: 4 additions & 1 deletion perlito5.pl
Expand Up @@ -9428,10 +9428,13 @@ package Perlito5::AST::For;
};
((my $cond) = Perlito5::Javascript2::to_list([$self->{'cond'}], ($level + 1)));
if ($self->{'body'}->sig()) {
unshift(@{$Perlito5::VAR}, {});
((my $v) = $self->{'body'}->sig());
($Perlito5::VAR->[0]->{$v->perl5_name_javascript2()} = {'decl', 'my'});
((my $sig) = $v->emit_javascript2(($level + 1)));
return (('p5for_lex(' . ('function (' . $sig . ') {' . chr(10)) . (Perlito5::Javascript2::LexicalBlock->new('block', $self->{'body'}->stmts(), 'needs_return', 0, 'top_level', 0))->emit_javascript2(($level + 2)) . chr(10) . Perlito5::Javascript2::tab(($level + 1)) . '}, ' . $cond . ', ' . Perlito5::AST::Lit::Block::emit_javascript2_continue($self, $level) . ', ' . '"' . (($self->{'label'} || '')) . '"' . ')'))
((my $s) = ('p5for_lex(' . ('function (' . $sig . ') {' . chr(10)) . (Perlito5::Javascript2::LexicalBlock->new('block', $self->{'body'}->stmts(), 'needs_return', 0, 'top_level', 0))->emit_javascript2(($level + 2)) . chr(10) . Perlito5::Javascript2::tab(($level + 1)) . '}, ' . $cond . ', ' . Perlito5::AST::Lit::Block::emit_javascript2_continue($self, $level) . ', ' . '"' . (($self->{'label'} || '')) . '"' . ')'));
shift(@{$Perlito5::VAR});
return ($s)
}
else {
return (('p5for(' . Perlito5::Javascript2::pkg() . ', ' . 'function () {' . chr(10) . (Perlito5::Javascript2::LexicalBlock->new('block', $self->{'body'}->stmts(), 'needs_return', 0, 'top_level', 0))->emit_javascript2(($level + 2)) . chr(10) . Perlito5::Javascript2::tab(($level + 1)) . '}, ' . $cond . ', ' . Perlito5::AST::Lit::Block::emit_javascript2_continue($self, $level) . ', ' . '"' . (($self->{'label'} || '')) . '"' . ')'))
Expand Down
7 changes: 5 additions & 2 deletions src5/lib/Perlito5/Javascript2/Emitter.pm
Expand Up @@ -2350,17 +2350,20 @@ package Perlito5::AST::For;
# TODO - for without "my"

# mark the variable as "declared"
unshift @{ $Perlito5::VAR }, {};
my $v = $self->{body}->sig;
$Perlito5::VAR->[0]{ $v->perl5_name_javascript2 } = { decl => 'my' };
my $sig = $v->emit_javascript2( $level + 1 );
return 'p5for_lex('
my $s = 'p5for_lex('
. "function ($sig) {\n"
. (Perlito5::Javascript2::LexicalBlock->new( block => $self->{body}->stmts, needs_return => 0, top_level => 0 ))->emit_javascript2($level + 2) . "\n"
. Perlito5::Javascript2::tab($level + 1) . '}, '
. $cond . ', '
. Perlito5::AST::Lit::Block::emit_javascript2_continue($self, $level) . ', '
. '"' . ($self->{label} || "") . '"'
. ')'
. ')';
shift @{ $Perlito5::VAR };
return $s;
}
else {
# use $_
Expand Down

0 comments on commit f68d4e6

Please sign in to comment.