Index: lib/past2pir.tge
===================================================================
--- lib/past2pir.tge	(Revision 12297)
+++ lib/past2pir.tge	(Arbeitskopie)
@@ -1,5 +1,7 @@
 Perl6::PAST::Sub: pir(.) = {
-    .local pmc pir
+   .local pmc pir, lex_hash
+   lex_hash = new .Hash
+   store_global "_Perl6_LexHash", lex_hash
     pir = new 'PGE::CodeString'
     pir.emit(".sub 'anon' :anon")
     $P0 = node['statement_list']
@@ -230,17 +232,27 @@
 Perl6::PAST::Var: pir(.) = {
     .local pmc pir
     .local string ret
+    .local pmc pir, lex_hash
+    .local string ret
     pir = new 'PGE::CodeString'
+    $S0 = node['variable']
+    lex_hash = find_global "_Perl6_LexHash" 
+    $I0 = exists lex_hash[$S0]
+    if $I0 goto lex
     ret = pir.unique('$P')
-    $S0 = node['variable']
     pir.emit('    %0 = find_name "%1"', ret, $S0)
     node['ret'] = ret
+    goto ex
+lex:
+    $S1 = lex_hash[$S0]
+    node['ret'] = $S1
+ex:
     .return (pir)
 }
        
 
 Perl6::PAST::Lex: pir(.) = {
-    .local pmc pir
+    .local pmc pir, lex_hash
     .local string ret
     pir = new 'PGE::CodeString'
     ret = pir.unique('$P')
@@ -248,5 +260,7 @@
     pir.emit('    .lex "%0", %1', $S0, ret)
     pir.emit('    %0 = new .Undef', ret)
     node['ret'] = ret
+    lex_hash = find_global "_Perl6_LexHash" 
+    lex_hash[$S0] = ret
     .return (pir)
 }
