Author: allison
Date: Sat Apr 7 17:30:43 2007
New Revision: 18032
Modified:
trunk/languages/punie/lib/ASTGrammar.tg
trunk/languages/punie/lib/punie.pg
trunk/languages/punie/t/io_print.t
Log:
[punie]: Fix lvalue handling to match current partridge so Punie can assign to
variables again.
Modified: trunk/languages/punie/lib/ASTGrammar.tg
==============================================================================
--- trunk/languages/punie/lib/ASTGrammar.tg (original)
+++ trunk/languages/punie/lib/ASTGrammar.tg Sat Apr 7 17:30:43 2007
@@ -275,7 +275,9 @@
transform past (PunieGrammar::variable) :language('PIR') {
.local pmc result
result = new 'PAST::Var'
- result.'init'('node'=>node, 'viviself'=>'.Undef')
+ .local int islvalue
+ islvalue = node['islvalue']
+ result.'init'('node'=>node, 'viviself'=>'.Undef', 'islvalue' => islvalue)
.local string sigil
.local string name
sigil = node['sigil']
@@ -437,6 +439,11 @@
goto iter_loop
iter_end:
+ unless islvalue goto notlvalue
+ $P4 = result[0]
+ $P4.'islvalue'(islvalue)
+ notlvalue:
+
.return (result)
}
Modified: trunk/languages/punie/lib/punie.pg
==============================================================================
--- trunk/languages/punie/lib/punie.pg (original)
+++ trunk/languages/punie/lib/punie.pg Sat Apr 7 17:30:43 2007
@@ -137,6 +137,7 @@
proto infix:= is looser('infix:||')
is past('assign')
+ is lvalue(1)
{...}
proto 'infix:,' is looser('infix:=') is assoc('list')
Modified: trunk/languages/punie/t/io_print.t
==============================================================================
--- trunk/languages/punie/t/io_print.t (original)
+++ trunk/languages/punie/t/io_print.t Sat Apr 7 17:30:43 2007
@@ -3,7 +3,7 @@
use strict;
use warnings;
use lib qw(t . lib ../lib ../../lib ../../../lib);
-use Parrot::Test tests => 13;
+use Parrot::Test tests => 14;
use Test::More;
language_output_is( 'punie', <<'EOC', '1', 'printing one' );
@@ -81,6 +81,13 @@
6
OUT
+language_output_is( 'punie', <<'CODE', <<'OUT', 'printing a variable' );
+$x = 1;
+print $x, "\n";
+CODE
+1
+OUT
+
TODO: {
local $TODO = 'unimplemented feature';