Browse Source

Merge branch 'master' of git://github.com/NicolasPetton/amber

Herbert Vojčík 12 years ago
parent
commit
fdfdfeccd9

+ 22 - 8
css/amber.css

@@ -16,10 +16,13 @@ body.jtalkBody {
     padding: 0 1px;
     cursor: pointer;
     color: #565656;
-		max-width: 200px;
-		float:left;
+	max-width: 200px;
+	float:left;
 }
+#jtalk li {
+	line-height: 14px;
 
+}
 #jtalk .ltab, #jtalk .rtab, #jtalk .mtab {
     height: 22px;
     float: left;
@@ -423,30 +426,37 @@ body.jtalkBody {
 
 .jtalkTool .jt_box .jt_column.implementors,
 .jtalkTool .jt_box .jt_column.senders,
-.jtalkTool .jt_box .jt_column.referenced_classes {
+.jtalkTool .jt_box .jt_column.referenced_classes,
+.jtalkTool .jt_box .jt_column.matches {
 	top: 20px;
 	height: auto;
 	bottom: 0;
-	width: 33.333%;
+	width: 25%;
 }
 
 .jtalkTool .jt_box .jt_column.senders {
-	left: 33.333%
+	left: 25%
 }
 
 .jtalkTool .jt_box .jt_column.referenced_classes {
-        left: 66.67%
+        left: 50%
+}
+
+.jtalkTool .jt_box .jt_column.matches {
+        left: 75%
 }
 
 .jtalkTool .jt_box .jt_column.implementors .column_label, 
 .jtalkTool .jt_box .jt_column.senders .column_label,
-.jtalkTool .jt_box .jt_column.referenced_classes .column_label {
+.jtalkTool .jt_box .jt_column.referenced_classes .column_label,
+.jtalkTool .jt_box .jt_column.matches .column_label {
 	background: #dbdbdb
 }
 
 .jtalkTool .jt_box .jt_column.implementors .column_label:hover,
 .jtalkTool .jt_box .jt_column.senders .column_label:hover,
-.jtalkTool .jt_box .jt_column.referenced_classes .column_label:hover {
+.jtalkTool .jt_box .jt_column.referenced_classes .column_label:hover,
+.jtalkTool .jt_box .jt_column.matches .column_label:hover {
 	font-weight: bold;
 	color: #000;
 	cursor: default
@@ -530,3 +540,7 @@ body.jtalkBody {
 
 /*.jtalkTool .jt_column.sunit.results ul {padding: 0; margin: 0}*/
 
+/* Code mirror overrides */
+.CodeMirror pre {
+	line-height: 14px;
+}

File diff suppressed because it is too large
+ 256 - 42
examples/presentation/js/Presentation.deploy.js


File diff suppressed because it is too large
+ 240 - 223
examples/presentation/js/Presentation.js


File diff suppressed because it is too large
+ 1536 - 998
examples/presentation/st/Presentation.st


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


File diff suppressed because it is too large
+ 9 - 9
js/Compiler.js


+ 11 - 0
js/Examples.deploy.js

@@ -50,4 +50,15 @@ return self;}
 smalltalk.Counter);
 
 
+smalltalk.addMethod(
+unescape('_tryExample'),
+smalltalk.method({
+selector: unescape('tryExample'),
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_new", []), "_appendToJQuery_", [smalltalk.send("body", "_asJQuery", [])]);
+return self;}
+}),
+smalltalk.Counter.klass);
+
 

+ 17 - 0
js/Examples.js

@@ -1,5 +1,6 @@
 smalltalk.addPackage('Examples', {});
 smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples');
+smalltalk.Counter.comment=unescape('This%20is%20a%20trivial%20Widget%20example%20mimicking%20the%20classic%20Counter%20example%20in%20Seaside.%20%0AIn%20order%20to%20play%20with%20it%2C%20just%20select%20the%20doit%20below%20and%20press%20the%20Do%20it%20button%20in%20the%20far%20right%20corner.%0AThen%20take%20a%20look%20in%20the%20HTML%20document%20above%20the%20IDE.%0A%0A%20%20%20%20%20%20%20%20Counter%20new%20appendToJQuery%3A%20%27body%27%20asJQuery')
 smalltalk.addMethod(
 unescape('_decrease'),
 smalltalk.method({
@@ -70,4 +71,20 @@ referencedClasses: []
 smalltalk.Counter);
 
 
+smalltalk.addMethod(
+unescape('_tryExample'),
+smalltalk.method({
+selector: unescape('tryExample'),
+category: 'example',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_new", []), "_appendToJQuery_", [smalltalk.send("body", "_asJQuery", [])]);
+return self;},
+args: [],
+source: unescape('tryExample%0A%09%22In%20order%20to%20play%20with%20the%20Counter%2C%20just%20select%20the%0A%09doit%20below%20and%20press%20the%20Do%20it%20button.%20Then%20take%20a%0A%09look%20in%20the%20HTML%20document%20above%20the%20IDE.%22%0A%0A%09%22Counter%20tryExample%22%0A%20%20%20%20%20%20%20%20self%20new%20appendToJQuery%3A%20%27body%27%20asJQuery%20'),
+messageSends: ["appendToJQuery:", "new", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.Counter.klass);
+
 

+ 60 - 10
js/IDE.deploy.js

@@ -2591,7 +2591,7 @@ smalltalk.ProgressBar);
 
 
 
-smalltalk.addClass('ReferencesBrowser', smalltalk.TabWidget, ['implementors', 'senders', 'implementorsList', 'input', 'timer', 'selector', 'sendersList', 'referencedClasses', 'referencedClassesList'], 'IDE');
+smalltalk.addClass('ReferencesBrowser', smalltalk.TabWidget, ['implementors', 'senders', 'implementorsList', 'input', 'timer', 'selector', 'sendersList', 'referencedClasses', 'referencedClassesList', 'matches', 'matchesList'], 'IDE');
 smalltalk.addMethod(
 unescape('_canBeClosed'),
 smalltalk.method({
@@ -2648,6 +2648,17 @@ return self;}
 }),
 smalltalk.ReferencesBrowser);
 
+smalltalk.addMethod(
+unescape('_matches'),
+smalltalk.method({
+selector: unescape('matches'),
+fn: function (){
+var self=this;
+return (($receiver = self['@matches']) == nil || $receiver == undefined) ? (function(){return (self['@matches']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver;
+return self;}
+}),
+smalltalk.ReferencesBrowser);
+
 smalltalk.addMethod(
 unescape('_openBrowserOn_'),
 smalltalk.method({
@@ -2679,7 +2690,7 @@ smalltalk.method({
 selector: unescape('renderBoxOn%3A'),
 fn: function (html){
 var self=this;
-(function($rec){smalltalk.send($rec, "_renderInputOn_", [html]);smalltalk.send($rec, "_renderImplementorsOn_", [html]);smalltalk.send($rec, "_renderSendersOn_", [html]);return smalltalk.send($rec, "_renderReferencedClassesOn_", [html]);})(self);
+(function($rec){smalltalk.send($rec, "_renderInputOn_", [html]);smalltalk.send($rec, "_renderImplementorsOn_", [html]);smalltalk.send($rec, "_renderSendersOn_", [html]);smalltalk.send($rec, "_renderReferencedClassesOn_", [html]);return smalltalk.send($rec, "_renderMatchesOn_", [html]);})(self);
 return self;}
 }),
 smalltalk.ReferencesBrowser);
@@ -2709,6 +2720,18 @@ return self;}
 }),
 smalltalk.ReferencesBrowser);
 
+smalltalk.addMethod(
+unescape('_renderMatchesOn_'),
+smalltalk.method({
+selector: unescape('renderMatchesOn%3A'),
+fn: function (html){
+var self=this;
+(self['@matchesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column matches"]));
+smalltalk.send(self, "_updateMatchesList", []);
+return self;}
+}),
+smalltalk.ReferencesBrowser);
+
 smalltalk.addMethod(
 unescape('_renderReferencedClassesOn_'),
 smalltalk.method({
@@ -2739,16 +2762,29 @@ smalltalk.method({
 selector: unescape('search%3A'),
 fn: function (aString){
 var self=this;
-(function($rec){smalltalk.send($rec, "_searchReferencesFor_", [aString]);smalltalk.send($rec, "_updateImplementorsList", []);smalltalk.send($rec, "_updateSendersList", []);return smalltalk.send($rec, "_updateReferencedClassesList", []);})(self);
+(function($rec){smalltalk.send($rec, "_searchReferencesFor_", [aString]);smalltalk.send($rec, "_updateImplementorsList", []);smalltalk.send($rec, "_updateSendersList", []);smalltalk.send($rec, "_updateReferencedClassesList", []);return smalltalk.send($rec, "_updateMatchesList", []);})(self);
 return self;}
 }),
 smalltalk.ReferencesBrowser);
 
 smalltalk.addMethod(
-unescape('_searchReferencedClassesFor_'),
+unescape('_searchMethodSource'),
 smalltalk.method({
-selector: unescape('searchReferencedClassesFor%3A'),
-fn: function (aString){
+selector: unescape('searchMethodSource'),
+fn: function (){
+var self=this;
+var regex=nil;
+(regex=smalltalk.send(self['@selector'], "_allButFirst", []));
+smalltalk.send(smalltalk.send(self, "_classesAndMetaclasses", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(smalltalk.send(each, "_methodDictionary", []), "_values", []), "_do_", [(function(value){return ((($receiver = smalltalk.send(smalltalk.send(value, "_source", []), "_match_", [regex])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_matches", []), "_add_", [value]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(smalltalk.send(self, "_matches", []), "_add_", [value]);})]));})]);})]);
+return self;}
+}),
+smalltalk.ReferencesBrowser);
+
+smalltalk.addMethod(
+unescape('_searchReferencedClasses'),
+smalltalk.method({
+selector: unescape('searchReferencedClasses'),
+fn: function (){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_classesAndMetaclasses", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(smalltalk.send(each, "_methodDictionary", []), "_values", []), "_do_", [(function(value){return ((($receiver = smalltalk.send(smalltalk.send(value, "_referencedClasses", []), "_includes_", [self['@selector']])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_referencedClasses", []), "_add_", [value]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(smalltalk.send(self, "_referencedClasses", []), "_add_", [value]);})]));})]);})]);
 return self;}
@@ -2765,16 +2801,18 @@ var self=this;
 (self['@implementors']=smalltalk.send((smalltalk.Array || Array), "_new", []));
 (self['@senders']=smalltalk.send((smalltalk.Array || Array), "_new", []));
 (self['@referencedClasses']=smalltalk.send((smalltalk.Array || Array), "_new", []));
-((($receiver = smalltalk.send(self['@selector'], "_match_", [unescape("%5E%5BA-Z%5D")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_searchSelectorReferencesFor_", [self['@selector']]);})() : (function(){return smalltalk.send(self, "_searchReferencedClassesFor_", [self['@selector']]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_searchSelectorReferencesFor_", [self['@selector']]);}), (function(){return smalltalk.send(self, "_searchReferencedClassesFor_", [self['@selector']]);})]));
+(self['@matches']=smalltalk.send((smalltalk.Array || Array), "_new", []));
+smalltalk.send(self, "_searchMethodSource", []);
+((($receiver = smalltalk.send(self['@selector'], "_match_", [unescape("%5E%5BA-Z%5D")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_searchSelectorReferences", []);})() : (function(){return smalltalk.send(self, "_searchReferencedClasses", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_searchSelectorReferences", []);}), (function(){return smalltalk.send(self, "_searchReferencedClasses", []);})]));
 return self;}
 }),
 smalltalk.ReferencesBrowser);
 
 smalltalk.addMethod(
-unescape('_searchSelectorReferencesFor_'),
+unescape('_searchSelectorReferences'),
 smalltalk.method({
-selector: unescape('searchSelectorReferencesFor%3A'),
-fn: function (aString){
+selector: unescape('searchSelectorReferences'),
+fn: function (){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_classesAndMetaclasses", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(each, "_methodDictionary", []), "_keysAndValuesDo_", [(function(key, value){((($receiver = smalltalk.send(key, "__eq", [self['@selector']])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_implementors", []), "_add_", [value]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(smalltalk.send(self, "_implementors", []), "_add_", [value]);})]));return ((($receiver = smalltalk.send(smalltalk.send(value, "_messageSends", []), "_includes_", [self['@selector']])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_senders", []), "_add_", [value]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(smalltalk.send(self, "_senders", []), "_add_", [value]);})]));})]);})]);
 return self;}
@@ -2826,6 +2864,18 @@ return self;}
 }),
 smalltalk.ReferencesBrowser);
 
