ProtoObject._new = function() {
  return this.basicNew().initialize();
};

_Object._new = ProtoObject._new;
OrderedCollection._new = _Object._new;
Point._new = _Object._new;
Rectangle._new = _Object._new;
S2JWorld._new = _Object._new; 
BlockClosure._new = _Object._new; 

Number.prototype._plus = function(anotherNumber){ return this + anotherNumber };
Number.prototype._minus = function(anotherNumber){ return this - anotherNumber };
Number.prototype._at = function(anotherNumber){ return Point.x_y_(this, anotherNumber); }

Array.new_ = function(arr){return new Array(arr)};

BlockClosure._objectPrototype.prototype.value = WithNonLocalReturn(function(){
  this.$func.apply(this, arguments);
});

BlockClosure._objectPrototype.prototype.whileTrue_ = function(anotherBlock){
  // TODO implement whileTrue for real
  while(this.value() == _true) {
    anotherBlock.value();
  }
};
@@ -623,27 +623,8 @@
 e = 
-WithNonLocalReturn(
 func
@@ -633,16 +633,23 @@
 on()%7B%0A  
+return 
 this.$fu
@@ -676,17 +676,16 @@
 ents);%0A%7D
-)
 ;%0A%0ABlock

make Blocks value() return a value...