develooper Front page | perl.cvs.parrot | Postings from January 2009

[svn:parrot] r35239 - branches/rvar2/compilers/pct/src/PAST

From:
pmichaud
Date:
January 8, 2009 20:52
Subject:
[svn:parrot] r35239 - branches/rvar2/compilers/pct/src/PAST
Message ID:
20090109045223.C8723CB9F9@x12.develooper.com
Author: pmichaud
Date: Thu Jan  8 20:52:23 2009
New Revision: 35239

Modified:
   branches/rvar2/compilers/pct/src/PAST/Compiler.pir

Log:
[pct]:  Allow PAST::Val nodes to serve as block references.
Adjust capture_lex for anonymous blocks.


Modified: branches/rvar2/compilers/pct/src/PAST/Compiler.pir
==============================================================================
--- branches/rvar2/compilers/pct/src/PAST/Compiler.pir	(original)
+++ branches/rvar2/compilers/pct/src/PAST/Compiler.pir	Thu Jan  8 20:52:23 2009
@@ -799,8 +799,6 @@
 
     ##  add block setup code (cpost) to outer block if needed
     if null outerpost goto outer_done
-    $I0 = index pirflags, ':anon'
-    if $I0 >= 0 goto outer_done
     .local pmc cpost
     $P0 = get_hll_global ['POST'], 'Ops'
     cpost = $P0.'new'( 'result'=>blockreg )
@@ -2294,6 +2292,8 @@
     .local pmc value, returns
     value = node['value']
     if null value goto err_novalue
+    $I0 = isa value, ['PAST';'Block']
+    if $I0 goto value_block
     returns = node.'returns'()
     if returns goto have_returns
     $S0 = typeof value
@@ -2318,13 +2318,25 @@
 
   result_pmc:
     .local string result
-    result = self.'unique'('$P')
+    result = self.'uniquereg'('P')
     returns = self.'escape'(returns)
     ops.'push_pirop'('new', result, returns)
     ops.'push_pirop'('assign', result, value)
     ops.'result'(result)
     .return (ops)
 
+  value_block:
+    .local string blockreg, blockref
+    blockreg = self.'uniquereg'('P')
+    blockref = concat ".const 'Sub' ", blockreg
+    concat blockref, ' = '
+    $P0 = value.'subid'()
+    $S0 = self.'escape'($P0)
+    concat blockref, $S0
+    ops.'push_pirop'(blockref)
+    ops.'result'(blockreg)
+    .return (ops)
+
   err_novalue:
     self.'panic'('PAST::Val node missing :value attribute')
 .end



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About