From 51cc37e664938f8350e8e29000607c6aabdcbcaf Mon Sep 17 00:00:00 2001 From: pmichaud Date: Tue, 3 Aug 2010 08:52:56 -0500 Subject: [PATCH] Enable --target=pir to produce PIR code that can be run directly from Parrot (provided Rakudo has been installed). --- src/Perl6/Actions.pm | 9 ++++++--- src/Perl6/Compiler.pir | 11 +++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Perl6/Actions.pm b/src/Perl6/Actions.pm index 6b2eba68c3e..e1d142e5e33 100644 --- a/src/Perl6/Actions.pm +++ b/src/Perl6/Actions.pm @@ -77,9 +77,12 @@ method comp_unit($/, $key?) { )); $unit.loadinit.unshift( - PAST::Op.new( - :name('!UNIT_OUTER'), - PAST::Var.new( :name('block'), :scope('register') ) + PAST::Op.new( :pasttype, + :inline(' $P0 = find_name "!UNIT_OUTER"', + ' unless null $P0 goto have_perl6', + ' load_language "perl6"', + ' have_perl6:', + ' "!UNIT_OUTER"(block)') ) ); diff --git a/src/Perl6/Compiler.pir b/src/Perl6/Compiler.pir index bcf401ba77f..afdd3b21607 100644 --- a/src/Perl6/Compiler.pir +++ b/src/Perl6/Compiler.pir @@ -230,6 +230,17 @@ Perl6::Compiler - Perl6 compiler exit 0 .end + +.sub 'pir' :method + .param pmc source + .param pmc adverbs :slurpy :named + $P0 = compreg 'POST' + $S0 = $P0.'to_pir'(source, adverbs :flat :named) + $S0 = concat ".loadlib 'perl6_ops'\n", $S0 + .return ($S0) +.end + + .sub 'version' :method .local pmc interp, config, rev, version interp = getinterp