Skip to content

Commit

Permalink
Revert "Perlito5 - js: implement array refs"
Browse files Browse the repository at this point in the history
This reverts commit 78ba39a.
breaks the bootstrap
  • Loading branch information
fglock committed Feb 16, 2012
1 parent 78ba39a commit c9a1119
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 37 deletions.
2 changes: 1 addition & 1 deletion src5/lib/Perlito5/Grammar.pm
Expand Up @@ -230,7 +230,7 @@ token val_int {
token exp_stmts {
<Perlito5::Expression.delimited_statement>*
{
$MATCH->{"capture"} = [ map( $_->capture, @{ $MATCH->{"Perlito5::Expression.delimited_statement"} || [] } ) ]
$MATCH->{"capture"} = [ map( $_->capture, @{ $MATCH->{"Perlito5::Expression.delimited_statement"} } ) ]
}
}
Expand Down
61 changes: 25 additions & 36 deletions src5/lib/Perlito5/Javascript/Emitter.pm
Expand Up @@ -67,8 +67,8 @@ package Javascript;
my $str_init = "''";
$str_init = '{}' if $type eq 'HASH';
$str_init = '[]' if $type eq 'ARRAY';
$str_init = 'new HashRef({})' if $type eq 'HASHREF';
$str_init = 'new ArrayRef([])' if $type eq 'ARRAYREF';
$str_init = 'new HashRef({})' if $type eq 'HASHREF'; # TODO use "real" reference
$str_init = '[]' if $type eq 'ARRAYREF'; # TODO use "real" references

if ( $ast->isa('Var') ) {
if ( $type eq 'HASH'
Expand Down Expand Up @@ -265,9 +265,9 @@ package Perlito5::Javascript::LexicalBlock;
my $cond = $last_statement->cond;
my $body = $last_statement->body;
my $otherwise = $last_statement->otherwise;
# if ($cond->isa( 'Var' ) && $cond->sigil eq '@') {
# $cond = Apply->new( code => 'prefix:<@>', arguments => [ $cond ] );
# }
if ($cond->isa( 'Var' ) && $cond->sigil eq '@') {
$cond = Apply->new( code => 'prefix:<@>', arguments => [ $cond ] );
}
$body = Perlito5::Javascript::LexicalBlock->new( block => $body->stmts, needs_return => 1 );
push @str, Javascript::tab($level) .
'if ( ' . Javascript::to_bool( $cond ) . ' ) { return (function () {' . "\n"
Expand Down Expand Up @@ -453,7 +453,8 @@ package Index;
my $v = Var->new( sigil => '@', namespace => $self->{"obj"}->namespace, name => $self->{"obj"}->name );
return $v->emit_javascript_indented($level) . '[' . $self->{"index_exp"}->emit_javascript() . ']';
}
Javascript::tab($level) . $self->{"obj"}->emit_javascript() . '._array_[' . $self->{"index_exp"}->emit_javascript() . ']';

Javascript::tab($level) . $self->{"obj"}->emit_javascript() . '[' . $self->{"index_exp"}->emit_javascript() . ']';
}
}

