|  | @@ -1,6 +1,6 @@
 | 
	
		
			
				|  |  |  #!/usr/bin/env node
 | 
	
		
			
				|  |  |  (function(define, require){
 | 
	
		
			
				|  |  | -define('__wrap__', function (requirejs) {
 | 
	
		
			
				|  |  | +define(function (requirejs) {
 | 
	
		
			
				|  |  |  var module = void 0; // Bad UMDs workaround
 | 
	
		
			
				|  |  |  requirejs.resolve = require.resolve;
 | 
	
		
			
				|  |  |  require = requirejs;
 | 
	
	
		
			
				|  | @@ -1863,6 +1863,7 @@ define('amber/kernel-language',[],function () {
 | 
	
		
			
				|  |  |          // Effective superclass of all classes created with `nil subclass: ...`.
 | 
	
		
			
				|  |  |          var nilAsClass = this.nilAsClass = {
 | 
	
		
			
				|  |  |              fn: SmalltalkRoot,
 | 
	
		
			
				|  |  | +            subclasses: [],
 | 
	
		
			
				|  |  |              a$cls: {fn: SmalltalkClass}
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1937,9 +1938,8 @@ define('amber/kernel-language',[],function () {
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          this.bootstrapHierarchy = function () {
 | 
	
		
			
				|  |  | -            var nilSubclasses = [globals.ProtoObject];
 | 
	
		
			
				|  |  |              nilAsClass.a$cls = globals.Class;
 | 
	
		
			
				|  |  | -            nilSubclasses.forEach(function (each) {
 | 
	
		
			
				|  |  | +            nilAsClass.subclasses.forEach(function (each) {
 | 
	
		
			
				|  |  |                  each.a$cls.superclass = globals.Class;
 | 
	
		
			
				|  |  |                  addSubclass(each.a$cls);
 | 
	
		
			
				|  |  |              });
 | 
	
	
		
			
				|  | @@ -2028,15 +2028,11 @@ define('amber/kernel-language',[],function () {
 | 
	
		
			
				|  |  |          st.removeClass = removeTraitOrClass;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          function addSubclass (klass) {
 | 
	
		
			
				|  |  | -            if (klass.superclass) {
 | 
	
		
			
				|  |  | -                addElement(klass.superclass.subclasses, klass);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            addElement((klass.superclass || nilAsClass).subclasses, klass);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          function removeSubclass (klass) {
 | 
	
		
			
				|  |  | -            if (klass.superclass) {
 | 
	
		
			
				|  |  | -                removeElement(klass.superclass.subclasses, klass);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            removeElement((klass.superclass || nilAsClass).subclasses, klass);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          function metaSubclasses (metaclass) {
 | 
	
	
		
			
				|  | @@ -2170,21 +2166,29 @@ define('amber/kernel-runtime',[],function () {
 | 
	
		
			
				|  |  |              if (!traitOrClass.trait) initClassAndMetaclass(traitOrClass);
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        emit.classAdded = function (klass) {
 | 
	
		
			
				|  |  | -            initClassAndMetaclass(klass);
 | 
	
		
			
				|  |  | -            klass._enterOrganization();
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | +        function installStHooks () {
 | 
	
		
			
				|  |  | +            emit.classAdded = function (klass) {
 | 
	
		
			
				|  |  | +                initClassAndMetaclass(klass);
 | 
	
		
			
				|  |  | +                klass._enterOrganization();
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        emit.traitAdded = function (trait) {
 | 
	
		
			
				|  |  | -            trait._enterOrganization();
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | +            emit.traitAdded = function (trait) {
 | 
	
		
			
				|  |  | +                trait._enterOrganization();
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        emit.classRemoved = function (klass) {
 | 
	
		
			
				|  |  | -            klass._leaveOrganization();
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | +            emit.classRemoved = function (klass) {
 | 
	
		
			
				|  |  | +                klass._leaveOrganization();
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        emit.traitRemoved = function (trait) {
 | 
	
		
			
				|  |  | -            trait._leaveOrganization();
 | 
	
		
			
				|  |  | +            emit.traitRemoved = function (trait) {
 | 
	
		
			
				|  |  | +                trait._leaveOrganization();
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        this.installStHooks = installStHooks;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        emit.classAdded = function (klass) {
 | 
	
		
			
				|  |  | +            initClassAndMetaclass(klass);
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          function initClass (klass) {
 | 
	
	
		
			
				|  | @@ -2272,9 +2276,13 @@ define('amber/kernel-runtime',[],function () {
 | 
	
		
			
				|  |  |              propagateMethodChange(klass, method, null);
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        emit.methodReplaced = function (newMethod, oldMethod, traitOrBehavior) {
 | 
	
		
			
				|  |  | -            traitOrBehavior._methodOrganizationEnter_andLeave_(newMethod, oldMethod);
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | +        function installStHooks () {
 | 
	
		
			
				|  |  | +            emit.methodReplaced = function (newMethod, oldMethod, traitOrBehavior) {
 | 
	
		
			
				|  |  | +                traitOrBehavior._methodOrganizationEnter_andLeave_(newMethod, oldMethod);
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        this.installStHooks = installStHooks;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          function propagateMethodChange (klass, method, exclude) {
 | 
	
		
			
				|  |  |              var selector = method.selector;
 | 
	
	
		
			
				|  | @@ -2529,11 +2537,13 @@ define('amber/kernel-runtime',[],function () {
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    StartImageBrik.deps = ["smalltalkGlobals"];
 | 
	
		
			
				|  |  | +    StartImageBrik.deps = ["smalltalkGlobals", "runtimeClasses", "runtimeMethods"];
 | 
	
		
			
				|  |  |      function StartImageBrik (brikz, st) {
 | 
	
		
			
				|  |  |          var globals = brikz.smalltalkGlobals.globals;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          this.run = function () {
 | 
	
		
			
				|  |  | +            brikz.runtimeClasses.installStHooks();
 | 
	
		
			
				|  |  | +            brikz.runtimeMethods.installStHooks();
 | 
	
		
			
				|  |  |              return globals.AmberBootstrapInitialization._run();
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -28751,7 +28761,7 @@ var self=this,$self=this;
 | 
	
		
			
				|  |  |  return $core.withContext(function($ctx1) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		var js = $self.jsObject;
 | 
	
		
			
				|  |  | -		return js.toString
 | 
	
		
			
				|  |  | +		return !js ? "<<malformed JS object proxy>>" : js.toString
 | 
	
		
			
				|  |  |  			? js.toString()
 | 
	
		
			
				|  |  |  			: Object.prototype.toString.call(js)
 | 
	
		
			
				|  |  |  	;
 | 
	
	
		
			
				|  | @@ -28759,9 +28769,9 @@ return self;
 | 
	
		
			
				|  |  |  }, function($ctx1) {$ctx1.fill(self,"printString",{})});
 | 
	
		
			
				|  |  |  },
 | 
	
		
			
				|  |  |  args: [],
 | 
	
		
			
				|  |  | -source: "printString\x0a\x09<inlineJS: '\x0a\x09\x09var js = $self.jsObject;\x0a\x09\x09return js.toString\x0a\x09\x09\x09? js.toString()\x0a\x09\x09\x09: Object.prototype.toString.call(js)\x0a\x09'>",
 | 
	
		
			
				|  |  | +source: "printString\x0a\x09<inlineJS: '\x0a\x09\x09var js = $self.jsObject;\x0a\x09\x09return !js ? \x22<<malformed JS object proxy>>\x22 : js.toString\x0a\x09\x09\x09? js.toString()\x0a\x09\x09\x09: Object.prototype.toString.call(js)\x0a\x09'>",
 | 
	
		
			
				|  |  |  referencedClasses: [],
 | 
	
		
			
				|  |  | -pragmas: [["inlineJS:", ["\x0a\x09\x09var js = $self.jsObject;\x0a\x09\x09return js.toString\x0a\x09\x09\x09? js.toString()\x0a\x09\x09\x09: Object.prototype.toString.call(js)\x0a\x09"]]],
 | 
	
		
			
				|  |  | +pragmas: [["inlineJS:", ["\x0a\x09\x09var js = $self.jsObject;\x0a\x09\x09return !js ? \x22<<malformed JS object proxy>>\x22 : js.toString\x0a\x09\x09\x09? js.toString()\x0a\x09\x09\x09: Object.prototype.toString.call(js)\x0a\x09"]]],
 | 
	
		
			
				|  |  |  messageSends: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  $globals.JSObjectProxy);
 | 
	
	
		
			
				|  | @@ -31449,11 +31459,11 @@ selector: "version",
 | 
	
		
			
				|  |  |  protocol: "accessing",
 | 
	
		
			
				|  |  |  fn: function (){
 | 
	
		
			
				|  |  |  var self=this,$self=this;
 | 
	
		
			
				|  |  | -return "0.23.1";
 | 
	
		
			
				|  |  | +return "0.23.2";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  },
 | 
	
		
			
				|  |  |  args: [],
 | 
	
		
			
				|  |  | -source: "version\x0a\x09\x22Answer the version string of Amber\x22\x0a\x09\x0a\x09^ '0.23.1'",
 | 
	
		
			
				|  |  | +source: "version\x0a\x09\x22Answer the version string of Amber\x22\x0a\x09\x0a\x09^ '0.23.2'",
 | 
	
		
			
				|  |  |  referencedClasses: [],
 | 
	
		
			
				|  |  |  pragmas: [],
 | 
	
		
			
				|  |  |  messageSends: []
 | 
	
	
		
			
				|  | @@ -33871,6 +33881,42 @@ $globals.Inspector.a$cls);
 | 
	
		
			
				|  |  |  $core.addClass("Platform", $globals.Service, [], "Platform-Services");
 | 
	
		
			
				|  |  |  $globals.Platform.comment="I am bridge to JS environment.\x0a\x0a## API\x0a\x0a    Platform globals. \x22JS global object\x22\x0a    Platform newXHR \x22new XMLHttpRequest() or its shim\x22";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +$core.addMethod(
 | 
	
		
			
				|  |  | +$core.method({
 | 
	
		
			
				|  |  | +selector: "fetch:",
 | 
	
		
			
				|  |  | +protocol: "accessing",
 | 
	
		
			
				|  |  | +fn: function (aStringOrObject){
 | 
	
		
			
				|  |  | +var self=this,$self=this;
 | 
	
		
			
				|  |  | +return $core.withContext(function($ctx1) {
 | 
	
		
			
				|  |  | +return $recv($self._current())._fetch_(aStringOrObject);
 | 
	
		
			
				|  |  | +}, function($ctx1) {$ctx1.fill(self,"fetch:",{aStringOrObject:aStringOrObject})});
 | 
	
		
			
				|  |  | +},
 | 
	
		
			
				|  |  | +args: ["aStringOrObject"],
 | 
	
		
			
				|  |  | +source: "fetch: aStringOrObject\x0a\x09^ self current fetch: aStringOrObject",
 | 
	
		
			
				|  |  | +referencedClasses: [],
 | 
	
		
			
				|  |  | +pragmas: [],
 | 
	
		
			
				|  |  | +messageSends: ["fetch:", "current"]
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +$globals.Platform.a$cls);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +$core.addMethod(
 | 
	
		
			
				|  |  | +$core.method({
 | 
	
		
			
				|  |  | +selector: "fetchUrl:options:",
 | 
	
		
			
				|  |  | +protocol: "accessing",
 | 
	
		
			
				|  |  | +fn: function (aString,anObject){
 | 
	
		
			
				|  |  | +var self=this,$self=this;
 | 
	
		
			
				|  |  | +return $core.withContext(function($ctx1) {
 | 
	
		
			
				|  |  | +return $recv($self._current())._fetchUrl_options_(aString,anObject);
 | 
	
		
			
				|  |  | +}, function($ctx1) {$ctx1.fill(self,"fetchUrl:options:",{aString:aString,anObject:anObject})});
 | 
	
		
			
				|  |  | +},
 | 
	
		
			
				|  |  | +args: ["aString", "anObject"],
 | 
	
		
			
				|  |  | +source: "fetchUrl: aString options: anObject\x0a\x09^ self current fetchUrl: aString options: anObject",
 | 
	
		
			
				|  |  | +referencedClasses: [],
 | 
	
		
			
				|  |  | +pragmas: [],
 | 
	
		
			
				|  |  | +messageSends: ["fetchUrl:options:", "current"]
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +$globals.Platform.a$cls);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  $core.addMethod(
 | 
	
		
			
				|  |  |  $core.method({
 | 
	
		
			
				|  |  |  selector: "globals",
 | 
	
	
		
			
				|  | @@ -39171,7 +39217,7 @@ $globals.ASTNode);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  $core.addMethod(
 | 
	
		
			
				|  |  |  $core.method({
 | 
	
		
			
				|  |  | -selector: "isSuperKeyword",
 | 
	
		
			
				|  |  | +selector: "isSuper",
 | 
	
		
			
				|  |  |  protocol: "testing",
 | 
	
		
			
				|  |  |  fn: function (){
 | 
	
		
			
				|  |  |  var self=this,$self=this;
 | 
	
	
		
			
				|  | @@ -39179,7 +39225,7 @@ return false;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  },
 | 
	
		
			
				|  |  |  args: [],
 | 
	
		
			
				|  |  | -source: "isSuperKeyword\x0a\x09^ false",
 | 
	
		
			
				|  |  | +source: "isSuper\x0a\x09^ false",
 | 
	
		
			
				|  |  |  referencedClasses: [],
 | 
	
		
			
				|  |  |  pragmas: [],
 | 
	
		
			
				|  |  |  messageSends: []
 | 
	
	
		
			
				|  | @@ -40784,16 +40830,16 @@ $ctx1.sendIdx["receiver"]=1;
 | 
	
		
			
				|  |  |  $1=$recv($2)._notNil();
 | 
	
		
			
				|  |  |  return $recv($1)._and_((function(){
 | 
	
		
			
				|  |  |  return $core.withContext(function($ctx2) {
 | 
	
		
			
				|  |  | -return $recv($self._receiver())._isSuperKeyword();
 | 
	
		
			
				|  |  | +return $recv($self._receiver())._isSuper();
 | 
	
		
			
				|  |  |  }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
 | 
	
		
			
				|  |  |  }));
 | 
	
		
			
				|  |  |  }, function($ctx1) {$ctx1.fill(self,"superSend",{})});
 | 
	
		
			
				|  |  |  },
 | 
	
		
			
				|  |  |  args: [],
 | 
	
		
			
				|  |  | -source: "superSend\x0a\x09^ self receiver notNil and: [ self receiver isSuperKeyword ]",
 | 
	
		
			
				|  |  | +source: "superSend\x0a\x09^ self receiver notNil and: [ self receiver isSuper ]",
 | 
	
		
			
				|  |  |  referencedClasses: [],
 | 
	
		
			
				|  |  |  pragmas: [],
 | 
	
		
			
				|  |  | -messageSends: ["and:", "notNil", "receiver", "isSuperKeyword"]
 | 
	
		
			
				|  |  | +messageSends: ["and:", "notNil", "receiver", "isSuper"]
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  $globals.SendNode);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -41236,19 +41282,19 @@ $globals.VariableNode);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  $core.addMethod(
 | 
	
		
			
				|  |  |  $core.method({
 | 
	
		
			
				|  |  | -selector: "isSuperKeyword",
 | 
	
		
			
				|  |  | +selector: "isSuper",
 | 
	
		
			
				|  |  |  protocol: "testing",
 | 
	
		
			
				|  |  |  fn: function (){
 | 
	
		
			
				|  |  |  var self=this,$self=this;
 | 
	
		
			
				|  |  |  return $core.withContext(function($ctx1) {
 | 
	
		
			
				|  |  | -return $recv($self._value()).__eq("super");
 | 
	
		
			
				|  |  | -}, function($ctx1) {$ctx1.fill(self,"isSuperKeyword",{})});
 | 
	
		
			
				|  |  | +return $recv($self._binding())._isSuper();
 | 
	
		
			
				|  |  | +}, function($ctx1) {$ctx1.fill(self,"isSuper",{})});
 | 
	
		
			
				|  |  |  },
 | 
	
		
			
				|  |  |  args: [],
 | 
	
		
			
				|  |  | -source: "isSuperKeyword\x0a\x09^ self value = 'super'",
 | 
	
		
			
				|  |  | +source: "isSuper\x0a\x09^ self binding isSuper",
 | 
	
		
			
				|  |  |  referencedClasses: [],
 | 
	
		
			
				|  |  |  pragmas: [],
 | 
	
		
			
				|  |  | -messageSends: ["=", "value"]
 | 
	
		
			
				|  |  | +messageSends: ["isSuper", "binding"]
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  $globals.VariableNode);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -42519,7 +42565,7 @@ protocol: "accessing",
 | 
	
		
			
				|  |  |  fn: function (){
 | 
	
		
			
				|  |  |  var self=this,$self=this;
 | 
	
		
			
				|  |  |  return $core.withContext(function($ctx1) {
 | 
	
		
			
				|  |  | -var $1,$2,$4,$3,$receiver;
 | 
	
		
			
				|  |  | +var $1,$2,$4,$5,$6,$3,$7,$9,$8,$receiver;
 | 
	
		
			
				|  |  |  $1=$self.pseudoVars;
 | 
	
		
			
				|  |  |  if(($receiver = $1) == null || $receiver.a$nil){
 | 
	
		
			
				|  |  |  $self.pseudoVars=$recv($globals.Dictionary)._new();
 | 
	
	
		
			
				|  | @@ -42527,11 +42573,23 @@ $recv($recv($globals.Smalltalk)._pseudoVariableNames())._do_((function(each){
 | 
	
		
			
				|  |  |  return $core.withContext(function($ctx2) {
 | 
	
		
			
				|  |  |  $2=$self.pseudoVars;
 | 
	
		
			
				|  |  |  $4=$recv($globals.PseudoVar)._on_(each);
 | 
	
		
			
				|  |  | -$recv($4)._scope_($self._methodScope());
 | 
	
		
			
				|  |  | -$3=$recv($4)._yourself();
 | 
	
		
			
				|  |  | +$ctx2.sendIdx["on:"]=1;
 | 
	
		
			
				|  |  | +$5=$self._methodScope();
 | 
	
		
			
				|  |  | +$ctx2.sendIdx["methodScope"]=1;
 | 
	
		
			
				|  |  | +$recv($4)._scope_($5);
 | 
	
		
			
				|  |  | +$ctx2.sendIdx["scope:"]=1;
 | 
	
		
			
				|  |  | +$6=$recv($4)._yourself();
 | 
	
		
			
				|  |  | +$ctx2.sendIdx["yourself"]=1;
 | 
	
		
			
				|  |  | +$3=$6;
 | 
	
		
			
				|  |  |  return $recv($2)._at_put_(each,$3);
 | 
	
		
			
				|  |  | +$ctx2.sendIdx["at:put:"]=1;
 | 
	
		
			
				|  |  |  }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
 | 
	
		
			
				|  |  |  }));
 | 
	
		
			
				|  |  | +$7=$self.pseudoVars;
 | 
	
		
			
				|  |  | +$9=$recv($globals.SuperVar)._on_("super");
 | 
	
		
			
				|  |  | +$recv($9)._scope_($self._methodScope());
 | 
	
		
			
				|  |  | +$8=$recv($9)._yourself();
 | 
	
		
			
				|  |  | +$recv($7)._at_put_("super",$8);
 | 
	
		
			
				|  |  |  } else {
 | 
	
		
			
				|  |  |  $1;
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -42539,8 +42597,8 @@ return $self.pseudoVars;
 | 
	
		
			
				|  |  |  }, function($ctx1) {$ctx1.fill(self,"pseudoVars",{})});
 | 
	
		
			
				|  |  |  },
 | 
	
		
			
				|  |  |  args: [],
 | 
	
		
			
				|  |  | -source: "pseudoVars\x0a\x09pseudoVars ifNil: [\x0a\x09\x09pseudoVars := Dictionary new.\x0a\x09\x09Smalltalk pseudoVariableNames do: [ :each |\x0a\x09\x09\x09pseudoVars at: each put: ((PseudoVar on: each)\x0a\x09\x09\x09\x09scope: self methodScope;\x0a\x09\x09\x09\x09yourself) ]].\x0a\x09^ pseudoVars",
 | 
	
		
			
				|  |  | -referencedClasses: ["Dictionary", "Smalltalk", "PseudoVar"],
 | 
	
		
			
				|  |  | +source: "pseudoVars\x0a\x09pseudoVars ifNil: [\x0a\x09\x09pseudoVars := Dictionary new.\x0a\x09\x09Smalltalk pseudoVariableNames do: [ :each |\x0a\x09\x09\x09pseudoVars at: each put: ((PseudoVar on: each)\x0a\x09\x09\x09\x09scope: self methodScope;\x0a\x09\x09\x09\x09yourself) ].\x0a\x09\x09pseudoVars at: #super put: ((SuperVar on: #super) scope: self methodScope; yourself) ].\x0a\x09^ pseudoVars",
 | 
	
		
			
				|  |  | +referencedClasses: ["Dictionary", "Smalltalk", "PseudoVar", "SuperVar"],
 | 
	
		
			
				|  |  |  pragmas: [],
 | 
	
		
			
				|  |  |  messageSends: ["ifNil:", "new", "do:", "pseudoVariableNames", "at:put:", "scope:", "on:", "methodScope", "yourself"]
 | 
	
		
			
				|  |  |  }),
 | 
	
	
		
			
				|  | @@ -43150,23 +43208,43 @@ messageSends: ["="]
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  $globals.PseudoVar);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +$core.addClass("SuperVar", $globals.PseudoVar, [], "Compiler-Semantic");
 | 
	
		
			
				|  |  | +$globals.SuperVar.comment="I am a 'super' pseudo variable.";
 | 
	
		
			
				|  |  | +$core.addMethod(
 | 
	
		
			
				|  |  | +$core.method({
 | 
	
		
			
				|  |  | +selector: "alias",
 | 
	
		
			
				|  |  | +protocol: "accessing",
 | 
	
		
			
				|  |  | +fn: function (){
 | 
	
		
			
				|  |  | +var self=this,$self=this;
 | 
	
		
			
				|  |  | +return "self";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +},
 | 
	
		
			
				|  |  | +args: [],
 | 
	
		
			
				|  |  | +source: "alias\x0a\x09^ 'self'",
 | 
	
		
			
				|  |  | +referencedClasses: [],
 | 
	
		
			
				|  |  | +pragmas: [],
 | 
	
		
			
				|  |  | +messageSends: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +$globals.SuperVar);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  $core.addMethod(
 | 
	
		
			
				|  |  |  $core.method({
 | 
	
		
			
				|  |  |  selector: "isSuper",
 | 
	
		
			
				|  |  |  protocol: "testing",
 | 
	
		
			
				|  |  |  fn: function (){
 | 
	
		
			
				|  |  |  var self=this,$self=this;
 | 
	
		
			
				|  |  | -return $core.withContext(function($ctx1) {
 | 
	
		
			
				|  |  | -return $recv($self.name).__eq("super");
 | 
	
		
			
				|  |  | -}, function($ctx1) {$ctx1.fill(self,"isSuper",{})});
 | 
	
		
			
				|  |  | +return true;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  },
 | 
	
		
			
				|  |  |  args: [],
 | 
	
		
			
				|  |  | -source: "isSuper\x0a\x09^ name = 'super'",
 | 
	
		
			
				|  |  | +source: "isSuper\x0a\x09^ true",
 | 
	
		
			
				|  |  |  referencedClasses: [],
 | 
	
		
			
				|  |  |  pragmas: [],
 | 
	
		
			
				|  |  | -messageSends: ["="]
 | 
	
		
			
				|  |  | +messageSends: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  | -$globals.PseudoVar);
 | 
	
		
			
				|  |  | +$globals.SuperVar);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -47590,7 +47668,7 @@ protocol: "visiting",
 | 
	
		
			
				|  |  |  fn: function (anIRSend){
 | 
	
		
			
				|  |  |  var self=this,$self=this;
 | 
	
		
			
				|  |  |  return $core.withContext(function($ctx1) {
 | 
	
		
			
				|  |  | -var $1,$4,$3,$2,$5,$6,$7;
 | 
	
		
			
				|  |  | +var $1,$4,$3,$2,$5;
 | 
	
		
			
				|  |  |  $1=$self._stream();
 | 
	
		
			
				|  |  |  $ctx1.sendIdx["stream"]=1;
 | 
	
		
			
				|  |  |  $recv($1)._nextPutAll_("(");
 | 
	
	
		
			
				|  | @@ -47615,40 +47693,61 @@ $recv($1)._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
 | 
	
		
			
				|  |  |  $ctx1.sendIdx["nextPutAll:"]=4;
 | 
	
		
			
				|  |  |  $recv($1)._lf();
 | 
	
		
			
				|  |  |  $ctx1.sendIdx["lf"]=4;
 | 
	
		
			
				|  |  | -$5="(".__comma($recv($self._currentClass())._asJavaScriptSource());
 | 
	
		
			
				|  |  | -$ctx1.sendIdx[","]=2;
 | 
	
		
			
				|  |  | -$recv($1)._nextPutAll_($5);
 | 
	
		
			
				|  |  | +$self._writeActualSuperSend_(anIRSend);
 | 
	
		
			
				|  |  | +$5=$self._stream();
 | 
	
		
			
				|  |  | +$recv($5)._nextPutAll_(");");
 | 
	
		
			
				|  |  |  $ctx1.sendIdx["nextPutAll:"]=5;
 | 
	
		
			
				|  |  | -$recv($1)._nextPutAll_(".superclass||$boot.nilAsClass).fn.prototype.");
 | 
	
		
			
				|  |  | +$recv($5)._lf();
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["lf"]=5;
 | 
	
		
			
				|  |  | +$recv($5)._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
 | 
	
		
			
				|  |  |  $ctx1.sendIdx["nextPutAll:"]=6;
 | 
	
		
			
				|  |  | -$6=$recv($recv(anIRSend)._javaScriptSelector()).__comma(".apply(");
 | 
	
		
			
				|  |  | -$ctx1.sendIdx[","]=3;
 | 
	
		
			
				|  |  | -$recv($1)._nextPutAll_($6);
 | 
	
		
			
				|  |  | +$recv($5)._lf();
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["lf"]=6;
 | 
	
		
			
				|  |  | +$recv($5)._nextPutAll_($recv($recv($recv(anIRSend)._scope())._alias()).__comma(".supercall = false;"));
 | 
	
		
			
				|  |  |  $ctx1.sendIdx["nextPutAll:"]=7;
 | 
	
		
			
				|  |  | +$recv($5)._lf();
 | 
	
		
			
				|  |  | +$recv($5)._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
 | 
	
		
			
				|  |  | +return self;
 | 
	
		
			
				|  |  | +}, function($ctx1) {$ctx1.fill(self,"visitSuperSend:",{anIRSend:anIRSend})});
 | 
	
		
			
				|  |  | +},
 | 
	
		
			
				|  |  | +args: ["anIRSend"],
 | 
	
		
			
				|  |  | +source: "visitSuperSend: anIRSend\x0a\x09self stream\x0a\x09\x09nextPutAll: '('; lf;\x0a\x09\x09nextPutAll: '//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);'; lf;\x0a\x09\x09nextPutAll: anIRSend scope alias, '.supercall = true,'; lf;\x0a\x09\x09nextPutAll: '//>>excludeEnd(\x22ctx\x22);'; lf.\x0a\x09self writeActualSuperSend: anIRSend.\x0a\x09self stream \x0a\x09\x09nextPutAll: ');'; lf;\x0a\x09\x09nextPutAll: '//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);'; lf;\x0a\x09\x09nextPutAll: anIRSend scope alias, '.supercall = false;'; lf;\x0a\x09\x09nextPutAll: '//>>excludeEnd(\x22ctx\x22);'",
 | 
	
		
			
				|  |  | +referencedClasses: [],
 | 
	
		
			
				|  |  | +pragmas: [],
 | 
	
		
			
				|  |  | +messageSends: ["nextPutAll:", "stream", "lf", ",", "alias", "scope", "writeActualSuperSend:"]
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +$globals.IRJSTranslator);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +$core.addMethod(
 | 
	
		
			
				|  |  | +$core.method({
 | 
	
		
			
				|  |  | +selector: "writeActualSuperSend:",
 | 
	
		
			
				|  |  | +protocol: "visiting",
 | 
	
		
			
				|  |  | +fn: function (anIRSend){
 | 
	
		
			
				|  |  | +var self=this,$self=this;
 | 
	
		
			
				|  |  | +return $core.withContext(function($ctx1) {
 | 
	
		
			
				|  |  | +var $1,$2;
 | 
	
		
			
				|  |  | +$1=$self._stream();
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["stream"]=1;
 | 
	
		
			
				|  |  | +$2="(".__comma($recv($self._currentClass())._asJavaScriptSource());
 | 
	
		
			
				|  |  | +$ctx1.sendIdx[","]=1;
 | 
	
		
			
				|  |  | +$recv($1)._nextPutAll_($2);
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["nextPutAll:"]=1;
 | 
	
		
			
				|  |  | +$recv($1)._nextPutAll_(".superclass||$boot.nilAsClass).fn.prototype.");
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["nextPutAll:"]=2;
 | 
	
		
			
				|  |  | +$recv($1)._nextPutAll_($recv($recv(anIRSend)._javaScriptSelector()).__comma(".apply("));
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["nextPutAll:"]=3;
 | 
	
		
			
				|  |  |  $recv($1)._nextPutAll_("$self, ");
 | 
	
		
			
				|  |  | -$ctx1.sendIdx["nextPutAll:"]=8;
 | 
	
		
			
				|  |  | +$ctx1.sendIdx["nextPutAll:"]=4;
 | 
	
		
			
				|  |  |  $self._visitInstructionList_enclosedBetween_and_($recv(anIRSend)._arguments(),"[","]");
 | 
	
		
			
				|  |  | -$7=$self._stream();
 | 
	
		
			
				|  |  | -$recv($7)._nextPutAll_("));");
 | 
	
		
			
				|  |  | -$ctx1.sendIdx["nextPutAll:"]=9;
 | 
	
		
			
				|  |  | -$recv($7)._lf();
 | 
	
		
			
				|  |  | -$ctx1.sendIdx["lf"]=5;
 | 
	
		
			
				|  |  | -$recv($7)._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
 | 
	
		
			
				|  |  | -$ctx1.sendIdx["nextPutAll:"]=10;
 | 
	
		
			
				|  |  | -$recv($7)._lf();
 | 
	
		
			
				|  |  | -$ctx1.sendIdx["lf"]=6;
 | 
	
		
			
				|  |  | -$recv($7)._nextPutAll_($recv($recv($recv(anIRSend)._scope())._alias()).__comma(".supercall = false;"));
 | 
	
		
			
				|  |  | -$ctx1.sendIdx["nextPutAll:"]=11;
 | 
	
		
			
				|  |  | -$recv($7)._lf();
 | 
	
		
			
				|  |  | -$recv($7)._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
 | 
	
		
			
				|  |  | +$recv($self._stream())._nextPutAll_(")");
 | 
	
		
			
				|  |  |  return self;
 | 
	
		
			
				|  |  | -}, function($ctx1) {$ctx1.fill(self,"visitSuperSend:",{anIRSend:anIRSend})});
 | 
	
		
			
				|  |  | +}, function($ctx1) {$ctx1.fill(self,"writeActualSuperSend:",{anIRSend:anIRSend})});
 | 
	
		
			
				|  |  |  },
 | 
	
		
			
				|  |  |  args: ["anIRSend"],
 | 
	
		
			
				|  |  | -source: "visitSuperSend: anIRSend\x0a\x09self stream\x0a\x09\x09nextPutAll: '('; lf;\x0a\x09\x09nextPutAll: '//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);'; lf;\x0a\x09\x09nextPutAll: anIRSend scope alias, '.supercall = true,'; lf;\x0a\x09\x09nextPutAll: '//>>excludeEnd(\x22ctx\x22);'; lf;\x0a\x09\x09nextPutAll: '(', self currentClass asJavaScriptSource;\x0a\x09\x09nextPutAll: '.superclass||$boot.nilAsClass).fn.prototype.';\x0a\x09\x09nextPutAll: anIRSend javaScriptSelector, '.apply(';\x0a\x09\x09nextPutAll: '$self, '.\x0a\x09self\x0a\x09\x09visitInstructionList: anIRSend arguments\x0a\x09\x09enclosedBetween: '[' and: ']'.\x0a\x09self stream \x0a\x09\x09nextPutAll: '));'; lf;\x0a\x09\x09nextPutAll: '//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);'; lf;\x0a\x09\x09nextPutAll: anIRSend scope alias, '.supercall = false;'; lf;\x0a\x09\x09nextPutAll: '//>>excludeEnd(\x22ctx\x22);'",
 | 
	
		
			
				|  |  | +source: "writeActualSuperSend: anIRSend\x0a\x09self stream\x0a\x09\x09nextPutAll: '(', self currentClass asJavaScriptSource;\x0a\x09\x09nextPutAll: '.superclass||$boot.nilAsClass).fn.prototype.';\x0a\x09\x09nextPutAll: anIRSend javaScriptSelector, '.apply(';\x0a\x09\x09nextPutAll: '$self, '.\x0a\x09self\x0a\x09\x09visitInstructionList: anIRSend arguments\x0a\x09\x09enclosedBetween: '[' and: ']'.\x0a\x09self stream\x0a\x09\x09nextPutAll: ')'",
 | 
	
		
			
				|  |  |  referencedClasses: [],
 | 
	
		
			
				|  |  |  pragmas: [],
 | 
	
		
			
				|  |  | -messageSends: ["nextPutAll:", "stream", "lf", ",", "alias", "scope", "asJavaScriptSource", "currentClass", "javaScriptSelector", "visitInstructionList:enclosedBetween:and:", "arguments"]
 | 
	
		
			
				|  |  | +messageSends: ["nextPutAll:", "stream", ",", "asJavaScriptSource", "currentClass", "javaScriptSelector", "visitInstructionList:enclosedBetween:and:", "arguments"]
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  $globals.IRJSTranslator);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -69780,6 +69879,58 @@ $pkg.transport = {"type":"amd","amdNamespace":"amber/core"};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  $core.addClass("NodePlatform", $globals.Object, [], "Platform-Node");
 | 
	
		
			
				|  |  |  $globals.NodePlatform.comment="I am `Platform` service implementation for node-like environment.";
 | 
	
		
			
				|  |  | +$core.addMethod(
 | 
	
		
			
				|  |  | +$core.method({
 | 
	
		
			
				|  |  | +selector: "fetch:",
 | 
	
		
			
				|  |  | +protocol: "public API",
 | 
	
		
			
				|  |  | +fn: function (aStringOrObject){
 | 
	
		
			
				|  |  | +var self=this,$self=this;
 | 
	
		
			
				|  |  | +return $core.withContext(function($ctx1) {
 | 
	
		
			
				|  |  | +return $recv($self._globals())._at_ifPresent_ifAbsent_("fetch",(function(fetch){
 | 
	
		
			
				|  |  | +return $core.withContext(function($ctx2) {
 | 
	
		
			
				|  |  | +return $recv(fetch)._value_(aStringOrObject);
 | 
	
		
			
				|  |  | +}, function($ctx2) {$ctx2.fillBlock({fetch:fetch},$ctx1,1)});
 | 
	
		
			
				|  |  | +}),(function(){
 | 
	
		
			
				|  |  | +return $core.withContext(function($ctx2) {
 | 
	
		
			
				|  |  | +return $recv($globals.Promise)._signal_("fetch not available.");
 | 
	
		
			
				|  |  | +}, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
 | 
	
		
			
				|  |  | +}));
 | 
	
		
			
				|  |  | +}, function($ctx1) {$ctx1.fill(self,"fetch:",{aStringOrObject:aStringOrObject})});
 | 
	
		
			
				|  |  | +},
 | 
	
		
			
				|  |  | +args: ["aStringOrObject"],
 | 
	
		
			
				|  |  | +source: "fetch: aStringOrObject\x0a\x09^ self globals at: #fetch\x0a\x09\x09ifPresent: [ :fetch | fetch value: aStringOrObject ]\x0a\x09\x09ifAbsent: [ Promise signal: 'fetch not available.' ]",
 | 
	
		
			
				|  |  | +referencedClasses: ["Promise"],
 | 
	
		
			
				|  |  | +pragmas: [],
 | 
	
		
			
				|  |  | +messageSends: ["at:ifPresent:ifAbsent:", "globals", "value:", "signal:"]
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +$globals.NodePlatform);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +$core.addMethod(
 | 
	
		
			
				|  |  | +$core.method({
 | 
	
		
			
				|  |  | +selector: "fetchUrl:options:",
 | 
	
		
			
				|  |  | +protocol: "public API",
 | 
	
		
			
				|  |  | +fn: function (aString,anObject){
 | 
	
		
			
				|  |  | +var self=this,$self=this;
 | 
	
		
			
				|  |  | +return $core.withContext(function($ctx1) {
 | 
	
		
			
				|  |  | +return $recv($self._globals())._at_ifPresent_ifAbsent_("fetch",(function(fetch){
 | 
	
		
			
				|  |  | +return $core.withContext(function($ctx2) {
 | 
	
		
			
				|  |  | +return $recv(fetch)._value_value_(aString,anObject);
 | 
	
		
			
				|  |  | +}, function($ctx2) {$ctx2.fillBlock({fetch:fetch},$ctx1,1)});
 | 
	
		
			
				|  |  | +}),(function(){
 | 
	
		
			
				|  |  | +return $core.withContext(function($ctx2) {
 | 
	
		
			
				|  |  | +return $recv($globals.Promise)._signal_("fetch not available.");
 | 
	
		
			
				|  |  | +}, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
 | 
	
		
			
				|  |  | +}));
 | 
	
		
			
				|  |  | +}, function($ctx1) {$ctx1.fill(self,"fetchUrl:options:",{aString:aString,anObject:anObject})});
 | 
	
		
			
				|  |  | +},
 | 
	
		
			
				|  |  | +args: ["aString", "anObject"],
 | 
	
		
			
				|  |  | +source: "fetchUrl: aString options: anObject\x0a\x09^ self globals at: #fetch\x0a\x09\x09ifPresent: [ :fetch | fetch value: aString value: anObject ]\x0a\x09\x09ifAbsent: [ Promise signal: 'fetch not available.' ]",
 | 
	
		
			
				|  |  | +referencedClasses: ["Promise"],
 | 
	
		
			
				|  |  | +pragmas: [],
 | 
	
		
			
				|  |  | +messageSends: ["at:ifPresent:ifAbsent:", "globals", "value:value:", "signal:"]
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +$globals.NodePlatform);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  $core.addMethod(
 | 
	
		
			
				|  |  |  $core.method({
 | 
	
		
			
				|  |  |  selector: "globals",
 | 
	
	
		
			
				|  | @@ -69800,7 +69951,7 @@ $globals.NodePlatform);
 | 
	
		
			
				|  |  |  $core.addMethod(
 | 
	
		
			
				|  |  |  $core.method({
 | 
	
		
			
				|  |  |  selector: "newXhr",
 | 
	
		
			
				|  |  | -protocol: "accessing",
 | 
	
		
			
				|  |  | +protocol: "public API",
 | 
	
		
			
				|  |  |  fn: function (){
 | 
	
		
			
				|  |  |  var self=this,$self=this;
 | 
	
		
			
				|  |  |  return $core.withContext(function($ctx1) {
 | 
	
	
		
			
				|  | @@ -72465,7 +72616,6 @@ $globals.Repl.a$cls);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  require(["app"]);
 | 
	
		
			
				|  |  |  });
 | 
	
		
			
				|  |  | -define.require('__wrap__');
 | 
	
		
			
				|  |  |  }((function amdefine(module, requireFn) {
 | 
	
		
			
				|  |  |      'use strict';
 | 
	
		
			
				|  |  |      var defineCache = {},
 |