Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Perlito5 - js - use more regular syntax
  • Loading branch information
fglock committed Jun 3, 2014
1 parent 9b990c5 commit 8264620
Show file tree
Hide file tree
Showing 59 changed files with 3,124 additions and 46 deletions.
81 changes: 36 additions & 45 deletions src5/lib/Perlito5/Javascript2/Emitter.pm
Expand Up @@ -784,16 +784,15 @@ package Perlito5::AST::Index;
# @a[10, 20]
# @$a[0, 2] ==> @{$a}[0,2]
return
'(function (a, v) { '
'(function () { '
. 'var a = []; '
. 'var v = ' . Perlito5::Javascript2::to_list([$self->{index_exp}], $level) . '; '
. 'var src=' . $self->{obj}->emit_javascript2($level) . '; '
. 'for (var i=0, l=v.length; ' . 'i<l; ++i)' . '{ '
. 'a.push(src.' . $method . '(v[i])) '
. '}; '
. 'return a '
. '})('
. '[], '
. Perlito5::Javascript2::to_list([$self->{index_exp}], $level)
. ')';
. '})()';
}
if ( ( $self->{obj}->isa('Perlito5::AST::Apply')
&& $self->{obj}->{code} eq 'prefix:<%>'
Expand All @@ -815,17 +814,16 @@ package Perlito5::AST::Index;
if $obj->{code} eq 'prefix:<%>';

return
'(function (a, v) { '
'(function () { '
. 'var a = []; '
. 'var v = ' . Perlito5::Javascript2::to_list([$self->{index_exp}], $level) . '; '
. 'var src=' . $obj->emit_javascript2($level) . '; '
. 'for (var i=0, l=v.length; ' . 'i<l; ++i)' . '{ '
. 'a.push(v[i]); '
. 'a.push(src.' . $method . '(v[i])) '
. '}; '
. 'return a '
. '})('
. '[], '
. Perlito5::Javascript2::to_list([$self->{index_exp}], $level)
. ')';
. '})()';
}
return $self->emit_javascript2_container($level) . '.' . $method . '('
. Perlito5::Javascript2::to_num($self->{index_exp}, $level)
Expand All @@ -847,7 +845,9 @@ package Perlito5::AST::Index;
# @a[10, 20]
# @$a[0, 2] ==> @{$a}[0,2]
return
"(function (a, v) {\n"
"(function () {\n"
. 'var a = []; '
. 'var v = ' . Perlito5::Javascript2::to_list([$self->{index_exp}], $level) . '; '
. 'var src=' . Perlito5::Javascript2::to_list([$arguments], $level) . ";\n"
. 'var out=' . Perlito5::Javascript2::emit_javascript2_autovivify( $self->{obj}, $level, 'array' ) . ";\n"
. 'var tmp' . ";\n"
Expand All @@ -857,10 +857,7 @@ package Perlito5::AST::Index;
. 'a.push(tmp) '
. '}; '
. 'return a '
. '})('
. '[], '
. Perlito5::Javascript2::to_list([$self->{index_exp}], $level)
. ')';
. '})()';
}
return $self->emit_javascript2_container($level) . '.p5aset('
. Perlito5::Javascript2::to_num($self->{index_exp}, $level+1) . ', '
Expand All @@ -882,7 +879,9 @@ package Perlito5::AST::Index;
# @a[10, 20]
# @$a[0, 2] ==> @{$a}[0,2]
return
"(function (a, v) {\n"
"(function () {\n"
. 'var a = []; '
. 'var v = ' . Perlito5::Javascript2::to_list([$self->{index_exp}], $level) . '; '
. 'var out=' . Perlito5::Javascript2::emit_javascript2_autovivify( $self->{obj}, $level, 'array' ) . ";\n"
. 'var tmp' . ";\n"
. 'for (var i=0, l=v.length; ' . 'i<l; ++i) {' . "\n"
Expand All @@ -891,10 +890,7 @@ package Perlito5::AST::Index;
. 'a.push(tmp) '
. '}; '
. 'return a '
. '})('
. '[], '
. Perlito5::Javascript2::to_list([$self->{index_exp}], $level)
. ')';
. '})()';
}
return $self->emit_javascript2_container($level) . '.p5aset('
. Perlito5::Javascript2::to_num($self->{index_exp}, $level+1) . ', '
Expand Down Expand Up @@ -962,16 +958,15 @@ package Perlito5::AST::Lookup;
$v = Perlito5::AST::Apply->new( code => 'prefix:<%>', namespace => $self->{obj}->namespace, arguments => $self->{obj}->arguments )
if $self->{obj}->isa('Perlito5::AST::Apply');
return
'(function (a, v) { '
'(function () { '
. 'var a = []; '
. 'var v = ' . Perlito5::Javascript2::to_list([$self->{index_exp}], $level) . '; '
. 'var src=' . $v->emit_javascript2($level) . '; '
. 'for (var i=0, l=v.length; ' . 'i<l; ++i)' . '{ '
. 'a.push(src.p5hget(v[i])) '
. '}; '
. 'return a '
. '})('
. '[], '
. Perlito5::Javascript2::to_list([$self->{index_exp}], $level)
. ')';
. '})()';
}
if ( ( $self->{obj}->isa('Perlito5::AST::Apply')
&& $self->{obj}->{code} eq 'prefix:<%>'
Expand All @@ -990,17 +985,16 @@ package Perlito5::AST::Lookup;
$v = Perlito5::AST::Apply->new( code => 'prefix:<%>', namespace => $self->{obj}->namespace, arguments => $self->{obj}->arguments )
if $self->{obj}->isa('Perlito5::AST::Apply');
return
'(function (a, v) { '
'(function () { '
. 'var a = []; '
. 'var v = ' . Perlito5::Javascript2::to_list([$self->{index_exp}], $level) . '; '
. 'var src=' . $v->emit_javascript2($level) . '; '
. 'for (var i=0, l=v.length; ' . 'i<l; ++i)' . '{ '
. 'a.push(v[i]); '
. 'a.push(src.p5hget(v[i])) '
. '}; '
. 'return a '
. '})('
. '[], '
. Perlito5::Javascript2::to_list([$self->{index_exp}], $level)
. ')';
. '})()';
}
return $self->emit_javascript2_container($level) . '.' . $method . '('
. Perlito5::Javascript2::autoquote($self->{index_exp}, $level)
Expand All @@ -1027,7 +1021,9 @@ package Perlito5::AST::Lookup;
$v = Perlito5::AST::Apply->new( code => 'prefix:<%>', namespace => $self->{obj}->namespace, arguments => $self->{obj}->arguments )
if $self->{obj}->isa('Perlito5::AST::Apply');
return
'(function (a, v) { '
'(function () { '
. 'var a = []; '
. 'var v = ' . Perlito5::Javascript2::to_list([$self->{index_exp}], $level) . '; '
. 'var src=' . Perlito5::Javascript2::to_list([$arguments], $level) . ";\n"
. 'var out=' . $v->emit_javascript2($level) . ";\n"
. 'var tmp' . ";\n"
Expand All @@ -1037,10 +1033,7 @@ package Perlito5::AST::Lookup;
. 'a.push(tmp) '
. '}; '
. 'return a '
. '})('
. '[], '
. Perlito5::Javascript2::to_list([$self->{index_exp}], $level)
. ')';
. '})()';
}
return $self->emit_javascript2_container($level) . '.p5hset('
. Perlito5::Javascript2::autoquote($self->{index_exp}, $level) . ', '
Expand All @@ -1067,7 +1060,9 @@ package Perlito5::AST::Lookup;
$v = Perlito5::AST::Apply->new( code => 'prefix:<%>', namespace => $self->{obj}->namespace, arguments => $self->{obj}->arguments )
if $self->{obj}->isa('Perlito5::AST::Apply');
return
'(function (a, v) { '
'(function () { '
. 'var a = []; '
. 'var v = ' . Perlito5::Javascript2::to_list([$self->{index_exp}], $level) . '; '
. 'var out=' . $v->emit_javascript2($level) . ";\n"
. 'var tmp' . ";\n"
. 'for (var i=0, l=v.length; ' . 'i<l; ++i)' . '{ '
Expand All @@ -1076,10 +1071,7 @@ package Perlito5::AST::Lookup;
. 'a.push(tmp) '
. '}; '
. 'return a '
. '})('
. '[], '
. Perlito5::Javascript2::to_list([$self->{index_exp}], $level)
. ')';
. '})()';
}
return $self->emit_javascript2_container($level) . '.p5hset('
. Perlito5::Javascript2::autoquote($self->{index_exp}, $level) . ', '
Expand Down Expand Up @@ -2186,7 +2178,9 @@ package Perlito5::AST::Apply;

