# New Ticket Created by  Klaas-Jan Stol 
# Please include the string:  [perl #50472]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=50472 >


hi,

consider the next scenario (using lua as HLL)

-- create a new table object (just a hash/array combination), and initialize
with some values.
foo = { a = 1, b = 2, c = 3}

This can be roughly translated to this PIR:

$P0 = new "LuaTable"
$P0["a"] = 1
$P0["b"] = 2
$P0["c"] = 3

(using PCT, these integer values will be created as "Integer" PMCs, but
that's not important for now)

to generate such a thing using PAST nodes, we'd do something like (I think
there are other solutions, but this is straightforward):

method table_constructor($/) {
   my $past := PAST::Stmts.new( :node($/) );

   my $table := PAST::Op.new( :inline('    %r = new "LuaTable"') );
   $past.push($table); # push the table construction onto list of statements

   # now for each init. field, we'd like to generate a "$P0[<field>] =
<value>" statement
   for $<field> {
     my $field := $( $_ );
      $past.push( PAST::Var.new( $table, $field, :scope('keyed') ) );
   }

   make $past;
}


However, when doing this, every time $table is specified as an argument in
the for loop, it will generate an instruction

$P0 = new "LuaTable"

which is not what we want, obviously.
Somehow, there's the need to refer only to the result register in which the
new LuaTable is stored, the register that is generated from the %r symbol
above.

There are more scenarios that need to reference only the result of a certain
expression.
PAST does not support this currently, and I think it would be helpful.

possibly through a method $table.result() or whatever, but that's only what
comes to my mind initially.

kjs

Reply via email to