Expand All @@ -463,6 +464,8 @@ package Lookup;
sub emit_javascript_indented {
my $self = shift;
my $level = shift;
# my $var = $self->{"obj"}->emit_javascript;
# return $var . '[' . $self->{"index_exp"}->emit_javascript() . ']'

if ( $self->{"obj"}->isa('Var')
&& $self->{"obj"}->sigil eq '$'
Expand Down Expand Up @@ -532,7 +535,7 @@ package Call;
my $meth = $self->{"method"};

if ( $meth eq 'postcircumfix:<[ ]>' ) {
return Javascript::tab($level) . $invocant . '._array_[' . $self->{"arguments"}->emit_javascript() . ']'
return Javascript::tab($level) . $invocant . '[' . $self->{"arguments"}->emit_javascript() . ']'
}
if ( $meth eq 'postcircumfix:<{ }>' ) {
return Javascript::tab($level) . $invocant . '._hash_[' . $self->{"arguments"}->emit_javascript() . ']'
Expand Down Expand Up @@ -646,22 +649,22 @@ package Apply;
return '(' . $arg->emit_javascript . ')._scalar_';
}
if ( $code eq 'prefix:<@>' ) {
my $arg = $self->{"arguments"}->[0];
return '(' . $arg->emit_javascript . ')._array_';
return '(' . join( ' ', map( $_->emit_javascript, @{ $self->{"arguments"} } ) ) . ')';
}
if ( $code eq 'prefix:<%>' ) {
my $arg = $self->{"arguments"}->[0];
return '(' . $arg->emit_javascript . ')._hash_';
}

if ( $code eq 'circumfix:<[ ]>' ) {
return '(new ArrayRef(Array.prototype.slice.call(' . join( ', ', map( $_->emit_javascript, @{ $self->{"arguments"} } ) ) . ')))';
return 'Array.prototype.slice.call(' . join( ', ', map( $_->emit_javascript, @{ $self->{"arguments"} } ) ) . ')';
}
if ( $code eq 'prefix:<\\>' ) {
my $arg = $self->{"arguments"}->[0];
if ( $arg->isa('Var') ) {
if ( $arg->sigil eq '@' ) {
return '(new ArrayRef(' . $arg->emit_javascript . '))';
# XXX not implemented
return $arg->emit_javascript;
}
if ( $arg->sigil eq '%' ) {
return '(new HashRef(' . $arg->emit_javascript . '))';
Expand Down Expand Up @@ -818,7 +821,7 @@ package Apply;
pop @$auto;
$str = $str . join( '', @$auto );
my $index_js = $parameters->arguments->emit_javascript;
$str = $str . 'return (' . $var_js . '._array_[' . $index_js . '] ' . ' = ' . $arguments->emit_javascript() . '); ';
$str = $str . 'return (' . $var_js . '[' . $index_js . '] ' . ' = ' . $arguments->emit_javascript() . '); ';
return Javascript::tab($level) . '(function () { ' . $str . '})()';
}

Expand Down Expand Up @@ -851,7 +854,7 @@ package Apply;
my $index_js = $parameters->index_exp->emit_javascript;
$str = $str . 'return (' . $var_js . '[' . $index_js . '] ' . ' = ' . $arguments->emit_javascript() . '); ';
return Javascript::tab($level) . '(function () { ' . $str . '})()';
}
}

my $var_js = $var->emit_javascript;
my $auto = Javascript::autovivify( $parameters, 'HASHREF' );
Expand All @@ -870,21 +873,14 @@ package Apply;
)
{
$var = Var->new( sigil => '@', namespace => $var->namespace, name => $var->name );
my $var_js = $var->emit_javascript;
my $auto = Javascript::autovivify( $parameters, 'ARRAYREF' );
pop @$auto;
$str = $str . join( '', @$auto );
my $index_js = $parameters->index_exp->emit_javascript;
$str = $str . 'return (' . $var_js . '[' . $index_js . '] ' . ' = ' . $arguments->emit_javascript() . '); ';
return Javascript::tab($level) . '(function () { ' . $str . '})()';
}

my $var_js = $var->emit_javascript;
my $auto = Javascript::autovivify( $parameters, 'ARRAYREF' );
pop @$auto;
$str = $str . join( '', @$auto );
my $index_js = $parameters->index_exp->emit_javascript;
$str = $str . 'return (' . $var_js . '._array_[' . $index_js . '] ' . ' = ' . $arguments->emit_javascript() . '); ';
$str = $str . 'return (' . $var_js . '[' . $index_js . '] ' . ' = ' . $arguments->emit_javascript() . '); ';
return Javascript::tab($level) . '(function () { ' . $str . '})()';
}
if $parameters->isa( 'Var' ) && $parameters->sigil eq '@'
Expand Down Expand Up @@ -923,12 +919,12 @@ package If;
my $self = shift;
my $level = shift;
my $cond = $self->{"cond"};
# if ( $cond->isa( 'Var' )
# && $cond->sigil eq '@'
# )
# {
# $cond = Apply->new( code => 'prefix:<@>', arguments => [ $cond ] );
# }
if ( $cond->isa( 'Var' )
&& $cond->sigil eq '@'
)
{
$cond = Apply->new( code => 'prefix:<@>', arguments => [ $cond ] );
}
my $body = Perlito5::Javascript::LexicalBlock->new( block => $self->{"body"}->stmts, needs_return => 0 );
my $s = Javascript::tab($level) . 'if ( ' . Javascript::to_bool( $cond ) . ' ) { '
. '(function () {' . "\n"
Expand Down Expand Up @@ -973,15 +969,8 @@ package For;
my $self = shift;
my $level = shift;
my $cond = $self->{"cond"};
if (!( $cond->isa( 'Var' ) && $cond->sigil eq '@'
|| $cond->isa( 'Apply' ) && $cond->code eq 'prefix:<@>'
)
)
{
$cond = Apply->new(
code => 'prefix:<@>',
arguments => [ Lit::Array->new( array1 => [$cond] ) ]
);
if (!( $cond->isa( 'Var' ) && $cond->sigil eq '@' )) {
$cond = Lit::Array->new( array1 => [$cond] )
}
my $body = Perlito5::Javascript::LexicalBlock->new( block => $self->{"body"}->stmts, needs_return => 0 );
my $sig = 'v__';
Expand Down

0 comments on commit c9a1119

Please sign in to comment.