# 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