Changeset 14356

Show
Ignore:
Timestamp:
10/17/06 08:26:14 (2 years ago)
Author:
audreyt
svk:copy_cache_prev:
21206
Message:

* Repair PIL2JS. Largely it was because of the ::main ==> ::Main change.

Location:
perl5/PIL2JS
Files:
19 modified

Legend:

Unmodified
Added
Removed
  • perl5/PIL2JS/README

    r13342 r14356  
    587587=item * 
    588588 
    589 C<method foo (Bar $self:)> should create a C<&Bar::foo>, not a C<&main::foo>. 
     589C<method foo (Bar $self:)> should create a C<&Bar::foo>, not a C<&Main::foo>. 
    590590Required to implement hash and array autovification elegantly. (Partly a PIL1 
    591591bug.) 
  • perl5/PIL2JS/lib/PIL.pm

    r12377 r14356  
    245245      var PIL2JS = AlsoPIL2JS_SpeedupHack; 
    246246      var pad = {}; PIL2JS_subpads.push(pad); 
    247       pad['\$?POSITION'] = _24main_3a_3a_3fPOSITION; 
    248       pad['\$_']         = _24main_3a_3a_; 
     247      pad['\$?POSITION'] = _24Main_3a_3a_3fPOSITION; 
     248      pad['\$_']         = _24Main_3a_3a_; 
    249249 
    250250%s 
     
    337337  # ::JS::Root:: ::= ::*::; 
    338338  if($str =~ /^&\*?JS::Root::(.+)$/) { 
    339     $str = "&main::$1"; 
     339    $str = "&Main::$1"; 
    340340  # ::JS::native_js_function 
    341341  } elsif($str =~ /^[\&\$\@\+\%\:]\*?JS::(.+)$/) { 
     
    346346    return sprintf "PIL2JS.resolve_callervar($delta, %s)", 
    347347      doublequote($name); 
    348   # No qualification? Use "main" as package name. XXX! Lexical variables? 
     348  # No qualification? Use "Main" as package name. XXX! Lexical variables? 
    349349  } elsif(length($str) and $str !~ /::/) { 
    350350    $str =  
    351351      substr($str, 0, 1) . 
    352       "main::" . 
     352      "Main::" . 
    353353      substr($str, 1); 
    354354  } 
  • perl5/PIL2JS/lib/PIL/PPad.pm

    r7900 r14356  
    8989  block_leave_hooks.push(function (retval) { 
    9090    if(!PIL2JS.cps2normal( 
    91       _26main_3a_3aprefix_3a_3f.FETCH(), 
     91      _26Main_3a_3aprefix_3a_3f.FETCH(), 
    9292      [PIL2JS.Context.ItemAny, retval] 
    9393    ).FETCH()) 
  • perl5/PIL2JS/lib/PIL/PPos.pm

    r6937 r14356  
    3030    no warnings "recursion"; 
    3131    return sprintf 
    32       "_24main_3a_3a_3fPOSITION.BINDTO(new PIL2JS.Box.Constant(%s));\n%s", 
     32      "_24Main_3a_3a_3fPOSITION.BINDTO(new PIL2JS.Box.Constant(%s));\n%s", 
    3333      PIL::doublequote($self->{pPos}), $self->{pNode}->as_js; 
    3434  } 
  • perl5/PIL2JS/lib/PIL/PVal.pm

    r10814 r14356  
    4747  sub as_js { 
    4848    my $key = ref $_[0]->{key} 
    49       ? sprintf "PIL2JS.cps2normal(_26main_3a_3aprefix_3a_7e.FETCH(), [PIL2JS.Context.ItemAny, %s]).toNative()", $_[0]->{key}->as_js 
     49      ? sprintf "PIL2JS.cps2normal(_26Main_3a_3aprefix_3a_7e.FETCH(), [PIL2JS.Context.ItemAny, %s]).toNative()", $_[0]->{key}->as_js 
    5050      : PIL::doublequote($_[0]->{key}); 
    5151    sprintf "new PIL2JS.Box.Constant(new PIL2JS.NamedPair(%s, %s))", 
  • perl5/PIL2JS/lib/PIL/Subs.pm

    r7343 r14356  
    3232    my $jsvar       = PIL::name_mangle $self->name; 
    3333    my $name        = PIL::doublequote $self->name; 
    34     $js .= "_26main_3a_3a_3fBLOCK = $jsvar; pad['&?BLOCK'] = _26main_3a_3a_3fBLOCK;\n" 
     34    $js .= "_26Main_3a_3a_3fBLOCK = $jsvar; pad['&?BLOCK'] = _26Main_3a_3a_3fBLOCK;\n" 
    3535      if $PIL::IN_SUBLIKE >= PIL::SUBBLOCK; 
    36     $js .= "_26main_3a_3a_3fSUB = $jsvar; pad['&?SUB'] = _26main_3a_3a_3fSUB;\n" 
     36    $js .= "_26Main_3a_3a_3fSUB = $jsvar; pad['&?SUB'] = _26Main_3a_3a_3fSUB;\n" 
    3737      if $PIL::IN_SUBLIKE >= PIL::SUBROUTINE; 
    38     $js .= "_24main_3a_3a_3fSUBNAME = new PIL2JS.Box.Constant($name); pad['\$?SUBNAME'] = _24main_3a_3a_3fSUBNAME;\n"; 
     38    $js .= "_24Main_3a_3a_3fSUBNAME = new PIL2JS.Box.Constant($name); pad['\$?SUBNAME'] = _24Main_3a_3a_3fSUBNAME;\n"; 
    3939 
    4040    return ($js, @vars, qw< &?BLOCK &?SUB $?SUBNAME >); 
     
    9797    if($self->name =~ /^&\*END_\d+/) { 
    9898      $js .= sprintf 
    99         "_40main_3a_3a_2aEND.FETCH().push(%s);\n", 
     99        "_40Main_3a_3a_2aEND.FETCH().push(%s);\n", 
    100100        PIL::name_mangle $self->name; 
    101101    } 
     
    155155    my $vars; 
    156156    $vars .= $PIL::IN_SUBLIKE >= PIL::SUBROUTINE && !$self->isa("PIL::PSub") 
    157       ? "_24main_3a_3a_3fSUBNAME = new PIL2JS.Box.Constant('<anon>');\n" 
     157      ? "_24Main_3a_3a_3fSUBNAME = new PIL2JS.Box.Constant('<anon>');\n" 
    158158      : ""; 
    159     $vars .= "_24main_3a_3a_3fPOSITION = new PIL2JS.Box('<unknown>'); pad['\$?POSITION'] = _24main_3a_3a_3fPOSITION;\n"; 
    160     $vars .= "var _24main_3a_3a_ = new PIL2JS.Box(undefined); pad['\$_'] = _24main_3a_3a_;\n" 
     159    $vars .= "_24Main_3a_3a_3fPOSITION = new PIL2JS.Box('<unknown>'); pad['\$?POSITION'] = _24Main_3a_3a_3fPOSITION;\n"; 
     160    $vars .= "var _24Main_3a_3a_ = new PIL2JS.Box(undefined); pad['\$_'] = _24Main_3a_3a_;\n" 
    161161      unless grep { $_->name eq '$_' } @{ $self->params }; 
    162162 
  • perl5/PIL2JS/lib/Prelude/JS.pm

    r7555 r14356  
    1616( 
    1717  PIL2JS.cps2normal( 
    18     _26main_3a_3aprefix_3a_3f.FETCH(), 
     18    _26Main_3a_3aprefix_3a_3f.FETCH(), 
    1919    [ PIL2JS.Context.ItemAny, $cond ] 
    2020  ).FETCH() 
     
    5757 
    5858    push @PIL::PIL1_HACK_CLASSDECLS, 
    59       sprintf "if(!%s) var %s = PIL2JS.new_empty_class(%s, _3amain_3a_3aItem);", 
     59      sprintf "if(!%s) var %s = PIL2JS.new_empty_class(%s, _3aMain_3a_3aItem);", 
    6060        PIL::name_mangle(":$classname"), 
    6161        PIL::name_mangle(":$classname"), 
     
    9292 
    9393    my $undef  = $type eq "S" ? '""' : 0; 
    94     my $conv   = "_26main_3a_3aprefix_3a_" . ($type eq "S" ? "7e" : "2b"); 
     94    my $conv   = "_26Main_3a_3aprefix_3a_" . ($type eq "S" ? "7e" : "2b"); 
    9595 
    9696    register "&$name" => sub { 
  • perl5/PIL2JS/lib6/Prelude/JS/Array.pm

    r13342 r14356  
    437437  JS::inline('(function () { 
    438438    PIL2JS.addmethod( 
    439       _3amain_3a_3aItem, 
     439      _3aMain_3a_3aItem, 
    440440      "postcircumfix:[]", 
    441441      _26PIL2JS_3a_3aInternals_3a_3aHacks_3a_3aarray_postcircumfix_for_undefs 
  • perl5/PIL2JS/lib6/Prelude/JS/Bool.pm

    r14352 r14356  
    3030 
    3131sub infix:<//>   ($a, Code $b) is primitive { defined($a) ?? $a !! $b() } 
    32 sub infix:<||>   ($a, Code $b) is primitive { $a ?? $a !! $b() } 
     32sub infix:<||>   ($a, Code $b999999) is primitive { $a ?? $a !! $b999999() } 
    3333sub infix:<&&>   ($a, Code $b) is primitive { $a ?? $b() !! $a } 
    3434sub infix:<err>  ($a, Code $b) is primitive { infix:<//>($a, $b()) } 
  • perl5/PIL2JS/lib6/Prelude/JS/Continuations.pm

    r6505 r14356  
    2222        PIL2JS.catch_end_exception(function () { 
    2323          PIL2JS.runloop(function () { 
    24             _26main_3a_3aexit.FETCH()([ 
     24            _26Main_3a_3aexit.FETCH()([ 
    2525              PIL2JS.Context.ItemAny, 
    2626              new PIL2JS.Box.Constant(undefined), 
  • perl5/PIL2JS/lib6/Prelude/JS/ControlFlow.pm

    r13342 r14356  
    8989    var cxt = args[0], code = args[1], cc = args.pop(); 
    9090    var ret = new PIL2JS.Box.Constant(undefined); 
    91     _24main_3a_3a_21 = new PIL2JS.Box(undefined); 
     91    _24Main_3a_3a_21 = new PIL2JS.Box(undefined); 
    9292 
    9393    try { ret = PIL2JS.cps2normal(code.FETCH(), [PIL2JS.Context.ItemAny]) } catch(err) { 
    9494      // Set $! 
    95       _24main_3a_3a_21 = new PIL2JS.Box( 
     95      _24Main_3a_3a_21 = new PIL2JS.Box( 
    9696        err.pil2js_orig_msg 
    9797          ? err.pil2js_orig_msg.FETCH() 
  • perl5/PIL2JS/lib6/Prelude/JS/Hash.pm

    r13342 r14356  
    147147  JS::inline('(function () { 
    148148    PIL2JS.addmethod( 
    149       _3amain_3a_3aItem, 
     149      _3aMain_3a_3aItem, 
    150150      "postcircumfix:{}", 
    151151      _26PIL2JS_3a_3aInternals_3a_3aHacks_3a_3ahash_postcircumfix_for_undefs 
  • perl5/PIL2JS/lib6/Prelude/JS/JSAN.pm

    r6330 r14356  
    2121        for(var i = 0; i < exportList.length; i++) { 
    2222          var name   = exportList[i]; 
    23           // &main::<name> 
    24           var p6name = "_26main_3a_3a" + name; 
     23          // &Main::<name> 
     24          var p6name = "_26Main_3a_3a" + name; 
    2525          JSAN.globalScope[p6name] = PIL2JS.toPIL2JSBox(classdef[name]); 
    2626        } 
  • perl5/PIL2JS/lib6/Prelude/JS/Pair.pm

    r7946 r14356  
    4747  JS::inline('(function () { 
    4848    PIL2JS.addmethod( 
    49       _3amain_3a_3aPair, 
     49      _3aMain_3a_3aPair, 
    5050      "postcircumfix:{}", 
    5151      _26PIL2JS_3a_3aInternals_3a_3aHacks_3a_3apostcircumfix_for_pair_objects 
  • perl5/PIL2JS/lib6/Prelude/JS/Perl5.pm

    r12278 r14356  
    66      var f = Perl5.perl_can(mod, imports[sym]); 
    77      // XXX: should be caller space, not main! 
    8       // &main::<name>  
    9       var p6name = "_26main_3a_3a" + imports[sym]; 
     8      // &Main::<name>  
     9      var p6name = "_26Main_3a_3a" + imports[sym]; 
    1010      eval(p6name+" = PIL2JS.toPIL2JSBox(f)"); 
    1111    } 
  • perl5/PIL2JS/lib6/Prelude/JS/Rules.pm

    r13342 r14356  
    235235  JS::inline('(function () { 
    236236    PIL2JS.addmethod( 
    237       _3amain_3a_3aMatch, 
     237      _3aMain_3a_3aMatch, 
    238238      "postcircumfix:[]", 
    239239      _26PIL2JS_3a_3aInternals_3a_3aHacks_3a_3apostcircumfix_for_match_objects 
  • perl5/PIL2JS/lib6/Prelude/JS/Str.pm

    r10200 r14356  
    1010      function () { 
    1111        var str_ = String(PIL2JS.cps2normal( 
    12           _26main_3a_3aprefix_3a_7e.FETCH(), 
     12          _26Main_3a_3aprefix_3a_7e.FETCH(), 
    1313          [ PIL2JS.Context.ItemAny, str ] 
    1414        ).toNative()); 
     
    1818      function (n) { 
    1919        var str_ = String(PIL2JS.cps2normal( 
    20           _26main_3a_3aprefix_3a_7e.FETCH(), 
     20          _26Main_3a_3aprefix_3a_7e.FETCH(), 
    2121          [ PIL2JS.Context.ItemAny, str ] 
    2222        ).toNative()); 
    2323        var repl = String(PIL2JS.cps2normal( 
    24           _26main_3a_3aprefix_3a_7e.FETCH(), 
     24          _26Main_3a_3aprefix_3a_7e.FETCH(), 
    2525          [ PIL2JS.Context.ItemAny, n ] 
    2626        ).toNative()); 
  • perl5/PIL2JS/libjs/PIL2JS.js

    r13280 r14356  
    213213    ) { 
    214214      new_val = PIL2JS.cps2normal( 
    215         _26main_3a_3ahash.FETCH(), 
     215        _26Main_3a_3ahash.FETCH(), 
    216216        [PIL2JS.Context.SlurpyAny].concat(new_val) 
    217217      ).FETCH(); 
     
    229229      new_val = 
    230230        PIL2JS.cps2normal( 
    231           _26main_3a_3ahash.FETCH(), [PIL2JS.Context.SlurpyAny].concat(pairs) 
     231          _26Main_3a_3ahash.FETCH(), [PIL2JS.Context.SlurpyAny].concat(pairs) 
    232232        ).FETCH(); 
    233233 
     
    238238    ) { 
    239239      new_val = PIL2JS.cps2normal( 
    240         _26main_3a_3ahash.FETCH(), 
     240        _26Main_3a_3ahash.FETCH(), 
    241241        [PIL2JS.Context.SlurpyAny, n] 
    242242      ).FETCH(); 
     
    248248    ) { 
    249249      new_val = PIL2JS.cps2normal( 
    250        _26main_3a_3aprefix_3a_5c.FETCH(), [PIL2JS.Context.ItemAny, n] 
     250       _26Main_3a_3aprefix_3a_5c.FETCH(), [PIL2JS.Context.ItemAny, n] 
    251251      ).FETCH(); 
    252252    } else if( 
     
    309309        this.isConstant = other.isConstant; 
    310310      } else { 
    311         PIL2JS.die("Can't use object of type \"" + PIL2JS.cps2normal(_26main_3a_3aref.FETCH(), [PIL2JS.Context.ItemAny, other]).toNative() + "\" as an array or array reference!"); 
     311        PIL2JS.die("Can't use object of type \"" + PIL2JS.cps2normal(_26Main_3a_3aref.FETCH(), [PIL2JS.Context.ItemAny, other]).toNative() + "\" as an array or array reference!"); 
    312312      } 
    313313    } else if(my_ctype == PIL2JS.ContainerType.Hash && other_ctype == PIL2JS.ContainerType.Scalar) { 
     
    321321        this.isConstant = other.isConstant; 
    322322      } else { 
    323         PIL2JS.die("Can't use object of type \"" + PIL2JS.cps2normal(_26main_3a_3aref.FETCH(), [PIL2JS.Context.ItemAny, other]).toNative() + "\" as a hash or hash reference!"); 
     323        PIL2JS.die("Can't use object of type \"" + PIL2JS.cps2normal(_26Main_3a_3aref.FETCH(), [PIL2JS.Context.ItemAny, other]).toNative() + "\" as a hash or hash reference!"); 
    324324      } 
    325325    // Impossible (confirmed by Larry: 
     
    611611} 
    612612 
    613 var _3amain_3a_3aAny       = PIL2JS.new_empty_class("Any",       new PIL2JS.Box.Constant(PIL2JS.__PIL2JSClass)); 
    614 var _3amain_3a_3aItem      = PIL2JS.new_empty_class("Item",      _3amain_3a_3aAny); 
    615 var _3amain_3a_3aArray     = PIL2JS.new_empty_class("Array",     _3amain_3a_3aItem); 
    616 var _3amain_3a_3aHash      = PIL2JS.new_empty_class("Hash",      _3amain_3a_3aItem); 
    617 var _3amain_3a_3aPair      = PIL2JS.new_empty_class("Pair",      _3amain_3a_3aItem); 
    618 var _3amain_3a_3aStr       = PIL2JS.new_empty_class("Str",       _3amain_3a_3aItem); 
    619 var _3amain_3a_3aNum       = PIL2JS.new_empty_class("Num",       _3amain_3a_3aItem); 
    620 var _3amain_3a_3aInt       = PIL2JS.new_empty_class("Int",       _3amain_3a_3aNum); 
    621 var _3amain_3a_3aRat       = PIL2JS.new_empty_class("Rat",       _3amain_3a_3aNum); 
    622 var _3amain_3a_3aBool      = PIL2JS.new_empty_class("Bool",      _3amain_3a_3aItem); 
    623 var _3amain_3a_3aCode      = PIL2JS.new_empty_class("Code",      _3amain_3a_3aItem); 
    624 var _3amain_3a_3aBlock     = PIL2JS.new_empty_class("Block",     _3amain_3a_3aCode); 
    625 var _3amain_3a_3aRoutine   = PIL2JS.new_empty_class("Routine",   _3amain_3a_3aCode); 
    626 var _3amain_3a_3aSub       = PIL2JS.new_empty_class("Sub",       _3amain_3a_3aRoutine); 
    627 var _3amain_3a_3aMethod    = PIL2JS.new_empty_class("Method",    _3amain_3a_3aRoutine); 
    628 var _3amain_3a_3aSubmethod = PIL2JS.new_empty_class("Submethod", _3amain_3a_3aRoutine); 
    629 var _3amain_3a_3aMulti     = PIL2JS.new_empty_class("Multi",     _3amain_3a_3aRoutine); 
    630 var _3amain_3a_3aRule      = PIL2JS.new_empty_class("Rule",      _3amain_3a_3aRoutine); 
    631 var _3amain_3a_3aMacro     = PIL2JS.new_empty_class("Macro",     _3amain_3a_3aRoutine); 
    632 var _3amain_3a_3aRef       = PIL2JS.new_empty_class("Ref",       _3amain_3a_3aItem); 
    633 var _3amain_3a_3aJunction  = PIL2JS.new_empty_class("Junction",  _3amain_3a_3aAny); 
    634 var _3amain_3a_3aRul       = PIL2JS.new_empty_class("Rul",       _3amain_3a_3aItem); 
    635 var _3amain_3a_3aMatch     = PIL2JS.new_empty_class("Match",     _3amain_3a_3aItem); 
     613var _3aMain_3a_3aAny       = PIL2JS.new_empty_class("Any",       new PIL2JS.Box.Constant(PIL2JS.__PIL2JSClass)); 
     614var _3aMain_3a_3aItem      = PIL2JS.new_empty_class("Item",      _3aMain_3a_3aAny); 
     615var _3aMain_3a_3aArray     = PIL2JS.new_empty_class("Array",     _3aMain_3a_3aItem); 
     616var _3aMain_3a_3aHash      = PIL2JS.new_empty_class("Hash",      _3aMain_3a_3aItem); 
     617var _3aMain_3a_3aPair      = PIL2JS.new_empty_class("Pair",      _3aMain_3a_3aItem); 
     618var _3aMain_3a_3aStr       = PIL2JS.new_empty_class("Str",       _3aMain_3a_3aItem); 
     619var _3aMain_3a_3aNum       = PIL2JS.new_empty_class("Num",       _3aMain_3a_3aItem); 
     620var _3aMain_3a_3aInt       = PIL2JS.new_empty_class("Int",       _3aMain_3a_3aNum); 
     621var _3aMain_3a_3aRat       = PIL2JS.new_empty_class("Rat",       _3aMain_3a_3aNum); 
     622var _3aMain_3a_3aBool      = PIL2JS.new_empty_class("Bool",      _3aMain_3a_3aItem); 
     623var _3aMain_3a_3aCode      = PIL2JS.new_empty_class("Code",      _3aMain_3a_3aItem); 
     624var _3aMain_3a_3aBlock     = PIL2JS.new_empty_class("Block",     _3aMain_3a_3aCode); 
     625var _3aMain_3a_3aRoutine   = PIL2JS.new_empty_class("Routine",   _3aMain_3a_3aCode); 
     626var _3aMain_3a_3aSub       = PIL2JS.new_empty_class("Sub",       _3aMain_3a_3aRoutine); 
     627var _3aMain_3a_3aMethod    = PIL2JS.new_empty_class("Method",    _3aMain_3a_3aRoutine); 
     628var _3aMain_3a_3aSubmethod = PIL2JS.new_empty_class("Submethod", _3aMain_3a_3aRoutine); 
     629var _3aMain_3a_3aMulti     = PIL2JS.new_empty_class("Multi",     _3aMain_3a_3aRoutine); 
     630var _3aMain_3a_3aRule      = PIL2JS.new_empty_class("Rule",      _3aMain_3a_3aRoutine); 
     631var _3aMain_3a_3aMacro     = PIL2JS.new_empty_class("Macro",     _3aMain_3a_3aRoutine); 
     632var _3aMain_3a_3aRef       = PIL2JS.new_empty_class("Ref",       _3aMain_3a_3aItem); 
     633var _3aMain_3a_3aJunction  = PIL2JS.new_empty_class("Junction",  _3aMain_3a_3aAny); 
     634var _3aMain_3a_3aRul       = PIL2JS.new_empty_class("Rul",       _3aMain_3a_3aItem); 
     635var _3aMain_3a_3aMatch     = PIL2JS.new_empty_class("Match",     _3aMain_3a_3aItem); 
    636636 
    637637// Returns, given a native JS object, the corresponding boxed class object. 
    638638PIL2JS.nativeclass2realclass = function (constr) { 
    639639  if(constr == Array) { 
    640     return _3amain_3a_3aArray; 
     640    return _3aMain_3a_3aArray; 
    641641  } else if(constr == PIL2JS.Hash) { 
    642     return _3amain_3a_3aHash; 
     642    return _3aMain_3a_3aHash; 
    643643  } else if(constr == PIL2JS.Pair) { 
    644     return _3amain_3a_3aPair; 
     644    return _3aMain_3a_3aPair; 
    645645  } else if(constr == PIL2JS.NamedPair) { 
    646646    PIL2JS.die("A named pair leaked into PIL2JS.nativeclass2realclass!"); 
    647647  } else if(constr == String) { 
    648     return _3amain_3a_3aStr; 
     648    return _3aMain_3a_3aStr; 
    649649  } else if(constr == Number) { 
    650     return _3amain_3a_3aNum; 
     650    return _3aMain_3a_3aNum; 
    651651  } else if(constr == Boolean) { 
    652     return _3amain_3a_3aBool; 
     652    return _3aMain_3a_3aBool; 
    653653  } else if(constr == Function) { 
    654     return _3amain_3a_3aCode; 
     654    return _3aMain_3a_3aCode; 
    655655  } else if(constr == PIL2JS.Junction.Any || constr == PIL2JS.Junction.All || constr == PIL2JS.Junction.One || constr == PIL2JS.Junction.None) { 
    656     return _3amain_3a_3aJunction; 
     656    return _3aMain_3a_3aJunction; 
    657657  } else if(constr == PIL2JS.Ref) { 
    658     return _3amain_3a_3aRef; 
     658    return _3aMain_3a_3aRef; 
    659659  } else if(constr == PIL2JS.Match) { 
    660     return _3amain_3a_3aMatch; 
     660    return _3aMain_3a_3aMatch; 
    661661  } else if(constr == PIL2JS.Rul) { 
    662     return _3amain_3a_3aRul; 
     662    return _3aMain_3a_3aRul; 
    663663  } else if(constr == undefined) { 
    664     return _3amain_3a_3aItem; 
     664    return _3aMain_3a_3aItem; 
    665665  } 
    666666}; 
     
    712712PIL2JS.StubIO = function () {}; 
    713713PIL2JS.StubIO.prototype.print = new PIL2JS.Box.Constant(function (args) { 
    714   _26main_3a_3aprint.FETCH()(args); 
     714  _26Main_3a_3aprint.FETCH()(args); 
    715715}); 
    716716PIL2JS.StubIO.prototype.say = new PIL2JS.Box.Constant(function (args) { 
    717   _26main_3a_3asay.FETCH()(args); 
     717  _26Main_3a_3asay.FETCH()(args); 
    718718}); 
    719719 
     
    731731 
    732732// Magical variables: $?POSITION, $!, etc. 
    733 var _24main_3a_3a_3fPOSITION = new PIL2JS.Box("<unknown>"); 
    734 var _24main_3a_3a_3fSUBNAME  = new PIL2JS.Box(undefined); 
    735 var _24main_3a_3a_21         = new PIL2JS.Box(undefined); 
    736 var _25main_3a_3aENV         = new PIL2JS.Box(new PIL2JS.Hash); 
    737 var _40main_3a_3a_2aEND      = new PIL2JS.Box([]); 
    738 var _24main_3a_3a_2aERR      = new PIL2JS.StubIO; 
    739 var _24main_3a_3aERR         = _24main_3a_3a_2aERR; 
    740 var _24main_3a_3a_2aOUT      = new PIL2JS.StubIO; 
    741 var _24main_3a_3aOUT         = _24main_3a_3a_2aOUT; 
    742 var _24main_3a_3a_2aPUGS_HAS_HSPLUGINS = new PIL2JS.Box.Constant(0); 
    743 var _24main_3a_3aPUGS_HAS_HSPLUGINS    = _24main_3a_3a_2aPUGS_HAS_HSPLUGINS; 
    744 var _40main_3a_3a_2aINC      = new PIL2JS.Box([]); 
    745 var _26main_3a_3a_3fBLOCK    = new PIL2JS.Box(undefined); 
    746 var _26main_3a_3a_3fSUB      = new PIL2JS.Box(undefined); 
    747 var _24main_3a_3a_3fOS       = new PIL2JS.Box.Constant("unknown");  // XXX 
    748 var _24main_3a_3a_2aOS       = new PIL2JS.Box.Constant(Perl5 ? Perl5.perl_eval('$^O') : "browser"); 
    749 var _24main_3a_3aOS          = _24main_3a_3a_2aOS; 
    750 var _24main_3a_3a_2aPID      = new PIL2JS.Box.Constant(Perl5 ? Perl5.perl_eval('$$') : "unknown"); 
    751 var _24main_3a_3aPID          = _24main_3a_3a_2aPID; 
    752 var _24main_3a_3a_3fPUGS_BACKEND = new PIL2JS.Box.Constant("BACKEND_JAVASCRIPT"); 
    753 var _24main_3a_3a_           = new PIL2JS.Box(undefined); 
     733var _24Main_3a_3a_3fPOSITION = new PIL2JS.Box("<unknown>"); 
     734var _24Main_3a_3a_3fSUBNAME  = new PIL2JS.Box(undefined); 
     735var _24Main_3a_3a_21         = new PIL2JS.Box(undefined); 
     736var _25Main_3a_3aENV         = new PIL2JS.Box(new PIL2JS.Hash); 
     737var _40Main_3a_3a_2aEND      = new PIL2JS.Box([]); 
     738var _24Main_3a_3a_2aERR      = new PIL2JS.StubIO; 
     739var _24Main_3a_3aERR         = _24Main_3a_3a_2aERR; 
     740var _24Main_3a_3a_2aOUT      = new PIL2JS.StubIO; 
     741var _24Main_3a_3aOUT         = _24Main_3a_3a_2aOUT; 
     742var _24Main_3a_3a_2aPUGS_HAS_HSPLUGINS = new PIL2JS.Box.Constant(0); 
     743var _24Main_3a_3aPUGS_HAS_HSPLUGINS    = _24Main_3a_3a_2aPUGS_HAS_HSPLUGINS; 
     744var _40Main_3a_3a_2aINC      = new PIL2JS.Box([]); 
     745var _26Main_3a_3a_3fBLOCK    = new PIL2JS.Box(undefined); 
     746var _26Main_3a_3a_3fSUB      = new PIL2JS.Box(undefined); 
     747var _24Main_3a_3a_3fOS       = new PIL2JS.Box.Constant("unknown");  // XXX 
     748var _24Main_3a_3a_2aOS       = new PIL2JS.Box.Constant(Perl5 ? Perl5.perl_eval('$^O') : "browser"); 
     749var _24Main_3a_3aOS          = _24Main_3a_3a_2aOS; 
     750var _24Main_3a_3a_2aPID      = new PIL2JS.Box.Constant(Perl5 ? Perl5.perl_eval('$$') : "unknown"); 
     751var _24Main_3a_3aPID          = _24Main_3a_3a_2aPID; 
     752var _24Main_3a_3a_3fPUGS_BACKEND = new PIL2JS.Box.Constant("BACKEND_JAVASCRIPT"); 
     753var _24Main_3a_3a_           = new PIL2JS.Box(undefined); 
    754754// $/ -- XXX WRONG needs to be lexical 
    755 var _24main_3a_3a_2f         = new PIL2JS.Box(undefined); 
     755var _24Main_3a_3a_2f         = new PIL2JS.Box(undefined); 
    756756// Stub for $?CALLER::CALLER::POSITION, so Test.pm doesn't die on a failed 
    757757// test. 
     
    773773  var err = new Error(errmsg.slice(-1, 1) == "\n" 
    774774    ? errmsg 
    775     : errmsg + " at " + _24main_3a_3a_3fPOSITION.toNative() 
     775    : errmsg + " at " + _24Main_3a_3a_3fPOSITION.toNative() 
    776776  ); 
    777777  err.pil2js_orig_msg = msg; 
    778   err.pil2js_pos      = _24main_3a_3a_3fPOSITION.toNative(); 
     778  err.pil2js_pos      = _24Main_3a_3a_3fPOSITION.toNative(); 
    779779  return err; 
    780780}; 
     
    821821 
    822822PIL2JS.already_exited = false; 
    823 var _26main_3a_3aexit = new PIL2JS.Box(PIL2JS.Box.constant_func(1, function (args) { 
     823var _26Main_3a_3aexit = new PIL2JS.Box(PIL2JS.Box.constant_func(1, function (args) { 
    824824  if(PIL2JS.already_exited) return; 
    825825  PIL2JS.already_exited = true; 
    826826 
    827827  // Run all END blocks. 
    828   var blocks = _40main_3a_3a_2aEND.FETCH(); 
     828  var blocks = _40Main_3a_3a_2aEND.FETCH(); 
    829829  for(var i = 0; i < blocks.length; i++) { 
    830830    PIL2JS.cps2normal(blocks[i].FETCH(), [PIL2JS.Context.Void]); 
     
    958958PIL2JS.print_exception = function (err) { 
    959959  PIL2JS.cps2normal( 
    960     _26main_3a_3asay.FETCH(), [ 
     960    _26Main_3a_3asay.FETCH(), [ 
    961961      PIL2JS.Context.Void, 
    962       PIL2JS.cps2normal(_26main_3a_3aprefix_3a_7e.FETCH(), [ 
     962      PIL2JS.cps2normal(_26Main_3a_3aprefix_3a_7e.FETCH(), [ 
    963963        PIL2JS.Context.ItemAny, 
    964964        //err.pil2js_orig_msg 
     
    993993 
    994994// &*ref. 
    995 var _26main_3a_3aref = PIL2JS.Box.constant_func(1, function (args) { 
     995var _26Main_3a_3aref = PIL2JS.Box.constant_func(1, function (args) { 
    996996  var thing = args[1].FETCH(); 
    997997  var cc    = args.pop(); 
     
    10321032  } 
    10331033}); 
    1034 _26main_3a_3aref.perl_name = "&main::WHAT"; 
    1035 PIL2JS.addmethod(_3amain_3a_3aAny, "WHAT", _26main_3a_3aref); 
     1034_26Main_3a_3aref.perl_name = "&Main::WHAT"; 
     1035PIL2JS.addmethod(_3aMain_3a_3aAny, "WHAT", _26Main_3a_3aref); 
    10361036 
    10371037// &*isa. hack. 
    1038 var _26main_3a_3aisa = PIL2JS.Box.constant_func(1, function (args) { 
     1038var _26Main_3a_3aisa = PIL2JS.Box.constant_func(1, function (args) { 
    10391039  args.shift();  // cxt 
    10401040  var self    = args.shift(), 
    10411041      cmptype = args.shift().FETCH(); 
    10421042      cc      = args.pop(), 
    1043       ref     = _26main_3a_3aref; 
     1043      ref     = _26Main_3a_3aref; 
    10441044 
    10451045  if(args.length > 0) { 
     
    10661066  }]); 
    10671067}); 
    1068 _26main_3a_3aisa.perl_name = "&main::isa"; 
    1069 PIL2JS.addmethod(_3amain_3a_3aAny, "isa", _26main_3a_3aisa); 
     1068_26Main_3a_3aisa.perl_name = "&Main::isa"; 
     1069PIL2JS.addmethod(_3aMain_3a_3aAny, "isa", _26Main_3a_3aisa); 
    10701070 
    10711071// &prefix:<\> 
    1072 var _26main_3a_3aprefix_3a_5c = PIL2JS.Box.constant_func(1, function (args) { 
     1072var _26Main_3a_3aprefix_3a_5c = PIL2JS.Box.constant_func(1, function (args) { 
    10731073  var thing = args[1], cc = args.pop(); 
    10741074  cc(new PIL2JS.Box.Constant(new PIL2JS.Ref(thing))); 
    10751075}); 
    1076 _26main_3a_3aprefix_3a_5c.perl_name = "&main::prefix:\\"; 
     1076_26Main_3a_3aprefix_3a_5c.perl_name = "&Main::prefix:\\"; 
    10771077