Browse Source

Amber upfate

Nicolas Petton 12 years ago
parent
commit
b25d5d3769

+ 24 - 2
amber/CHANGELOG

@@ -1,9 +1,31 @@
+16th January 2012 - Release 0.9.1
+=================================
 
+Here's a summary of changes since the 0.9 release:
 
+- 80 new unit tests written
+- 52 issues fixed
+- All classes in Kernel-Objects, Kernel-Classes and Kernel-Methods has been documented
+- New documentation framework (see http://amber-lang.net/documentation.html)
+- Better class organisations, "Kernel" package split into several packages
+- First class packages have replaced class categories
+- Internet Explorer 7+ compatibility
+- New Announcement framework ported from Pharo
+- New console-based REPL written in Amber using node.js
+- Symbol class implemented together with object identity and #==
+- New OrderedCollection and Set implementation
+- Dictionary can now have any kind of object as keys. String-key dictionary has been renamed HashedCollection
+- New TwitterWall example
+- Improved HTML Canvas, now compatible with IE7
+- Improved JSObjectProxy for seemless JavaScript objects access from Amber
+- No more jQuery binding. Amber is fully capable of sending messages to JavaScript objects
+
+13th September 2011 - Release 0.9
+=================================
 Amber has been evolving furiously since the presentation at ESUG 2011 in Edinburgh less than 3 weeks ago.
 
 This is a summary:
- 
+
 Language, compiler and runtime
 
 - New 100x faster parser built using PEGjs instead of the old parser built using PetitParser.
@@ -23,7 +45,7 @@ Language, compiler and runtime
 Development environment
 
 - A working Debugger with integrated inspector, proceed etc.
-- A new structure with 
+- A new structure with
 - A working amberc command line compiler including a Makefile for recompiling the whole Amber.
 - Enabled TestRunner in the IDE for running unit tests based on SUnit.
 - Added "File in" button in Workspace to easily paste and filein source code in chunk format in the IDE.

+ 2 - 57
amber/README.md

@@ -1,7 +1,7 @@
 Amber
 =====
 
-By Nicolas Petton <petton.nicolas@gmail.com>
+By Nicolas Petton <petton.nicolas@gmail.com> and [Amber contributors](https://github.com/NicolasPetton/amber/contributors)
 
 Amber is an implementation of the Smalltalk language that runs on top of the JavaScript runtime. It is designed to make client-side development faster and easier.
 
@@ -18,61 +18,6 @@ Some highlights:
 -    Amber can use Javascript libraries and the current IDE is built on [jQuery](http://www.jquery.com)
 -    You can inline Javascript code and there are many ways to interact between Amber and Javascript
 
-How to commit changes from the web-based IDE
---------------------------------------------
-
-The Amber class browser is able to commit changes to disk.
-The "commit category" button will send a PUT request with the JS code of all classes in the selected class category in a file named js/CATEGORY.js and also send the corresponding .st files to the st directory.
-
-The easiest way to enable committing is probably to use the nodejs server or to setup a webdav with Apache.
-
-To start the local server:
-
-./bin/server
-
-then go to http://localhost:4000
-
-The following steps explain how to setup a webdav for Amber with Debian, but the setup on OSX and other Linux distros should be similar.
-
-### Install Apache and enable the dav module
-
-    apt-get install apache2
-    a2enmod dav
-    a2enmod dav_fs
-
-### Create a password for the webdav
-
-    htpasswd -c /etc/apache2/htpasswd-webdav USERNAME
-
-### Setup the webdav for Amber
-
-Add the following lines to the default vhost (in /etc/apache2/sites-available/default):
-
-    Alias /amber/ "/path/to/amber/"
-        <Directory "/path/to/amber/">
-            Options Indexes MultiViews FollowSymLinks
-	    DirectoryIndex index.html
-	    AllowOverride None
-    	    Order allow,deny
-	    allow from all
-
-	    Dav on
-
-	    AuthType Basic
-            AuthName "amber"
-            AuthUserFile /etc/apache2/htpasswd-webdav
-	    <LimitExcept GET OPTIONS>
-                Require valid-user
-	    </LimitExcept>
-
-        </Directory>
-
-
-Make sure the group www-data has required rights to modify files in the webdav directory.
-
-### Restart Apache
-    
-    /etc/init.d/apache2 restart
 
 License
 -------
@@ -82,4 +27,4 @@ Amber is released under the MIT license. All contributions made for inclusion ar
 More infos
 ----------
 
-More on the [project page](http://nicolaspetton.github.com/amber)
+More on the [project page](http://amber-lang.net)

+ 14 - 14
amber/js/Benchfib.deploy.js

@@ -2,9 +2,9 @@ smalltalk.addPackage('Benchfib', {});
 smalltalk.addClass('Benchfib', smalltalk.Object, [], 'Benchfib');
 
 smalltalk.addMethod(
-'_main',
+unescape('_main'),
 smalltalk.method({
-selector: 'main',
+selector: unescape('main'),
 fn: function (){
 var self=this;
 var result=nil;
@@ -16,9 +16,9 @@ smalltalk.Benchfib.klass);
 
 
 smalltalk.addMethod(
-'_benchFib',
+unescape('_benchFib'),
 smalltalk.method({
-selector: 'benchFib',
+selector: unescape('benchFib'),
 fn: function (){
 var self=this;
 return ((($receiver = self < (2)).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (1);})() : (function(){return ((($receiver = ((($receiver = smalltalk.send(self - (1), "_benchFib", [])).klass === smalltalk.Number) ? $receiver +smalltalk.send(self - (2), "_benchFib", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(self - (2), "_benchFib", [])]))).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (1);}), (function(){return ((($receiver = ((($receiver = smalltalk.send(self - (1), "_benchFib", [])).klass === smalltalk.Number) ? $receiver +smalltalk.send(self - (2), "_benchFib", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(self - (2), "_benchFib", [])]))).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]));})]));
@@ -27,9 +27,9 @@ return self;}
 smalltalk.Number);
 
 smalltalk.addMethod(
-'_benchmark',
+unescape('_benchmark'),
 smalltalk.method({
-selector: 'benchmark',
+selector: unescape('benchmark'),
 fn: function (){
 var self=this;
 var size=nil;
@@ -45,9 +45,9 @@ return self;}
 smalltalk.Number);
 
 smalltalk.addMethod(
-'_tinyBenchmarks',
+unescape('_tinyBenchmarks'),
 smalltalk.method({
-selector: 'tinyBenchmarks',
+selector: unescape('tinyBenchmarks'),
 fn: function (){
 var self=this;
 var t1=nil;
@@ -65,9 +65,9 @@ return self;}
 smalltalk.Number);
 
 smalltalk.addMethod(
-'_jsbenchFib',
+unescape('_jsbenchFib'),
 smalltalk.method({
-selector: 'jsbenchFib',
+selector: unescape('jsbenchFib'),
 fn: function (){
 var self=this;
 if (this < 2) {
@@ -79,9 +79,9 @@ return self;}
 smalltalk.Number);
 
 smalltalk.addMethod(
-'_jsbenchmark',
+unescape('_jsbenchmark'),
 smalltalk.method({
-selector: 'jsbenchmark',
+selector: unescape('jsbenchmark'),
 fn: function (){
 var self=this;
 
@@ -111,9 +111,9 @@ return self;}
 smalltalk.Number);
 
 smalltalk.addMethod(
-'_jstinyBenchmarks',
+unescape('_jstinyBenchmarks'),
 smalltalk.method({
-selector: 'jstinyBenchmarks',
+selector: unescape('jstinyBenchmarks'),
 fn: function (){
 var self=this;
 var t1=nil;

+ 39 - 1
amber/js/Canvas.deploy.js

@@ -414,7 +414,7 @@ smalltalk.method({
 selector: 'style',
 fn: function (){
 var self=this;
-return smalltalk.send(self, "_tag_", ["style"]);
+return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send((smalltalk.StyleTag || StyleTag), "_canvas_", [self])]);
 return self;}
 }),
 smalltalk.HTMLCanvas);
@@ -1187,6 +1187,44 @@ smalltalk.Widget);
 
 
 
+smalltalk.addClass('StyleTag', smalltalk.TagBrush, ['canvas', 'element'], 'Canvas');
+smalltalk.addMethod(
+'_with_',
+smalltalk.method({
+selector: 'with:',
+fn: function (aString){
+var self=this;
+((($receiver = smalltalk.send(self, "_isBrowserIE", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_element", []), "_styleSheet", []), "_cssText_", [aString]);})() : (function(){return smalltalk.send(self, "_with_", [aString], smalltalk.TagBrush);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_element", []), "_styleSheet", []), "_cssText_", [aString]);}), (function(){return smalltalk.send(self, "_with_", [aString], smalltalk.TagBrush);})]));
+return self;}
+}),
+smalltalk.StyleTag);
+
+smalltalk.addMethod(
+'_isBrowserIE',
+smalltalk.method({
+selector: 'isBrowserIE',
+fn: function (){
+var self=this;
+var ie=nil;
+(ie=jQuery.browser.msie);
+return smalltalk.send(ie, "_notNil", []);
+return self;}
+}),
+smalltalk.StyleTag);
+
+
+smalltalk.addMethod(
+'_canvas_',
+smalltalk.method({
+selector: 'canvas:',
+fn: function (aCanvas){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_initializeFromString_canvas_", ["style", aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;}
+}),
+smalltalk.StyleTag.klass);
+
+
 smalltalk.addMethod(
 '_appendToJQuery_',
 smalltalk.method({

+ 58 - 4
amber/js/Canvas.js

@@ -600,12 +600,12 @@ selector: unescape('style'),
 category: 'tags',
 fn: function (){
 var self=this;
-return smalltalk.send(self, "_tag_", ["style"]);
+return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send((smalltalk.StyleTag || StyleTag), "_canvas_", [self])]);
 return self;},
 args: [],
-source: unescape('style%0A%09%5Eself%20tag%3A%20%27style%27'),
-messageSends: ["tag:"],
-referencedClasses: []
+source: unescape('style%0A%09%5E%20root%20addBrush%3A%20%20%28StyleTag%20canvas%3A%20self%29'),
+messageSends: ["addBrush:", "canvas:"],
+referencedClasses: ["StyleTag"]
 }),
 smalltalk.HTMLCanvas);
 
@@ -1717,6 +1717,60 @@ smalltalk.Widget);
 
 
 
+smalltalk.addClass('StyleTag', smalltalk.TagBrush, ['canvas', 'element'], 'Canvas');
+smalltalk.StyleTag.comment=unescape('I%27m%20a%20%3Cstyle%3E%20tag%20use%20to%20inline%20CSS%20or%20load%20a%20stylesheet.%0A%0AFor%20inlining%20handle%20IE%20compatibility%20problems.')
+smalltalk.addMethod(
+unescape('_with_'),
+smalltalk.method({
+selector: unescape('with%3A'),
+category: 'adding',
+fn: function (aString){
+var self=this;
+((($receiver = smalltalk.send(self, "_isBrowserIE", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_element", []), "_styleSheet", []), "_cssText_", [aString]);})() : (function(){return smalltalk.send(self, "_with_", [aString], smalltalk.TagBrush);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_element", []), "_styleSheet", []), "_cssText_", [aString]);}), (function(){return smalltalk.send(self, "_with_", [aString], smalltalk.TagBrush);})]));
+return self;},
+args: ["aString"],
+source: unescape('with%3A%20aString%0A%09self%20isBrowserIE%0A%09%09ifTrue%3A%20%5Bself%20element%20styleSheet%20cssText%3A%20aString%20%5D%0A%09%09ifFalse%3A%20%5Bsuper%20with%3A%20aString%20%5D.'),
+messageSends: ["ifTrue:ifFalse:", "isBrowserIE", "cssText:", "styleSheet", "element", "with:"],
+referencedClasses: []
+}),
+smalltalk.StyleTag);
+
+smalltalk.addMethod(
+unescape('_isBrowserIE'),
+smalltalk.method({
+selector: unescape('isBrowserIE'),
+category: 'testing',
+fn: function (){
+var self=this;
+var ie=nil;
+(ie=jQuery.browser.msie);
+return smalltalk.send(ie, "_notNil", []);
+return self;},
+args: [],
+source: unescape('isBrowserIE%0A%09%7Cie%7C%0A%09ie%20%3A%3D%20%3CjQuery.browser.msie%3E.%0A%09%5E%20ie%20notNil.'),
+messageSends: ["notNil"],
+referencedClasses: []
+}),
+smalltalk.StyleTag);
+
+
+smalltalk.addMethod(
+unescape('_canvas_'),
+smalltalk.method({
+selector: unescape('canvas%3A'),
+category: 'instance creation',
+fn: function (aCanvas){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_initializeFromString_canvas_", ["style", aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;},
+args: ["aCanvas"],
+source: unescape('canvas%3A%20aCanvas%0A%20%20%20%20%5Eself%20new%0A%09initializeFromString%3A%20%27style%27%20canvas%3A%20aCanvas%3B%0A%09yourself'),
+messageSends: ["initializeFromString:canvas:", "yourself", "new"],
+referencedClasses: []
+}),
+smalltalk.StyleTag.klass);
+
+
 smalltalk.addMethod(
 unescape('_appendToJQuery_'),
 smalltalk.method({

File diff suppressed because it is too large
+ 18 - 18
amber/js/Compiler.deploy.js


+ 3 - 3
amber/js/Compiler.js

@@ -436,11 +436,11 @@ selector: unescape('exportMethod%3Aof%3Aon%3A'),
 category: 'private',
 fn: function (aMethod, aClass, aStream){
 var self=this;
-(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20%27"), "__comma", [smalltalk.send(aMethod, "_selector", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);
+(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);
 return self;},
 args: ["aMethod", "aClass", "aStream"],
-source: unescape('exportMethod%3A%20aMethod%20of%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%09nextPutAll%3A%20%27smalltalk.addMethod%28%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27%27%27%27%2C%20aMethod%20selector%20asSelector%2C%20%27%27%27%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.method%28%7B%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27selector%3A%20%27%27%27%2C%20aMethod%20selector%2C%20%27%27%27%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27fn%3A%20%27%2C%20aMethod%20fn%20compiledSource%3Blf%3B%0A%09%09nextPutAll%3A%20%27%7D%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%0A%09%09nextPutAll%3A%20%27%29%3B%27%3Blf%3Blf'),
-messageSends: ["nextPutAll:", "lf", unescape("%2C"), "asSelector", "selector", "compiledSource", "fn", "classNameFor:"],
+source: unescape('exportMethod%3A%20aMethod%20of%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%09nextPutAll%3A%20%27smalltalk.addMethod%28%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27unescape%28%27%27%27%2C%20aMethod%20selector%20asSelector%20escaped%2C%20%27%27%27%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.method%28%7B%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27selector%3A%20unescape%28%27%27%27%2C%20aMethod%20selector%20escaped%2C%20%27%27%27%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27fn%3A%20%27%2C%20aMethod%20fn%20compiledSource%3Blf%3B%0A%09%09nextPutAll%3A%20%27%7D%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%0A%09%09nextPutAll%3A%20%27%29%3B%27%3Blf%3Blf'),
+messageSends: ["nextPutAll:", "lf", unescape("%2C"), "escaped", "asSelector", "selector", "compiledSource", "fn", "classNameFor:"],
 referencedClasses: []
 }),
 smalltalk.StrippedExporter);

File diff suppressed because it is too large
+ 16 - 16
amber/js/Documentation.deploy.js


File diff suppressed because it is too large
+ 0 - 0
amber/js/Documentation.js


+ 8 - 8
amber/js/Examples.deploy.js

@@ -1,9 +1,9 @@
 smalltalk.addPackage('Examples', {});
 smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples');
 smalltalk.addMethod(
-'_increase',
+unescape('_increase'),
 smalltalk.method({
-selector: 'increase',
+selector: unescape('increase'),
 fn: function (){
 var self=this;
 (self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
@@ -13,9 +13,9 @@ return self;}
 smalltalk.Counter);
 
 smalltalk.addMethod(
-'_decrease',
+unescape('_decrease'),
 smalltalk.method({
-selector: 'decrease',
+selector: unescape('decrease'),
 fn: function (){
 var self=this;
 (self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])));
@@ -25,9 +25,9 @@ return self;}
 smalltalk.Counter);
 
 smalltalk.addMethod(
-'_initialize',
+unescape('_initialize'),
 smalltalk.method({
-selector: 'initialize',
+selector: unescape('initialize'),
 fn: function (){
 var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Widget);
@@ -37,9 +37,9 @@ return self;}
 smalltalk.Counter);
 
 smalltalk.addMethod(
-'_renderOn_',
+unescape('_renderOn_'),
 smalltalk.method({
-selector: 'renderOn:',
+selector: unescape('renderOn%3A'),
 fn: function (html){
 var self=this;
 (self['@header']=(function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_h1", [])));

File diff suppressed because it is too large
+ 32 - 32
amber/js/IDE.deploy.js


File diff suppressed because it is too large
+ 32 - 32
amber/js/IDE.js


+ 18 - 18
amber/js/Kernel-Announcements.deploy.js

@@ -1,9 +1,9 @@
 smalltalk.addPackage('Kernel-Announcements', {});
 smalltalk.addClass('Announcer', smalltalk.Object, ['registry', 'subscriptions'], 'Kernel-Announcements');
 smalltalk.addMethod(
-'_announce_',
+unescape('_announce_'),
 smalltalk.method({
-selector: 'announce:',
+selector: unescape('announce%3A'),
 fn: function (anAnnouncement){
 var self=this;
 smalltalk.send(self['@subscriptions'], "_do_", [(function(each){return smalltalk.send(each, "_deliver_", [anAnnouncement]);})]);
@@ -12,9 +12,9 @@ return self;}
 smalltalk.Announcer);
 
 smalltalk.addMethod(
-'_initialize',
+unescape('_initialize'),
 smalltalk.method({
-selector: 'initialize',
+selector: unescape('initialize'),
 fn: function (){
 var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Object);
@@ -24,9 +24,9 @@ return self;}
 smalltalk.Announcer);
 
 smalltalk.addMethod(
-'_on_do_',
+unescape('_on_do_'),
 smalltalk.method({
-selector: 'on:do:',
+selector: unescape('on%3Ado%3A'),
 fn: function (aClass, aBlock){
 var self=this;
 smalltalk.send(self['@subscriptions'], "_add_", [(function($rec){smalltalk.send($rec, "_block_", [aBlock]);smalltalk.send($rec, "_announcementClass_", [aClass]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.AnnouncementSubscription || AnnouncementSubscription), "_new", []))]);
@@ -38,9 +38,9 @@ smalltalk.Announcer);
 
 smalltalk.addClass('AnnouncementSubscription', smalltalk.Object, ['block', 'announcementClass'], 'Kernel-Announcements');
 smalltalk.addMethod(
-'_announcementClass',
+unescape('_announcementClass'),
 smalltalk.method({
-selector: 'announcementClass',
+selector: unescape('announcementClass'),
 fn: function (){
 var self=this;
 return self['@announcementClass'];
@@ -49,9 +49,9 @@ return self;}
 smalltalk.AnnouncementSubscription);
 
 smalltalk.addMethod(
-'_announcementClass_',
+unescape('_announcementClass_'),
 smalltalk.method({
-selector: 'announcementClass:',
+selector: unescape('announcementClass%3A'),
 fn: function (aClass){
 var self=this;
 (self['@announcementClass']=aClass);
@@ -60,9 +60,9 @@ return self;}
 smalltalk.AnnouncementSubscription);
 
 smalltalk.addMethod(
-'_block',
+unescape('_block'),
 smalltalk.method({
-selector: 'block',
+selector: unescape('block'),
 fn: function (){
 var self=this;
 return self['@block'];
@@ -71,9 +71,9 @@ return self;}
 smalltalk.AnnouncementSubscription);
 
 smalltalk.addMethod(
-'_block_',
+unescape('_block_'),
 smalltalk.method({
-selector: 'block:',
+selector: unescape('block%3A'),
 fn: function (aBlock){
 var self=this;
 (self['@block']=aBlock);
@@ -82,9 +82,9 @@ return self;}
 smalltalk.AnnouncementSubscription);
 
 smalltalk.addMethod(
-'_deliver_',
+unescape('_deliver_'),
 smalltalk.method({
-selector: 'deliver:',
+selector: unescape('deliver%3A'),
 fn: function (anAnnouncement){
 var self=this;
 ((($receiver = smalltalk.send(self, "_handlesAnnouncement_", [anAnnouncement])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_block", []), "_value_", [anAnnouncement]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(smalltalk.send(self, "_block", []), "_value_", [anAnnouncement]);})]));
@@ -93,9 +93,9 @@ return self;}
 smalltalk.AnnouncementSubscription);
 
 smalltalk.addMethod(
-'_handlesAnnouncement_',
+unescape('_handlesAnnouncement_'),
 smalltalk.method({
-selector: 'handlesAnnouncement:',
+selector: unescape('handlesAnnouncement%3A'),
 fn: function (anAnnouncement){
 var self=this;
 return smalltalk.send(anAnnouncement, "_isKindOf_", [smalltalk.send(self, "_announcementClass", [])]);

+ 124 - 124
amber/js/Kernel-Classes.deploy.js

@@ -1,9 +1,9 @@
 smalltalk.addPackage('Kernel-Classes', {});
 smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel-Classes');
 smalltalk.addMethod(
-'_new',
+unescape('_new'),
 smalltalk.method({
-selector: 'new',
+selector: unescape('new'),
 fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
@@ -12,9 +12,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_basicNew',
+unescape('_basicNew'),
 smalltalk.method({
-selector: 'basicNew',
+selector: unescape('basicNew'),
 fn: function (){
 var self=this;
 return new self.fn();
@@ -23,9 +23,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_name',
+unescape('_name'),
 smalltalk.method({
-selector: 'name',
+selector: unescape('name'),
 fn: function (){
 var self=this;
 return self.className || nil;
@@ -34,9 +34,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_superclass',
+unescape('_superclass'),
 smalltalk.method({
-selector: 'superclass',
+selector: unescape('superclass'),
 fn: function (){
 var self=this;
 return self.superclass || nil;
@@ -45,9 +45,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_subclasses',
+unescape('_subclasses'),
 smalltalk.method({
-selector: 'subclasses',
+selector: unescape('subclasses'),
 fn: function (){
 var self=this;
 return smalltalk.subclasses(self);
@@ -56,13 +56,13 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_allSubclasses',
+unescape('_allSubclasses'),
 smalltalk.method({
-selector: 'allSubclasses',
+selector: unescape('allSubclasses'),
 fn: function (){
 var self=this;
 var result=nil;
-result=smalltalk.send(self, "_subclasses", []);
+(result=smalltalk.send(self, "_subclasses", []));
 smalltalk.send(smalltalk.send(self, "_subclasses", []), "_do_", [(function(each){return smalltalk.send(result, "_addAll_", [smalltalk.send(each, "_allSubclasses", [])]);})]);
 return result;
 return self;}
@@ -70,9 +70,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_withAllSubclasses',
+unescape('_withAllSubclasses'),
 smalltalk.method({
-selector: 'withAllSubclasses',
+selector: unescape('withAllSubclasses'),
 fn: function (){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_allSubclasses", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Array || Array), "_with_", [self]));
@@ -81,9 +81,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_prototype',
+unescape('_prototype'),
 smalltalk.method({
-selector: 'prototype',
+selector: unescape('prototype'),
 fn: function (){
 var self=this;
 return self.fn.prototype;
@@ -92,9 +92,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_methodDictionary',
+unescape('_methodDictionary'),
 smalltalk.method({
-selector: 'methodDictionary',
+selector: unescape('methodDictionary'),
 fn: function (){
 var self=this;
 var dict = smalltalk.HashedCollection._new();
@@ -110,9 +110,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_methodsFor_',
+unescape('_methodsFor_'),
 smalltalk.method({
-selector: 'methodsFor:',
+selector: unescape('methodsFor%3A'),
 fn: function (aString){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_class_category_", [self, aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCategoryReader || ClassCategoryReader), "_new", []));
@@ -121,9 +121,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_addCompiledMethod_',
+unescape('_addCompiledMethod_'),
 smalltalk.method({
-selector: 'addCompiledMethod:',
+selector: unescape('addCompiledMethod%3A'),
 fn: function (aMethod){
 var self=this;
 smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
@@ -132,9 +132,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_instanceVariableNames',
+unescape('_instanceVariableNames'),
 smalltalk.method({
-selector: 'instanceVariableNames',
+selector: unescape('instanceVariableNames'),
 fn: function (){
 var self=this;
 return self.iVarNames;
@@ -143,9 +143,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_comment',
+unescape('_comment'),
 smalltalk.method({
-selector: 'comment',
+selector: unescape('comment'),
 fn: function (){
 var self=this;
 return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
@@ -154,9 +154,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_comment_',
+unescape('_comment_'),
 smalltalk.method({
-selector: 'comment:',
+selector: unescape('comment%3A'),
 fn: function (aString){
 var self=this;
 smalltalk.send(self, "_basicAt_put_", ["comment", aString]);
@@ -165,9 +165,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_commentStamp',
+unescape('_commentStamp'),
 smalltalk.method({
-selector: 'commentStamp',
+selector: unescape('commentStamp'),
 fn: function (){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", []));
@@ -176,9 +176,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_removeCompiledMethod_',
+unescape('_removeCompiledMethod_'),
 smalltalk.method({
-selector: 'removeCompiledMethod:',
+selector: unescape('removeCompiledMethod%3A'),
 fn: function (aMethod){
 var self=this;
 delete self.fn.prototype[aMethod.selector._asSelector()];
@@ -189,9 +189,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_inheritsFrom_',
+unescape('_inheritsFrom_'),
 smalltalk.method({
-selector: 'inheritsFrom:',
+selector: unescape('inheritsFrom%3A'),
 fn: function (aClass){
 var self=this;
 return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
@@ -200,13 +200,13 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_protocols',
+unescape('_protocols'),
 smalltalk.method({
-selector: 'protocols',
+selector: unescape('protocols'),
 fn: function (){
 var self=this;
 var protocols=nil;
-protocols=smalltalk.send((smalltalk.Array || Array), "_new", []);
+(protocols=smalltalk.send((smalltalk.Array || Array), "_new", []));
 smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(protocols, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]);
 return smalltalk.send(protocols, "_sort", []);
 return self;}
@@ -214,9 +214,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_protocolsDo_',
+unescape('_protocolsDo_'),
 smalltalk.method({
-selector: 'protocolsDo:',
+selector: unescape('protocolsDo%3A'),
 fn: function (aBlock){
 var self=this;
 var methodsByCategory=nil;
@@ -228,13 +228,13 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_allInstanceVariableNames',
+unescape('_allInstanceVariableNames'),
 smalltalk.method({
-selector: 'allInstanceVariableNames',
+selector: unescape('allInstanceVariableNames'),
 fn: function (){
 var self=this;
 var result=nil;
-result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", []);
+(result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", []));
 (($receiver = smalltalk.send(self, "_superclass", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(result, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allInstanceVariableNames", [])]);})() : nil;
 return result;
 return self;}
@@ -242,9 +242,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_methodAt_',
+unescape('_methodAt_'),
 smalltalk.method({
-selector: 'methodAt:',
+selector: unescape('methodAt%3A'),
 fn: function (aString){
 var self=this;
 return smalltalk.methods(self)[aString];
@@ -253,9 +253,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_methodsFor_stamp_',
+unescape('_methodsFor_stamp_'),
 smalltalk.method({
-selector: 'methodsFor:stamp:',
+selector: unescape('methodsFor%3Astamp%3A'),
 fn: function (aString, aStamp){
 var self=this;
 return smalltalk.send(self, "_methodsFor_", [aString]);
@@ -264,9 +264,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_commentStamp_prior_',
+unescape('_commentStamp_prior_'),
 smalltalk.method({
-selector: 'commentStamp:prior:',
+selector: unescape('commentStamp%3Aprior%3A'),
 fn: function (aStamp, prior){
 var self=this;
 return smalltalk.send(self, "_commentStamp", []);
@@ -275,9 +275,9 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_compile_',
+unescape('_compile_'),
 smalltalk.method({
-selector: 'compile:',
+selector: unescape('compile%3A'),
 fn: function (aString){
 var self=this;
 smalltalk.send(self, "_compile_category_", [aString, ""]);
@@ -286,13 +286,13 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-'_compile_category_',
+unescape('_compile_category_'),
 smalltalk.method({
-selector: 'compile:category:',
+selector: unescape('compile%3Acategory%3A'),
 fn: function (aString, anotherString){
 var self=this;
 var method=nil;
-method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self]);
+(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self]));
 smalltalk.send(method, "_category_", [anotherString]);
 smalltalk.send(self, "_addCompiledMethod_", [method]);
 return self;}
@@ -303,9 +303,9 @@ smalltalk.Behavior);
 
 smalltalk.addClass('Class', smalltalk.Behavior, [], 'Kernel-Classes');
 smalltalk.addMethod(
-'_category',
+unescape('_category'),
 smalltalk.method({
-selector: 'category',
+selector: unescape('category'),
 fn: function (){
 var self=this;
 return (($receiver = smalltalk.send(self, "_package", [])) == nil || $receiver == undefined) ? (function(){return "Unclassified";})() : (function(){return smalltalk.send(smalltalk.send(self, "_package", []), "_name", []);})();
@@ -314,9 +314,9 @@ return self;}
 smalltalk.Class);
 
 smalltalk.addMethod(
-'_subclass_instanceVariableNames_',
+unescape('_subclass_instanceVariableNames_'),
 smalltalk.method({
-selector: 'subclass:instanceVariableNames:',
+selector: unescape('subclass%3AinstanceVariableNames%3A'),
 fn: function (aString, anotherString){
 var self=this;
 return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]);
@@ -325,9 +325,9 @@ return self;}
 smalltalk.Class);
 
 smalltalk.addMethod(
-'_subclass_instanceVariableNames_category_',
+unescape('_subclass_instanceVariableNames_category_'),
 smalltalk.method({
-selector: 'subclass:instanceVariableNames:category:',
+selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'),
 fn: function (aString, aString2, aString3){
 var self=this;
 smalltalk.send(self, "_deprecatedAPI", []);
@@ -337,9 +337,9 @@ return self;}
 smalltalk.Class);
 
 smalltalk.addMethod(
-'_isClass',
+unescape('_isClass'),
 smalltalk.method({
-selector: 'isClass',
+selector: unescape('isClass'),
 fn: function (){
 var self=this;
 return true;
@@ -348,9 +348,9 @@ return self;}
 smalltalk.Class);
 
 smalltalk.addMethod(
-'_printString',
+unescape('_printString'),
 smalltalk.method({
-selector: 'printString',
+selector: unescape('printString'),
 fn: function (){
 var self=this;
 return smalltalk.send(self, "_name", []);
@@ -359,9 +359,9 @@ return self;}
 smalltalk.Class);
 
 smalltalk.addMethod(
-'_rename_',
+unescape('_rename_'),
 smalltalk.method({
-selector: 'rename:',
+selector: unescape('rename%3A'),
 fn: function (aString){
 var self=this;
 
@@ -374,9 +374,9 @@ return self;}
 smalltalk.Class);
 
 smalltalk.addMethod(
-'_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_',
+unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'),
 smalltalk.method({
-selector: 'subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:',
+selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'),
 fn: function (aString, aString2, classVars, pools, aString3){
 var self=this;
 return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
@@ -385,9 +385,9 @@ return self;}
 smalltalk.Class);
 
 smalltalk.addMethod(
-'_package',
+unescape('_package'),
 smalltalk.method({
-selector: 'package',
+selector: unescape('package'),
 fn: function (){
 var self=this;
 return self.pkg;
@@ -396,9 +396,9 @@ return self;}
 smalltalk.Class);
 
 smalltalk.addMethod(
-'_package_',
+unescape('_package_'),
 smalltalk.method({
-selector: 'package:',
+selector: unescape('package%3A'),
 fn: function (aPackage){
 var self=this;
 self.pkg = aPackage;
@@ -407,9 +407,9 @@ return self;}
 smalltalk.Class);
 
 smalltalk.addMethod(
-'_subclass_instanceVariableNames_package_',
+unescape('_subclass_instanceVariableNames_package_'),
 smalltalk.method({
-selector: 'subclass:instanceVariableNames:package:',
+selector: unescape('subclass%3AinstanceVariableNames%3Apackage%3A'),
 fn: function (aString, aString2, aString3){
 var self=this;
 return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_package_", [self, smalltalk.send(aString, "_asString", []), aString2, aString3]);
@@ -421,9 +421,9 @@ smalltalk.Class);
 
 smalltalk.addClass('Metaclass', smalltalk.Behavior, [], 'Kernel-Classes');
 smalltalk.addMethod(
-'_instanceClass',
+unescape('_instanceClass'),
 smalltalk.method({
-selector: 'instanceClass',
+selector: unescape('instanceClass'),
 fn: function (){
 var self=this;
 return self.instanceClass;
@@ -432,9 +432,9 @@ return self;}
 smalltalk.Metaclass);
 
 smalltalk.addMethod(
-'_instanceVariableNames_',
+unescape('_instanceVariableNames_'),
 smalltalk.method({
-selector: 'instanceVariableNames:',
+selector: unescape('instanceVariableNames%3A'),
 fn: function (aCollection){
 var self=this;
 smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_class_instanceVariableNames_", [self, aCollection]);
@@ -443,9 +443,9 @@ return self;}
 smalltalk.Metaclass);
 
 smalltalk.addMethod(
-'_isMetaclass',
+unescape('_isMetaclass'),
 smalltalk.method({
-selector: 'isMetaclass',
+selector: unescape('isMetaclass'),
 fn: function (){
 var self=this;
 return true;
@@ -454,9 +454,9 @@ return self;}
 smalltalk.Metaclass);
 
 smalltalk.addMethod(
-'_printString',
+unescape('_printString'),
 smalltalk.method({
-selector: 'printString',
+selector: unescape('printString'),
 fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(smalltalk.send(self, "_instanceClass", []), "_name", []), "__comma", [" class"]);
@@ -468,9 +468,9 @@ smalltalk.Metaclass);
 
 smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel-Classes');
 smalltalk.addMethod(
-'_superclass_subclass_',
+unescape('_superclass_subclass_'),
 smalltalk.method({
-selector: 'superclass:subclass:',
+selector: unescape('superclass%3Asubclass%3A'),
 fn: function (aClass, aString){
 var self=this;
 return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]);
@@ -479,9 +479,9 @@ return self;}
 smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-'_class_instanceVariableNames_',
+unescape('_class_instanceVariableNames_'),
 smalltalk.method({
-selector: 'class:instanceVariableNames:',
+selector: unescape('class%3AinstanceVariableNames%3A'),
 fn: function (aClass, aString){
 var self=this;
 ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_name", []), "__comma", [" is not a metaclass"])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_name", []), "__comma", [" is not a metaclass"])]);})]));
@@ -492,9 +492,9 @@ return self;}
 smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-'_instanceVariableNamesFor_',
+unescape('_instanceVariableNamesFor_'),
 smalltalk.method({
-selector: 'instanceVariableNamesFor:',
+selector: unescape('instanceVariableNamesFor%3A'),
 fn: function (aString){
 var self=this;
 return smalltalk.send(smalltalk.send(aString, "_tokenize_", [" "]), "_reject_", [(function(each){return smalltalk.send(each, "_isEmpty", []);})]);
@@ -503,9 +503,9 @@ return self;}
 smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-'_addSubclassOf_named_instanceVariableNames_',
+unescape('_addSubclassOf_named_instanceVariableNames_'),
 smalltalk.method({
-selector: 'addSubclassOf:named:instanceVariableNames:',
+selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'),
 fn: function (aClass, aString, aCollection){
 var self=this;
 smalltalk.addClass(aString, aClass, aCollection);
@@ -515,9 +515,9 @@ return self;}
 smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-'_setupClass_',
+unescape('_setupClass_'),
 smalltalk.method({
-selector: 'setupClass:',
+selector: unescape('setupClass%3A'),
 fn: function (aClass){
 var self=this;
 smalltalk.init(aClass);;
@@ -526,13 +526,13 @@ return self;}
 smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-'_superclass_subclass_instanceVariableNames_package_',
+unescape('_superclass_subclass_instanceVariableNames_package_'),
 smalltalk.method({
-selector: 'superclass:subclass:instanceVariableNames:package:',
+selector: unescape('superclass%3Asubclass%3AinstanceVariableNames%3Apackage%3A'),
 fn: function (aClass, aString, aString2, aString3){
 var self=this;
 var newClass=nil;
-newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [aClass, aString, smalltalk.send(self, "_instanceVariableNamesFor_", [aString2]), (($receiver = aString3) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : $receiver]);
+(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [aClass, aString, smalltalk.send(self, "_instanceVariableNamesFor_", [aString2]), (($receiver = aString3) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : $receiver]));
 smalltalk.send(self, "_setupClass_", [newClass]);
 return newClass;
 return self;}
@@ -540,9 +540,9 @@ return self;}
 smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-'_addSubclassOf_named_instanceVariableNames_package_',
+unescape('_addSubclassOf_named_instanceVariableNames_package_'),
 smalltalk.method({
-selector: 'addSubclassOf:named:instanceVariableNames:package:',
+selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'),
 fn: function (aClass, aString, aCollection, packageName){
 var self=this;
 smalltalk.addClass(aString, aClass, aCollection, packageName);
@@ -552,13 +552,13 @@ return self;}
 smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-'_copyClass_named_',
+unescape('_copyClass_named_'),
 smalltalk.method({
-selector: 'copyClass:named:',
+selector: unescape('copyClass%3Anamed%3A'),
 fn: function (aClass, aString){
 var self=this;
 var newClass=nil;
-newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), aString, smalltalk.send(aClass, "_instanceVariableNames", []), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])]);
+(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), aString, smalltalk.send(aClass, "_instanceVariableNames", []), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])]));
 smalltalk.send(self, "_setupClass_", [newClass]);
 smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(newClass, "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), newClass])]);return smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]);
 smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(smalltalk.send(newClass, "_class", []), "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), smalltalk.send(newClass, "_class", [])])]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]);
@@ -572,49 +572,49 @@ smalltalk.ClassBuilder);
 
 smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel-Classes');
 smalltalk.addMethod(
-'_initialize',
+unescape('_initialize'),
 smalltalk.method({
-selector: 'initialize',
+selector: unescape('initialize'),
 fn: function (){
 var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Object);
-self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []);
+(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
 return self;}
 }),
 smalltalk.ClassCategoryReader);
 
 smalltalk.addMethod(
-'_class_category_',
+unescape('_class_category_'),
 smalltalk.method({
-selector: 'class:category:',
+selector: unescape('class%3Acategory%3A'),
 fn: function (aClass, aString){
 var self=this;
-self['@class']=aClass;
-self['@category']=aString;
+(self['@class']=aClass);
+(self['@category']=aString);
 return self;}
 }),
 smalltalk.ClassCategoryReader);
 
 smalltalk.addMethod(
-'_scanFrom_',
+unescape('_scanFrom_'),
 smalltalk.method({
-selector: 'scanFrom:',
+selector: unescape('scanFrom%3A'),
 fn: function (aChunkParser){
 var self=this;
 var chunk=nil;
-(function(){while(!(function(){chunk=smalltalk.send(aChunkParser, "_nextChunk", []);return smalltalk.send(chunk, "_isEmpty", []);})()) {(function(){return smalltalk.send(self, "_compileMethod_", [chunk]);})()}})();
+(function(){while(!(function(){(chunk=smalltalk.send(aChunkParser, "_nextChunk", []));return smalltalk.send(chunk, "_isEmpty", []);})()) {(function(){return smalltalk.send(self, "_compileMethod_", [chunk]);})()}})();
 return self;}
 }),
 smalltalk.ClassCategoryReader);
 
 smalltalk.addMethod(
-'_compileMethod_',
+unescape('_compileMethod_'),
 smalltalk.method({
-selector: 'compileMethod:',
+selector: unescape('compileMethod%3A'),
 fn: function (aString){
 var self=this;
 var method=nil;
-method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self['@class']]);
+(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self['@class']]));
 smalltalk.send(method, "_category_", [self['@category']]);
 smalltalk.send(self['@class'], "_addCompiledMethod_", [method]);
 return self;}
@@ -625,45 +625,45 @@ smalltalk.ClassCategoryReader);
 
 smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel-Classes');
 smalltalk.addMethod(
-'_class_',
+unescape('_class_'),
 smalltalk.method({
-selector: 'class:',
+selector: unescape('class%3A'),
 fn: function (aClass){
 var self=this;
-self['@class']=aClass;
+(self['@class']=aClass);
 return self;}
 }),
 smalltalk.ClassCommentReader);
 
 smalltalk.addMethod(
-'_scanFrom_',
+unescape('_scanFrom_'),
 smalltalk.method({
-selector: 'scanFrom:',
+selector: unescape('scanFrom%3A'),
 fn: function (aChunkParser){
 var self=this;
 var chunk=nil;
-chunk=smalltalk.send(aChunkParser, "_nextChunk", []);
+(chunk=smalltalk.send(aChunkParser, "_nextChunk", []));
 ((($receiver = smalltalk.send(chunk, "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_setComment_", [chunk]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_setComment_", [chunk]);})]));
 return self;}
 }),
 smalltalk.ClassCommentReader);
 
 smalltalk.addMethod(
-'_initialize',
+unescape('_initialize'),
 smalltalk.method({
-selector: 'initialize',
+selector: unescape('initialize'),
 fn: function (){
 var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Object);
-self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []);
+(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
 return self;}
 }),
 smalltalk.ClassCommentReader);
 
 smalltalk.addMethod(
-'_setComment_',
+unescape('_setComment_'),
 smalltalk.method({
-selector: 'setComment:',
+selector: unescape('setComment%3A'),
 fn: function (aString){
 var self=this;
 smalltalk.send(self['@class'], "_comment_", [aString]);

+ 23 - 17
amber/js/Kernel-Classes.js

@@ -1,5 +1,6 @@
 smalltalk.addPackage('Kernel-Classes', {});
 smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel-Classes');
+smalltalk.Behavior.comment=unescape('Behavior%20is%20the%20superclass%20of%20all%20class%20objects.%20%0A%0AIt%20defines%20the%20protocol%20for%20creating%20instances%20of%20a%20class%20with%20%60%23basicNew%60%20and%20%60%23new%60%20%28see%20%60boot.js%60%20for%20class%20constructors%20details%29.%0AInstances%20know%20about%20the%20subclass/superclass%20relationships%20between%20classes%2C%20contain%20the%20description%20that%20instances%20are%20created%20from%2C%20%0Aand%20hold%20the%20method%20dictionary%20that%27s%20associated%20with%20each%20class.%0A%0ABehavior%20also%20%20provides%20methods%20for%20compiling%20methods%2C%20examining%20the%20method%20dictionary%2C%20and%20iterating%20over%20the%20class%20hierarchy.')
 smalltalk.addMethod(
 unescape('_new'),
 smalltalk.method({
@@ -88,7 +89,7 @@ category: 'accessing',
 fn: function (){
 var self=this;
 var result=nil;
-result=smalltalk.send(self, "_subclasses", []);
+(result=smalltalk.send(self, "_subclasses", []));
 smalltalk.send(smalltalk.send(self, "_subclasses", []), "_do_", [(function(each){return smalltalk.send(result, "_addAll_", [smalltalk.send(each, "_allSubclasses", [])]);})]);
 return result;
 return self;},
@@ -174,7 +175,7 @@ smalltalk.addMethod(
 unescape('_addCompiledMethod_'),
 smalltalk.method({
 selector: unescape('addCompiledMethod%3A'),
-category: 'accessing',
+category: 'compiling',
 fn: function (aMethod){
 var self=this;
 smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
@@ -254,7 +255,7 @@ smalltalk.addMethod(
 unescape('_removeCompiledMethod_'),
 smalltalk.method({
 selector: unescape('removeCompiledMethod%3A'),
-category: 'accessing',
+category: 'compiling',
 fn: function (aMethod){
 var self=this;
 delete self.fn.prototype[aMethod.selector._asSelector()];
@@ -272,7 +273,7 @@ smalltalk.addMethod(
 unescape('_inheritsFrom_'),
 smalltalk.method({
 selector: unescape('inheritsFrom%3A'),
-category: 'instance creation',
+category: 'testing',
 fn: function (aClass){
 var self=this;
 return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
@@ -292,7 +293,7 @@ category: 'accessing',
 fn: function (){
 var self=this;
 var protocols=nil;
-protocols=smalltalk.send((smalltalk.Array || Array), "_new", []);
+(protocols=smalltalk.send((smalltalk.Array || Array), "_new", []));
 smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(protocols, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]);
 return smalltalk.send(protocols, "_sort", []);
 return self;},
@@ -330,7 +331,7 @@ category: 'accessing',
 fn: function (){
 var self=this;
 var result=nil;
-result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", []);
+(result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", []));
 (($receiver = smalltalk.send(self, "_superclass", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(result, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allInstanceVariableNames", [])]);})() : nil;
 return result;
 return self;},
@@ -413,7 +414,7 @@ category: 'compiling',
 fn: function (aString, anotherString){
 var self=this;
 var method=nil;
-method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self]);
+(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self]));
 smalltalk.send(method, "_category_", [anotherString]);
 smalltalk.send(self, "_addCompiledMethod_", [method]);
 return self;},
@@ -427,6 +428,7 @@ smalltalk.Behavior);
 
 
 smalltalk.addClass('Class', smalltalk.Behavior, [], 'Kernel-Classes');
+smalltalk.Class.comment=unescape('Class%20is%20__the__%20class%20object.%20%0A%0AInstances%20are%20the%20classes%20of%20the%20system.%0AClass%20creation%20is%20done%20throught%20a%20%60ClassBuilder%60')
 smalltalk.addMethod(
 unescape('_category'),
 smalltalk.method({
@@ -595,6 +597,7 @@ smalltalk.Class);
 
 
 smalltalk.addClass('Metaclass', smalltalk.Behavior, [], 'Kernel-Classes');
+smalltalk.Metaclass.comment=unescape('Metaclass%20is%20the%20root%20of%20the%20class%20hierarchy.%0A%0AMetaclass%20instances%20are%20metaclasses%2C%20one%20for%20each%20real%20class.%20%0AMetaclass%20instances%20have%20a%20single%20instance%2C%20which%20they%20hold%20onto%2C%20which%20is%20the%20class%20that%20they%20are%20the%20metaclass%20of.')
 smalltalk.addMethod(
 unescape('_instanceClass'),
 smalltalk.method({
@@ -662,6 +665,7 @@ smalltalk.Metaclass);
 
 
 smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel-Classes');
+smalltalk.ClassBuilder.comment=unescape('ClassBuilder%20is%20responsible%20for%20compiling%20new%20classes%20or%20modifying%20existing%20classes%20in%20the%20system.%0A%0ARather%20than%20using%20ClassBuilder%20directly%20to%20compile%20a%20class%2C%20use%20%60Class%20%3E%3E%20subclass%3AinstanceVariableNames%3Apackage%3A%60.')
 smalltalk.addMethod(
 unescape('_superclass_subclass_'),
 smalltalk.method({
@@ -753,7 +757,7 @@ category: 'class creation',
 fn: function (aClass, aString, aString2, aString3){
 var self=this;
 var newClass=nil;
-newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [aClass, aString, smalltalk.send(self, "_instanceVariableNamesFor_", [aString2]), (($receiver = aString3) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : $receiver]);
+(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [aClass, aString, smalltalk.send(self, "_instanceVariableNamesFor_", [aString2]), (($receiver = aString3) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : $receiver]));
 smalltalk.send(self, "_setupClass_", [newClass]);
 return newClass;
 return self;},
@@ -789,7 +793,7 @@ category: 'private',
 fn: function (aClass, aString){
 var self=this;
 var newClass=nil;
-newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), aString, smalltalk.send(aClass, "_instanceVariableNames", []), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])]);
+(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), aString, smalltalk.send(aClass, "_instanceVariableNames", []), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])]));
 smalltalk.send(self, "_setupClass_", [newClass]);
 smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(newClass, "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), newClass])]);return smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]);
 smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(smalltalk.send(newClass, "_class", []), "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), smalltalk.send(newClass, "_class", [])])]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]);
@@ -806,6 +810,7 @@ smalltalk.ClassBuilder);
 
 
 smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel-Classes');
+smalltalk.ClassCategoryReader.comment=unescape('ClassCategoryReader%20represents%20a%20mechanism%20for%20retrieving%20class%20descriptions%20stored%20on%20a%20file.')
 smalltalk.addMethod(
 unescape('_initialize'),
 smalltalk.method({
@@ -814,7 +819,7 @@ category: 'initialization',
 fn: function (){
 var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Object);
-self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []);
+(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
 return self;},
 args: [],
 source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'),
@@ -830,8 +835,8 @@ selector: unescape('class%3Acategory%3A'),
 category: 'accessing',
 fn: function (aClass, aString){
 var self=this;
-self['@class']=aClass;
-self['@category']=aString;
+(self['@class']=aClass);
+(self['@category']=aString);
 return self;},
 args: ["aClass", "aString"],
 source: unescape('class%3A%20aClass%20category%3A%20aString%0A%09class%20%3A%3D%20aClass.%0A%09category%20%3A%3D%20aString'),
@@ -848,7 +853,7 @@ category: 'fileIn',
 fn: function (aChunkParser){
 var self=this;
 var chunk=nil;
-(function(){while(!(function(){chunk=smalltalk.send(aChunkParser, "_nextChunk", []);return smalltalk.send(chunk, "_isEmpty", []);})()) {(function(){return smalltalk.send(self, "_compileMethod_", [chunk]);})()}})();
+(function(){while(!(function(){(chunk=smalltalk.send(aChunkParser, "_nextChunk", []));return smalltalk.send(chunk, "_isEmpty", []);})()) {(function(){return smalltalk.send(self, "_compileMethod_", [chunk]);})()}})();
 return self;},
 args: ["aChunkParser"],
 source: unescape('scanFrom%3A%20aChunkParser%0A%09%7C%20chunk%20%7C%0A%09%5Bchunk%20%3A%3D%20aChunkParser%20nextChunk.%0A%09chunk%20isEmpty%5D%20whileFalse%3A%20%5B%0A%09%20%20%20%20self%20compileMethod%3A%20chunk%5D'),
@@ -865,7 +870,7 @@ category: 'private',
 fn: function (aString){
 var self=this;
 var method=nil;
-method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self['@class']]);
+(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self['@class']]));
 smalltalk.send(method, "_category_", [self['@category']]);
 smalltalk.send(self['@class'], "_addCompiledMethod_", [method]);
 return self;},
@@ -879,6 +884,7 @@ smalltalk.ClassCategoryReader);
 
 
 smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel-Classes');
+smalltalk.ClassCommentReader.comment=unescape('ClassCommentReader%20represents%20a%20mechanism%20for%20retrieving%20class%20descriptions%20stored%20on%20a%20file.%0ASee%20%60ClassCategoryReader%60%20too.')
 smalltalk.addMethod(
 unescape('_class_'),
 smalltalk.method({
@@ -886,7 +892,7 @@ selector: unescape('class%3A'),
 category: 'accessing',
 fn: function (aClass){
 var self=this;
-self['@class']=aClass;
+(self['@class']=aClass);
 return self;},
 args: ["aClass"],
 source: unescape('class%3A%20aClass%0A%09class%20%3A%3D%20aClass'),
@@ -903,7 +909,7 @@ category: 'fileIn',
 fn: function (aChunkParser){
 var self=this;
 var chunk=nil;
-chunk=smalltalk.send(aChunkParser, "_nextChunk", []);
+(chunk=smalltalk.send(aChunkParser, "_nextChunk", []));
 ((($receiver = smalltalk.send(chunk, "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_setComment_", [chunk]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_setComment_", [chunk]);})]));
 return self;},
 args: ["aChunkParser"],
@@ -921,7 +927,7 @@ category: 'initialization',
 fn: function (){
 var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Object);
-self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []);
+(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
 return self;},
 args: [],
 source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'),

+ 21 - 21
amber/js/Kernel-Exceptions.js

@@ -10,7 +10,7 @@ var self=this;
 return self['@messageText'];
 return self;},
 args: [],
-source: unescape('messageText%0D%0A%09%5EmessageText'),
+source: unescape('messageText%0A%09%5EmessageText'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -26,7 +26,7 @@ var self=this;
 (self['@messageText']=aString);
 return self;},
 args: ["aString"],
-source: unescape('messageText%3A%20aString%0D%0A%09messageText%20%3A%3D%20aString'),
+source: unescape('messageText%3A%20aString%0A%09messageText%20%3A%3D%20aString'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -42,7 +42,7 @@ var self=this;
 self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
 return self;},
 args: [],
-source: unescape('signal%0D%0A%09%3Cself.context%20%3D%20smalltalk.getThisContext%28%29%3B%20self.smalltalkError%20%3D%20true%3B%20throw%28self%29%3E'),
+source: unescape('signal%0A%09%3Cself.context%20%3D%20smalltalk.getThisContext%28%29%3B%20self.smalltalkError%20%3D%20true%3B%20throw%28self%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -58,7 +58,7 @@ var self=this;
 return self.context;
 return self;},
 args: [],
-source: unescape('context%0D%0A%09%3Creturn%20self.context%3E'),
+source: unescape('context%0A%09%3Creturn%20self.context%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -74,7 +74,7 @@ var self=this;
 return self.stack;
 return self;},
 args: [],
-source: unescape('jsStack%0D%0A%09%3Creturn%20self.stack%3E'),
+source: unescape('jsStack%0A%09%3Creturn%20self.stack%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -90,7 +90,7 @@ var self=this;
 return self.smalltalkError === true;
 return self;},
 args: [],
-source: unescape('isSmalltalkError%0D%0A%09%3Creturn%20self.smalltalkError%20%3D%3D%3D%20true%3E'),
+source: unescape('isSmalltalkError%0A%09%3Creturn%20self.smalltalkError%20%3D%3D%3D%20true%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -107,7 +107,7 @@ var self=this;
 return (function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send(self, "_new", []));
 return self;},
 args: ["aString"],
-source: unescape('signal%3A%20aString%0D%0A%09%20%20%20%20%5Eself%20new%0D%0A%09%09messageText%3A%20aString%3B%0D%0A%09%09signal'),
+source: unescape('signal%3A%20aString%0A%09%20%20%20%20%5Eself%20new%0A%09%09messageText%3A%20aString%3B%0A%09%09signal'),
 messageSends: ["messageText:", "signal", "new"],
 referencedClasses: []
 }),
@@ -125,7 +125,7 @@ var self=this;
 return self['@message'];
 return self;},
 args: [],
-source: unescape('message%0D%0A%09%5Emessage'),
+source: unescape('message%0A%09%5Emessage'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -141,7 +141,7 @@ var self=this;
 (self['@message']=aMessage);
 return self;},
 args: ["aMessage"],
-source: unescape('message%3A%20aMessage%0D%0A%09message%20%3A%3D%20aMessage'),
+source: unescape('message%3A%20aMessage%0A%09message%20%3A%3D%20aMessage'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -157,7 +157,7 @@ var self=this;
 return self['@receiver'];
 return self;},
 args: [],
-source: unescape('receiver%0D%0A%09%5Ereceiver'),
+source: unescape('receiver%0A%09%5Ereceiver'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -173,7 +173,7 @@ var self=this;
 (self['@receiver']=anObject);
 return self;},
 args: ["anObject"],
-source: unescape('receiver%3A%20anObject%0D%0A%09receiver%20%3A%3D%20anObject'),
+source: unescape('receiver%3A%20anObject%0A%09receiver%20%3A%3D%20anObject'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -189,7 +189,7 @@ var self=this;
 return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_asString", []), "__comma", [unescape("%20does%20not%20understand%20%23")]), "__comma", [smalltalk.send(smalltalk.send(self, "_message", []), "_selector", [])]);
 return self;},
 args: [],
-source: unescape('messageText%0D%0A%09%5Eself%20receiver%20asString%2C%20%27%20does%20not%20understand%20%23%27%2C%20self%20message%20selector'),
+source: unescape('messageText%0A%09%5Eself%20receiver%20asString%2C%20%27%20does%20not%20understand%20%23%27%2C%20self%20message%20selector'),
 messageSends: [unescape("%2C"), "asString", "receiver", "selector", "message"],
 referencedClasses: []
 }),
@@ -209,7 +209,7 @@ var self=this;
 smalltalk.send(self, "_logError_", [anError]);
 return self;},
 args: ["anError"],
-source: unescape('handleError%3A%20anError%0D%0A%09anError%20context%20ifNotNil%3A%20%5Bself%20logErrorContext%3A%20anError%20context%5D.%0D%0A%09self%20logError%3A%20anError'),
+source: unescape('handleError%3A%20anError%0A%09anError%20context%20ifNotNil%3A%20%5Bself%20logErrorContext%3A%20anError%20context%5D.%0A%09self%20logError%3A%20anError'),
 messageSends: ["ifNotNil:", "context", "logErrorContext:", "logError:"],
 referencedClasses: []
 }),
@@ -226,7 +226,7 @@ var self=this;
 smalltalk.send(self, "_log_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aContext, "_receiver", []), "_asString", []), "__comma", [unescape("%3E%3E")]), "__comma", [smalltalk.send(aContext, "_selector", [])])]);
 return self;},
 args: ["aContext"],
-source: unescape('logContext%3A%20aContext%0D%0A%09aContext%20home%20ifNotNil%3A%20%5B%0D%0A%09%09self%20logContext%3A%20aContext%20home%5D.%0D%0A%09self%20log%3A%20aContext%20receiver%20asString%2C%20%27%3E%3E%27%2C%20aContext%20selector'),
+source: unescape('logContext%3A%20aContext%0A%09aContext%20home%20ifNotNil%3A%20%5B%0A%09%09self%20logContext%3A%20aContext%20home%5D.%0A%09self%20log%3A%20aContext%20receiver%20asString%2C%20%27%3E%3E%27%2C%20aContext%20selector'),
 messageSends: ["ifNotNil:", "home", "logContext:", "log:", unescape("%2C"), "asString", "receiver", "selector"],
 referencedClasses: []
 }),
@@ -242,7 +242,7 @@ var self=this;
 (($receiver = aContext) != nil && $receiver != undefined) ? (function(){return (($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;})() : nil;
 return self;},
 args: ["aContext"],
-source: unescape('logErrorContext%3A%20aContext%0D%0A%09aContext%20ifNotNil%3A%20%5B%0D%0A%09%09aContext%20home%20ifNotNil%3A%20%5B%0D%0A%09%09%09self%20logContext%3A%20aContext%20home%5D%5D'),
+source: unescape('logErrorContext%3A%20aContext%0A%09aContext%20ifNotNil%3A%20%5B%0A%09%09aContext%20home%20ifNotNil%3A%20%5B%0A%09%09%09self%20logContext%3A%20aContext%20home%5D%5D'),
 messageSends: ["ifNotNil:", "home", "logContext:"],
 referencedClasses: []
 }),
@@ -258,7 +258,7 @@ var self=this;
 smalltalk.send(self, "_log_", [smalltalk.send(anError, "_messageText", [])]);
 return self;},
 args: ["anError"],
-source: unescape('logError%3A%20anError%0D%0A%09self%20log%3A%20anError%20messageText'),
+source: unescape('logError%3A%20anError%0A%09self%20log%3A%20anError%20messageText'),
 messageSends: ["log:", "messageText"],
 referencedClasses: []
 }),
@@ -274,7 +274,7 @@ var self=this;
 smalltalk.send((typeof console == 'undefined' ? nil : console), "_log_", [aString]);
 return self;},
 args: ["aString"],
-source: unescape('log%3A%20aString%0D%0A%09console%20log%3A%20aString'),
+source: unescape('log%3A%20aString%0A%09console%20log%3A%20aString'),
 messageSends: ["log:"],
 referencedClasses: []
 }),
@@ -292,7 +292,7 @@ var self=this;
 return (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return (self['@current']=smalltalk.send(self, "_new", []));})() : $receiver;
 return self;},
 args: [],
-source: unescape('current%0D%0A%09%5Ecurrent%20ifNil%3A%20%5Bcurrent%20%3A%3D%20self%20new%5D'),
+source: unescape('current%0A%09%5Ecurrent%20ifNil%3A%20%5Bcurrent%20%3A%3D%20self%20new%5D'),
 messageSends: ["ifNil:", "new"],
 referencedClasses: []
 }),
@@ -308,7 +308,7 @@ var self=this;
 smalltalk.send(self, "_register", []);
 return self;},
 args: [],
-source: unescape('initialize%0D%0A%09self%20register'),
+source: unescape('initialize%0A%09self%20register'),
 messageSends: ["register"],
 referencedClasses: []
 }),
@@ -324,7 +324,7 @@ var self=this;
 smalltalk.send((smalltalk.ErrorHandler || ErrorHandler), "_setCurrent_", [smalltalk.send(self, "_new", [])]);
 return self;},
 args: [],
-source: unescape('register%0D%0A%09ErrorHandler%20setCurrent%3A%20self%20new'),
+source: unescape('register%0A%09ErrorHandler%20setCurrent%3A%20self%20new'),
 messageSends: ["setCurrent:", "new"],
 referencedClasses: ["ErrorHandler"]
 }),
@@ -340,7 +340,7 @@ var self=this;
 (self['@current']=anHandler);
 return self;},
 args: ["anHandler"],
-source: unescape('setCurrent%3A%20anHandler%0D%0A%09current%20%3A%3D%20anHandler'),
+source: unescape('setCurrent%3A%20anHandler%0A%09current%20%3A%3D%20anHandler'),
 messageSends: [],
 referencedClasses: []
 }),

+ 90 - 90
amber/js/Kernel-Methods.deploy.js

@@ -1,9 +1,9 @@
 smalltalk.addPackage('Kernel-Methods', {});
 smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel-Methods');
 smalltalk.addMethod(
-'_source',
+unescape('_source'),
 smalltalk.method({
-selector: 'source',
+selector: unescape('source'),
 fn: function (){
 var self=this;
 return (($receiver = smalltalk.send(self, "_basicAt_", ["source"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
@@ -12,9 +12,9 @@ return self;}
 smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-'_source_',
+unescape('_source_'),
 smalltalk.method({
-selector: 'source:',
+selector: unescape('source%3A'),
 fn: function (aString){
 var self=this;
 smalltalk.send(self, "_basicAt_put_", ["source", aString]);
@@ -23,9 +23,9 @@ return self;}
 smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-'_category',
+unescape('_category'),
 smalltalk.method({
-selector: 'category',
+selector: unescape('category'),
 fn: function (){
 var self=this;
 return (($receiver = smalltalk.send(self, "_basicAt_", ["category"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
@@ -34,9 +34,9 @@ return self;}
 smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-'_category_',
+unescape('_category_'),
 smalltalk.method({
-selector: 'category:',
+selector: unescape('category%3A'),
 fn: function (aString){
 var self=this;
 smalltalk.send(self, "_basicAt_put_", ["category", aString]);
@@ -45,9 +45,9 @@ return self;}
 smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-'_selector',
+unescape('_selector'),
 smalltalk.method({
-selector: 'selector',
+selector: unescape('selector'),
 fn: function (){
 var self=this;
 return smalltalk.send(self, "_basicAt_", ["selector"]);
@@ -56,9 +56,9 @@ return self;}
 smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-'_selector_',
+unescape('_selector_'),
 smalltalk.method({
-selector: 'selector:',
+selector: unescape('selector%3A'),
 fn: function (aString){
 var self=this;
 smalltalk.send(self, "_basicAt_put_", ["selector", aString]);
@@ -67,9 +67,9 @@ return self;}
 smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-'_fn',
+unescape('_fn'),
 smalltalk.method({
-selector: 'fn',
+selector: unescape('fn'),
 fn: function (){
 var self=this;
 return smalltalk.send(self, "_basicAt_", ["fn"]);
@@ -78,9 +78,9 @@ return self;}
 smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-'_fn_',
+unescape('_fn_'),
 smalltalk.method({
-selector: 'fn:',
+selector: unescape('fn%3A'),
 fn: function (aBlock){
 var self=this;
 smalltalk.send(self, "_basicAt_put_", ["fn", aBlock]);
@@ -89,9 +89,9 @@ return self;}
 smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-'_messageSends',
+unescape('_messageSends'),
 smalltalk.method({
-selector: 'messageSends',
+selector: unescape('messageSends'),
 fn: function (){
 var self=this;
 return smalltalk.send(self, "_basicAt_", ["messageSends"]);
@@ -100,9 +100,9 @@ return self;}
 smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-'_methodClass',
+unescape('_methodClass'),
 smalltalk.method({
-selector: 'methodClass',
+selector: unescape('methodClass'),
 fn: function (){
 var self=this;
 return smalltalk.send(self, "_basicAt_", ["methodClass"]);
@@ -111,9 +111,9 @@ return self;}
 smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-'_referencedClasses',
+unescape('_referencedClasses'),
 smalltalk.method({
-selector: 'referencedClasses',
+selector: unescape('referencedClasses'),
 fn: function (){
 var self=this;
 return smalltalk.send(self, "_basicAt_", ["referencedClasses"]);
@@ -122,9 +122,9 @@ return self;}
 smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-'_arguments',
+unescape('_arguments'),
 smalltalk.method({
-selector: 'arguments',
+selector: unescape('arguments'),
 fn: function (){
 var self=this;
 return self.args || [];
@@ -136,9 +136,9 @@ smalltalk.CompiledMethod);
 
 smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel-Methods');
 smalltalk.addMethod(
-'_compiledSource',
+unescape('_compiledSource'),
 smalltalk.method({
-selector: 'compiledSource',
+selector: unescape('compiledSource'),
 fn: function (){
 var self=this;
 return self.toString();
@@ -147,9 +147,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_whileTrue_',
+unescape('_whileTrue_'),
 smalltalk.method({
-selector: 'whileTrue:',
+selector: unescape('whileTrue%3A'),
 fn: function (aBlock){
 var self=this;
 while(self()) {aBlock()};
@@ -158,9 +158,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_whileFalse_',
+unescape('_whileFalse_'),
 smalltalk.method({
-selector: 'whileFalse:',
+selector: unescape('whileFalse%3A'),
 fn: function (aBlock){
 var self=this;
 while(!self()) {aBlock()};
@@ -169,9 +169,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_value',
+unescape('_value'),
 smalltalk.method({
-selector: 'value',
+selector: unescape('value'),
 fn: function (){
 var self=this;
 return self();;
@@ -180,9 +180,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_value_',
+unescape('_value_'),
 smalltalk.method({
-selector: 'value:',
+selector: unescape('value%3A'),
 fn: function (anArg){
 var self=this;
 return self(anArg);;
@@ -191,9 +191,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_value_value_',
+unescape('_value_value_'),
 smalltalk.method({
-selector: 'value:value:',
+selector: unescape('value%3Avalue%3A'),
 fn: function (firstArg, secondArg){
 var self=this;
 return self(firstArg, secondArg);;
@@ -202,9 +202,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_value_value_value_',
+unescape('_value_value_value_'),
 smalltalk.method({
-selector: 'value:value:value:',
+selector: unescape('value%3Avalue%3Avalue%3A'),
 fn: function (firstArg, secondArg, thirdArg){
 var self=this;
 return self(firstArg, secondArg, thirdArg);;
@@ -213,9 +213,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_valueWithPossibleArguments_',
+unescape('_valueWithPossibleArguments_'),
 smalltalk.method({
-selector: 'valueWithPossibleArguments:',
+selector: unescape('valueWithPossibleArguments%3A'),
 fn: function (aCollection){
 var self=this;
 return self.apply(null, aCollection);;
@@ -224,9 +224,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_on_do_',
+unescape('_on_do_'),
 smalltalk.method({
-selector: 'on:do:',
+selector: unescape('on%3Ado%3A'),
 fn: function (anErrorClass, aBlock){
 var self=this;
 return smalltalk.send(self, "_try_catch_", [self, (function(error){return ((($receiver = smalltalk.send(error, "_isKindOf_", [anErrorClass])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(aBlock, "_value_", [error]);})() : (function(){return smalltalk.send(error, "_signal", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(aBlock, "_value_", [error]);}), (function(){return smalltalk.send(error, "_signal", []);})]));})]);
@@ -235,9 +235,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_valueWithTimeout_',
+unescape('_valueWithTimeout_'),
 smalltalk.method({
-selector: 'valueWithTimeout:',
+selector: unescape('valueWithTimeout%3A'),
 fn: function (aNumber){
 var self=this;
 return setTimeout(self, aNumber);
@@ -246,9 +246,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_valueWithInterval_',
+unescape('_valueWithInterval_'),
 smalltalk.method({
-selector: 'valueWithInterval:',
+selector: unescape('valueWithInterval%3A'),
 fn: function (aNumber){
 var self=this;
 return setInterval(self, aNumber);
@@ -257,9 +257,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_whileFalse',
+unescape('_whileFalse'),
 smalltalk.method({
-selector: 'whileFalse',
+selector: unescape('whileFalse'),
 fn: function (){
 var self=this;
 smalltalk.send(self, "_whileFalse_", [(function(){return nil;})]);
@@ -268,9 +268,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_whileTrue',
+unescape('_whileTrue'),
 smalltalk.method({
-selector: 'whileTrue',
+selector: unescape('whileTrue'),
 fn: function (){
 var self=this;
 smalltalk.send(self, "_whileTrue_", [(function(){return nil;})]);
@@ -279,9 +279,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_new',
+unescape('_new'),
 smalltalk.method({
-selector: 'new',
+selector: unescape('new'),
 fn: function (){
 var self=this;
 return new self();
@@ -290,9 +290,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_applyTo_arguments_',
+unescape('_applyTo_arguments_'),
 smalltalk.method({
-selector: 'applyTo:arguments:',
+selector: unescape('applyTo%3Aarguments%3A'),
 fn: function (anObject, aCollection){
 var self=this;
 return self.apply(anObject, aCollection);
@@ -301,9 +301,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_timeToRun',
+unescape('_timeToRun'),
 smalltalk.method({
-selector: 'timeToRun',
+selector: unescape('timeToRun'),
 fn: function (){
 var self=this;
 return smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [self]);
@@ -312,9 +312,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_numArgs',
+unescape('_numArgs'),
 smalltalk.method({
-selector: 'numArgs',
+selector: unescape('numArgs'),
 fn: function (){
 var self=this;
 return self.length;
@@ -323,9 +323,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_ensure_',
+unescape('_ensure_'),
 smalltalk.method({
-selector: 'ensure:',
+selector: unescape('ensure%3A'),
 fn: function (aBlock){
 var self=this;
 var success=nil;
@@ -336,9 +336,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_newValue_',
+unescape('_newValue_'),
 smalltalk.method({
-selector: 'newValue:',
+selector: unescape('newValue%3A'),
 fn: function (anObject){
 var self=this;
 return new self(anObject);
@@ -347,9 +347,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_newValue_value_',
+unescape('_newValue_value_'),
 smalltalk.method({
-selector: 'newValue:value:',
+selector: unescape('newValue%3Avalue%3A'),
 fn: function (anObject, anObject2){
 var self=this;
 return new self(anObject, anObject2);
@@ -358,9 +358,9 @@ return self;}
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-'_newValue_value_value_',
+unescape('_newValue_value_value_'),
 smalltalk.method({
-selector: 'newValue:value:value:',
+selector: unescape('newValue%3Avalue%3Avalue%3A'),
 fn: function (anObject, anObject2, anObject3){
 var self=this;
 return new self(anObject, anObject2);
@@ -372,9 +372,9 @@ smalltalk.BlockClosure);
 
 smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel-Methods');
 smalltalk.addMethod(
-'_receiver',
+unescape('_receiver'),
 smalltalk.method({
-selector: 'receiver',
+selector: unescape('receiver'),
 fn: function (){
 var self=this;
 return self.receiver;
@@ -383,9 +383,9 @@ return self;}
 smalltalk.MethodContext);
 
 smalltalk.addMethod(
-'_selector',
+unescape('_selector'),
 smalltalk.method({
-selector: 'selector',
+selector: unescape('selector'),
 fn: function (){
 var self=this;
 return smalltalk.convertSelector(self.selector);
@@ -394,9 +394,9 @@ return self;}
 smalltalk.MethodContext);
 
 smalltalk.addMethod(
-'_home',
+unescape('_home'),
 smalltalk.method({
-selector: 'home',
+selector: unescape('home'),
 fn: function (){
 var self=this;
 return self.homeContext;
@@ -405,9 +405,9 @@ return self;}
 smalltalk.MethodContext);
 
 smalltalk.addMethod(
-'_temps',
+unescape('_temps'),
 smalltalk.method({
-selector: 'temps',
+selector: unescape('temps'),
 fn: function (){
 var self=this;
 return self.temps;
@@ -416,9 +416,9 @@ return self;}
 smalltalk.MethodContext);
 
 smalltalk.addMethod(
-'_printString',
+unescape('_printString'),
 smalltalk.method({
-selector: 'printString',
+selector: unescape('printString'),
 fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.Object), "__comma", [unescape("%28")]), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%29")]);
@@ -427,9 +427,9 @@ return self;}
 smalltalk.MethodContext);
 
 smalltalk.addMethod(
-'_asString',
+unescape('_asString'),
 smalltalk.method({
-selector: 'asString',
+selector: unescape('asString'),
 fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_printString", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(self, "_selector", [])]);
@@ -441,9 +441,9 @@ smalltalk.MethodContext);
 
 smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel-Methods');
 smalltalk.addMethod(
-'_selector',
+unescape('_selector'),
 smalltalk.method({
-selector: 'selector',
+selector: unescape('selector'),
 fn: function (){
 var self=this;
 return self['@selector'];
@@ -452,9 +452,9 @@ return self;}
 smalltalk.Message);
 
 smalltalk.addMethod(
-'_selector_',
+unescape('_selector_'),
 smalltalk.method({
-selector: 'selector:',
+selector: unescape('selector%3A'),
 fn: function (aString){
 var self=this;
 (self['@selector']=aString);
@@ -463,9 +463,9 @@ return self;}
 smalltalk.Message);
 
 smalltalk.addMethod(
-'_arguments_',
+unescape('_arguments_'),
 smalltalk.method({
-selector: 'arguments:',
+selector: unescape('arguments%3A'),
 fn: function (anArray){
 var self=this;
 (self['@arguments']=anArray);
@@ -474,9 +474,9 @@ return self;}
 smalltalk.Message);
 
 smalltalk.addMethod(
-'_arguments',
+unescape('_arguments'),
 smalltalk.method({
-selector: 'arguments',
+selector: unescape('arguments'),
 fn: function (){
 var self=this;
 return self['@arguments'];
@@ -485,9 +485,9 @@ return self;}
 smalltalk.Message);
 
 smalltalk.addMethod(
-'_printString',
+unescape('_printString'),
 smalltalk.method({
-selector: 'printString',
+selector: unescape('printString'),
 fn: function (){
 var self=this;
 return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(aStream){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Object)]);smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);smalltalk.send($rec, "_nextPutAll_", [self['@selector']]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29")]);})(aStream);})]);
@@ -497,9 +497,9 @@ smalltalk.Message);
 
 
 smalltalk.addMethod(
-'_selector_arguments_',
+unescape('_selector_arguments_'),
 smalltalk.method({
-selector: 'selector:arguments:',
+selector: unescape('selector%3Aarguments%3A'),
 fn: function (aString, anArray){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_selector_", [aString]);smalltalk.send($rec, "_arguments_", [anArray]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));

+ 4 - 1
amber/js/Kernel-Methods.js

@@ -1,5 +1,6 @@
 smalltalk.addPackage('Kernel-Methods', {});
 smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel-Methods');
+smalltalk.CompiledMethod.comment=unescape('CompiledMethod%20hold%20the%20source%20and%20compiled%20code%20of%20a%20class%20method.%0A%0AYou%20can%20get%20a%20CompiledMethod%20using%20%60Behavior%3E%3EmethodAt%3A%60%0A%0A%09String%20methodAt%3A%20%27lines%27%0A%0Aand%20read%20the%20source%20code%0A%0A%09%28String%20methodAt%3A%20%27lines%27%29%20source%0A%0ASee%20referenced%20classes%3A%0A%0A%09%28String%20methodAt%3A%20%27lines%27%29%20referencedClasses%0A%0Aor%20messages%20sent%20from%20this%20method%3A%0A%09%0A%09%28String%20methodAt%3A%20%27lines%27%29%20%20messageSends')
 smalltalk.addMethod(
 unescape('_source'),
 smalltalk.method({
@@ -195,7 +196,7 @@ smalltalk.CompiledMethod);
 
 
 smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel-Methods');
-smalltalk.BlockClosure.comment=unescape('A%20BlockClosure%20is%20a%20lexical%20closure.%0AThe%20JavaScript%20representation%20is%20a%20function.%0A%0AA%20BlockClosure%20is%20evaluated%20with%20the%20%23value*%20methods%20in%20the%20%27evaluating%27%20protocol.')
+smalltalk.BlockClosure.comment=unescape('A%20BlockClosure%20is%20a%20lexical%20closure.%0AThe%20JavaScript%20representation%20is%20a%20function.%0A%0AA%20BlockClosure%20is%20evaluated%20with%20the%20%60%23value*%60%20methods%20in%20the%20%27evaluating%27%20protocol.')
 smalltalk.addMethod(
 unescape('_compiledSource'),
 smalltalk.method({
@@ -537,6 +538,7 @@ smalltalk.BlockClosure);
 
 
 smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel-Methods');
+smalltalk.MethodContext.comment=unescape('MethodContext%20holds%20all%20the%20dynamic%20state%20associated%20with%20the%20execution%20of%20either%20a%20method%20activation%20resulting%20from%20a%20message%20send.%20That%20is%20used%20to%20build%20the%20call%20stack%20while%20debugging.%0A%20%20%0AMethodContext%20instances%20are%20JavaScript%20%60SmalltalkMethodContext%60%20objects%20defined%20in%20boot.js%20%0A%0ACurrent%20limitation%3A%20MethodContext%20instances%20are%20not%20created%20on%20Block%20evaluation.%20That%20means%20it%27s%20actually%20impossible%20to%20debug%20inside%20a%20Block.')
 smalltalk.addMethod(
 unescape('_receiver'),
 smalltalk.method({
@@ -636,6 +638,7 @@ smalltalk.MethodContext);
 
 
 smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel-Methods');
+smalltalk.Message.comment=unescape('Generally%2C%20the%20system%20does%20not%20use%20instances%20of%20Message%20for%20efficiency%20reasons.%0AHowever%2C%20when%20a%20message%20is%20not%20understood%20by%20its%20receiver%2C%20the%20interpreter%20will%20make%20up%20an%20instance%20of%20it%20in%20order%20to%20capture%20the%20information%20involved%20in%20an%20actual%20message%20transmission.%20%0AThis%20instance%20is%20sent%20it%20as%20an%20argument%20with%20the%20message%20%60doesNotUnderstand%3A%60%20to%20the%20receiver.%0A%0ASee%20boot.js%2C%20%60messageNotUnderstood%60%20%20and%20its%20counterpart%20%60Object%3E%3EdoesNotUnderstand%3A%60')
 smalltalk.addMethod(
 unescape('_selector'),
 smalltalk.method({

File diff suppressed because it is too large
+ 168 - 168
amber/js/Kernel-Objects.deploy.js


+ 1 - 0
amber/js/Kernel-Objects.js

@@ -1675,6 +1675,7 @@ smalltalk.Package.klass);
 
 
 smalltalk.addClass('Number', smalltalk.Object, [], 'Kernel-Objects');
+smalltalk.Number.comment=unescape('Number%20holds%20the%20most%20general%20methods%20for%20dealing%20with%20numbers.%20%20%0ANumber%20is%20directly%20mapped%20to%20JavaScript%20Number.%0A%0AMost%20arithmetic%20methods%20like%20%60%23+%60%20%60%23/%60%20%60%23-%60%20%60%23max%3A%60%20are%20directly%20inlined%20into%20javascript.%20%0A%0A%23%23Enumerating%0AA%20Number%20can%20be%20used%20to%20evaluate%20a%20Block%20a%20fixed%20number%20of%20times%3A%0A%0A%095%20timesRepeat%3A%20%5BTranscript%20show%3A%20%27This%20will%20be%20printed%205%20times%27%3B%20cr%5D.%0A%09%0A%091%20to%3A%205%20do%3A%20%5B%3AaNumber%7C%20Transcript%20show%3A%20aNumber%20asString%3B%20cr%5D.%0A%09%0A%091%20to%3A%2010%20by%3A%202%20do%3A%20%5B%3AaNumber%7C%20Transcript%20show%3A%20aNumber%20asString%3B%20cr%5D.')
 smalltalk.addMethod(
 unescape('__eq'),
 smalltalk.method({

File diff suppressed because it is too large
+ 168 - 168
amber/js/Kernel-Tests.deploy.js


+ 11 - 11
amber/js/Kernel-Transcript.js

@@ -12,7 +12,7 @@ var self=this;
 smalltalk.send(smalltalk.send(self, "_current", []), "_open", []);
 return self;},
 args: [],
-source: unescape('open%0D%0A%20%20%20%20self%20current%20open'),
+source: unescape('open%0A%20%20%20%20self%20current%20open'),
 messageSends: ["open", "current"],
 referencedClasses: []
 }),
@@ -28,7 +28,7 @@ var self=this;
 smalltalk.send(self, "_shouldNotImplement", []);
 return self;},
 args: [],
-source: unescape('new%0D%0A%20%20%20%20self%20shouldNotImplement'),
+source: unescape('new%0A%20%20%20%20self%20shouldNotImplement'),
 messageSends: ["shouldNotImplement"],
 referencedClasses: []
 }),
@@ -44,7 +44,7 @@ var self=this;
 return self['@current'];
 return self;},
 args: [],
-source: unescape('current%0D%0A%20%20%20%20%5Ecurrent'),
+source: unescape('current%0A%20%20%20%20%5Ecurrent'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -60,7 +60,7 @@ var self=this;
 smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [anObject]);
 return self;},
 args: ["anObject"],
-source: unescape('show%3A%20anObject%0D%0A%20%20%20%20self%20current%20show%3A%20anObject'),
+source: unescape('show%3A%20anObject%0A%20%20%20%20self%20current%20show%3A%20anObject'),
 messageSends: ["show:", "current"],
 referencedClasses: []
 }),
@@ -76,7 +76,7 @@ var self=this;
 smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [smalltalk.send((smalltalk.String || String), "_cr", [])]);
 return self;},
 args: [],
-source: unescape('cr%0D%0A%20%20%20%20self%20current%20show%3A%20String%20cr'),
+source: unescape('cr%0A%20%20%20%20self%20current%20show%3A%20String%20cr'),
 messageSends: ["show:", "current", "cr"],
 referencedClasses: ["String"]
 }),
@@ -92,7 +92,7 @@ var self=this;
 smalltalk.send(smalltalk.send(self, "_current", []), "_clear", []);
 return self;},
 args: [],
-source: unescape('clear%0D%0A%20%20%20%20self%20current%20clear'),
+source: unescape('clear%0A%20%20%20%20self%20current%20clear'),
 messageSends: ["clear", "current"],
 referencedClasses: []
 }),
@@ -108,7 +108,7 @@ var self=this;
 (self['@current']=aTranscript);
 return self;},
 args: ["aTranscript"],
-source: unescape('register%3A%20aTranscript%0D%0A%09current%20%3A%3D%20aTranscript'),
+source: unescape('register%3A%20aTranscript%0A%09current%20%3A%3D%20aTranscript'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -126,7 +126,7 @@ var self=this;
 
 return self;},
 args: [],
-source: unescape('clear%0D%0A%09%22no%20op%22'),
+source: unescape('clear%0A%09%22no%20op%22'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -142,7 +142,7 @@ var self=this;
 
 return self;},
 args: [],
-source: unescape('cr%0D%0A%09%22no%20op%22'),
+source: unescape('cr%0A%09%22no%20op%22'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -160,7 +160,7 @@ var string=nil;
 console.log(String(string));
 return self;},
 args: ["anObject"],
-source: unescape('show%3A%20anObject%0D%0A%09%7C%20string%20%7C%0D%0A%09string%20%3A%3D%20anObject%20asString.%0D%0A%09%3Cconsole.log%28String%28string%29%29%3E'),
+source: unescape('show%3A%20anObject%0A%09%7C%20string%20%7C%0A%09string%20%3A%3D%20anObject%20asString.%0A%09%3Cconsole.log%28String%28string%29%29%3E'),
 messageSends: ["asString"],
 referencedClasses: []
 }),
@@ -193,7 +193,7 @@ var self=this;
 smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_new", [])]);
 return self;},
 args: [],
-source: unescape('initialize%0D%0A%09Transcript%20register%3A%20self%20new'),
+source: unescape('initialize%0A%09Transcript%20register%3A%20self%20new'),
 messageSends: ["register:", "new"],
 referencedClasses: ["Transcript"]
 }),

+ 60 - 60
amber/js/SUnit.deploy.js

@@ -1,9 +1,9 @@
 smalltalk.addPackage('SUnit', {});
 smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit');
 smalltalk.addMethod(
-'_setTestSelector_',
+unescape('_setTestSelector_'),
 smalltalk.method({
-selector: 'setTestSelector:',
+selector: unescape('setTestSelector%3A'),
 fn: function (aSelector){
 var self=this;
 (self['@testSelector']=aSelector);
@@ -12,9 +12,9 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_selector',
+unescape('_selector'),
 smalltalk.method({
-selector: 'selector',
+selector: unescape('selector'),
 fn: function (){
 var self=this;
 return self['@testSelector'];
@@ -23,9 +23,9 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_signalFailure_',
+unescape('_signalFailure_'),
 smalltalk.method({
-selector: 'signalFailure:',
+selector: unescape('signalFailure%3A'),
 fn: function (aString){
 var self=this;
 (function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send((smalltalk.TestFailure || TestFailure), "_new", []));
@@ -34,9 +34,9 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_setUp',
+unescape('_setUp'),
 smalltalk.method({
-selector: 'setUp',
+selector: unescape('setUp'),
 fn: function (){
 var self=this;
 
@@ -45,9 +45,9 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_tearDown',
+unescape('_tearDown'),
 smalltalk.method({
-selector: 'tearDown',
+selector: unescape('tearDown'),
 fn: function (){
 var self=this;
 
@@ -56,9 +56,9 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_runCaseFor_',
+unescape('_runCaseFor_'),
 smalltalk.method({
-selector: 'runCaseFor:',
+selector: unescape('runCaseFor%3A'),
 fn: function (aTestResult){
 var self=this;
 smalltalk.send(self, "_setUp", []);
@@ -70,9 +70,9 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_performTestFor_',
+unescape('_performTestFor_'),
 smalltalk.method({
-selector: 'performTestFor:',
+selector: unescape('performTestFor%3A'),
 fn: function (aResult){
 var self=this;
 smalltalk.send((function(){return smalltalk.send((function(){return smalltalk.send(self, "_perform_", [smalltalk.send(self, "_selector", [])]);}), "_on_do_", [(smalltalk.TestFailure || TestFailure), (function(ex){return smalltalk.send(aResult, "_addFailure_", [self]);})]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return smalltalk.send(aResult, "_addError_", [self]);})]);
@@ -81,9 +81,9 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_assert_',
+unescape('_assert_'),
 smalltalk.method({
-selector: 'assert:',
+selector: unescape('assert%3A'),
 fn: function (aBoolean){
 var self=this;
 smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]);
@@ -92,9 +92,9 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_deny_',
+unescape('_deny_'),
 smalltalk.method({
-selector: 'deny:',
+selector: unescape('deny%3A'),
 fn: function (aBoolean){
 var self=this;
 smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
@@ -103,9 +103,9 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_assert_equals_',
+unescape('_assert_equals_'),
 smalltalk.method({
-selector: 'assert:equals:',
+selector: unescape('assert%3Aequals%3A'),
 fn: function (expected, actual){
 var self=this;
 return smalltalk.send(self, "_assert_description_", [smalltalk.send(expected, "__eq", [actual]), smalltalk.send(smalltalk.send(smalltalk.send("Expected: ", "__comma", [smalltalk.send(expected, "_asString", [])]), "__comma", [" but was: "]), "__comma", [smalltalk.send(actual, "_asString", [])])]);
@@ -114,9 +114,9 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_assert_description_',
+unescape('_assert_description_'),
 smalltalk.method({
-selector: 'assert:description:',
+selector: unescape('assert%3Adescription%3A'),
 fn: function (aBoolean, aString){
 var self=this;
 ((($receiver = aBoolean).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_signalFailure_", [aString]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", [aString]);})]));
@@ -125,9 +125,9 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_should_',
+unescape('_should_'),
 smalltalk.method({
-selector: 'should:',
+selector: unescape('should%3A'),
 fn: function (aBlock){
 var self=this;
 smalltalk.send(self, "_assert_", [smalltalk.send(aBlock, "_value", [])]);
@@ -136,9 +136,9 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_should_raise_',
+unescape('_should_raise_'),
 smalltalk.method({
-selector: 'should:raise:',
+selector: unescape('should%3Araise%3A'),
 fn: function (aBlock, anExceptionClass){
 var self=this;
 smalltalk.send(self, "_assert_", [smalltalk.send((function(){smalltalk.send(aBlock, "_value", []);return false;}), "_on_do_", [anExceptionClass, (function(ex){return true;})])]);
@@ -148,9 +148,9 @@ smalltalk.TestCase);
 
 
 smalltalk.addMethod(
-'_testSelectors',
+unescape('_testSelectors'),
 smalltalk.method({
-selector: 'testSelectors',
+selector: unescape('testSelectors'),
 fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", [unescape("%5Etest")]);})]);
@@ -159,9 +159,9 @@ return self;}
 smalltalk.TestCase.klass);
 
 smalltalk.addMethod(
-'_selector_',
+unescape('_selector_'),
 smalltalk.method({
-selector: 'selector:',
+selector: unescape('selector%3A'),
 fn: function (aSelector){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_setTestSelector_", [aSelector]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
@@ -170,9 +170,9 @@ return self;}
 smalltalk.TestCase.klass);
 
 smalltalk.addMethod(
-'_lookupHierarchyRoot',
+unescape('_lookupHierarchyRoot'),
 smalltalk.method({
-selector: 'lookupHierarchyRoot',
+selector: unescape('lookupHierarchyRoot'),
 fn: function (){
 var self=this;
 return (smalltalk.TestCase || TestCase);
@@ -181,9 +181,9 @@ return self;}
 smalltalk.TestCase.klass);
 
 smalltalk.addMethod(
-'_allTestSelectors',
+unescape('_allTestSelectors'),
 smalltalk.method({
-selector: 'allTestSelectors',
+selector: unescape('allTestSelectors'),
 fn: function (){
 var self=this;
 var selectors=nil;
@@ -195,9 +195,9 @@ return self;}
 smalltalk.TestCase.klass);
 
 smalltalk.addMethod(
-'_buildSuite',
+unescape('_buildSuite'),
 smalltalk.method({
-selector: 'buildSuite',
+selector: unescape('buildSuite'),
 fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_allTestSelectors", []), "_collect_", [(function(each){return smalltalk.send(self, "_selector_", [each]);})]);
@@ -206,9 +206,9 @@ return self;}
 smalltalk.TestCase.klass);
 
 smalltalk.addMethod(
-'_shouldInheritSelectors',
+unescape('_shouldInheritSelectors'),
 smalltalk.method({
-selector: 'shouldInheritSelectors',
+selector: unescape('shouldInheritSelectors'),
 fn: function (){
 var self=this;
 return smalltalk.send(self, "_~_eq", [smalltalk.send(self, "_lookupHierarchyRoot", [])]);
@@ -222,9 +222,9 @@ smalltalk.addClass('TestFailure', smalltalk.Error, [], 'SUnit');
 
 smalltalk.addClass('TestResult', smalltalk.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit');
 smalltalk.addMethod(
-'_timestamp',
+unescape('_timestamp'),
 smalltalk.method({
-selector: 'timestamp',
+selector: unescape('timestamp'),
 fn: function (){
 var self=this;
 return self['@timestamp'];
@@ -233,9 +233,9 @@ return self;}
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-'_errors',
+unescape('_errors'),
 smalltalk.method({
-selector: 'errors',
+selector: unescape('errors'),
 fn: function (){
 var self=this;
 return self['@errors'];
@@ -244,9 +244,9 @@ return self;}
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-'_failures',
+unescape('_failures'),
 smalltalk.method({
-selector: 'failures',
+selector: unescape('failures'),
 fn: function (){
 var self=this;
 return self['@failures'];
@@ -255,9 +255,9 @@ return self;}
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-'_total',
+unescape('_total'),
 smalltalk.method({
-selector: 'total',
+selector: unescape('total'),
 fn: function (){
 var self=this;
 return self['@total'];
@@ -266,9 +266,9 @@ return self;}
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-'_total_',
+unescape('_total_'),
 smalltalk.method({
-selector: 'total:',
+selector: unescape('total%3A'),
 fn: function (aNumber){
 var self=this;
 (self['@total']=aNumber);
@@ -277,9 +277,9 @@ return self;}
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-'_addError_',
+unescape('_addError_'),
 smalltalk.method({
-selector: 'addError:',
+selector: unescape('addError%3A'),
 fn: function (anError){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]);
@@ -288,9 +288,9 @@ return self;}
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-'_addFailure_',
+unescape('_addFailure_'),
 smalltalk.method({
-selector: 'addFailure:',
+selector: unescape('addFailure%3A'),
 fn: function (aFailure){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]);
@@ -299,9 +299,9 @@ return self;}
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-'_runs',
+unescape('_runs'),
 smalltalk.method({
-selector: 'runs',
+selector: unescape('runs'),
 fn: function (){
 var self=this;
 return self['@runs'];
@@ -310,9 +310,9 @@ return self;}
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-'_increaseRuns',
+unescape('_increaseRuns'),
 smalltalk.method({
-selector: 'increaseRuns',
+selector: unescape('increaseRuns'),
 fn: function (){
 var self=this;
 (self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
@@ -321,9 +321,9 @@ return self;}
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-'_status',
+unescape('_status'),
 smalltalk.method({
-selector: 'status',
+selector: unescape('status'),
 fn: function (){
 var self=this;
 return ((($receiver = smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));})() : (function(){return "error";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));}), (function(){return "error";})]));
@@ -332,9 +332,9 @@ return self;}
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-'_initialize',
+unescape('_initialize'),
 smalltalk.method({
-selector: 'initialize',
+selector: unescape('initialize'),
 fn: function (){
 var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Object);

+ 54 - 118
amber/js/amber.js

@@ -17,9 +17,9 @@ amber = (function() {
 	var debug;
 	var deploy;
 
-	var localStorageSource = [];
-	var localPackages;
 	var spec;
+	var jsToLoad = [];
+	var loadJS;
 
 	that.toggleIDE = function() {
 		if ($('#jtalk').length == 0) {
@@ -56,10 +56,8 @@ amber = (function() {
 		}
 
 		loadDependencies();
-		loadJS('compat.js');
-		loadJS('boot.js');
-
-		populateLocalPackages();
+		addJSToLoad('compat.js');
+		addJSToLoad('boot.js');
 
 		if (deploy) {
 			loadPackages([
@@ -100,16 +98,8 @@ amber = (function() {
 			loadPackages(additionalFiles, spec.prefix);
 		}
 
-		// Always load all local packages
-		for (name in localPackages) {
-			log('Local package:  ' + name);
-			var sourceCode = unescape(localPackages[name]);
-			sourceCode += "\nsmalltalk.Package._init_('"+name+"')";
-			localStorageSource.push(sourceCode);
-		}
-
 		// Be sure to setup & initialize smalltalk classes
-		loadJS('init.js');
+		addJSToLoad('init.js');
 		initializeSmalltalk();
 	};
 
@@ -119,98 +109,15 @@ amber = (function() {
 
 		for (var i=0; i < names.length; i++) {
 			name = names[i].split(/\.js$/)[0];
-
-			// Only load package from the server if it isn't stored in
-			// localStorage
-			if (!(name in localPackages)) {
-				log('Server package: ' + name);
-				loadJS(name + '.js', prefix);
-			}
-		}
-	};
-
-	function loadJS(name, prefix) {
-		var prefix = prefix || 'js';
-		var name = name;
-
-		// Specify a version string to avoid wrong browser caching
-		if (spec.version) {
-			nocache = '?' + spec.version;
-		}
-
-		loadDependencies();
-		loadJS('compat.js');
-		loadJS('boot.js');
-
-		populateLocalPackages();
-
-		if (deploy) {
-			loadPackages([
-				'Kernel-Objects.deploy',
-				'Kernel-Classes.deploy',
-				'Kernel-Methods.deploy',
-				'Kernel-Collections.deploy',
-				'Kernel-Exceptions.deploy',
-				'Kernel-Transcript.deploy',
-				'Kernel-Announcements.deploy',
-				'Canvas.deploy'
-			]);
-		} else {
-			loadIDEDependencies();
-			loadCSS('amber.css');
-
-			loadPackages([
-				'Kernel-Objects',
-				'Kernel-Classes',
-				'Kernel-Methods',
-				'Kernel-Collections',
-				'Kernel-Exceptions',
-				'Kernel-Transcript',
-				'Kernel-Announcements',
-				'Canvas',
-				'Compiler',
-				'parser',
-				'IDE',
-				'SUnit',
-				'Examples',
-				'Benchfib',
-				'Kernel-Tests'
-			]);
+			addJSToLoad(name + '.js', prefix);
 		}
-
-		var additionalFiles = spec.packages || spec.files;
-		if (additionalFiles) {
-			loadPackages(additionalFiles, spec.prefix);
-		}
-
-		// Always load all local packages
-		for (name in localPackages) {
-			log('Local package:  ' + name);
-			localStorageSource.push(localPackages[name]);
-		}
-
-		// Be sure to setup & initialize smalltalk classes
-		loadJS('init.js');
-		initializeSmalltalk();
 	};
 
-	function loadPackages(names, prefix){
-		var name, url;
-		var prefix = prefix || 'js';
-
-		for (var i=0; i < names.length; i++) {
-			name = names[i].split(/\.js$/)[0];
-
-			// Only load package from the server if it isn't stored in
-			// localStorage
-			if (!(name in localPackages)) {
-				log('Server package: ' + name);
-				loadJS(name + '.js', prefix);
-			}
-		}
+	function addJSToLoad(name, prefix) {
+		jsToLoad.push(buildJSURL(name, prefix));
 	};
 
-	function loadJS(name, prefix) {
+	function buildJSURL(name, prefix) {
 		var prefix = prefix || 'js';
 		var name = name;
 
@@ -218,9 +125,7 @@ amber = (function() {
 			name = name + nocache;
 		}
 
-		var url = home + prefix + '/' + name;
-		var scriptString = '<script src="' + url + '" type="text/javascript"></script>';
-		document.write(scriptString);
+		return home + prefix + '/' + name;
 	};
 
 	function loadCSS(name, prefix) {
@@ -239,34 +144,27 @@ amber = (function() {
 		document.getElementsByTagName("head")[0].appendChild(link);
 	};
 
-
 	function loadDependencies() {
 		if (typeof jQuery == 'undefined') {
-			loadJS('lib/jQuery/jquery-1.6.4.min.js');
+			writeScriptTag(buildJSURL('lib/jQuery/jquery-1.6.4.min.js'));
 		}
 
-		if ((typeof jQuery == 'undefined') || (typeof jQuery.ui == 'undefined')) {
-			loadJS('lib/jQuery/jquery-ui-1.8.16.custom.min.js');
+		if ((typeof jQuery == 'undefined') || (typeof jQuery.ui == 'undefined')) {      
+			writeScriptTag(buildJSURL('lib/jQuery/jquery-ui-1.8.16.custom.min.js'));
 		}
 	};
 
 	function loadIDEDependencies() {
-		loadJS('lib/jQuery/jquery.textarea.js');
-		loadJS('lib/CodeMirror/codemirror.js');
-		loadJS('lib/CodeMirror/smalltalk.js');
+		addJSToLoad('lib/jQuery/jquery.textarea.js');
+		addJSToLoad('lib/CodeMirror/codemirror.js');
+		addJSToLoad('lib/CodeMirror/smalltalk.js');
 		loadCSS('lib/CodeMirror/codemirror.css', 'js');
 		loadCSS('lib/CodeMirror/amber.css', 'js');
 	};
 
 	// This will be called after JS files have been loaded
 	function initializeSmalltalk() {
-
 		window.smalltalkReady = function() {
-
-			for (var i=0; i < localStorageSource.length; i++) {
-				eval(localStorageSource[i]);
-			}
-
 			if (deploy) {
 				smalltalk.setDeploymentMode();
 			}
@@ -275,6 +173,44 @@ amber = (function() {
 				spec.ready();
 			}
 		}
+
+		loadAllJS(); 
+	};
+
+	/* 
+	 * When loaded using AJAX, scripts order not guaranteed.
+	 * Load JS in the order they have been added using addJSToLoad().
+	 * If loaded, will use jQuery's getScript instead of adding a script element
+	 */
+	function loadAllJS() {
+		loadJS = loadJSViaScriptTag;
+		if (typeof jQuery != 'undefined') {
+			loadJS = loadJSViaJQuery;
+		}
+		loadNextJS();
+	};
+
+	function loadNextJS() {
+		loadJS(jsToLoad[0], function(){
+			jsToLoad.shift();
+			if (jsToLoad.length > 0) {
+				loadNextJS();
+			}
+		});
+	};
+
+	function loadJSViaScriptTag(url, callback) {
+		writeScriptTag(url);
+		callback();
+	};
+
+	function loadJSViaJQuery(url, callback) {
+		$.getScript(jsToLoad[0], callback);
+	};
+
+	function writeScriptTag(src) {
+		var scriptString = '<script src="' + src + '" type="text/javascript"></script>';
+		document.write(scriptString);
 	};
 
 	function populateLocalPackages(){

+ 33 - 1
amber/st/Canvas.st

@@ -161,7 +161,7 @@ link
 !
 
 style
-	^self tag: 'style'
+	^ root addBrush:  (StyleTag canvas: self)
 !
 
 p: anObject
@@ -488,6 +488,38 @@ renderOn: html
     self
 ! !
 
+TagBrush subclass: #StyleTag
+	instanceVariableNames: 'canvas element'
+	category: 'Canvas'!
+!StyleTag commentStamp!
+I'm a <style> tag use to inline CSS or load a stylesheet.
+
+For inlining handle IE compatibility problems.!
+
+!StyleTag methodsFor: 'adding'!
+
+with: aString
+	self isBrowserIE
+		ifTrue: [self element styleSheet cssText: aString ]
+		ifFalse: [super with: aString ].
+! !
+
+!StyleTag methodsFor: 'testing'!
+
+isBrowserIE
+	|ie|
+	ie := <jQuery.browser.msie>.
+	^ ie notNil.
+! !
+
+!StyleTag class methodsFor: 'instance creation'!
+
+canvas: aCanvas
+    ^self new
+	initializeFromString: 'style' canvas: aCanvas;
+	yourself
+! !
+
 !Object methodsFor: '*Canvas'!
 
 appendToJQuery: aJQuery

+ 2 - 7
amber/st/Compiler.st

@@ -312,9 +312,9 @@ exportDefinitionOf: aClass on: aStream
 exportMethod: aMethod of: aClass on: aStream
 	aStream 
 		nextPutAll: 'smalltalk.addMethod(';lf;
-		nextPutAll: '''', aMethod selector asSelector, ''',';lf;
+		nextPutAll: 'unescape(''', aMethod selector asSelector escaped, '''),';lf;
 		nextPutAll: 'smalltalk.method({';lf;
-		nextPutAll: 'selector: ''', aMethod selector, ''',';lf;
+		nextPutAll: 'selector: unescape(''', aMethod selector escaped, '''),';lf;
 		nextPutAll: 'fn: ', aMethod fn compiledSource;lf;
 		nextPutAll: '}),';lf;
 		nextPutAll: 'smalltalk.', (self classNameFor: aClass);
@@ -1403,11 +1403,6 @@ Object subclass: #DoIt
 	instanceVariableNames: ''
 	category: 'Compiler'!
 
-!DoIt methodsFor: ''!
-
-doIt ^[Compiler methodsFor: 'initialization'] value
-! !
-
 Node subclass: #DynamicArrayNode
 	instanceVariableNames: ''
 	category: 'Compiler'!

+ 27 - 28
amber/st/Documentation.st

@@ -87,11 +87,11 @@ And since we want Amber to be useful in building lean browser apps we can''t let
 
 But apart from missing things other Smalltalks may have, there are also things that are plain different:
 
-- The collection class hierarchy is much simpler compared to most Smalltalk implementations.
+- The collection class hierarchy is much simpler compared to most Smalltalk implementations. In part this is because we want to map reasonably well with JavaScript counter parts.
 - As of today, there is no SortedCollection. The size of arrays is dynamic, and they behave like an ordered collection. They can also be sorted with the `#sort*` methods.
 - The `Date` class behaves like the `Date` and `TimeStamp` classes in Pharo Smalltalk. Therefore both `Date today` and `Date now` are valid in Amber.
-- Amber does not have class Character, but `String` does implement some of Character behavior.
-- Amber does support class instance variables, but not class variables.
+- Amber does not have class Character, but `String` does implement some of Character behavior so a single character String can work as a Character.
+- Amber does support **class instance variables**, but not class variables.
 - Amber only has global classes and packages, but not arbitrary objects. Use classes instead like `Smalltalk current` instead of `Smalltalk` etc.
 - Amber does not support pool dictionaries.
 - Amber uses **< ...javascript code... >** to inline JavaScript code and does not have pragmas.
@@ -105,12 +105,11 @@ ch3GettingStarted
 		contents: '
 To get started hacking in Amber you can basically take three routes, independent of your platform:
 
-1. Just try it out at http://www.amber-lang.net (click the "Class browser" button) - but you will **not be able to save any code you write**!! 
-    Still, it works fine for looking at the IDE and playing around. Just don''t press F5/reload - it will bring you back to zero. 
-    (Well, if you still want to develop and save code online someone has set up this site seems for free use: https://www.screwtopdb.com/amberstore/topics?name=amberstore/amber.html )
-2. Download an Amber zip-ball, install Nodejs, fire up the Amber server and then open Amber from localhost - then you **can save code**. Detailed instructions are below!!
-3. Same as above but install git first and get a proper clone from http://github.com/NicolasPetton/amber instead of a zip/tar-ball. 
-    If you want to **contribute to Amber itself** this is really what you want to do. It requires installing git first, but it is quite simple - although we leave this bit as an "exercise to the reader" :)
+1. Just **try it out directly** at [www.amber-lang.net](http://www.amber-lang.net) - click the **Class browser** button there. But you will **not be able to save any code you write**!! 
+    Still, it works fine for looking at the IDE and playing around. Just **don''t press F5/reload** - it will lose any code you have written.
+2. Download an Amber zip-ball, install [Nodejs](http://www.nodejs.org), fire up the Amber server and then open Amber from localhost - then you **can save code**. Detailed instructions are below!!
+3. Same as above but install git first and get a proper clone from [http://github.com/NicolasPetton/amber](http://github.com/NicolasPetton/amber) instead of a zip/tar-ball. 
+    If you want to **contribute to Amber itself** this is really what you want to do. In fact, in most cases this is what you want to do. It requires installing git first, but it is quite simple - although we leave this bit as an "exercise to the reader" :)
 
 **PLEASE NOTE:** Amber core developers use Linux. 
 We do not want to introduce dependencies that aren''t cross platform - but currently amberc (the command line compiler) is a bash script and we also use Makefiles 
@@ -119,45 +118,37 @@ We do not want to introduce dependencies that aren''t cross platform - but curre
 
 ## Downloading Amber
 Currently you can download in zip or tar-ball format, either cutting edge or a release. [Downloads are available here](https://github.com/NicolasPetton/amber/archives/amber). 
-At the moment of writing you have release [0.9 as zip](https://github.com/NicolasPetton/amber/zipball/0.9) or [tar](https://github.com/NicolasPetton/amber/tarball/0.9), 
-or [cutting edge as zip](https://github.com/NicolasPetton/amber/zipball/amber) or [tar](https://github.com/NicolasPetton/amber/tarball/amber).
 
-At the moment this is just a **1.5Mb download**, so its very small. Unpack wherever you like, but I would rename the directory that is unpacked to something slightly shorter - like say "amber-0.9" or just "amber". 
+Unpack wherever you like, but I would rename the directory that is unpacked to something slightly shorter - like say "amber". :)
 And yes, at this point you can double click the index.html file in the amber directory to get the IDE up, but again, **you will not be able to save code**. So please continue below :)
 
 ## Installing Node.js
 [Node](http://www.nodejs.org) (for short) is simply the V8 Javascript VM from Google (used in Chrome) hooked together with some hard core C-libraries for doing "evented I/O".
- Basically it''s Javascript for the server - on asynch steroids. Amber runs fine in Node and we use it for several Amber tools, like amberc (the command line Amber compiler) or the Amber server (see below). 
-There are also several Amber-Node example to look at if you want to play with running Amber programs server side. **In short - you really want to install Nodejs. :)**
+Basically it''s JavaScript for the server - on asynch steroids. Amber runs fine in Node and we use it for several Amber tools, like amberc (the command line Amber compiler) or the Amber server (see below). 
+There are also several Amber-Node examples to look at if you want to play with running Amber programs server side. **In short - you really want to install Nodejs. :)**
 
-- Installing Node on Linux can be done using your package tool of choice ("apt-get install nodejs" for example) or any other way described at [the download page](http://nodejs.org/#download).
-- Installing Node on MacOS seems to be easiest by getting it from [here](https://sites.google.com/site/nodejsmacosx/).
-- Installing Node on Windows is probably done best by using the [download from Nodejs.org](http://nodejs.org/#download). This is not an installer, it is instead simply the node executable - **node.exe**.
-    - Put node.exe somewhere in your path. In Windows7 I can run a command prompt "As administrator" (right click the command prompt in Start menu) and then just "copy node.exe c:\windows\" or such.
+- Installing Node on Linux can be done using your package tool of choice (`apt-get install nodejs` for example) or any other way described at [the download page](http://nodejs.org/#download).
+- Installing Node on MacOS or Windows is probably done best by using the [installers available at Nodejs.org](http://nodejs.org/#download).
 
 ## Starting Amber server
 Nicolas has written a minimal webDAV server that is the easiest way to get up and running Amber with the ability to save code. This little server is written in... Amber!! 
 And it runs on top of Node. So to start it up serving your brand new directory tree of sweet Amber you do:
 
-    cd amber      (or whatever you called the directory you unpackaged)
-    ./bin/server  (in windows you type "node server\server.js" instead)
+	cd amber	(or whatever you called the directory you unpackaged)
+	./bin/server	(in windows you type `node server\server.js` instead)
 
 It should say it is listening on port 4000. If it does, hooray!! That means both Node and Amber are good. In Windows you might get a question about opening that port in the local firewall - yep, do it!!
 
 ## Firing up Amber
-The Amber IDE is written in... Amber. It uses JQuery and runs right in your browser as a ... well, a web page. 
+The Amber IDE is written in... Amber. It uses [jQuery](http://jquery.com) and runs right in your browser as a ... well, a web page. 
 We could open it up just using a file url - but the reason we performed the previous steps is so that we can load the IDE web page from a server that can handle PUTs (webDAV) of source code. 
-According to web security Amber can only do PUT back to the same server it was loaded from. Thus we instead want to open it through our little server now listening on port 4000:
+According to web security Amber can only do PUT back to the same server it was loaded from. Thus we instead want to open it [through our little server now listening on port 4000](http://localhost:4000/index.html).
+Clicking that link and then pressing the **Class browser** should get your Amber IDE running with the ability to commit modified packages locally.
 
-    http://localhost:4000/index.html
-
-Clicking the above link should get your Amber running.
-
-To verify that you can indeed commit - just select a Package in the browser, like say "Examples" and press "Commit package" button. **If all goes well nothing happens :)**. 
+To verify that you can indeed commit now - just select a Package in the browser, like say "Examples" and press the **Commit** button below. **If all goes well nothing happens :)**. 
 So in order to really know if it worked we can check the modified date on the files **amber/st/Examples.st**, **amber/js/Examples.js** and **amber/js/Examples.deploy.js** - they should be brand new.
 
 NOTE: We can use any webDAV server and Apache2 has been used earlier and works fine. But the Amber server is smaller and simpler to start.
-
 '
 !
 
@@ -175,6 +166,14 @@ ch7KernelClasses
 
 ch4Tutorials
 	^TutorialsChapter new
+!
+
+ch8KernelCollection
+	^PackageDocChapter on: (Package named: 'Kernel-Collections')
+!
+
+ch9KernelMethods
+	^PackageDocChapter on: (Package named: 'Kernel-Methods')
 ! !
 
 !DocumentationBuilder methodsFor: 'routing'!

+ 1 - 21
amber/st/IDE.st

@@ -732,14 +732,6 @@ removePackage
 	    self updateCategoriesList]
 !
 
-commitPackageToLocalStorage
-	| key sourceCode |
-	selectedPackage ifNotNil: [
-          	key := 'smalltalk.packages.' , selectedPackage.
-		sourceCode := (Exporter new exportPackage: selectedPackage).
-		<localStorage[key] = sourceCode>]
-!
-
 addNewClass
 	| className |
 	className := window prompt: 'New class'.
@@ -799,10 +791,6 @@ renderTopPanelOn: html
 					title: 'Commit classes in this package to disk';
 					onClick: [self commitPackage];
 					with: 'Commit'.
-        			html button 
-					title: 'Commit classes in this package to local storage';
-					onClick: [self commitPackageToLocalStorage];
-					with: 'Local'.
         			html button
 					title: 'Rename package';
 					onClick: [self renamePackage];
@@ -884,15 +872,7 @@ updateCategoriesList
 
 updateClassesList
     TabManager current update.
-    classesList updateNodes.
-    "classesList contents: [:html |
-	self classes do: [:each || li |
-	    li := html li.
-	    selectedClass = each ifTrue: [
-		li class: 'selected'].
-	    li
-		with: each name;
-		onClick: [self selectClass: each]]]"
+    classesList updateNodes
 !
 
 updateProtocolsList

+ 40 - 11
amber/st/Kernel-Classes.st

@@ -2,6 +2,14 @@ Smalltalk current createPackage: 'Kernel-Classes' properties: #{}!
 Object subclass: #Behavior
 	instanceVariableNames: ''
 	category: 'Kernel-Classes'!
+!Behavior commentStamp!
+Behavior is the superclass of all class objects. 
+
+It defines the protocol for creating instances of a class with `#basicNew` and `#new` (see `boot.js` for class constructors details).
+Instances know about the subclass/superclass relationships between classes, contain the description that instances are created from, 
+and hold the method dictionary that's associated with each class.
+
+Behavior also  provides methods for compiling methods, examining the method dictionary, and iterating over the class hierarchy.!
 
 !Behavior methodsFor: 'accessing'!
 
@@ -50,10 +58,6 @@ methodsFor: aString
 	    yourself
 !
 
-addCompiledMethod: aMethod
-	<smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self)>
-!
-
 instanceVariableNames
 	<return self.iVarNames>
 !
@@ -72,12 +76,6 @@ commentStamp
 	yourself
 !
 
-removeCompiledMethod: aMethod
-	<delete self.fn.prototype[aMethod.selector._asSelector()];
-	delete self.fn.prototype.methods[aMethod.selector];
-	smalltalk.init(self);>
-!
-
 protocols
     | protocols |
     protocols := Array new.
@@ -123,6 +121,16 @@ commentStamp: aStamp prior: prior
 
 !Behavior methodsFor: 'compiling'!
 
+addCompiledMethod: aMethod
+	<smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self)>
+!
+
+removeCompiledMethod: aMethod
+	<delete self.fn.prototype[aMethod.selector._asSelector()];
+	delete self.fn.prototype.methods[aMethod.selector];
+	smalltalk.init(self);>
+!
+
 compile: aString
 	self compile: aString category: ''
 !
@@ -142,7 +150,9 @@ new
 
 basicNew
 	<return new self.fn()>
-!
+! !
+
+!Behavior methodsFor: 'testing'!
 
 inheritsFrom: aClass
 	^aClass allSubclasses includes: self
@@ -151,6 +161,11 @@ inheritsFrom: aClass
 Behavior subclass: #Class
 	instanceVariableNames: ''
 	category: 'Kernel-Classes'!
+!Class commentStamp!
+Class is __the__ class object. 
+
+Instances are the classes of the system.
+Class creation is done throught a `ClassBuilder`!
 
 !Class methodsFor: 'accessing'!
 
@@ -212,6 +227,11 @@ isClass
 Behavior subclass: #Metaclass
 	instanceVariableNames: ''
 	category: 'Kernel-Classes'!
+!Metaclass commentStamp!
+Metaclass is the root of the class hierarchy.
+
+Metaclass instances are metaclasses, one for each real class. 
+Metaclass instances have a single instance, which they hold onto, which is the class that they are the metaclass of.!
 
 !Metaclass methodsFor: 'accessing'!
 
@@ -239,6 +259,10 @@ isMetaclass
 Object subclass: #ClassBuilder
 	instanceVariableNames: ''
 	category: 'Kernel-Classes'!
+!ClassBuilder commentStamp!
+ClassBuilder is responsible for compiling new classes or modifying existing classes in the system.
+
+Rather than using ClassBuilder directly to compile a class, use `Class >> subclass:instanceVariableNames:package:`.!
 
 !ClassBuilder methodsFor: 'class creation'!
 
@@ -307,6 +331,8 @@ copyClass: aClass named: aString
 Object subclass: #ClassCategoryReader
 	instanceVariableNames: 'class category chunkParser'
 	category: 'Kernel-Classes'!
+!ClassCategoryReader commentStamp!
+ClassCategoryReader represents a mechanism for retrieving class descriptions stored on a file.!
 
 !ClassCategoryReader methodsFor: 'accessing'!
 
@@ -343,6 +369,9 @@ compileMethod: aString
 Object subclass: #ClassCommentReader
 	instanceVariableNames: 'class chunkParser'
 	category: 'Kernel-Classes'!
+!ClassCommentReader commentStamp!
+ClassCommentReader represents a mechanism for retrieving class descriptions stored on a file.
+See `ClassCategoryReader` too.!
 
 !ClassCommentReader methodsFor: 'accessing'!
 

+ 31 - 1
amber/st/Kernel-Methods.st

@@ -2,6 +2,24 @@ Smalltalk current createPackage: 'Kernel-Methods' properties: #{}!
 Object subclass: #CompiledMethod
 	instanceVariableNames: ''
 	category: 'Kernel-Methods'!
+!CompiledMethod commentStamp!
+CompiledMethod hold the source and compiled code of a class method.
+
+You can get a CompiledMethod using `Behavior>>methodAt:`
+
+	String methodAt: 'lines'
+
+and read the source code
+
+	(String methodAt: 'lines') source
+
+See referenced classes:
+
+	(String methodAt: 'lines') referencedClasses
+
+or messages sent from this method:
+	
+	(String methodAt: 'lines')  messageSends!
 
 !CompiledMethod methodsFor: 'accessing'!
 
@@ -60,7 +78,7 @@ Object subclass: #BlockClosure
 A BlockClosure is a lexical closure.
 The JavaScript representation is a function.
 
-A BlockClosure is evaluated with the #value* methods in the 'evaluating' protocol.!
+A BlockClosure is evaluated with the `#value*` methods in the 'evaluating' protocol.!
 
 !BlockClosure methodsFor: 'accessing'!
 
@@ -186,6 +204,12 @@ valueWithInterval: aNumber
 Object subclass: #MethodContext
 	instanceVariableNames: ''
 	category: 'Kernel-Methods'!
+!MethodContext commentStamp!
+MethodContext holds all the dynamic state associated with the execution of either a method activation resulting from a message send. That is used to build the call stack while debugging.
+  
+MethodContext instances are JavaScript `SmalltalkMethodContext` objects defined in boot.js 
+
+Current limitation: MethodContext instances are not created on Block evaluation. That means it's actually impossible to debug inside a Block.!
 
 !MethodContext methodsFor: 'accessing'!
 
@@ -216,6 +240,12 @@ asString
 Object subclass: #Message
 	instanceVariableNames: 'selector arguments'
 	category: 'Kernel-Methods'!
+!Message commentStamp!
+Generally, the system does not use instances of Message for efficiency reasons.
+However, when a message is not understood by its receiver, the interpreter will make up an instance of it in order to capture the information involved in an actual message transmission. 
+This instance is sent it as an argument with the message `doesNotUnderstand:` to the receiver.
+
+See boot.js, `messageNotUnderstood`  and its counterpart `Object>>doesNotUnderstand:`!
 
 !Message methodsFor: 'accessing'!
 

+ 14 - 0
amber/st/Kernel-Objects.st

@@ -647,6 +647,20 @@ named: aPackageName ifAbsent: aBlock
 Object subclass: #Number
 	instanceVariableNames: ''
 	category: 'Kernel-Objects'!
+!Number commentStamp!
+Number holds the most general methods for dealing with numbers.  
+Number is directly mapped to JavaScript Number.
+
+Most arithmetic methods like `#+` `#/` `#-` `#max:` are directly inlined into javascript. 
+
+##Enumerating
+A Number can be used to evaluate a Block a fixed number of times:
+
+	5 timesRepeat: [Transcript show: 'This will be printed 5 times'; cr].
+	
+	1 to: 5 do: [:aNumber| Transcript show: aNumber asString; cr].
+	
+	1 to: 10 by: 2 do: [:aNumber| Transcript show: aNumber asString; cr].!
 
 !Number methodsFor: ''!
 

Some files were not shown because too many files changed in this diff