I can generate the blocks just fine. I just need to generate pir so they 
get called at the right time.
BEGIN{} and END {} semantic are described below.
I think that these are general use cases that should be provided by parrot.
Maybe the solution is two stacks of subs in the interpreter structure.  
One for initialization and one for finalization which are traversable 
and modifiable using opcodes or a  specialized pmc.
My take is that he initialization stack gets executed just before :main 
and the finalization stack gets executed just before interpreter 
termination.
Initialization should occur in the order that compilation units are 
loaded and secondarily in the order that BEGIN or initialization blocks 
occur within a compilation unit.
Kevin
From 
http://www.ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/syntax.html#BEGIN_proc
        BEGIN
Examples:
	BEGIN {
	  ...
	}
Syntax:
	BEGIN '{'
	  expr..
	'}'
Registers the initialize routine. The block followed after |BEGIN| is 
evaluated before any other statement in that file (or string). If 
multiple |BEGIN| blocks are given, they are evaluated in the appearing 
order.
The |BEGIN| block introduce new local-variable scope. They don't share 
local variables with outer statements.
The |BEGIN| statement can only appear at the toplevel.
      END
Examples:
	END {
	  ...
	}
Syntax:
END '{' expr.. '}'
Registers finalize routine. The block followed after |END| is evaluated 
just before the interpreter termination. Unlike |BEGIN|, |END| blocks 
shares their local variables, just like blocks.
The |END| statement registers its block only once at the first 
execution. If you want to register finalize routines many times, use 
at_exit 
<http://www.ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/function.html#at_exit>. 
The |END| statement can only appear at the toplevel. Also you cannot 
cancel finalize routine registered by |END|.
I've put together the current possiblities to achieve the effect of END.
I don't know if it's sufficient, though.
See the last 5 or so t/pmc/exception.t or r13768 - r13770.
leo