+smalltalk.addMethod(
+unescape('_updateMatchesList'),
+smalltalk.method({
+selector: unescape('updateMatchesList'),
+fn: function (){
+var self=this;
+smalltalk.send(self['@matchesList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Regex%20matches%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_matches", []), "_size", []), "_asString", [])]), "__comma", [unescape("%29")])]);return smalltalk.send($rec, "_style_", [unescape("font-weight%3A%20bold")]);})(smalltalk.send(html, "_li", []));return smalltalk.send(smalltalk.send(self, "_matches", []), "_do_", [(function(each){var li=nil;
+(li=smalltalk.send(html, "_li", []));return (function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(each, "_methodClass", []), "_asString", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(each, "_selector", [])])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_openBrowserOn_", [each]);})]);})(li);})]);})]);
+return self;}
+}),
+smalltalk.ReferencesBrowser);
+
 smalltalk.addMethod(
 unescape('_updateReferencedClassesList'),
 smalltalk.method({

+ 90 - 20
js/IDE.js

@@ -3646,7 +3646,7 @@ smalltalk.ProgressBar);
 
 
 
-smalltalk.addClass('ReferencesBrowser', smalltalk.TabWidget, ['implementors', 'senders', 'implementorsList', 'input', 'timer', 'selector', 'sendersList', 'referencedClasses', 'referencedClassesList'], 'IDE');
+smalltalk.addClass('ReferencesBrowser', smalltalk.TabWidget, ['implementors', 'senders', 'implementorsList', 'input', 'timer', 'selector', 'sendersList', 'referencedClasses', 'referencedClassesList', 'matches', 'matchesList'], 'IDE');
 smalltalk.addMethod(
 unescape('_canBeClosed'),
 smalltalk.method({
@@ -3728,6 +3728,22 @@ referencedClasses: []
 }),
 smalltalk.ReferencesBrowser);
 
+smalltalk.addMethod(
+unescape('_matches'),
+smalltalk.method({
+selector: unescape('matches'),
+category: 'accessing',
+fn: function (){
+var self=this;
+return (($receiver = self['@matches']) == nil || $receiver == undefined) ? (function(){return (self['@matches']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver;
+return self;},
+args: [],
+source: unescape('matches%0A%09%5Ematches%20ifNil%3A%20%5Bmatches%20%3A%3D%20Array%20new%5D'),
+messageSends: ["ifNil:", "new"],
+referencedClasses: ["Array"]
+}),
+smalltalk.ReferencesBrowser);
+
 smalltalk.addMethod(
 unescape('_openBrowserOn_'),
 smalltalk.method({
@@ -3770,11 +3786,11 @@ selector: unescape('renderBoxOn%3A'),
 category: 'rendering',
 fn: function (html){
 var self=this;
-(function($rec){smalltalk.send($rec, "_renderInputOn_", [html]);smalltalk.send($rec, "_renderImplementorsOn_", [html]);smalltalk.send($rec, "_renderSendersOn_", [html]);return smalltalk.send($rec, "_renderReferencedClassesOn_", [html]);})(self);
+(function($rec){smalltalk.send($rec, "_renderInputOn_", [html]);smalltalk.send($rec, "_renderImplementorsOn_", [html]);smalltalk.send($rec, "_renderSendersOn_", [html]);smalltalk.send($rec, "_renderReferencedClassesOn_", [html]);return smalltalk.send($rec, "_renderMatchesOn_", [html]);})(self);
 return self;},
 args: ["html"],
-source: unescape('renderBoxOn%3A%20html%0A%09self%20%0A%09%09renderInputOn%3A%20html%3B%0A%09%09renderImplementorsOn%3A%20html%3B%0A%09%09renderSendersOn%3A%20html%3B%0A%09%09renderReferencedClassesOn%3A%20html'),
-messageSends: ["renderInputOn:", "renderImplementorsOn:", "renderSendersOn:", "renderReferencedClassesOn:"],
+source: unescape('renderBoxOn%3A%20html%0A%09self%20%0A%09%09renderInputOn%3A%20html%3B%0A%09%09renderImplementorsOn%3A%20html%3B%0A%09%09renderSendersOn%3A%20html%3B%0A%09%09renderReferencedClassesOn%3A%20html%3B%0A%09%09renderMatchesOn%3A%20html'),
+messageSends: ["renderInputOn:", "renderImplementorsOn:", "renderSendersOn:", "renderReferencedClassesOn:", "renderMatchesOn:"],
 referencedClasses: []
 }),
 smalltalk.ReferencesBrowser);
@@ -3814,6 +3830,23 @@ referencedClasses: []
 }),
 smalltalk.ReferencesBrowser);
 
+smalltalk.addMethod(
+unescape('_renderMatchesOn_'),
+smalltalk.method({
+selector: unescape('renderMatchesOn%3A'),
+category: 'rendering',
+fn: function (html){
+var self=this;
+(self['@matchesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column matches"]));
+smalltalk.send(self, "_updateMatchesList", []);
+return self;},
+args: ["html"],
+source: unescape('renderMatchesOn%3A%20html%0A%09matchesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20matches%27.%0A%09self%20updateMatchesList'),
+messageSends: ["class:", "ul", "updateMatchesList"],
+referencedClasses: []
+}),
+smalltalk.ReferencesBrowser);
+
 smalltalk.addMethod(
 unescape('_renderReferencedClassesOn_'),
 smalltalk.method({
@@ -3855,26 +3888,44 @@ selector: unescape('search%3A'),
 category: 'actions',
 fn: function (aString){
 var self=this;
-(function($rec){smalltalk.send($rec, "_searchReferencesFor_", [aString]);smalltalk.send($rec, "_updateImplementorsList", []);smalltalk.send($rec, "_updateSendersList", []);return smalltalk.send($rec, "_updateReferencedClassesList", []);})(self);
+(function($rec){smalltalk.send($rec, "_searchReferencesFor_", [aString]);smalltalk.send($rec, "_updateImplementorsList", []);smalltalk.send($rec, "_updateSendersList", []);smalltalk.send($rec, "_updateReferencedClassesList", []);return smalltalk.send($rec, "_updateMatchesList", []);})(self);
 return self;},
 args: ["aString"],
-source: unescape('search%3A%20aString%0A%09self%20%0A%09%09searchReferencesFor%3A%20aString%3B%0A%09%09updateImplementorsList%3B%0A%09%09updateSendersList%3B%0A%09%09updateReferencedClassesList'),
-messageSends: ["searchReferencesFor:", "updateImplementorsList", "updateSendersList", "updateReferencedClassesList"],
+source: unescape('search%3A%20aString%0A%09self%20%0A%09%09searchReferencesFor%3A%20aString%3B%0A%09%09updateImplementorsList%3B%0A%09%09updateSendersList%3B%0A%09%09updateReferencedClassesList%3B%0A%09%09updateMatchesList'),
+messageSends: ["searchReferencesFor:", "updateImplementorsList", "updateSendersList", "updateReferencedClassesList", "updateMatchesList"],
 referencedClasses: []
 }),
 smalltalk.ReferencesBrowser);
 
 smalltalk.addMethod(
-unescape('_searchReferencedClassesFor_'),
+unescape('_searchMethodSource'),
 smalltalk.method({
-selector: unescape('searchReferencedClassesFor%3A'),
+selector: unescape('searchMethodSource'),
 category: 'actions',
-fn: function (aString){
+fn: function (){
+var self=this;
+var regex=nil;
+(regex=smalltalk.send(self['@selector'], "_allButFirst", []));
+smalltalk.send(smalltalk.send(self, "_classesAndMetaclasses", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(smalltalk.send(each, "_methodDictionary", []), "_values", []), "_do_", [(function(value){return ((($receiver = smalltalk.send(smalltalk.send(value, "_source", []), "_match_", [regex])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_matches", []), "_add_", [value]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(smalltalk.send(self, "_matches", []), "_add_", [value]);})]));})]);})]);
+return self;},
+args: [],
+source: unescape('searchMethodSource%0A%09%7C%20regex%20%7C%0A%09regex%20%3A%3D%20selector%20allButFirst.%0A%09self%20classesAndMetaclasses%20do%3A%20%5B%3Aeach%20%7C%0A%09%09each%20methodDictionary%20values%20do%3A%20%5B%3Avalue%20%7C%0A%09%09%09%28value%20source%20match%3A%20regex%29%20ifTrue%3A%20%5B%0A%09%09%09%09self%20matches%20add%3A%20value%5D%5D%5D'),
+messageSends: ["allButFirst", "do:", "classesAndMetaclasses", "values", "methodDictionary", "ifTrue:", "match:", "source", "add:", "matches"],
+referencedClasses: []
+}),
+smalltalk.ReferencesBrowser);
+
+smalltalk.addMethod(
+unescape('_searchReferencedClasses'),
+smalltalk.method({
+selector: unescape('searchReferencedClasses'),
+category: 'actions',
+fn: function (){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_classesAndMetaclasses", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(smalltalk.send(each, "_methodDictionary", []), "_values", []), "_do_", [(function(value){return ((($receiver = smalltalk.send(smalltalk.send(value, "_referencedClasses", []), "_includes_", [self['@selector']])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_referencedClasses", []), "_add_", [value]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(smalltalk.send(self, "_referencedClasses", []), "_add_", [value]);})]));})]);})]);
 return self;},
-args: ["aString"],
-source: unescape('searchReferencedClassesFor%3A%20aString%0A%09self%20classesAndMetaclasses%20do%3A%20%5B%3Aeach%20%7C%0A%09%09each%20methodDictionary%20values%20do%3A%20%5B%3Avalue%20%7C%0A%09%09%09%28value%20referencedClasses%20includes%3A%20selector%29%20ifTrue%3A%20%5B%0A%09%09%09%09self%20referencedClasses%20add%3A%20value%5D%5D%5D'),
+args: [],
+source: unescape('searchReferencedClasses%0A%09self%20classesAndMetaclasses%20do%3A%20%5B%3Aeach%20%7C%0A%09%09each%20methodDictionary%20values%20do%3A%20%5B%3Avalue%20%7C%0A%09%09%09%28value%20referencedClasses%20includes%3A%20selector%29%20ifTrue%3A%20%5B%0A%09%09%09%09self%20referencedClasses%20add%3A%20value%5D%5D%5D'),
 messageSends: ["do:", "classesAndMetaclasses", "values", "methodDictionary", "ifTrue:", "includes:", "referencedClasses", "add:"],
 referencedClasses: []
 }),
@@ -3891,26 +3942,28 @@ var self=this;
 (self['@implementors']=smalltalk.send((smalltalk.Array || Array), "_new", []));
 (self['@senders']=smalltalk.send((smalltalk.Array || Array), "_new", []));
 (self['@referencedClasses']=smalltalk.send((smalltalk.Array || Array), "_new", []));
-((($receiver = smalltalk.send(self['@selector'], "_match_", [unescape("%5E%5BA-Z%5D")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_searchSelectorReferencesFor_", [self['@selector']]);})() : (function(){return smalltalk.send(self, "_searchReferencedClassesFor_", [self['@selector']]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_searchSelectorReferencesFor_", [self['@selector']]);}), (function(){return smalltalk.send(self, "_searchReferencedClassesFor_", [self['@selector']]);})]));
+(self['@matches']=smalltalk.send((smalltalk.Array || Array), "_new", []));
+smalltalk.send(self, "_searchMethodSource", []);
+((($receiver = smalltalk.send(self['@selector'], "_match_", [unescape("%5E%5BA-Z%5D")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_searchSelectorReferences", []);})() : (function(){return smalltalk.send(self, "_searchReferencedClasses", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_searchSelectorReferences", []);}), (function(){return smalltalk.send(self, "_searchReferencedClasses", []);})]));
 return self;},
 args: ["aString"],