# TODO - test return() from inside eval

"(function (p5want) {\n"
"(function () {\n"
. Perlito5::Javascript2::tab($level + 1) . "var p5want = "
. Perlito5::Javascript2::to_context($wantarray) . ";\n"
. Perlito5::Javascript2::tab($level + 1) . "var r;\n"
. Perlito5::Javascript2::tab($level + 1) . 'p5pkg["main"]["v_@"] = "";' . "\n"
. Perlito5::Javascript2::tab($level + 1) . 'p5pkg["Perlito5"]["v_STRICT"] = ' . $Perlito5::STRICT . ';' . "\n"
Expand All @@ -2210,10 +2204,7 @@ package Perlito5::AST::Apply;
. Perlito5::Javascript2::tab($level + 2) . "}\n"
. Perlito5::Javascript2::tab($level + 1) . "}\n"
. Perlito5::Javascript2::tab($level + 1) . "return r;\n"
. Perlito5::Javascript2::tab($level + 0) . "})("
. Perlito5::Javascript2::to_context($wantarray)
. ")"

. Perlito5::Javascript2::tab($level + 0) . "})()"
},

'undef' => sub {
Expand Down
15 changes: 15 additions & 0 deletions t5/01-perlito/010-sanity.t.p6
@@ -0,0 +1,15 @@
# Do not edit this file - Generated by Perlito5 9.0
use v6;
{
package main {
Any;
# use feature
}
package Main {
say('1..2');
say('ok 1');
print('o');
say('k 2')
}
}

14 changes: 14 additions & 0 deletions t5/01-perlito/020-int.t.p6
@@ -0,0 +1,14 @@
# Do not edit this file - Generated by Perlito5 9.0
use v6;
{
package main {
Any;
# use strict
# use feature
}
package Main {
say('1..1');
say('ok ', 1)
}
}

49 changes: 49 additions & 0 deletions t5/01-perlito/030-num.t.p6
@@ -0,0 +1,49 @@
# Do not edit this file - Generated by Perlito5 9.0
use v6;
{
package main {
Any;
# use strict
# use feature
}
package Main {
say('1..9');
my $v = 1 + 0.3;
if ($v < 1.29) || ($v > 1.31) {
print('not ')
}
say('ok ', 1);
if ($v ~ '') ne 1.3 {
print('not ')
}
say('ok ', 2, ' # ', $v);
if ($v + 3.4) ne 4.7 {
print('not ')
}
say('ok ', 3, ' # ', ($v + 3.4));
if ($v / 2) != 0.65 {
print('not ')
}
say('ok 4 # ', ($v / 2));
if ($v * 2) != 2.6 {
print('not ')
}
say('ok 5 # ', ($v * 2));
print('not ')
if !defined(3.14);
say('ok 6 - defined num');
$v = 3.14;
print('not ')
if !defined($v);
say('ok 7 - defined var');
my $y;
print('not ')
if defined($y);
say('ok 8 - undefined var');
$v = eval('013.4e2');
print('not ')
if $v != 11400;
say('ok 9 - octal integer followed by dot')
}
}

52 changes: 52 additions & 0 deletions t5/01-perlito/040-op.t.p6
@@ -0,0 +1,52 @@
# Do not edit this file - Generated by Perlito5 9.0
use v6;
{
package main {
Any;
# use strict
# use feature
}
package Main {
say('1..11');
my $x = 1;
if $x != 1 {
print('not ')
}
say('ok 1 - != ', $x);
$x = 2;
if !($x eq 2) {
print('not ')
}
say('ok 2 - ne ', $x);
$x = 0 ?? 'not ok' !! 'ok';
say($x, ' 3 - ternary');
$x = 1 ?? 'ok' !! 'not ok';
say($x, ' 4 - ternary');
print('ok 5 - print with embedded newlines' ~ chr(10) ~ 'ok 6 - more newlines' ~ chr(10));
$x = 2;
if !(($x + 2) == ($x + 1 + 1)) {
print('not ')
}
say('ok 7 - add ');
$x = 2;
if !(($x ~ 2) eq 22) {
print('not ')
}
say('ok 8 - concat');
my $undef;
if $undef {
print('not ')
}
say('ok 9 - undef to bool');
if !(($undef ~ 2) eq 2) {
print('not ')
}
say('ok 10 - undef to str');
$x = 2;
if !(($x + 2) eq 4) {
print('not ')
}
say('ok 11 - plus with string')
}
}

0 comments on commit 8264620

Please sign in to comment.