Changeset 5981

Show
Ignore:
Timestamp:
08/01/05 20:28:26 (3 years ago)
Author:
iblech
svk:copy_cache_prev:
8131
Message:

* INSTALL: Wrap dudley++'s new paragraph.
* ext/Algorithm-TokenBucket?/t/test.t: Skip test which depends on low system load.
* PIL2JS: s:g/GET/FETCH/ to align to PIL.Internals and Perl 5.

Files:
15 modified

Legend:

Unmodified
Added
Removed
  • INSTALL

    r5978 r5981  
    146146may also need to switch to GCC 3.3 to compile Pugs for now. 
    147147 
    148 Note that objects compiled with gcc 4.0 can't be linked with gcc 3.3 objects. This means that if you're embedding a parrot you've built with gcc 4.0, pugs will fail during linking with errors like: 
     148Note that objects compiled with GCC 4.0 can't be linked with GCC 3.3 objects. 
     149This means that if you're embedding a Parrot you've built with GCC 4.0, Pugs 
     150will fail during linking with errors like: 
    149151 
    150152    ld: Undefined symbols: 
     
    155157    _printf$LDBLStub 
    156158 
    157 Try building a new parrot with gcc 3.3, then compile Pugs again. 
     159Try building a new Parrot with gcc 3.3, then compile Pugs again. 
    158160 
    159161CAVEATS FOR x86_64 MACHINES 
  • ext/Algorithm-TokenBucket/t/test.t

    r3580 r5981  
    1919$bucket<count>(1); 
    2020$bucket<count>(1); 
    21 #skip "skipping test depending on accurate time()"; 
    22 ok !$bucket<conform>(1), 'even 1 conforms no more'; 
     21skip "skipping test depending on accurate time() and low system load"; 
     22#ok !$bucket<conform>(1), 'even 1 conforms no more'; 
  • perl5/PIL2JS/README

    r5852 r5981  
    7979had to create a proxying object, as Perl requires support for C<is rw> and C<is 
    8080copy>. C<new PIL2JS.Box(value)> returns an object supporting the methods 
    81 C<.GET()> (returns C<value>), C<.STORE(new_value)> (set to new value), 
     81C<.FETCH()> (returns C<value>), C<.STORE(new_value)> (set to new value), 
    8282C<.clone()>, and C<.toNative()> (return value as native object). 
    8383 
     
    9191 
    9292Assignment is, thanks to the container type C<PIL2JS.Box>, simple: 
    93 C<dest.STORE(source)> (C<.STORE> calls C<source.GET()> then and return 
     93C<dest.STORE(source)> (C<.STORE> calls C<source.FETCH()> then and return 
    9494C<source>.) 
    9595 
  • perl5/PIL2JS/lib/PIL/Nodes.pm

    r5965 r5981  
    7373      my $name = $_->[0]; 
    7474      $name =~ /^(?:__init_|__export_)/ 
    75         ? sprintf("%s.GET()([PIL2JS.Context.Void]);", PIL::Nodes::name_mangle $name) 
     75        ? sprintf("%s.FETCH()([PIL2JS.Context.Void]);", PIL::Nodes::name_mangle $name) 
    7676        : (); 
    7777    } @{ $self->{"pilGlob" } })  . 
     
    202202      $js =~ s/\n$//; 
    203203      if($IN_SUBLIKE >= PIL::Nodes::SUBROUTINE) { 
    204         return "$pos;\n_26main_3a_3areturn.GET()([PIL2JS.Context.ItemAny, $js]);"; 
     204        return "$pos;\n_26main_3a_3areturn.FETCH()([PIL2JS.Context.ItemAny, $js]);"; 
    205205      } elsif($IN_SUBLIKE >= PIL::Nodes::SUBBLOCK) { 
    206         return "$pos;\n_26main_3a_3aleave.GET()([PIL2JS.Context.ItemAny, $js]);"; 
     206        return "$pos;\n_26main_3a_3aleave.FETCH()([PIL2JS.Context.ItemAny, $js]);"; 
    207207      } else { 
    208208        return "$pos;\nreturn($js);"; 
     
    272272 
    273273    return "" unless $IN_SUBLIKE; 
    274     return "_26main_3a_3areturn.GET()([PIL2JS.Context.ItemAny, new PIL2JS.Box.Constant(undefined)]);" 
     274    return "_26main_3a_3areturn.FETCH()([PIL2JS.Context.ItemAny, new PIL2JS.Box.Constant(undefined)]);" 
    275275      if $IN_SUBLIKE >= PIL::Nodes::SUBROUTINE; 
    276     return "_26main_3a_3aleave.GET()([PIL2JS.Context.ItemAny, new PIL2JS.Box.Constant(undefined)]);" 
     276    return "_26main_3a_3aleave.FETCH()([PIL2JS.Context.ItemAny, new PIL2JS.Box.Constant(undefined)]);" 
    277277      if $IN_SUBLIKE >= PIL::Nodes::SUBBLOCK; 
    278278    return "return(new PIL2JS.Box.Constant(undefined));" 
     
    382382    } else { 
    383383      return "new PIL2JS.Box.Constant($sub(\n$arg\n))" if $native; 
    384       return "$sub.GET()([\n$cxt,\n$arg\n])"           if defined $native; 
     384      return "$sub.FETCH()([\n$cxt,\n$arg\n])"           if defined $native; 
    385385      return sprintf "PIL2JS.call(undefined, %s, [\n%s,\n%s\n])", $sub, $cxt, $arg; 
    386386    } 
     
    623623    if($self->[0] =~ /^&\*END_\d+/) { 
    624624      $js .= sprintf 
    625         "_40main_3a_3a_2aEND.GET().push(%s);\n", 
     625        "_40main_3a_3a_2aEND.FETCH().push(%s);\n", 
    626626        PIL::Nodes::name_mangle $self->[0]; 
    627627    } 
  • perl5/PIL2JS/lib6/Prelude/JS.pm

    r5965 r5981  
    1111 
    1212# new PIL2JS.Box(...) boxes a value. That is, it is packed in an Object with 
    13 # the property .GET() holding the original value. This is necessary to emulate 
    14 # pass by ref (needed for is rw and is ref). 
     13# the property .FETCH() holding the original value. This is necessary to 
     14# emulate pass by ref (needed for is rw and is ref). 
    1515 
    1616use Prelude::JS::Code; 
     
    3939      return new PIL2JS.Box.Constant(args[0].uid == args[1].uid); 
    4040    } else if(!args[0].uid && !args[1].uid) { 
    41       return new PIL2JS.Box.Constant(args[0].GET() == args[1].GET()); 
     41      return new PIL2JS.Box.Constant(args[0].FETCH() == args[1].FETCH()); 
    4242    } else { 
    4343      return new PIL2JS.Box.Constant(false); 
     
    7575      // We\'ve to [].concat here so we don\'t set .flatten_me of caller\'s 
    7676      // original array. 
    77       var array = [].concat(args[1].GET()); 
     77      var array = [].concat(args[1].FETCH()); 
    7878      array.flatten_me = true; 
    7979      var ret = new PIL2JS.Box.Constant(array); 
     
    102102sub infix:<~>(Str $__a, Str $__b) is primitive { 
    103103  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    104     var a = args[1].GET(), b = args[2].GET(); 
     104    var a = args[1].FETCH(), b = args[2].FETCH(); 
    105105    return new PIL2JS.Box.Constant(String(a) + String(b)); 
    106106  })')(~$__a, ~$__b); 
  • perl5/PIL2JS/lib6/Prelude/JS/Array.pm

    r5940 r5981  
    33method JS::Root::shift(@self:) { 
    44  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    5     var array = args[1].GET(); 
     5    var array = args[1].FETCH(); 
    66    var ret   = array.shift(); 
    77    return ret == undefined ? new PIL2JS.Box.Constant(undefined) : ret; 
     
    1111method JS::Root::pop(@self:) { 
    1212  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    13     var array = args[1].GET(); 
     13    var array = args[1].FETCH(); 
    1414    var ret   = array.pop(); 
    1515    return ret == undefined ? new PIL2JS.Box.Constant(undefined) : ret; 
     
    1919method JS::Root::unshift(@self: *@things) { 
    2020  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    21     var array = args[1].GET(), add = args[2].GET(); 
     21    var array = args[1].FETCH(), add = args[2].FETCH(); 
    2222    for(var i = add.length - 1; i >= 0; i--) { 
    23       array.unshift(new PIL2JS.Box(add[i].GET())); 
     23      array.unshift(new PIL2JS.Box(add[i].FETCH())); 
    2424    } 
    2525    return new PIL2JS.Box.Constant(array.length); 
     
    2929method JS::Root::push(@self: *@things) { 
    3030  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    31     var array = args[1].GET(), add = args[2].GET(); 
     31    var array = args[1].FETCH(), add = args[2].FETCH(); 
    3232    for(var i = 0; i < add.length; i++) { 
    33       array.push(new PIL2JS.Box(add[i].GET())); 
     33      array.push(new PIL2JS.Box(add[i].FETCH())); 
    3434    } 
    3535    return new PIL2JS.Box.Constant(array.length); 
     
    9797  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    9898    // [].concat(...): Defeat modifying of the original array. 
    99     var array = [].concat(args[1].GET()), cmp = args[2].GET(); 
     99    var array = [].concat(args[1].FETCH()), cmp = args[2].FETCH(); 
    100100    var jscmp = function (a, b) { 
    101101      return cmp([PIL2JS.Context.ItemAny, a, b]).toNative(); 
     
    182182  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    183183    var cxt   = args.shift(); 
    184     var iarr  = args[0].GET(); 
     184    var iarr  = args[0].FETCH(); 
    185185 
    186186    var array = []; 
     
    188188      // The extra new PIL2JS.Box is necessary to make the contents of arrays 
    189189      // readwrite, i.e. my @a = (0,1,2); @a[1] = ... should work. 
    190       array[i] = new PIL2JS.Box(iarr[i].GET()); 
     190      array[i] = new PIL2JS.Box(iarr[i].FETCH()); 
    191191    } 
    192192 
     
    203203            //   my ($a, undef, $b) = (3,4,5); 
    204204            // work. 
    205             iarr[i].constant && iarr[i].GET() == undefined 
     205            iarr[i].isConstant && iarr[i].FETCH() == undefined 
    206206              ? new PIL2JS.Box(undefined) 
    207207              : iarr[i] 
     
    209209        } 
    210210 
    211         var arr = new PIL2JS.Box([]).STORE(n).GET(); 
     211        var arr = new PIL2JS.Box([]).STORE(n).FETCH(); 
    212212        for(var i = 0; i < arr.length; i++) { 
    213213          if(marray[i]) marray[i].STORE(arr[i]); 
     
    236236  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    237237    var cxt   = args.shift(); 
    238     var array = args[0].GET(); 
     238    var array = args[0].FETCH(); 
    239239    var idx   = Number(args[1].toNative()); 
    240240 
    241     // Relay .GET and .STORE to array[idx]. 
     241    // Relay .FETCH and .STORE to array[idx]. 
    242242    var ret = new PIL2JS.Box.Proxy( 
    243243      function () { 
    244244        var ret = array[idx]; 
    245         return ret == undefined ? undefined : ret.GET(); 
     245        return ret == undefined ? undefined : ret.FETCH(); 
    246246      }, 
    247247      function (n) { 
  • perl5/PIL2JS/lib6/Prelude/JS/Bool.pm

    r5964 r5981  
    1212sub prefix:<?>($a) is primitive { 
    1313  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    14     var a = args[1].GET(); 
     14    var a = args[1].FETCH(); 
    1515    if(a instanceof PIL2JS.Ref && a.autoderef) { 
    16       if(a.referencee.GET() instanceof Array) { 
    17         return new PIL2JS.Box.Constant(a.referencee.GET().length > 0); 
    18       } else if(a.referencee.GET() instanceof PIL2JS.Hash) { 
    19         return new PIL2JS.Box.Constant(a.referencee.GET().pairs().length > 0); 
     16      if(a.referencee.FETCH() instanceof Array) { 
     17        return new PIL2JS.Box.Constant(a.referencee.FETCH().length > 0); 
     18      } else if(a.referencee.FETCH() instanceof PIL2JS.Hash) { 
     19        return new PIL2JS.Box.Constant(a.referencee.FETCH().pairs().length > 0); 
    2020      } else { 
    21         return _26main_3a_3aprefix_3a_3f.GET()([PIL2JS.Context.ItemAny, a.referencee]); 
     21        return _26main_3a_3aprefix_3a_3f.FETCH()([PIL2JS.Context.ItemAny, a.referencee]); 
    2222      } 
    2323    } else if(a instanceof PIL2JS.Ref) { 
  • perl5/PIL2JS/lib6/Prelude/JS/Code.pm

    r5733 r5981  
    11method JS::Root::arity(Code $self:) { 
    22  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    3     return new PIL2JS.Box.Constant(args[1].GET().pil2js_arity); 
     3    return new PIL2JS.Box.Constant(args[1].FETCH().pil2js_arity); 
    44  })')($self); 
    55} 
  • perl5/PIL2JS/lib6/Prelude/JS/ControlFlow.pm

    r5940 r5981  
    8888    var cxt = args[0], code = args[1]; 
    8989    var ret = new PIL2JS.Box.Constant(undefined); 
    90     try { ret = code.GET()([PIL2JS.Context.ItemAny]) } catch(err) { 
     90    try { ret = code.FETCH()([PIL2JS.Context.ItemAny]) } catch(err) { 
    9191      if(err instanceof PIL2JS.ControlException.ret) { 
    9292        throw err; 
  • perl5/PIL2JS/lib6/Prelude/JS/Hash.pm

    r5965 r5981  
    33  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    44    var cxt   = args.shift(); 
    5     var pairs = args[0].GET(); 
     5    var pairs = args[0].FETCH(); 
    66    var hash  = new PIL2JS.Hash(); 
    77 
    88    for(var i = 0; i < pairs.length; i++) { 
    9       var pair = pairs[i].GET(); 
     9      var pair = pairs[i].FETCH(); 
    1010 
    1111      // my %hash = ("a", 1, "b", 2); 
     
    2727        hash.add_pair(new PIL2JS.Pair( 
    2828          new PIL2JS.Box.ReadOnly(pair.key), 
    29           new PIL2JS.Box(pair.value.GET()) 
     29          new PIL2JS.Box(pair.value.FETCH()) 
    3030        )); 
    3131      } 
     
    4242  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    4343    var cxt  = args.shift(); 
    44     var hash = args[0].GET(); 
     44    var hash = args[0].FETCH(); 
    4545    var key  = args[1]; 
    4646 
    47     // Relay .GET and .STORE to hash.entries[key]. 
     47    // Relay .FETCH and .STORE to hash.entries[key]. 
    4848    var ret = new PIL2JS.Box.Proxy( 
    4949      function () { 
    5050        var ret = hash.get_value(key); 
    51         return ret == undefined ? undefined : ret.GET(); 
     51        return ret == undefined ? undefined : ret.FETCH(); 
    5252      }, 
    5353      function (n) { 
  • perl5/PIL2JS/lib6/Prelude/JS/Keyed.pm

    r5940 r5981  
    33  if $self.isa("Hash") { 
    44    JS::inline('new PIL2JS.Box.Constant(function (args) { 
    5       var hash = args[1].GET(), key = args[2]; 
     5      var hash = args[1].FETCH(), key = args[2]; 
    66      return new PIL2JS.Box.Constant(hash.exists(key)); 
    77    })')(%$self, $idx); 
     
    1010  } elsif $self.isa("Array") { 
    1111    JS::inline('new PIL2JS.Box.Constant(function (args) { 
    12       var array = args[1].GET(), idx = Number(args[2].toNative()); 
     12      var array = args[1].FETCH(), idx = Number(args[2].toNative()); 
    1313      return new PIL2JS.Box.Constant( 
    1414        array[idx >= 0 ? idx : array.length + idx] != undefined 
     
    2323  if $self.isa("Hash") { 
    2424    JS::inline('new PIL2JS.Box.Constant(function (args) { 
    25       var hash = args[1].GET(), keys = args[2].GET(); 
     25      var hash = args[1].FETCH(), keys = args[2].FETCH(); 
    2626      var ret  = []; 
    2727      for(var i = 0; i < keys.length; i++) { 
     
    3333  } elsif $self.isa("Array") { 
    3434    JS::inline('new PIL2JS.Box.Constant(function (args) { 
    35       var array = args[1].GET(), idxs = args[2].toNative(); 
     35      var array = args[1].FETCH(), idxs = args[2].toNative(); 
    3636      var ret   = []; 
    3737      for(var i = 0; i < idxs.length; i++) { 
     
    5151  if $self.isa("Hash") { 
    5252    JS::inline('new PIL2JS.Box.Constant(function (args) { 
    53       var hash = args[1].GET(); 
     53      var hash = args[1].FETCH(); 
    5454      var keys = hash.keys(); 
    5555      return new PIL2JS.Box.Constant(keys); 
     
    5959  } elsif $self.isa("Array") { 
    6060    JS::inline('new PIL2JS.Box.Constant(function (args) { 
    61       var array = args[1].GET(); 
     61      var array = args[1].FETCH(); 
    6262      var ret   = []; 
    6363      for(var i = 0; i < array.length; i++) { 
  • perl5/PIL2JS/lib6/Prelude/JS/Pair.pm

    r5965 r5981  
    33 
    44  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    5     return args[1].GET().key; 
     5    return args[1].FETCH().key; 
    66  })')($self); 
    77} 
     
    1111 
    1212  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    13     return args[1].GET().value; 
     13    return args[1].FETCH().value; 
    1414  })')($self); 
    1515} 
  • perl5/PIL2JS/lib6/Prelude/JS/Ref.pm

    r5932 r5981  
    11sub PIL2JS::Internals::generic_deref($thing) is primitive is rw { 
    22  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    3     var thing = args[1].GET(); 
     3    var thing = args[1].FETCH(); 
    44    if(!(thing instanceof PIL2JS.Ref)) { 
    55      PIL2JS.die("Can\'t use \"" + thing + "\" as a generic reference!"); 
    66    } 
    77 
    8     // Relay .GET and .STORE to the referencee. 
     8    // Relay .FETCH and .STORE to the referencee. 
    99    var ret = new PIL2JS.Box.Proxy( 
    10       function () { return thing.referencee.GET() }, 
     10      function () { return thing.referencee.FETCH() }, 
    1111      function (n) { 
    1212        thing.referencee.STORE(n); 
     
    2222sub PIL2JS::Internals::autoderef(Ref $ref) returns Bool is primitive { 
    2323  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    24     var thing = args[1].GET(); 
     24    var thing = args[1].FETCH(); 
    2525 
    2626    if(!(thing instanceof PIL2JS.Ref)) { 
     
    3434method tied(Ref $self:) returns Ref { 
    3535  JS::inline('new PIL2JS.Box.Constant(function (args) { 
    36     var ref = args[1].GET(); 
     36    var ref = args[1].FETCH(); 
    3737 
    3838    if(!(ref instanceof PIL2JS.Ref)) { 
  • perl5/PIL2JS/libjs/PIL2JS.js

    r5965 r5981  
    6868PIL2JS.Ref = function (referencee) { 
    6969  this.referencee = referencee; 
    70   this.autoderef  = referencee.GET() instanceof Array 
    71                  || referencee.GET() instanceof PIL2JS.Hash; 
     70  this.autoderef  = referencee.FETCH() instanceof Array 
     71                 || referencee.FETCH() instanceof PIL2JS.Hash; 
    7272  // || referencee instanceof PIL2JS.OwnObject, see 
    7373  // http://www.nntp.perl.org/group/perl.perl6.language/22532. 
     
    7878// This is necessary to emulate pass by ref, needed for is rw and is ref. 
    7979// See section "DESIGN" in README. 
    80 // GET    :: SomeNativeType 
     80// FETCH  :: SomeNativeType 
    8181// STORE  :: SomeBox -> TheSameBox 
    8282// BINDTO :: SomeBox -> TheSameBox 
     
    8484// and rebound. 
    8585PIL2JS.Box = function (value) { 
    86   this.GET  = function ()  { return value }; 
     86  this.FETCH = function ()  { return value }; 
    8787  this.STORE = function (n) { 
    88     var new_val   = n.GET(); 
     88    var new_val   = n.FETCH(); 
    8989    var my_ctype  = this.container_type; 
    9090    var new_ctype = n.container_type; 
     
    9696      new_ctype == PIL2JS.ContainerType.Scalar 
    9797    ) { 
    98       new_val = _26main_3a_3ainfix_3a_2c.GET()([PIL2JS.Context.SlurpyAny, n]).GET(); 
     98      new_val = _26main_3a_3ainfix_3a_2c.FETCH()([PIL2JS.Context.SlurpyAny, n]).FETCH(); 
    9999    // my @a = %h 
    100100    } else if( 
     
    107107      } 
    108108      new_val = 
    109        _26main_3a_3ainfix_3a_2c.GET()([PIL2JS.Context.SlurpyAny].concat(pairs)).GET(); 
     109       _26main_3a_3ainfix_3a_2c.FETCH()([PIL2JS.Context.SlurpyAny].concat(pairs)).FETCH(); 
    110110    // my @a = @b (copy @b, don't bind) 
    111111    } else if( 
     
    114114    ) { 
    115115      new_val = 
    116        _26main_3a_3ainfix_3a_2c.GET()([PIL2JS.Context.SlurpyAny].concat(new_val)).GET(); 
     116       _26main_3a_3ainfix_3a_2c.FETCH()([PIL2JS.Context.SlurpyAny].concat(new_val)).FETCH(); 
    117117 
    118118    // my %a = (a => 1, b => 2) (or generally my %a = @a) --> my %a = hash(a => 1, b => 2) 
     
    120120      my_ctype  == PIL2JS.ContainerType.Hash && 
    121121      new_ctype == PIL2JS.ContainerType.Array) { 
    122       new_val = _26main_3a_3ahash.GET()([PIL2JS.Context.SlurpyAny, n]).GET(); 
     122      new_val = _26main_3a_3ahash.FETCH()([PIL2JS.Context.SlurpyAny, n]).FETCH(); 
    123123    // my %a = %b (copy %b, don't bind) 
    124124    } else if( 
     
    132132      // &hash takes care of the copying. 
    133133      new_val = 
    134         _26main_3a_3ahash.GET()([PIL2JS.Context.SlurpyAny].concat(pairs)).GET(); 
     134        _26main_3a_3ahash.FETCH()([PIL2JS.Context.SlurpyAny].concat(pairs)).FETCH(); 
    135135    // my %a = (a => 1) or my %a = 10 
    136136    } else if( 
     
    138138      new_ctype == PIL2JS.ContainerType.Scalar 
    139139    ) { 
    140       new_val = _26main_3a_3ahash.GET()([PIL2JS.Context.SlurpyAny, n]).GET(); 
     140      new_val = _26main_3a_3ahash.FETCH()([PIL2JS.Context.SlurpyAny, n]).FETCH(); 
    141141 
    142142    // my $scalar = @array or my $scalar = %hash (should auto-ref) 
     
    146146    ) { 
    147147      new_val = 
    148         _26main_3a_3aprefix_3a_5c.GET()([PIL2JS.Context.ItemAny, n]).GET(); 
     148        _26main_3a_3aprefix_3a_5c.FETCH()([PIL2JS.Context.ItemAny, n]).FETCH(); 
    149149    } 
    150150 
     
    160160    if( 
    161161      (this.uid != undefined && other.uid != undefined && this.uid == other.uid) || 
    162       (this.uid == undefined && other.uid == undefined && this.GET() == other.GET()) 
     162      (this.uid == undefined && other.uid == undefined && this.FETCH() == other.FETCH()) 
    163163    ) { 
    164164      PIL2JS.die("Binding would create a bind cycle!"); 
    165165    } 
    166166 
    167     var get   = other.GET,  my_ctype    = this.container_type, 
     167    var fetch = other.FETCH, my_ctype    = this.container_type, 
    168168        store = other.STORE, other_ctype = other.container_type; 
    169169 
    170170    // No problem: $foo := $bar, @foo := @bar, %foo := %bar 
    171171    if(my_ctype == other_ctype) { 
    172       this.GET   = get; 
    173       this.STORE = function (n) { store(n); return this }; 
    174       this.uid   = other.uid; 
     172      this.FETCH      = fetch; 
     173      this.STORE      = function (n) { store(n); return this }; 
     174      this.uid        = other.uid; 
     175      this.isConstant = other.isConstant; 
    175176    // Problematic: $foo := @array, $foo := %hash 
    176177    // See http://www.nntp.perl.org/group/perl.perl6.language/22541: 
     
    183184    // Hey, who said anything about consistency?  :-) 
    184185    } else if(my_ctype == PIL2JS.ContainerType.Scalar) { 
    185       var val    = get(); 
    186       this.GET   = function ()  { return new PIL2JS.Ref(new PIL2JS.Box.Constant(val)) }; 
    187       this.STORE = function (n) { val = n.GET(); return this }; 
    188       this.uid   = other.uid; 
     186      var val         = fetch(); 
     187      this.FETCH      = function ()  { return new PIL2JS.Ref(new PIL2JS.Box.Constant(val)) }; 
     188      this.STORE      = function (n) { val = n.FETCH(); return this }; 
     189      this.uid        = other.uid; 
     190      this.isConstant = other.isConstant; 
    189191    } else if(my_ctype == PIL2JS.ContainerType.Array && other_ctype == PIL2JS.ContainerType.Scalar) { 
    190       var other_val = get(); 
    191       if(other_val instanceof PIL2JS.Ref && other_val.referencee.GET() instanceof Array) { 
     192      var other_val = fetch(); 
     193      if(other_val instanceof PIL2JS.Ref && other_val.referencee.FETCH() instanceof Array) { 
    192194        // Ok. 
    193         var other_box = other_val.referencee; 
    194         this.GET   = other_box.GET; 
    195         this.STORE = other_box.STORE; 
    196         this.uid   = other.uid; 
     195        var other_box   = other_val.referencee; 
     196        this.FETCH      = other_box.FETCH; 
     197        this.STORE      = other_box.STORE; 
     198        this.uid        = other.uid; 
     199        this.isConstant = other.isConstant; 
    197200      } else { 
    198         PIL2JS.die("Can't use object of type \"" + _26main_3a_3aref.GET()([PIL2JS.Context.ItemAny, other]).toNative() + "\" as an array or array reference!"); 
     201        PIL2JS.die("Can't use object of type \"" + _26main_3a_3aref.FETCH()([PIL2JS.Context.ItemAny, other]).toNative() + "\" as an array or array reference!"); 
    199202      } 
    200203    } else if(my_ctype == PIL2JS.ContainerType.Hash && other_ctype == PIL2JS.ContainerType.Scalar) { 
    201       var other_val = get(); 
    202       if(other_val instanceof PIL2JS.Ref && other_val.referencee.GET() instanceof PIL2JS.Hash) { 
     204      var other_val = fetch(); 
     205      if(other_val instanceof PIL2JS.Ref && other_val.referencee.FETCH() instanceof PIL2JS.Hash) { 
    203206        // Ok. 
    204         var other_box = other_val.referencee; 
    205         this.GET   = other_box.GET; 
    206         this.STORE = other_box.STORE; 
    207         this.uid   = other.uid; 
     207