-source: unescape('searchReferencesFor%3A%20aString%0A%09selector%20%3A%3D%20aString.%0A%09implementors%20%3A%3D%20Array%20new.%0A%09senders%20%3A%3D%20Array%20new.%0A%09referencedClasses%20%3A%3D%20Array%20new.%0A%09%28selector%20match%3A%20%27%5E%5BA-Z%5D%27%29%20%0A%09%09ifFalse%3A%20%5Bself%20searchSelectorReferencesFor%3A%20selector%5D%0A%09%09ifTrue%3A%20%5Bself%20searchReferencedClassesFor%3A%20selector%5D'),
-messageSends: ["new", "ifFalse:ifTrue:", "match:", "searchSelectorReferencesFor:", "searchReferencedClassesFor:"],
+source: unescape('searchReferencesFor%3A%20aString%0A%09selector%20%3A%3D%20aString.%0A%09implementors%20%3A%3D%20Array%20new.%0A%09senders%20%3A%3D%20Array%20new.%0A%09referencedClasses%20%3A%3D%20Array%20new.%0A%09matches%20%3A%3D%20Array%20new.%0A%09self%20searchMethodSource.%0A%09%28selector%20match%3A%20%27%5E%5BA-Z%5D%27%29%20%0A%09%09ifFalse%3A%20%5Bself%20searchSelectorReferences%5D%0A%09%09ifTrue%3A%20%5Bself%20searchReferencedClasses%5D'),
+messageSends: ["new", "searchMethodSource", "ifFalse:ifTrue:", "match:", "searchSelectorReferences", "searchReferencedClasses"],
 referencedClasses: ["Array"]
 }),
 smalltalk.ReferencesBrowser);
 
 smalltalk.addMethod(
-unescape('_searchSelectorReferencesFor_'),
+unescape('_searchSelectorReferences'),
 smalltalk.method({
-selector: unescape('searchSelectorReferencesFor%3A'),
+selector: unescape('searchSelectorReferences'),
 category: 'actions',
-fn: function (aString){
+fn: function (){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_classesAndMetaclasses", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(each, "_methodDictionary", []), "_keysAndValuesDo_", [(function(key, value){((($receiver = smalltalk.send(key, "__eq", [self['@selector']])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_implementors", []), "_add_", [value]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(smalltalk.send(self, "_implementors", []), "_add_", [value]);})]));return ((($receiver = smalltalk.send(smalltalk.send(value, "_messageSends", []), "_includes_", [self['@selector']])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_senders", []), "_add_", [value]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(smalltalk.send(self, "_senders", []), "_add_", [value]);})]));})]);})]);
 return self;},
-args: ["aString"],
-source: unescape('searchSelectorReferencesFor%3A%20aString%0A%09self%20classesAndMetaclasses%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09each%20methodDictionary%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%20%0A%09%09%09key%20%3D%20selector%20ifTrue%3A%20%5Bself%20implementors%20add%3A%20value%5D.%0A%09%09%09%28value%20messageSends%20includes%3A%20selector%29%20ifTrue%3A%20%5B%0A%09%09%09%09self%20senders%20add%3A%20value%5D%5D%5D'),
+args: [],
+source: unescape('searchSelectorReferences%0A%09self%20classesAndMetaclasses%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09each%20methodDictionary%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%20%0A%09%09%09key%20%3D%20selector%20ifTrue%3A%20%5Bself%20implementors%20add%3A%20value%5D.%0A%09%09%09%28value%20messageSends%20includes%3A%20selector%29%20ifTrue%3A%20%5B%0A%09%09%09%09self%20senders%20add%3A%20value%5D%5D%5D'),
 messageSends: ["do:", "classesAndMetaclasses", "keysAndValuesDo:", "methodDictionary", "ifTrue:", unescape("%3D"), "add:", "implementors", "includes:", "messageSends", "senders"],
 referencedClasses: []
 }),
@@ -3981,6 +4034,23 @@ referencedClasses: []
 }),
 smalltalk.ReferencesBrowser);
 
+smalltalk.addMethod(
+unescape('_updateMatchesList'),
+smalltalk.method({
+selector: unescape('updateMatchesList'),
+category: 'updating',
+fn: function (){
+var self=this;
+smalltalk.send(self['@matchesList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Regex%20matches%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_matches", []), "_size", []), "_asString", [])]), "__comma", [unescape("%29")])]);return smalltalk.send($rec, "_style_", [unescape("font-weight%3A%20bold")]);})(smalltalk.send(html, "_li", []));return smalltalk.send(smalltalk.send(self, "_matches", []), "_do_", [(function(each){var li=nil;
+(li=smalltalk.send(html, "_li", []));return (function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(each, "_methodClass", []), "_asString", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(each, "_selector", [])])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_openBrowserOn_", [each]);})]);})(li);})]);})]);
+return self;},
+args: [],
+source: unescape('updateMatchesList%0A%20%20%20%20matchesList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09html%20li%0A%09%09class%3A%20%27column_label%27%3B%20%0A%09%09with%3A%20%27Regex%20matches%20%28%27%2C%20self%20matches%20size%20asString%2C%20%27%29%27%3B%0A%09%09style%3A%20%27font-weight%3A%20bold%27.%0A%09self%20matches%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%20%20%20%20li%20%3A%3D%20html%20li.%0A%09%20%20%20%20li%0A%09%09with%3A%20%28each%20methodClass%20asString%2C%20%27%20%3E%3E%20%27%2C%20each%20selector%29%3B%0A%09%09onClick%3A%20%5Bself%20openBrowserOn%3A%20each%5D%5D%5D'),
+messageSends: ["contents:", "class:", "with:", unescape("%2C"), "asString", "size", "matches", "style:", "li", "do:", "methodClass", "selector", "onClick:", "openBrowserOn:"],
+referencedClasses: []
+}),
+smalltalk.ReferencesBrowser);
+
 smalltalk.addMethod(
 unescape('_updateReferencedClassesList'),
 smalltalk.method({

+ 74 - 63
js/Kernel-Classes.deploy.js

@@ -4,7 +4,7 @@ smalltalk.addMethod(
 unescape('_addCompiledMethod_'),
 smalltalk.method({
 selector: unescape('addCompiledMethod%3A'),
-fn: function (aMethod){
+fn: function (aMethod) {
 var self=this;
 smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
 return self;}
@@ -15,7 +15,7 @@ smalltalk.addMethod(
 unescape('_allInstanceVariableNames'),
 smalltalk.method({
 selector: unescape('allInstanceVariableNames'),
-fn: function (){
+fn: function () {
 var self=this;
 var result=nil;
 (result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", []));
@@ -29,7 +29,7 @@ smalltalk.addMethod(
 unescape('_allSubclasses'),
 smalltalk.method({
 selector: unescape('allSubclasses'),
-fn: function (){
+fn: function () {
 var self=this;
 var result=nil;
 (result=smalltalk.send(self, "_subclasses", []));
@@ -43,18 +43,29 @@ smalltalk.addMethod(
 unescape('_basicNew'),
 smalltalk.method({
 selector: unescape('basicNew'),
-fn: function (){
+fn: function () {
 var self=this;
 return new self.fn();
 return self;}
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+unescape('_canUnderstand_'),
+smalltalk.method({
+selector: unescape('canUnderstand%3A'),
+fn: function (aSelector) {
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_includes_", [smalltalk.send(aSelector, "_asString", [])]), "_or_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_superclass", []), "_notNil", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(self, "_superclass", []), "_canUnderstand_", [aSelector]);})]);})]);
+return self;}
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 unescape('_comment'),
 smalltalk.method({
 selector: unescape('comment'),
-fn: function (){
+fn: function () {
 var self=this;
 return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
 return self;}
@@ -65,7 +76,7 @@ smalltalk.addMethod(
 unescape('_comment_'),
 smalltalk.method({
 selector: unescape('comment%3A'),
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 smalltalk.send(self, "_basicAt_put_", ["comment", aString]);
 return self;}
@@ -76,7 +87,7 @@ smalltalk.addMethod(
 unescape('_commentStamp'),
 smalltalk.method({
 selector: unescape('commentStamp'),
-fn: function (){
+fn: function () {
 var self=this;
 return (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", []));
 return self;}
@@ -87,7 +98,7 @@ smalltalk.addMethod(
 unescape('_commentStamp_prior_'),
 smalltalk.method({
 selector: unescape('commentStamp%3Aprior%3A'),
-fn: function (aStamp, prior){
+fn: function (aStamp, prior) {
 var self=this;
 return smalltalk.send(self, "_commentStamp", []);
 return self;}
@@ -98,7 +109,7 @@ smalltalk.addMethod(
 unescape('_compile_'),
 smalltalk.method({
 selector: unescape('compile%3A'),
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 smalltalk.send(self, "_compile_category_", [aString, ""]);
 return self;}
@@ -109,7 +120,7 @@ smalltalk.addMethod(
 unescape('_compile_category_'),
 smalltalk.method({
 selector: unescape('compile%3Acategory%3A'),
-fn: function (aString, anotherString){
+fn: function (aString, anotherString) {
 var self=this;
 var method=nil;
 (method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self]));
@@ -123,7 +134,7 @@ smalltalk.addMethod(
 unescape('_inheritsFrom_'),
 smalltalk.method({
 selector: unescape('inheritsFrom%3A'),
-fn: function (aClass){
+fn: function (aClass) {
 var self=this;
 return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
 return self;}
@@ -134,7 +145,7 @@ smalltalk.addMethod(
 unescape('_instanceVariableNames'),
 smalltalk.method({
 selector: unescape('instanceVariableNames'),
-fn: function (){
+fn: function () {
 var self=this;
 return self.iVarNames;
 return self;}
@@ -145,7 +156,7 @@ smalltalk.addMethod(
 unescape('_methodAt_'),
 smalltalk.method({
 selector: unescape('methodAt%3A'),
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 return smalltalk.methods(self)[aString];
 return self;}
@@ -156,7 +167,7 @@ smalltalk.addMethod(
 unescape('_methodDictionary'),
 smalltalk.method({
 selector: unescape('methodDictionary'),
-fn: function (){
+fn: function () {
 var self=this;
 var dict = smalltalk.HashedCollection._new();
 	var methods = self.fn.prototype.methods;
@@ -174,7 +185,7 @@ smalltalk.addMethod(
 unescape('_methodsFor_'),
 smalltalk.method({
 selector: unescape('methodsFor%3A'),
-fn: function (aString){
+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", []));
 return self;}
@@ -185,7 +196,7 @@ smalltalk.addMethod(
 unescape('_methodsFor_stamp_'),
 smalltalk.method({
 selector: unescape('methodsFor%3Astamp%3A'),
-fn: function (aString, aStamp){
+fn: function (aString, aStamp) {
 var self=this;
 return smalltalk.send(self, "_methodsFor_", [aString]);
 return self;}
@@ -196,7 +207,7 @@ smalltalk.addMethod(
 unescape('_name'),
 smalltalk.method({
 selector: unescape('name'),
-fn: function (){
+fn: function () {
 var self=this;
 return self.className || nil;
 return self;}
@@ -207,7 +218,7 @@ smalltalk.addMethod(
 unescape('_new'),
 smalltalk.method({
 selector: unescape('new'),
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
 return self;}
@@ -218,7 +229,7 @@ smalltalk.addMethod(
 unescape('_protocols'),
 smalltalk.method({
 selector: unescape('protocols'),
-fn: function (){
+fn: function () {
 var self=this;
 var protocols=nil;
 (protocols=smalltalk.send((smalltalk.Array || Array), "_new", []));
@@ -232,7 +243,7 @@ smalltalk.addMethod(
 unescape('_protocolsDo_'),
 smalltalk.method({
 selector: unescape('protocolsDo%3A'),
-fn: function (aBlock){
+fn: function (aBlock) {
 var self=this;
 var methodsByCategory=nil;
 (methodsByCategory=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", []));
@@ -246,7 +257,7 @@ smalltalk.addMethod(
 unescape('_prototype'),
 smalltalk.method({
 selector: unescape('prototype'),
-fn: function (){
+fn: function () {
 var self=this;
 return self.fn.prototype;
 return self;}
@@ -257,7 +268,7 @@ smalltalk.addMethod(
 unescape('_removeCompiledMethod_'),
 smalltalk.method({
 selector: unescape('removeCompiledMethod%3A'),
-fn: function (aMethod){
+fn: function (aMethod) {
 var self=this;
 delete self.fn.prototype[aMethod.selector._asSelector()];
 	delete self.fn.prototype.methods[aMethod.selector];
@@ -270,7 +281,7 @@ smalltalk.addMethod(
 unescape('_subclasses'),
 smalltalk.method({
 selector: unescape('subclasses'),
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.subclasses(self);
 return self;}
@@ -281,7 +292,7 @@ smalltalk.addMethod(
 unescape('_superclass'),
 smalltalk.method({
 selector: unescape('superclass'),
-fn: function (){
+fn: function () {
 var self=this;
 return self.superclass || nil;
 return self;}
@@ -292,7 +303,7 @@ smalltalk.addMethod(
 unescape('_withAllSubclasses'),
 smalltalk.method({
 selector: unescape('withAllSubclasses'),
-fn: function (){
+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]));
 return self;}
@@ -306,7 +317,7 @@ smalltalk.addMethod(
 unescape('_category'),
 smalltalk.method({
 selector: unescape('category'),
-fn: function (){
+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", []);})();
 return self;}
@@ -317,7 +328,7 @@ smalltalk.addMethod(
 unescape('_isClass'),
 smalltalk.method({
 selector: unescape('isClass'),
-fn: function (){
+fn: function () {
 var self=this;
 return true;
 return self;}
@@ -328,7 +339,7 @@ smalltalk.addMethod(
 unescape('_package'),
 smalltalk.method({
 selector: unescape('package'),
-fn: function (){
+fn: function () {
 var self=this;
 return self.pkg;
 return self;}
@@ -339,7 +350,7 @@ smalltalk.addMethod(
 unescape('_package_'),
 smalltalk.method({
 selector: unescape('package%3A'),
-fn: function (aPackage){
+fn: function (aPackage) {
 var self=this;
 self.pkg = aPackage;
 return self;}
@@ -350,7 +361,7 @@ smalltalk.addMethod(
 unescape('_printString'),
 smalltalk.method({
 selector: unescape('printString'),
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.send(self, "_name", []);
 return self;}
@@ -361,7 +372,7 @@ smalltalk.addMethod(
 unescape('_rename_'),
 smalltalk.method({
 selector: unescape('rename%3A'),
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 
 		smalltalk[aString] = self;
@@ -376,7 +387,7 @@ smalltalk.addMethod(
 unescape('_subclass_instanceVariableNames_'),
 smalltalk.method({
 selector: unescape('subclass%3AinstanceVariableNames%3A'),
-fn: function (aString, anotherString){
+fn: function (aString, anotherString) {
 var self=this;
 return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]);
 return self;}
@@ -387,7 +398,7 @@ smalltalk.addMethod(
 unescape('_subclass_instanceVariableNames_category_'),
 smalltalk.method({
 selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'),
-fn: function (aString, aString2, aString3){
+fn: function (aString, aString2, aString3) {
 var self=this;
 smalltalk.send(self, "_deprecatedAPI", []);
 return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
@@ -399,7 +410,7 @@ smalltalk.addMethod(
 unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'),
 smalltalk.method({
 selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'),
-fn: function (aString, aString2, classVars, pools, aString3){
+fn: function (aString, aString2, classVars, pools, aString3) {
 var self=this;
 return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
 return self;}
@@ -410,7 +421,7 @@ smalltalk.addMethod(
 unescape('_subclass_instanceVariableNames_package_'),
 smalltalk.method({
 selector: unescape('subclass%3AinstanceVariableNames%3Apackage%3A'),
-fn: function (aString, aString2, aString3){
+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]);
 return self;}
@@ -424,7 +435,7 @@ smalltalk.addMethod(
 unescape('_instanceClass'),
 smalltalk.method({
 selector: unescape('instanceClass'),
-fn: function (){
+fn: function () {
 var self=this;
 return self.instanceClass;
 return self;}
@@ -435,7 +446,7 @@ smalltalk.addMethod(
 unescape('_instanceVariableNames_'),
 smalltalk.method({
 selector: unescape('instanceVariableNames%3A'),
-fn: function (aCollection){
+fn: function (aCollection) {
 var self=this;
 smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_class_instanceVariableNames_", [self, aCollection]);
 return self;}
@@ -446,7 +457,7 @@ smalltalk.addMethod(
 unescape('_isMetaclass'),
 smalltalk.method({
 selector: unescape('isMetaclass'),
-fn: function (){
+fn: function () {
 var self=this;
 return true;
 return self;}
@@ -457,7 +468,7 @@ smalltalk.addMethod(
 unescape('_printString'),
 smalltalk.method({
 selector: unescape('printString'),
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.send(smalltalk.send(smalltalk.send(self, "_instanceClass", []), "_name", []), "__comma", [" class"]);
 return self;}
@@ -471,7 +482,7 @@ smalltalk.addMethod(
 unescape('_addSubclassOf_named_instanceVariableNames_'),
 smalltalk.method({
 selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'),
-fn: function (aClass, aString, aCollection){
+fn: function (aClass, aString, aCollection) {
 var self=this;
 smalltalk.addClass(aString, aClass, aCollection);
 	    return smalltalk[aString];
@@ -483,7 +494,7 @@ smalltalk.addMethod(
 unescape('_addSubclassOf_named_instanceVariableNames_package_'),
 smalltalk.method({
 selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'),
-fn: function (aClass, aString, aCollection, packageName){
+fn: function (aClass, aString, aCollection, packageName) {
 var self=this;
 smalltalk.addClass(aString, aClass, aCollection, packageName);
 	    return smalltalk[aString];
@@ -495,7 +506,7 @@ smalltalk.addMethod(
 unescape('_class_instanceVariableNames_'),
 smalltalk.method({
 selector: unescape('class%3AinstanceVariableNames%3A'),
-fn: function (aClass, aString){
+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"])]);})]));
 smalltalk.send(aClass, "_basicAt_put_", ["iVarNames", smalltalk.send(self, "_instanceVariableNamesFor_", [aString])]);
@@ -508,7 +519,7 @@ smalltalk.addMethod(
 unescape('_copyClass_named_'),
 smalltalk.method({
 selector: unescape('copyClass%3Anamed%3A'),
-fn: function (aClass, aString){
+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", [])]));
@@ -525,7 +536,7 @@ smalltalk.addMethod(
 unescape('_instanceVariableNamesFor_'),
 smalltalk.method({
 selector: unescape('instanceVariableNamesFor%3A'),
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 return smalltalk.send(smalltalk.send(aString, "_tokenize_", [" "]), "_reject_", [(function(each){return smalltalk.send(each, "_isEmpty", []);})]);
 return self;}
@@ -536,7 +547,7 @@ smalltalk.addMethod(
 unescape('_setupClass_'),
 smalltalk.method({
 selector: unescape('setupClass%3A'),
-fn: function (aClass){
+fn: function (aClass) {
 var self=this;
 smalltalk.init(aClass);;
 return self;}
@@ -547,7 +558,7 @@ smalltalk.addMethod(
 unescape('_superclass_subclass_'),
 smalltalk.method({
 selector: unescape('superclass%3Asubclass%3A'),
-fn: function (aClass, aString){
+fn: function (aClass, aString) {
 var self=this;
 return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]);
 return self;}
@@ -558,7 +569,7 @@ smalltalk.addMethod(
 unescape('_superclass_subclass_instanceVariableNames_package_'),
 smalltalk.method({
 selector: unescape('superclass%3Asubclass%3AinstanceVariableNames%3Apackage%3A'),
-fn: function (aClass, aString, aString2, aString3){
+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]));
@@ -575,7 +586,7 @@ smalltalk.addMethod(
 unescape('_class_category_'),
 smalltalk.method({
 selector: unescape('class%3Acategory%3A'),
-fn: function (aClass, aString){
+fn: function (aClass, aString) {
 var self=this;
 (self['@class']=aClass);
 (self['@category']=aString);
@@ -587,7 +598,7 @@ smalltalk.addMethod(
 unescape('_compileMethod_'),
 smalltalk.method({
 selector: unescape('compileMethod%3A'),
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 var method=nil;
 var compiler=nil;
@@ -603,7 +614,7 @@ smalltalk.addMethod(
 unescape('_initialize'),
 smalltalk.method({
 selector: unescape('initialize'),
-fn: function (){
+fn: function () {
 var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Object);
 (self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
@@ -615,7 +626,7 @@ smalltalk.addMethod(
 unescape('_scanFrom_'),
 smalltalk.method({
 selector: unescape('scanFrom%3A'),
-fn: function (aChunkParser){
+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]);})()}})();
@@ -630,7 +641,7 @@ smalltalk.addMethod(
 unescape('_class_'),
 smalltalk.method({
 selector: unescape('class%3A'),
-fn: function (aClass){
+fn: function (aClass) {
 var self=this;
 (self['@class']=aClass);
 return self;}
@@ -641,7 +652,7 @@ smalltalk.addMethod(
 unescape('_initialize'),
 smalltalk.method({
 selector: unescape('initialize'),
-fn: function (){
+fn: function () {
 var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Object);
 (self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
@@ -653,7 +664,7 @@ smalltalk.addMethod(
 unescape('_scanFrom_'),
 smalltalk.method({
 selector: unescape('scanFrom%3A'),
-fn: function (aChunkParser){
+fn: function (aChunkParser) {
 var self=this;
 var chunk=nil;
 (chunk=smalltalk.send(aChunkParser, "_nextChunk", []));
@@ -666,7 +677,7 @@ smalltalk.addMethod(
 unescape('_setComment_'),
 smalltalk.method({
 selector: unescape('setComment%3A'),
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 smalltalk.send(self['@class'], "_comment_", [aString]);
 return self;}
@@ -680,7 +691,7 @@ smalltalk.addMethod(
 unescape('_getNodesFrom_'),
 smalltalk.method({
 selector: unescape('getNodesFrom%3A'),
-fn: function (aCollection){
+fn: function (aCollection) {
 var self=this;
 var children=nil;
 var others=nil;
@@ -696,7 +707,7 @@ smalltalk.addMethod(
 unescape('_level'),
 smalltalk.method({
 selector: unescape('level'),
-fn: function (){
+fn: function () {
 var self=this;
 return self['@level'];
 return self;}
@@ -707,7 +718,7 @@ smalltalk.addMethod(
 unescape('_level_'),
 smalltalk.method({
 selector: unescape('level%3A'),
-fn: function (anInteger){
+fn: function (anInteger) {
 var self=this;
 (self['@level']=anInteger);
 return self;}
@@ -718,7 +729,7 @@ smalltalk.addMethod(
 unescape('_nodes'),
 smalltalk.method({
 selector: unescape('nodes'),
-fn: function (){
+fn: function () {
 var self=this;
 return self['@nodes'];
 return self;}
@@ -729,7 +740,7 @@ smalltalk.addMethod(
 unescape('_theClass'),
 smalltalk.method({
 selector: unescape('theClass'),
-fn: function (){
+fn: function () {
 var self=this;
 return self['@theClass'];
 return self;}
@@ -740,7 +751,7 @@ smalltalk.addMethod(
 unescape('_theClass_'),
 smalltalk.method({
 selector: unescape('theClass%3A'),
-fn: function (aClass){
+fn: function (aClass) {
 var self=this;
 (self['@theClass']=aClass);
 return self;}
@@ -751,7 +762,7 @@ smalltalk.addMethod(
 unescape('_traverseClassesWith_'),
 smalltalk.method({
 selector: unescape('traverseClassesWith%3A'),
-fn: function (aCollection){
+fn: function (aCollection) {
 var self=this;
 smalltalk.send(aCollection, "_add_", [smalltalk.send(self, "_theClass", [])]);
 smalltalk.send(smalltalk.send(smalltalk.send(self, "_nodes", []), "_sorted_", [(function(a, b){return ((($receiver = smalltalk.send(smalltalk.send(a, "_theClass", []), "_name", [])).klass === smalltalk.Number) ? $receiver <=smalltalk.send(smalltalk.send(b, "_theClass", []), "_name", []) : smalltalk.send($receiver, "__lt_eq", [smalltalk.send(smalltalk.send(b, "_theClass", []), "_name", [])]));})]), "_do_", [(function(aNode){return smalltalk.send(aNode, "_traverseClassesWith_", [aCollection]);})]);
@@ -764,7 +775,7 @@ smalltalk.addMethod(
 unescape('_on_classes_level_'),
 smalltalk.method({
 selector: unescape('on%3Aclasses%3Alevel%3A'),
-fn: function (aClass, aCollection, anInteger){
+fn: function (aClass, aCollection, anInteger) {
 var self=this;
 return (function($rec){smalltalk.send($rec, "_theClass_", [aClass]);smalltalk.send($rec, "_level_", [anInteger]);smalltalk.send($rec, "_getNodesFrom_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;}

+ 79 - 63
js/Kernel-Classes.js

@@ -6,7 +6,7 @@ unescape('_addCompiledMethod_'),
 smalltalk.method({
 selector: unescape('addCompiledMethod%3A'),
 category: 'compiling',
-fn: function (aMethod){
+fn: function (aMethod) {
 var self=this;
 smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
 return self;},
@@ -22,7 +22,7 @@ unescape('_allInstanceVariableNames'),
 smalltalk.method({
 selector: unescape('allInstanceVariableNames'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 var result=nil;
 (result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", []));
@@ -41,7 +41,7 @@ unescape('_allSubclasses'),
 smalltalk.method({
 selector: unescape('allSubclasses'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 var result=nil;
 (result=smalltalk.send(self, "_subclasses", []));
@@ -60,7 +60,7 @@ unescape('_basicNew'),
 smalltalk.method({
 selector: unescape('basicNew'),
 category: 'instance creation',
-fn: function (){
+fn: function () {
 var self=this;
 return new self.fn();
 return self;},
@@ -71,12 +71,28 @@ referencedClasses: []
 }),
 smalltalk.Behavior);
 
+smalltalk.addMethod(
+unescape('_canUnderstand_'),
+smalltalk.method({
+selector: unescape('canUnderstand%3A'),
+category: 'testing',
+fn: function (aSelector) {
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_includes_", [smalltalk.send(aSelector, "_asString", [])]), "_or_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_superclass", []), "_notNil", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(self, "_superclass", []), "_canUnderstand_", [aSelector]);})]);})]);
+return self;},
+args: ["aSelector"],
+source: unescape('canUnderstand%3A%20aSelector%0A%09%5E%28self%20methodDictionary%20keys%20includes%3A%20aSelector%20asString%29%20or%3A%20%5B%0A%09%09self%20superclass%20notNil%20and%3A%20%5Bself%20superclass%20canUnderstand%3A%20aSelector%5D%5D'),
+messageSends: ["or:", "includes:", "keys", "methodDictionary", "asString", "and:", "notNil", "superclass", "canUnderstand:"],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
 smalltalk.addMethod(
 unescape('_comment'),
 smalltalk.method({
 selector: unescape('comment'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
 return self;},
@@ -92,7 +108,7 @@ unescape('_comment_'),
 smalltalk.method({
 selector: unescape('comment%3A'),
 category: 'accessing',
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 smalltalk.send(self, "_basicAt_put_", ["comment", aString]);
 return self;},
@@ -108,7 +124,7 @@ unescape('_commentStamp'),
 smalltalk.method({
 selector: unescape('commentStamp'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 return (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", []));
 return self;},
@@ -124,7 +140,7 @@ unescape('_commentStamp_prior_'),
 smalltalk.method({
 selector: unescape('commentStamp%3Aprior%3A'),
 category: 'accessing',
-fn: function (aStamp, prior){
+fn: function (aStamp, prior) {
 var self=this;
 return smalltalk.send(self, "_commentStamp", []);
 return self;},
@@ -140,7 +156,7 @@ unescape('_compile_'),
 smalltalk.method({
 selector: unescape('compile%3A'),
 category: 'compiling',
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 smalltalk.send(self, "_compile_category_", [aString, ""]);
 return self;},
@@ -156,7 +172,7 @@ unescape('_compile_category_'),
 smalltalk.method({
 selector: unescape('compile%3Acategory%3A'),
 category: 'compiling',
-fn: function (aString, anotherString){
+fn: function (aString, anotherString) {
 var self=this;
 var method=nil;
 (method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self]));
@@ -175,7 +191,7 @@ unescape('_inheritsFrom_'),
 smalltalk.method({
 selector: unescape('inheritsFrom%3A'),
 category: 'testing',
-fn: function (aClass){
+fn: function (aClass) {
 var self=this;
 return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
 return self;},
@@ -191,7 +207,7 @@ unescape('_instanceVariableNames'),
 smalltalk.method({
 selector: unescape('instanceVariableNames'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 return self.iVarNames;
 return self;},
@@ -207,7 +223,7 @@ unescape('_methodAt_'),
 smalltalk.method({
 selector: unescape('methodAt%3A'),
 category: 'accessing',
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 return smalltalk.methods(self)[aString];
 return self;},
@@ -223,7 +239,7 @@ unescape('_methodDictionary'),
 smalltalk.method({
 selector: unescape('methodDictionary'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 var dict = smalltalk.HashedCollection._new();
 	var methods = self.fn.prototype.methods;
@@ -246,7 +262,7 @@ unescape('_methodsFor_'),
 smalltalk.method({
 selector: unescape('methodsFor%3A'),
 category: 'accessing',
-fn: function (aString){
+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", []));
 return self;},
@@ -262,7 +278,7 @@ unescape('_methodsFor_stamp_'),
 smalltalk.method({
 selector: unescape('methodsFor%3Astamp%3A'),
 category: 'accessing',
-fn: function (aString, aStamp){
+fn: function (aString, aStamp) {
 var self=this;
 return smalltalk.send(self, "_methodsFor_", [aString]);
 return self;},
@@ -278,7 +294,7 @@ unescape('_name'),
 smalltalk.method({
 selector: unescape('name'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 return self.className || nil;
 return self;},
@@ -294,7 +310,7 @@ unescape('_new'),
 smalltalk.method({
 selector: unescape('new'),
 category: 'instance creation',
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
 return self;},
@@ -310,7 +326,7 @@ unescape('_protocols'),
 smalltalk.method({
 selector: unescape('protocols'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 var protocols=nil;
 (protocols=smalltalk.send((smalltalk.Array || Array), "_new", []));
@@ -329,7 +345,7 @@ unescape('_protocolsDo_'),
 smalltalk.method({
 selector: unescape('protocolsDo%3A'),
 category: 'accessing',
-fn: function (aBlock){
+fn: function (aBlock) {
 var self=this;
 var methodsByCategory=nil;
 (methodsByCategory=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", []));
@@ -348,7 +364,7 @@ unescape('_prototype'),
 smalltalk.method({
 selector: unescape('prototype'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 return self.fn.prototype;
 return self;},
@@ -364,7 +380,7 @@ unescape('_removeCompiledMethod_'),
 smalltalk.method({
 selector: unescape('removeCompiledMethod%3A'),
 category: 'compiling',
-fn: function (aMethod){
+fn: function (aMethod) {
 var self=this;
 delete self.fn.prototype[aMethod.selector._asSelector()];
 	delete self.fn.prototype.methods[aMethod.selector];
@@ -382,7 +398,7 @@ unescape('_subclasses'),
 smalltalk.method({
 selector: unescape('subclasses'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.subclasses(self);
 return self;},
@@ -398,7 +414,7 @@ unescape('_superclass'),
 smalltalk.method({
 selector: unescape('superclass'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 return self.superclass || nil;
 return self;},
@@ -414,7 +430,7 @@ unescape('_withAllSubclasses'),
 smalltalk.method({
 selector: unescape('withAllSubclasses'),
 category: 'accessing',
-fn: function (){
+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]));
 return self;},
@@ -434,7 +450,7 @@ unescape('_category'),
 smalltalk.method({
 selector: unescape('category'),
 category: 'accessing',
-fn: function (){
+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", []);})();
 return self;},
@@ -450,7 +466,7 @@ unescape('_isClass'),
 smalltalk.method({
 selector: unescape('isClass'),
 category: 'testing',
-fn: function (){
+fn: function () {
 var self=this;
 return true;
 return self;},
@@ -466,7 +482,7 @@ unescape('_package'),
 smalltalk.method({
 selector: unescape('package'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 return self.pkg;
 return self;},
@@ -482,7 +498,7 @@ unescape('_package_'),
 smalltalk.method({
 selector: unescape('package%3A'),
 category: 'accessing',
-fn: function (aPackage){
+fn: function (aPackage) {
 var self=this;
 self.pkg = aPackage;
 return self;},
@@ -498,7 +514,7 @@ unescape('_printString'),
 smalltalk.method({
 selector: unescape('printString'),
 category: 'printing',
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.send(self, "_name", []);
 return self;},
@@ -514,7 +530,7 @@ unescape('_rename_'),
 smalltalk.method({
 selector: unescape('rename%3A'),
 category: 'accessing',
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 
 		smalltalk[aString] = self;
@@ -534,7 +550,7 @@ unescape('_subclass_instanceVariableNames_'),
 smalltalk.method({
 selector: unescape('subclass%3AinstanceVariableNames%3A'),
 category: 'class creation',
-fn: function (aString, anotherString){
+fn: function (aString, anotherString) {
 var self=this;
 return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]);
 return self;},
@@ -550,7 +566,7 @@ unescape('_subclass_instanceVariableNames_category_'),
 smalltalk.method({
 selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'),
 category: 'class creation',
-fn: function (aString, aString2, aString3){
+fn: function (aString, aString2, aString3) {
 var self=this;
 smalltalk.send(self, "_deprecatedAPI", []);
 return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
@@ -567,7 +583,7 @@ unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_ca
 smalltalk.method({
 selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'),
 category: 'class creation',
-fn: function (aString, aString2, classVars, pools, aString3){
+fn: function (aString, aString2, classVars, pools, aString3) {
 var self=this;
 return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
 return self;},
@@ -583,7 +599,7 @@ unescape('_subclass_instanceVariableNames_package_'),
 smalltalk.method({
 selector: unescape('subclass%3AinstanceVariableNames%3Apackage%3A'),
 category: 'class creation',
-fn: function (aString, aString2, aString3){
+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]);
 return self;},
@@ -603,7 +619,7 @@ unescape('_instanceClass'),
 smalltalk.method({
 selector: unescape('instanceClass'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 return self.instanceClass;
 return self;},
@@ -619,7 +635,7 @@ unescape('_instanceVariableNames_'),
 smalltalk.method({
 selector: unescape('instanceVariableNames%3A'),
 category: 'accessing',
-fn: function (aCollection){
+fn: function (aCollection) {
 var self=this;
 smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_class_instanceVariableNames_", [self, aCollection]);
 return self;},
@@ -635,7 +651,7 @@ unescape('_isMetaclass'),
 smalltalk.method({
 selector: unescape('isMetaclass'),
 category: 'testing',
-fn: function (){
+fn: function () {
 var self=this;
 return true;
 return self;},
@@ -651,7 +667,7 @@ unescape('_printString'),
 smalltalk.method({
 selector: unescape('printString'),
 category: 'printing',
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.send(smalltalk.send(smalltalk.send(self, "_instanceClass", []), "_name", []), "__comma", [" class"]);
 return self;},
@@ -671,7 +687,7 @@ unescape('_addSubclassOf_named_instanceVariableNames_'),
 smalltalk.method({
 selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'),
 category: 'private',
-fn: function (aClass, aString, aCollection){
+fn: function (aClass, aString, aCollection) {
 var self=this;
 smalltalk.addClass(aString, aClass, aCollection);
 	    return smalltalk[aString];
@@ -688,7 +704,7 @@ unescape('_addSubclassOf_named_instanceVariableNames_package_'),
 smalltalk.method({
 selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'),
 category: 'private',
-fn: function (aClass, aString, aCollection, packageName){
+fn: function (aClass, aString, aCollection, packageName) {
 var self=this;
 smalltalk.addClass(aString, aClass, aCollection, packageName);
 	    return smalltalk[aString];
@@ -705,7 +721,7 @@ unescape('_class_instanceVariableNames_'),
 smalltalk.method({
 selector: unescape('class%3AinstanceVariableNames%3A'),
 category: 'class creation',
-fn: function (aClass, aString){
+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"])]);})]));
 smalltalk.send(aClass, "_basicAt_put_", ["iVarNames", smalltalk.send(self, "_instanceVariableNamesFor_", [aString])]);
@@ -723,7 +739,7 @@ unescape('_copyClass_named_'),
 smalltalk.method({
 selector: unescape('copyClass%3Anamed%3A'),
 category: 'private',
-fn: function (aClass, aString){
+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", [])]));
@@ -745,7 +761,7 @@ unescape('_instanceVariableNamesFor_'),
 smalltalk.method({
 selector: unescape('instanceVariableNamesFor%3A'),
 category: 'private',
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 return smalltalk.send(smalltalk.send(aString, "_tokenize_", [" "]), "_reject_", [(function(each){return smalltalk.send(each, "_isEmpty", []);})]);
 return self;},
@@ -761,7 +777,7 @@ unescape('_setupClass_'),
 smalltalk.method({
 selector: unescape('setupClass%3A'),
 category: 'private',
-fn: function (aClass){
+fn: function (aClass) {
 var self=this;
 smalltalk.init(aClass);;
 return self;},
@@ -777,7 +793,7 @@ unescape('_superclass_subclass_'),
 smalltalk.method({
 selector: unescape('superclass%3Asubclass%3A'),
 category: 'class creation',
-fn: function (aClass, aString){
+fn: function (aClass, aString) {
 var self=this;
 return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]);
 return self;},
@@ -793,7 +809,7 @@ unescape('_superclass_subclass_instanceVariableNames_package_'),
 smalltalk.method({
 selector: unescape('superclass%3Asubclass%3AinstanceVariableNames%3Apackage%3A'),
 category: 'class creation',
-fn: function (aClass, aString, aString2, aString3){
+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]));
@@ -816,7 +832,7 @@ unescape('_class_category_'),
 smalltalk.method({
 selector: unescape('class%3Acategory%3A'),
 category: 'accessing',
-fn: function (aClass, aString){
+fn: function (aClass, aString) {
 var self=this;
 (self['@class']=aClass);
 (self['@category']=aString);
@@ -833,7 +849,7 @@ unescape('_compileMethod_'),
 smalltalk.method({
 selector: unescape('compileMethod%3A'),
 category: 'private',
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 var method=nil;
 var compiler=nil;
@@ -854,7 +870,7 @@ unescape('_initialize'),
 smalltalk.method({
 selector: unescape('initialize'),
 category: 'initialization',
-fn: function (){
+fn: function () {
 var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Object);
 (self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
@@ -871,7 +887,7 @@ unescape('_scanFrom_'),
 smalltalk.method({
 selector: unescape('scanFrom%3A'),
 category: 'fileIn',
-fn: function (aChunkParser){
+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]);})()}})();
@@ -892,7 +908,7 @@ unescape('_class_'),
 smalltalk.method({
 selector: unescape('class%3A'),
 category: 'accessing',
-fn: function (aClass){
+fn: function (aClass) {
 var self=this;
 (self['@class']=aClass);
 return self;},
@@ -908,7 +924,7 @@ unescape('_initialize'),
 smalltalk.method({
 selector: unescape('initialize'),
 category: 'initialization',
-fn: function (){
+fn: function () {
 var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Object);
 (self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
@@ -925,7 +941,7 @@ unescape('_scanFrom_'),
 smalltalk.method({
 selector: unescape('scanFrom%3A'),
 category: 'fileIn',
-fn: function (aChunkParser){
+fn: function (aChunkParser) {
 var self=this;
 var chunk=nil;
 (chunk=smalltalk.send(aChunkParser, "_nextChunk", []));
@@ -943,7 +959,7 @@ unescape('_setComment_'),
 smalltalk.method({
 selector: unescape('setComment%3A'),
 category: 'private',
-fn: function (aString){
+fn: function (aString) {
 var self=this;
 smalltalk.send(self['@class'], "_comment_", [aString]);
 return self;},
@@ -962,7 +978,7 @@ unescape('_getNodesFrom_'),
 smalltalk.method({
 selector: unescape('getNodesFrom%3A'),
 category: 'accessing',
-fn: function (aCollection){
+fn: function (aCollection) {
 var self=this;
 var children=nil;
 var others=nil;
@@ -983,7 +999,7 @@ unescape('_level'),
 smalltalk.method({
 selector: unescape('level'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 return self['@level'];
 return self;},
@@ -999,7 +1015,7 @@ unescape('_level_'),
 smalltalk.method({
 selector: unescape('level%3A'),
 category: 'accessing',
-fn: function (anInteger){
+fn: function (anInteger) {
 var self=this;
 (self['@level']=anInteger);
 return self;},
@@ -1015,7 +1031,7 @@ unescape('_nodes'),
 smalltalk.method({
 selector: unescape('nodes'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 return self['@nodes'];
 return self;},
@@ -1031,7 +1047,7 @@ unescape('_theClass'),
 smalltalk.method({
 selector: unescape('theClass'),
 category: 'accessing',
-fn: function (){
+fn: function () {
 var self=this;
 return self['@theClass'];
 return self;},
@@ -1047,7 +1063,7 @@ unescape('_theClass_'),
 smalltalk.method({
 selector: unescape('theClass%3A'),
 category: 'accessing',
-fn: function (aClass){
+fn: function (aClass) {
 var self=this;
 (self['@theClass']=aClass);
 return self;},
@@ -1063,7 +1079,7 @@ unescape('_traverseClassesWith_'),
 smalltalk.method({
 selector: unescape('traverseClassesWith%3A'),
 category: 'visiting',
-fn: function (aCollection){
+fn: function (aCollection) {
 var self=this;
 smalltalk.send(aCollection, "_add_", [smalltalk.send(self, "_theClass", [])]);
 smalltalk.send(smalltalk.send(smalltalk.send(self, "_nodes", []), "_sorted_", [(function(a, b){return ((($receiver = smalltalk.send(smalltalk.send(a, "_theClass", []), "_name", [])).klass === smalltalk.Number) ? $receiver <=smalltalk.send(smalltalk.send(b, "_theClass", []), "_name", []) : smalltalk.send($receiver, "__lt_eq", [smalltalk.send(smalltalk.send(b, "_theClass", []), "_name", [])]));})]), "_do_", [(function(aNode){return smalltalk.send(aNode, "_traverseClassesWith_", [aCollection]);})]);
@@ -1081,7 +1097,7 @@ unescape('_on_classes_level_'),
 smalltalk.method({
 selector: unescape('on%3Aclasses%3Alevel%3A'),
 category: 'instance creation',
-fn: function (aClass, aCollection, anInteger){
+fn: function (aClass, aCollection, anInteger) {
 var self=this;
 return (function($rec){smalltalk.send($rec, "_theClass_", [aClass]);smalltalk.send($rec, "_level_", [anInteger]);smalltalk.send($rec, "_getNodesFrom_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;},

+ 9 - 231
js/Kernel-Collections.deploy.js

@@ -131,7 +131,7 @@ smalltalk.addMethod(
 unescape('_asJSON'),
 smalltalk.method({
 selector: unescape('asJSON'),
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_asArray", []), "_collect_", [(function(each){return smalltalk.send(each, "_asJSON", []);})]);
 return self;}
@@ -273,7 +273,7 @@ smalltalk.addMethod(
 unescape('_ifEmpty_'),
 smalltalk.method({
 selector: unescape('ifEmpty%3A'),
-fn: function (aBlock){
+fn: function (aBlock) {
 var self=this;
 return ((($receiver = smalltalk.send(self, "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(aBlock, "_value", []);})() : (function(){return self;})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(aBlock, "_value", []);}), (function(){return self;})]));
 return self;}
@@ -578,7 +578,7 @@ smalltalk.addMethod(
 unescape('_asJSON'),
 smalltalk.method({
 selector: unescape('asJSON'),
-fn: function (){
+fn: function () {
 var self=this;
 var c=nil;
 (c=smalltalk.send(smalltalk.send(self, "_class", []), "_new", []));
@@ -818,7 +818,7 @@ smalltalk.addMethod(
 unescape('_removeKey_'),
 smalltalk.method({
 selector: unescape('removeKey%3A'),
-fn: function (aKey){
+fn: function (aKey) {
 var self=this;
 return smalltalk.send(self, "_remove_", [aKey]);
 return self;}
@@ -931,7 +931,7 @@ smalltalk.addMethod(
 unescape('_asJSON'),
 smalltalk.method({
 selector: unescape('asJSON'),
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_asHashedCollection", []), "_asJSON", []);
 return self;}
@@ -1019,7 +1019,7 @@ smalltalk.addMethod(
 unescape('_removeKey_ifAbsent_'),
 smalltalk.method({
 selector: unescape('removeKey%3AifAbsent%3A'),
-fn: function (aKey, aBlock){
+fn: function (aKey, aBlock) {
 var self=this;
 
             var index = self['@keys'].indexOf(aKey);
@@ -1186,7 +1186,7 @@ smalltalk.addMethod(
 unescape('_first_'),
 smalltalk.method({
 selector: unescape('first%3A'),
-fn: function (n){
+fn: function (n) {
 var self=this;
 return smalltalk.send(self, "_copyFrom_to_", [(1), n]);
 return self;}
@@ -1578,228 +1578,6 @@ return self;}
 smalltalk.Array.klass);
 
 
-smalltalk.addClass('Array', smalltalk.SequenceableCollection, [], 'Kernel-Collections');
-smalltalk.addMethod(
-unescape('_add_'),
-smalltalk.method({
-selector: unescape('add%3A'),
-fn: function (anObject) {
-var self=this;
-self.push(anObject); return anObject;;
-return self;}
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_asJavascript'),
-smalltalk.method({
-selector: unescape('asJavascript'),
-fn: function () {
-var self=this;
-return smalltalk.send(smalltalk.send(unescape("%5B"), "__comma", [smalltalk.send(smalltalk.send(self, "_collect_", [(function(each){return smalltalk.send(each, "_asJavascript", []);})]), "_join_", [unescape("%2C%20")])]), "__comma", [unescape("%5D")]);
-return self;}
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_at_ifAbsent_'),
-smalltalk.method({
-selector: unescape('at%3AifAbsent%3A'),
-fn: function (anIndex, aBlock) {
-var self=this;
-
-	    var value = self[anIndex - 1];
-	    if(value === undefined) {
-		return aBlock();
-	    } else {
-		return value;
-	    }
-	;
-return self;}
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_at_put_'),
-smalltalk.method({
-selector: unescape('at%3Aput%3A'),
-fn: function (anIndex, anObject) {
-var self=this;
-return self[anIndex - 1] = anObject;
-return self;}
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_join_'),
-smalltalk.method({
-selector: unescape('join%3A'),
-fn: function (aString) {
-var self=this;
-return self.join(aString);
-return self;}
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_remove_'),
-smalltalk.method({
-selector: unescape('remove%3A'),
-fn: function (anObject) {
-var self=this;
-
-		for(var i=0;i<self.length;i++) {
-			if(self[i] == anObject) {
-				self.splice(i,1);
-				break;
-			}
-		}
-	;
-return self;}
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_removeFrom_to_'),
-smalltalk.method({
-selector: unescape('removeFrom%3Ato%3A'),
-fn: function (aNumber, anotherNumber) {
-var self=this;
-self.splice(aNumber - 1,anotherNumber - 1);
-return self;}
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_reversed'),
-smalltalk.method({
-selector: unescape('reversed'),
-fn: function () {
-var self=this;
-return self._copy().reverse();
-return self;}
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_size'),
-smalltalk.method({
-selector: unescape('size'),
-fn: function () {
-var self=this;
-return self.length;
-return self;}
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_sort'),
-smalltalk.method({
-selector: unescape('sort'),
-fn: function () {
-var self=this;
-return smalltalk.send(self, "_basicPerform_", ["sort"]);
-return self;}
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_sort_'),
-smalltalk.method({
-selector: unescape('sort%3A'),
-fn: function (aBlock) {
-var self=this;
-
-		return self.sort(function(a, b) {
-			if(aBlock(a,b)) {return -1} else {return 1}
-		})
-	;
-return self;}
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_sorted'),
-smalltalk.method({
-selector: unescape('sorted'),
-fn: function () {
-var self=this;
-return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort", []);
-return self;}
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_sorted_'),
-smalltalk.method({
-selector: unescape('sorted%3A'),
-fn: function (aBlock) {
-var self=this;
-return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort_", [aBlock]);
-return self;}
-}),
-smalltalk.Array);
-
-
-smalltalk.addMethod(
-unescape('_new_'),
-smalltalk.method({
-selector: unescape('new%3A'),
-fn: function (anInteger) {
-var self=this;
-return new Array(anInteger);
-return self;}
-}),
-smalltalk.Array.klass);
-
-smalltalk.addMethod(
-unescape('_with_'),
-smalltalk.method({
-selector: unescape('with%3A'),
-fn: function (anObject) {
-var self=this;
-return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(1)]));
-return self;}
-}),
-smalltalk.Array.klass);
-
-smalltalk.addMethod(
-unescape('_with_with_'),
-smalltalk.method({
-selector: unescape('with%3Awith%3A'),
-fn: function (anObject, anObject2) {
-var self=this;
-return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);smalltalk.send($rec, "_at_put_", [(2), anObject2]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(2)]));
-return self;}
-}),
-smalltalk.Array.klass);
-
-smalltalk.addMethod(
-unescape('_with_with_with_'),
-smalltalk.method({
-selector: unescape('with%3Awith%3Awith%3A'),
-fn: function (anObject, anObject2, anObject3) {
-var self=this;
-return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);smalltalk.send($rec, "_at_put_", [(2), anObject2]);smalltalk.send($rec, "_at_put_", [(3), anObject3]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(3)]));
-return self;}
-}),
-smalltalk.Array.klass);
-
-smalltalk.addMethod(
-unescape('_withAll_'),
-smalltalk.method({
-selector: unescape('withAll%3A'),
-fn: function (aCollection) {
-var self=this;
-var instance=nil;
-(instance=smalltalk.send(self, "_new_", [smalltalk.send(aCollection, "_size", [])]));
-smalltalk.send(aCollection, "_withIndexDo_", [(function(each, index){return smalltalk.send(instance, "_at_put_", [index, each]);})]);
-return instance;
-return self;}
-}),
-smalltalk.Array.klass);
-
-
 smalltalk.addClass('CharacterArray', smalltalk.SequenceableCollection, [], 'Kernel-Collections');
 smalltalk.addMethod(
 unescape('__comma'),
@@ -2008,7 +1786,7 @@ smalltalk.addMethod(
 unescape('_asJSON'),
 smalltalk.method({
 selector: unescape('asJSON'),
-fn: function (){
+fn: function () {
 var self=this;
 return self;
 return self;}
@@ -2614,7 +2392,7 @@ smalltalk.addMethod(
 unescape('_asJSON'),
 smalltalk.method({
 selector: unescape('asJSON'),
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_asString", []), "_asJSON", []);
 return self;}

+ 9 - 321
js/Kernel-Collections.js

@@ -187,7 +187,7 @@ unescape('_asJSON'),
 smalltalk.method({
 selector: unescape('asJSON'),
 category: 'converting',
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_asArray", []), "_collect_", [(function(each){return smalltalk.send(each, "_asJSON", []);})]);
 return self;},
@@ -389,7 +389,7 @@ unescape('_ifEmpty_'),
 smalltalk.method({
 selector: unescape('ifEmpty%3A'),
 category: 'testing',
-fn: function (aBlock){
+fn: function (aBlock) {
 var self=this;
 return ((($receiver = smalltalk.send(self, "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(aBlock, "_value", []);})() : (function(){return self;})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(aBlock, "_value", []);}), (function(){return self;})]));
 return self;},
@@ -825,7 +825,7 @@ unescape('_asJSON'),
 smalltalk.method({
 selector: unescape('asJSON'),
 category: 'converting',
-fn: function (){
+fn: function () {
 var self=this;
 var c=nil;
 (c=smalltalk.send(smalltalk.send(self, "_class", []), "_new", []));
@@ -1165,7 +1165,7 @@ unescape('_removeKey_'),
 smalltalk.method({
 selector: unescape('removeKey%3A'),
 category: 'adding/removing',
-fn: function (aKey){
+fn: function (aKey) {
 var self=this;
 return smalltalk.send(self, "_remove_", [aKey]);
 return self;},
@@ -1323,7 +1323,7 @@ unescape('_asJSON'),
 smalltalk.method({
 selector: unescape('asJSON'),
 category: 'converting',
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_asHashedCollection", []), "_asJSON", []);
 return self;},
@@ -1441,7 +1441,7 @@ unescape('_removeKey_ifAbsent_'),
 smalltalk.method({
 selector: unescape('removeKey%3AifAbsent%3A'),
 category: 'adding/removing',
-fn: function (aKey, aBlock){
+fn: function (aKey, aBlock) {
 var self=this;
 
             var index = self['@keys'].indexOf(aKey);
@@ -1673,7 +1673,7 @@ unescape('_first_'),
 smalltalk.method({
 selector: unescape('first%3A'),
 category: 'accessing',
-fn: function (n){
+fn: function (n) {
 var self=this;
 return smalltalk.send(self, "_copyFrom_to_", [(1), n]);
 return self;},
@@ -2224,318 +2224,6 @@ referencedClasses: []
 smalltalk.Array.klass);
 
 
-smalltalk.addClass('Array', smalltalk.SequenceableCollection, [], 'Kernel-Collections');
-smalltalk.addMethod(
-unescape('_add_'),
-smalltalk.method({
-selector: unescape('add%3A'),
-category: 'adding/removing',
-fn: function (anObject) {
-var self=this;
-self.push(anObject); return anObject;;
-return self;},
-args: ["anObject"],
-source: unescape('add%3A%20anObject%0A%09%3Cself.push%28anObject%29%3B%20return%20anObject%3B%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_asJavascript'),
-smalltalk.method({
-selector: unescape('asJavascript'),
-category: 'converting',
-fn: function () {
-var self=this;
-return smalltalk.send(smalltalk.send(unescape("%5B"), "__comma", [smalltalk.send(smalltalk.send(self, "_collect_", [(function(each){return smalltalk.send(each, "_asJavascript", []);})]), "_join_", [unescape("%2C%20")])]), "__comma", [unescape("%5D")]);
-return self;},
-args: [],
-source: unescape('asJavascript%0A%09%5E%27%5B%27%2C%20%28%28self%20collect%3A%20%5B%3Aeach%20%7C%20each%20asJavascript%5D%29%20join%3A%20%27%2C%20%27%29%2C%20%20%27%5D%27'),
-messageSends: [unescape("%2C"), "join:", "collect:", "asJavascript"],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_at_ifAbsent_'),
-smalltalk.method({
-selector: unescape('at%3AifAbsent%3A'),
-category: 'accessing',
-fn: function (anIndex, aBlock) {
-var self=this;
-
-	    var value = self[anIndex - 1];
-	    if(value === undefined) {
-		return aBlock();
-	    } else {
-		return value;
-	    }
-	;
-return self;},
-args: ["anIndex", "aBlock"],
-source: unescape('at%3A%20anIndex%20ifAbsent%3A%20aBlock%0A%09%3C%0A%09%20%20%20%20var%20value%20%3D%20self%5BanIndex%20-%201%5D%3B%0A%09%20%20%20%20if%28value%20%3D%3D%3D%20undefined%29%20%7B%0A%09%09return%20aBlock%28%29%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%09return%20value%3B%0A%09%20%20%20%20%7D%0A%09%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_at_put_'),
-smalltalk.method({
-selector: unescape('at%3Aput%3A'),
-category: 'accessing',
-fn: function (anIndex, anObject) {
-var self=this;
-return self[anIndex - 1] = anObject;
-return self;},
-args: ["anIndex", "anObject"],
-source: unescape('at%3A%20anIndex%20put%3A%20anObject%0A%09%3Creturn%20self%5BanIndex%20-%201%5D%20%3D%20anObject%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_join_'),
-smalltalk.method({
-selector: unescape('join%3A'),
-category: 'enumerating',
-fn: function (aString) {
-var self=this;
-return self.join(aString);
-return self;},
-args: ["aString"],
-source: unescape('join%3A%20aString%0A%09%3Creturn%20self.join%28aString%29%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_remove_'),
-smalltalk.method({
-selector: unescape('remove%3A'),
-category: 'adding/removing',
-fn: function (anObject) {
-var self=this;
-
-		for(var i=0;i<self.length;i++) {
-			if(self[i] == anObject) {
-				self.splice(i,1);
-				break;
-			}
-		}
-	;
-return self;},
-args: ["anObject"],
-source: unescape('remove%3A%20anObject%0A%09%3C%0A%09%09for%28var%20i%3D0%3Bi%3Cself.length%3Bi++%29%20%7B%0A%09%09%09if%28self%5Bi%5D%20%3D%3D%20anObject%29%20%7B%0A%09%09%09%09self.splice%28i%2C1%29%3B%0A%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_removeFrom_to_'),
-smalltalk.method({
-selector: unescape('removeFrom%3Ato%3A'),
-category: 'adding/removing',
-fn: function (aNumber, anotherNumber) {
-var self=this;
-self.splice(aNumber - 1,anotherNumber - 1);
-return self;},
-args: ["aNumber", "anotherNumber"],
-source: unescape('removeFrom%3A%20aNumber%20to%3A%20anotherNumber%0A%09%3Cself.splice%28aNumber%20-%201%2CanotherNumber%20-%201%29%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_reversed'),
-smalltalk.method({
-selector: unescape('reversed'),
-category: 'converting',
-fn: function () {
-var self=this;
-return self._copy().reverse();
-return self;},
-args: [],
-source: unescape('reversed%0A%09%3Creturn%20self._copy%28%29.reverse%28%29%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_size'),
-smalltalk.method({
-selector: unescape('size'),
-category: 'accessing',
-fn: function () {
-var self=this;
-return self.length;
-return self;},
-args: [],
-source: unescape('size%0A%09%3Creturn%20self.length%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_sort'),
-smalltalk.method({
-selector: unescape('sort'),
-category: 'enumerating',
-fn: function () {
-var self=this;
-return smalltalk.send(self, "_basicPerform_", ["sort"]);
-return self;},
-args: [],
-source: unescape('sort%0A%20%20%20%20%5Eself%20basicPerform%3A%20%27sort%27'),
-messageSends: ["basicPerform:"],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_sort_'),
-smalltalk.method({
-selector: unescape('sort%3A'),
-category: 'enumerating',
-fn: function (aBlock) {
-var self=this;
-
-		return self.sort(function(a, b) {
-			if(aBlock(a,b)) {return -1} else {return 1}
-		})
-	;
-return self;},
-args: ["aBlock"],
-source: unescape('sort%3A%20aBlock%0A%09%3C%0A%09%09return%20self.sort%28function%28a%2C%20b%29%20%7B%0A%09%09%09if%28aBlock%28a%2Cb%29%29%20%7Breturn%20-1%7D%20else%20%7Breturn%201%7D%0A%09%09%7D%29%0A%09%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_sorted'),
-smalltalk.method({
-selector: unescape('sorted'),
-category: 'enumerating',
-fn: function () {
-var self=this;
-return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort", []);
-return self;},
-args: [],
-source: unescape('sorted%0A%09%5Eself%20copy%20sort'),
-messageSends: ["sort", "copy"],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-unescape('_sorted_'),
-smalltalk.method({
-selector: unescape('sorted%3A'),
-category: 'enumerating',
-fn: function (aBlock) {
-var self=this;
-return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort_", [aBlock]);
-return self;},
-args: ["aBlock"],
-source: unescape('sorted%3A%20aBlock%0A%09%5Eself%20copy%20sort%3A%20aBlock'),
-messageSends: ["sort:", "copy"],
-referencedClasses: []
-}),
-smalltalk.Array);
-
-
-smalltalk.addMethod(
-unescape('_new_'),
-smalltalk.method({
-selector: unescape('new%3A'),
-category: 'instance creation',
-fn: function (anInteger) {
-var self=this;
-return new Array(anInteger);
-return self;},
-args: ["anInteger"],
-source: unescape('new%3A%20anInteger%0A%09%3Creturn%20new%20Array%28anInteger%29%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Array.klass);
-
-smalltalk.addMethod(
-unescape('_with_'),
-smalltalk.method({
-selector: unescape('with%3A'),
-category: 'instance creation',
-fn: function (anObject) {
-var self=this;
-return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(1)]));
-return self;},
-args: ["anObject"],
-source: unescape('with%3A%20anObject%0A%09%20%20%20%20%5E%28self%20new%3A%201%29%0A%09%09at%3A%201%20put%3A%20anObject%3B%0A%09%09yourself'),
-messageSends: ["at:put:", "yourself", "new:"],
-referencedClasses: []
-}),
-smalltalk.Array.klass);
-
-smalltalk.addMethod(
-unescape('_with_with_'),
-smalltalk.method({
-selector: unescape('with%3Awith%3A'),
-category: 'instance creation',
-fn: function (anObject, anObject2) {
-var self=this;
-return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);smalltalk.send($rec, "_at_put_", [(2), anObject2]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(2)]));
-return self;},
-args: ["anObject", "anObject2"],
-source: unescape('with%3A%20anObject%20with%3A%20anObject2%0A%09%20%20%20%20%5E%28self%20new%3A%202%29%0A%09%09at%3A%201%20put%3A%20anObject%3B%0A%09%09at%3A%202%20put%3A%20anObject2%3B%0A%09%09yourself'),
-messageSends: ["at:put:", "yourself", "new:"],
-referencedClasses: []
-}),
-smalltalk.Array.klass);
-
-smalltalk.addMethod(
-unescape('_with_with_with_'),
-smalltalk.method({
-selector: unescape('with%3Awith%3Awith%3A'),
-category: 'instance creation',
-fn: function (anObject, anObject2, anObject3) {
-var self=this;
-return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);smalltalk.send($rec, "_at_put_", [(2), anObject2]);smalltalk.send($rec, "_at_put_", [(3), anObject3]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(3)]));
-return self;},
-args: ["anObject", "anObject2", "anObject3"],
-source: unescape('with%3A%20anObject%20with%3A%20anObject2%20with%3A%20anObject3%0A%09%20%20%20%20%5E%28self%20new%3A%203%29%0A%09%09at%3A%201%20put%3A%20anObject%3B%0A%09%09at%3A%202%20put%3A%20anObject2%3B%0A%09%09at%3A%203%20put%3A%20anObject3%3B%0A%09%09yourself'),
-messageSends: ["at:put:", "yourself", "new:"],
-referencedClasses: []
-}),
-smalltalk.Array.klass);
-
-smalltalk.addMethod(
-unescape('_withAll_'),
-smalltalk.method({
-selector: unescape('withAll%3A'),
-category: 'instance creation',
-fn: function (aCollection) {
-var self=this;
-var instance=nil;
-(instance=smalltalk.send(self, "_new_", [smalltalk.send(aCollection, "_size", [])]));
-smalltalk.send(aCollection, "_withIndexDo_", [(function(each, index){return smalltalk.send(instance, "_at_put_", [index, each]);})]);
-return instance;
-return self;},
-args: ["aCollection"],
-source: unescape('withAll%3A%20aCollection%0A%09%7C%20instance%20%7C%0A%09instance%20%3A%3D%20self%20new%3A%20aCollection%20size.%0A%09aCollection%20withIndexDo%3A%20%5B%3Aeach%20%3Aindex%20%20%7C%0A%09%09instance%20at%3A%20index%20put%3A%20each%5D.%0A%09%5Einstance'),
-messageSends: ["new:", "size", "withIndexDo:", "at:put:"],
-referencedClasses: []
-}),
-smalltalk.Array.klass);
-
-
 smalltalk.addClass('CharacterArray', smalltalk.SequenceableCollection, [], 'Kernel-Collections');
 smalltalk.addMethod(
 unescape('__comma'),
@@ -2835,7 +2523,7 @@ unescape('_asJSON'),
 smalltalk.method({
 selector: unescape('asJSON'),
 category: 'converting',
-fn: function (){
+fn: function () {
 var self=this;
 return self;
 return self;},
@@ -3696,7 +3384,7 @@ unescape('_asJSON'),
 smalltalk.method({
 selector: unescape('asJSON'),
 category: 'converting',
-fn: function (){
+fn: function () {
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_asString", []), "_asJSON", []);
 return self;},

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


File diff suppressed because it is too large
+ 142 - 812
js/Kernel-Objects.js


+ 4 - 2
st/Compiler.st

@@ -75,8 +75,10 @@ exportPackage: packageName
 	^String streamContents: [:stream |
                 package := Smalltalk current packageAt: packageName.
                 self exportPackageDefinitionOf: package on: stream.
-		"Export classes in dependency order"
-	    	package sortedClasses do: [:each |
+
+		"Export classes in dependency order.
+		Update (issue #171): Remove duplicates for export"
+	    	package sortedClasses asSet do: [:each |
                         stream nextPutAll: (self exportClass: each)].
 		self exportPackageExtensionsOf: package on: stream]
 ! !

+ 17 - 0
st/Examples.st

@@ -2,6 +2,12 @@ Smalltalk current createPackage: 'Examples' properties: #{}!
 Widget subclass: #Counter
 	instanceVariableNames: 'count header'
 	package: 'Examples'!
+!Counter commentStamp!
+This is a trivial Widget example mimicking the classic Counter example in Seaside. 
+In order to play with it, just select the doit below and press the Do it button in the far right corner.
+Then take a look in the HTML document above the IDE.
+
+        Counter new appendToJQuery: 'body' asJQuery!
 
 !Counter methodsFor: 'actions'!
 
@@ -36,3 +42,14 @@ renderOn: html
 	onClick: [self decrease]
 ! !
 
+!Counter class methodsFor: 'example'!
+
+tryExample
+	"In order to play with the Counter, just select the
+	doit below and press the Do it button. Then take a
+	look in the HTML document above the IDE."
+
+	"Counter tryExample"
+        self new appendToJQuery: 'body' asJQuery
+! !
+

+ 42 - 7
st/IDE.st

@@ -1768,7 +1768,7 @@ updatePercent: aNumber
 ! !
 
 TabWidget subclass: #ReferencesBrowser
-	instanceVariableNames: 'implementors senders implementorsList input timer selector sendersList referencedClasses referencedClassesList'
+	instanceVariableNames: 'implementors senders implementorsList input timer selector sendersList referencedClasses referencedClassesList matches matchesList'
 	package: 'IDE'!
 
 !ReferencesBrowser methodsFor: 'accessing'!
@@ -1785,6 +1785,10 @@ label
 	^'[References]'
 !
 
+matches
+	^matches ifNil: [matches := Array new]
+!
+
 referencedClasses
 	^referencedClasses ifNil: [referencedClasses := Array new]
 !
@@ -1814,10 +1818,20 @@ search: aString
 		searchReferencesFor: aString;
 		updateImplementorsList;
 		updateSendersList;
-		updateReferencedClassesList
+		updateReferencedClassesList;
+		updateMatchesList
+!
+
+searchMethodSource
+	| regex |
+	regex := selector allButFirst.
+	self classesAndMetaclasses do: [:each |
+		each methodDictionary values do: [:value |
+			(value source match: regex) ifTrue: [
+				self matches add: value]]]
 !
 
-searchReferencedClassesFor: aString
+searchReferencedClasses
 	self classesAndMetaclasses do: [:each |
 		each methodDictionary values do: [:value |
 			(value referencedClasses includes: selector) ifTrue: [
@@ -1829,12 +1843,14 @@ searchReferencesFor: aString
 	implementors := Array new.
 	senders := Array new.
 	referencedClasses := Array new.
+	matches := Array new.
+	self searchMethodSource.
 	(selector match: '^[A-Z]') 
-		ifFalse: [self searchSelectorReferencesFor: selector]
-		ifTrue: [self searchReferencedClassesFor: selector]
+		ifFalse: [self searchSelectorReferences]
+		ifTrue: [self searchReferencedClasses]
 !
 
-searchSelectorReferencesFor: aString
+searchSelectorReferences
 	self classesAndMetaclasses do: [:each | 
 		each methodDictionary keysAndValuesDo: [:key :value | 
 			key = selector ifTrue: [self implementors add: value].
@@ -1864,7 +1880,8 @@ renderBoxOn: html
 		renderInputOn: html;
 		renderImplementorsOn: html;
 		renderSendersOn: html;
-		renderReferencedClassesOn: html
+		renderReferencedClassesOn: html;
+		renderMatchesOn: html
 !
 
 renderImplementorsOn: html
@@ -1880,6 +1897,11 @@ renderInputOn: html
 	self setInputEvents
 !
 
+renderMatchesOn: html
+	matchesList := html ul class: 'jt_column matches'.
+	self updateMatchesList
+!
+
 renderReferencedClassesOn: html
 	referencedClassesList := html ul class: 'jt_column referenced_classes'.
 	self updateReferencedClassesList
@@ -1911,6 +1933,19 @@ updateImplementorsList
 		onClick: [self openBrowserOn: each]]]
 !
 
+updateMatchesList
+    matchesList contents: [:html |
+	html li
+		class: 'column_label'; 
+		with: 'Regex matches (', self matches size asString, ')';
+		style: 'font-weight: bold'.
+	self matches do: [:each || li |
+	    li := html li.
+	    li
+		with: (each methodClass asString, ' >> ', each selector);
+		onClick: [self openBrowserOn: each]]]
+!
+
 updateReferencedClassesList
 	referencedClassesList contents: [:html |
 	html li

+ 5 - 0
st/Kernel-Classes.st

@@ -154,6 +154,11 @@ new
 
 !Behavior methodsFor: 'testing'!
 
+canUnderstand: aSelector
+	^(self methodDictionary keys includes: aSelector asString) or: [
+		self superclass notNil and: [self superclass canUnderstand: aSelector]]
+!
+
 inheritsFrom: aClass
 	^aClass allSubclasses includes: self
 ! !

+ 0 - 117
st/Kernel-Collections.st

@@ -847,123 +847,6 @@ withAll: aCollection
 	^instance
 ! !
 
-SequenceableCollection subclass: #Array
-	instanceVariableNames: ''
-	package: 'Kernel-Collections'!
-
-!Array methodsFor: 'accessing'!
-
-at: anIndex ifAbsent: aBlock
-	<
-	    var value = self[anIndex - 1];
-	    if(value === undefined) {
-		return aBlock();
-	    } else {
-		return value;
-	    }
-	>
-!
-
-at: anIndex put: anObject
-	<return self[anIndex - 1] = anObject>
-!
-
-size
-	<return self.length>
-! !
-
-!Array methodsFor: 'adding/removing'!
-
-add: anObject
-	<self.push(anObject); return anObject;>
-!
-
-remove: anObject
-	<
-		for(var i=0;i<self.length;i++) {
-			if(self[i] == anObject) {
-				self.splice(i,1);
-				break;
-			}
-		}
-	>
-!
-
-removeFrom: aNumber to: anotherNumber
-	<self.splice(aNumber - 1,anotherNumber - 1)>
-! !
-
-!Array methodsFor: 'converting'!
-
-asJavascript
-	^'[', ((self collect: [:each | each asJavascript]) join: ', '),  ']'
-!
-
-reversed
-	<return self._copy().reverse()>
-! !
-
-!Array methodsFor: 'enumerating'!
-
-join: aString
-	<return self.join(aString)>
-!
-
-sort
-    ^self basicPerform: 'sort'
-!
-
-sort: aBlock
-	<
-		return self.sort(function(a, b) {
-			if(aBlock(a,b)) {return -1} else {return 1}
-		})
-	>
-!
-
-sorted
-	^self copy sort
-!
-
-sorted: aBlock
-	^self copy sort: aBlock
-! !
-
-!Array class methodsFor: 'instance creation'!
-
-new: anInteger
-	<return new Array(anInteger)>
-!
-
-with: anObject
-	    ^(self new: 1)
-		at: 1 put: anObject;
-		yourself
-!
-
-with: anObject with: anObject2
-	    ^(self new: 2)
-		at: 1 put: anObject;
-		at: 2 put: anObject2;
-		yourself
-!
-
-with: anObject with: anObject2 with: anObject3
-	    ^(self new: 3)
-		at: 1 put: anObject;
-		at: 2 put: anObject2;
-		at: 3 put: anObject3;
-		yourself
-!
-
-withAll: aCollection
-	| instance |
-	instance := self new: aCollection size.
-	aCollection withIndexDo: [:each :index  |
-		instance at: index put: each].
-	^instance
-! !
-
 SequenceableCollection subclass: #CharacterArray
 	instanceVariableNames: ''
 	package: 'Kernel-Collections'!

+ 16 - 187
st/Kernel-Objects.st

@@ -215,7 +215,9 @@ perform: aSymbol
 !
 
 perform: aSymbol withArguments: aCollection
-	^self basicPerform: aSymbol asSelector withArguments: aCollection
+	| selector |
+	selector := aSymbol asSelector.
+	<return smalltalk.send(self, selector, aCollection)>
 ! !
 
 !Object methodsFor: 'printing'!
@@ -308,6 +310,10 @@ isSymbol
 
 notNil
 	^self isNil not
+!
+
+respondsTo: aSelector
+	^self class canUnderstand: aSelector
 ! !
 
 !Object class methodsFor: 'initialization'!
@@ -603,191 +609,6 @@ today
 	^self new
 ! !
 
-Object subclass: #Date
-	instanceVariableNames: ''
-	package: 'Kernel-Objects'!
-!Date commentStamp!
-The Date class is used to work with dates and times. Therefore `Date today` and `Date now` are both valid in
-Amber and answer the same date object.
-
-Date wraps the `Date()` JavaScript constructor, and Smalltalk date objects are JavaScript date objects.!
-
-!Date methodsFor: 'accessing'!
-
-day
-	^self dayOfWeek
-!
-
-day: aNumber
-	self day: aNumber
-!
-
-dayOfMonth
-	<return self.getDate()>
-!
-
-dayOfMonth: aNumber
-	<self.setDate(aNumber)>
-!
-
-dayOfWeek
-	<return self.getDay() + 1>
-!
-
-dayOfWeek: aNumber
-	<return self.setDay(aNumber - 1)>
-!
-
-hours
-	<return self.getHours()>
-!
-
-hours: aNumber
-	<self.setHours(aNumber)>
-!
-
-milliseconds
-	<return self.getMilliseconds()>
-!
-
-milliseconds: aNumber
-	<self.setMilliseconds(aNumber)>
-!
-
-minutes
-	<return self.getMinutes()>
-!
-
-minutes: aNumber
-	<self.setMinutes(aNumber)>
-!
-
-month
-	<return self.getMonth() + 1>
-!
-
-month: aNumber
-	<self.setMonth(aNumber - 1)>
-!
-
-seconds
-	<return self.getSeconds()>
-!
-
-seconds: aNumber
-	<self.setSeconds(aNumber)>
-!
-
-time
-	<return self.getTime()>
-!
-
-time: aNumber
-	<self.setTime(aNumber)>
-!
-
-year
-	<return self.getFullYear()>
-!
-
-year: aNumber
-	<self.setFullYear(aNumber)>
-! !
-
-!Date methodsFor: 'arithmetic'!
-
-+ aDate
-	<return self + aDate>
-!
-
-- aDate
-	<return self - aDate>
-! !
-
-!Date methodsFor: 'comparing'!
-
-< aDate
-	<return self < aDate>
-!
-
-<= aDate
-	<return self <= aDate>
-!
-
-> aDate
-	<return self >> aDate>
-!
-
->= aDate
-	<return self >>= aDate>
-! !
-
-!Date methodsFor: 'converting'!
-
-asDateString
-	<return self.toDateString()>
-!
-
-asLocaleString
-	<return self.toLocaleString()>
-!
-
-asMilliseconds
-	^self time
-!
-
-asNumber
-	^self asMilliseconds
-!
-
-asString
-	<return self.toString()>
-!
-
-asTimeString
-	<return self.toTimeString()>
-! !
-
-!Date methodsFor: 'printing'!
-
-printString
-	^self asString
-! !
-
-!Date class methodsFor: 'instance creation'!
-
-fromMilliseconds: aNumber
-	^self new: aNumber
-!
-
-fromSeconds: aNumber
-	^self fromMilliseconds: aNumber * 1000
-!
-
-fromString: aString
-	"Example: Date fromString('2011/04/15 00:00:00')"
-	^self new: aString
-!
-
-millisecondsToRun: aBlock
-	| t |
-	t := Date now.
-	aBlock value.
-	^Date now - t
-!
-
-new: anObject
-	<return new Date(anObject)>
-!
-
-now
-	^self today
-!
-
-today
-	^self new
-! !
-
 Object subclass: #JSObjectProxy
 	instanceVariableNames: 'jsObject'
 	package: 'Kernel-Objects'!
@@ -970,6 +791,10 @@ squared
 
 !Number methodsFor: 'converting'!
 
+& aNumber
+	<return self & aNumber>
+!
+
 @ aNumber
 	^Point x: self y: aNumber
 !
@@ -1037,6 +862,10 @@ truncated
         ifFalse: [<result = (Math.floor(self * (-1)) * (-1));>].
 
     ^ result
+!
+
+| aNumber
+	<return self | aNumber>
 ! !
 
 !Number methodsFor: 'copying'!
@@ -1219,7 +1048,7 @@ classes
 !
 
 sortedClasses
-	"Answer all classes in the receiver, sorted by superclass/subclasses and by class name for common subclasses (Issue #143)"
+	"Answer all classes in the receiver, sorted by superclass/subclasses and by class name for common subclasses (Issue #143)."
 
 	^self class sortedClasses: self classes
 ! !

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