From 4bf3896b0478e178e9e53971f3b8278e898ad1af Mon Sep 17 00:00:00 2001 From: llaffont <llaffont@git-test.afi-sa.fr> Date: Thu, 12 Apr 2012 09:18:08 +0000 Subject: [PATCH] MAJ Amber --- .gitattributes | 1 + amber/src/js/Benchfib.deploy.js | 40 +- amber/src/js/Benchfib.js | 50 +- amber/src/js/Canvas.deploy.js | 1848 ++++---- amber/src/js/Canvas.js | 3204 ++++++------- amber/src/js/Compiler.deploy.js | 1720 +++---- amber/src/js/Compiler.js | 2760 +++++------ amber/src/js/Examples.deploy.js | 12 +- amber/src/js/Examples.js | 20 +- amber/src/js/IDE.deploy.js | 3008 ++++++------ amber/src/js/IDE.js | 4730 +++++++++---------- amber/src/js/Kernel-Classes.deploy.js | 497 +- amber/src/js/Kernel-Classes.js | 791 ++-- amber/src/js/Kernel-Collections.deploy.js | 3077 ++++++------ amber/src/js/Kernel-Collections.js | 5135 +++++++++++---------- amber/src/js/Kernel-Exceptions.deploy.js | 122 +- amber/src/js/Kernel-Exceptions.js | 134 +- amber/src/js/Kernel-Methods.deploy.js | 442 +- amber/src/js/Kernel-Methods.js | 704 +-- amber/src/js/Kernel-Objects.deploy.js | 2949 ++++++------ amber/src/js/Kernel-Objects.js | 4986 ++++++++++---------- amber/src/js/Kernel-Tests.deploy.js | 1458 +++--- amber/src/js/Kernel-Tests.js | 2088 +++++---- amber/src/js/Kernel-Transcript.deploy.js | 114 +- amber/src/js/Kernel-Transcript.js | 178 +- amber/src/js/SUnit.deploy.js | 224 +- amber/src/js/SUnit.js | 404 +- amber/src/js/amber.js | 17 +- amber/src/js/init.js | 2 +- amber/src/st/Benchfib.st | 44 +- amber/src/st/Canvas.st | 942 ++-- amber/src/st/Compiler-Tests.st | 471 ++ amber/src/st/Compiler.st | 1593 +++---- amber/src/st/Examples.st | 10 +- amber/src/st/IDE.st | 2582 +++++------ amber/src/st/Kernel-Announcements.st | 4 +- amber/src/st/Kernel-Classes.st | 219 +- amber/src/st/Kernel-Collections.st | 2133 ++++----- amber/src/st/Kernel-Exceptions.st | 46 +- amber/src/st/Kernel-Methods.st | 302 +- amber/src/st/Kernel-Objects.st | 1952 ++++---- amber/src/st/Kernel-Tests.st | 1114 ++--- amber/src/st/Kernel-Transcript.st | 76 +- amber/src/st/SUnit.st | 106 +- 44 files changed, 26655 insertions(+), 25654 deletions(-) create mode 100644 amber/src/st/Compiler-Tests.st diff --git a/.gitattributes b/.gitattributes index 71c51f7976c..8c09755e2f8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -225,6 +225,7 @@ amber/src/server/Makefile -text amber/src/server/server.js -text amber/src/st/Benchfib.st -text amber/src/st/Canvas.st -text +amber/src/st/Compiler-Tests.st -text amber/src/st/Compiler.st -text amber/src/st/Documentation.st -text amber/src/st/Examples.st -text diff --git a/amber/src/js/Benchfib.deploy.js b/amber/src/js/Benchfib.deploy.js index da0e958a390..e5582a865a9 100644 --- a/amber/src/js/Benchfib.deploy.js +++ b/amber/src/js/Benchfib.deploy.js @@ -44,26 +44,6 @@ return self;} }), smalltalk.Number); -smalltalk.addMethod( -unescape('_tinyBenchmarks'), -smalltalk.method({ -selector: unescape('tinyBenchmarks'), -fn: function (){ -var self=this; -var t1=nil; -var t2=nil; -var r=nil; -var n1=nil; -var n2=nil; -(n1=(1)); -(function(){while((function(){(t1=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return smalltalk.send(n1, "_benchmark", []);})]));return ((($receiver = t1).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n1=((($receiver = n1).klass === smalltalk.Number) ? $receiver *(2) : smalltalk.send($receiver, "__star", [(2)])));})()}})(); -(n2=(16)); -(function(){while((function(){(t2=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return (r=smalltalk.send(n2, "_benchFib", []));})]));return ((($receiver = t2).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n2=((($receiver = n2).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})(); -return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(((($receiver = ((($receiver = ((($receiver = n1).klass === smalltalk.Number) ? $receiver *(500000) : smalltalk.send($receiver, "__star", [(500000)]))).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t1 : smalltalk.send($receiver, "__slash", [t1])), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(((($receiver = ((($receiver = r).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t2 : smalltalk.send($receiver, "__slash", [t2])), "_printString", [])]), "__comma", [unescape("%20sends/sec")]); -return self;} -}), -smalltalk.Number); - smalltalk.addMethod( unescape('_jsbenchFib'), smalltalk.method({ @@ -130,3 +110,23 @@ return self;} }), smalltalk.Number); +smalltalk.addMethod( +unescape('_tinyBenchmarks'), +smalltalk.method({ +selector: unescape('tinyBenchmarks'), +fn: function (){ +var self=this; +var t1=nil; +var t2=nil; +var r=nil; +var n1=nil; +var n2=nil; +(n1=(1)); +(function(){while((function(){(t1=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return smalltalk.send(n1, "_benchmark", []);})]));return ((($receiver = t1).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n1=((($receiver = n1).klass === smalltalk.Number) ? $receiver *(2) : smalltalk.send($receiver, "__star", [(2)])));})()}})(); +(n2=(16)); +(function(){while((function(){(t2=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return (r=smalltalk.send(n2, "_benchFib", []));})]));return ((($receiver = t2).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n2=((($receiver = n2).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})(); +return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(((($receiver = ((($receiver = ((($receiver = n1).klass === smalltalk.Number) ? $receiver *(500000) : smalltalk.send($receiver, "__star", [(500000)]))).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t1 : smalltalk.send($receiver, "__slash", [t1])), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(((($receiver = ((($receiver = r).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t2 : smalltalk.send($receiver, "__slash", [t2])), "_printString", [])]), "__comma", [unescape("%20sends/sec")]); +return self;} +}), +smalltalk.Number); + diff --git a/amber/src/js/Benchfib.js b/amber/src/js/Benchfib.js index 550d7334745..4789ccbdefe 100755 --- a/amber/src/js/Benchfib.js +++ b/amber/src/js/Benchfib.js @@ -59,31 +59,6 @@ referencedClasses: ["Array"] }), smalltalk.Number); -smalltalk.addMethod( -unescape('_tinyBenchmarks'), -smalltalk.method({ -selector: unescape('tinyBenchmarks'), -category: '*Benchfib', -fn: function (){ -var self=this; -var t1=nil; -var t2=nil; -var r=nil; -var n1=nil; -var n2=nil; -(n1=(1)); -(function(){while((function(){(t1=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return smalltalk.send(n1, "_benchmark", []);})]));return ((($receiver = t1).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n1=((($receiver = n1).klass === smalltalk.Number) ? $receiver *(2) : smalltalk.send($receiver, "__star", [(2)])));})()}})(); -(n2=(16)); -(function(){while((function(){(t2=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return (r=smalltalk.send(n2, "_benchFib", []));})]));return ((($receiver = t2).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n2=((($receiver = n2).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})(); -return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(((($receiver = ((($receiver = ((($receiver = n1).klass === smalltalk.Number) ? $receiver *(500000) : smalltalk.send($receiver, "__star", [(500000)]))).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t1 : smalltalk.send($receiver, "__slash", [t1])), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(((($receiver = ((($receiver = r).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t2 : smalltalk.send($receiver, "__slash", [t2])), "_printString", [])]), "__comma", [unescape("%20sends/sec")]); -return self;}, -args: [], -source: unescape('tinyBenchmarks%20%0A%09%22Report%20the%20results%20of%20running%20the%20two%20tiny%20Squeak%20benchmarks.%0A%09ar%209/10/1999%3A%20Adjusted%20to%20run%20at%20least%201%20sec%20to%20get%20more%20stable%20results%22%0A%09%220%20tinyBenchmarks%22%0A%09%22On%20a%20292%20MHz%20G3%20Mac%3A%2022727272%20bytecodes/sec%3B%20984169%20sends/sec%22%0A%09%22On%20a%20400%20MHz%20PII/Win98%3A%20%2018028169%20bytecodes/sec%3B%201081272%20sends/sec%22%0A%09%7C%20t1%20t2%20r%20n1%20n2%20%7C%0A%09n1%20%3A%3D%201.%0A%09%5Bt1%20%3A%3D%20Date%20millisecondsToRun%3A%20%5Bn1%20benchmark%5D.%0A%09t1%20%3C%201000%5D%20whileTrue%3A%5Bn1%20%3A%3D%20n1%20*%202%5D.%20%22Note%3A%20%23benchmark%27s%20runtime%20is%20about%20O%28n%29%22%0A%0A%09n2%20%3A%3D%2016.%0A%09%5Bt2%20%3A%3D%20Date%20millisecondsToRun%3A%20%5Br%20%3A%3D%20n2%20benchFib%5D.%0A%09t2%20%3C%201000%5D%20whileTrue%3A%5Bn2%20%3A%3D%20n2%20+%201%5D.%20%0A%09%22Note%3A%20%23benchFib%27s%20runtime%20is%20about%20O%28k%5En%29%2C%0A%09%09where%20k%20is%20the%20golden%20number%20%3D%20%281%20+%205%20sqrt%29%20/%202%20%3D%201.618....%22%0A%0A%09%5E%20%28%28n1%20*%20500000%20*%201000%29%20/%20t1%29%20printString%2C%20%27%20bytecodes/sec%3B%20%27%2C%0A%09%20%20%28%28r%20*%201000%29%20/%20t2%29%20printString%2C%20%27%20sends/sec%27'), -messageSends: ["whileTrue:", "millisecondsToRun:", "benchmark", unescape("%3C"), unescape("*"), "benchFib", unescape("+"), unescape("%2C"), "printString", unescape("/")], -referencedClasses: ["Date"] -}), -smalltalk.Number); - smalltalk.addMethod( unescape('_jsbenchFib'), smalltalk.method({ @@ -165,3 +140,28 @@ referencedClasses: ["Date"] }), smalltalk.Number); +smalltalk.addMethod( +unescape('_tinyBenchmarks'), +smalltalk.method({ +selector: unescape('tinyBenchmarks'), +category: '*Benchfib', +fn: function (){ +var self=this; +var t1=nil; +var t2=nil; +var r=nil; +var n1=nil; +var n2=nil; +(n1=(1)); +(function(){while((function(){(t1=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return smalltalk.send(n1, "_benchmark", []);})]));return ((($receiver = t1).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n1=((($receiver = n1).klass === smalltalk.Number) ? $receiver *(2) : smalltalk.send($receiver, "__star", [(2)])));})()}})(); +(n2=(16)); +(function(){while((function(){(t2=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return (r=smalltalk.send(n2, "_benchFib", []));})]));return ((($receiver = t2).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n2=((($receiver = n2).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})(); +return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(((($receiver = ((($receiver = ((($receiver = n1).klass === smalltalk.Number) ? $receiver *(500000) : smalltalk.send($receiver, "__star", [(500000)]))).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t1 : smalltalk.send($receiver, "__slash", [t1])), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(((($receiver = ((($receiver = r).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t2 : smalltalk.send($receiver, "__slash", [t2])), "_printString", [])]), "__comma", [unescape("%20sends/sec")]); +return self;}, +args: [], +source: unescape('tinyBenchmarks%20%0A%09%22Report%20the%20results%20of%20running%20the%20two%20tiny%20Squeak%20benchmarks.%0A%09ar%209/10/1999%3A%20Adjusted%20to%20run%20at%20least%201%20sec%20to%20get%20more%20stable%20results%22%0A%09%220%20tinyBenchmarks%22%0A%09%22On%20a%20292%20MHz%20G3%20Mac%3A%2022727272%20bytecodes/sec%3B%20984169%20sends/sec%22%0A%09%22On%20a%20400%20MHz%20PII/Win98%3A%20%2018028169%20bytecodes/sec%3B%201081272%20sends/sec%22%0A%09%7C%20t1%20t2%20r%20n1%20n2%20%7C%0A%09n1%20%3A%3D%201.%0A%09%5Bt1%20%3A%3D%20Date%20millisecondsToRun%3A%20%5Bn1%20benchmark%5D.%0A%09t1%20%3C%201000%5D%20whileTrue%3A%5Bn1%20%3A%3D%20n1%20*%202%5D.%20%22Note%3A%20%23benchmark%27s%20runtime%20is%20about%20O%28n%29%22%0A%0A%09n2%20%3A%3D%2016.%0A%09%5Bt2%20%3A%3D%20Date%20millisecondsToRun%3A%20%5Br%20%3A%3D%20n2%20benchFib%5D.%0A%09t2%20%3C%201000%5D%20whileTrue%3A%5Bn2%20%3A%3D%20n2%20+%201%5D.%20%0A%09%22Note%3A%20%23benchFib%27s%20runtime%20is%20about%20O%28k%5En%29%2C%0A%09%09where%20k%20is%20the%20golden%20number%20%3D%20%281%20+%205%20sqrt%29%20/%202%20%3D%201.618....%22%0A%0A%09%5E%20%28%28n1%20*%20500000%20*%201000%29%20/%20t1%29%20printString%2C%20%27%20bytecodes/sec%3B%20%27%2C%0A%09%20%20%28%28r%20*%201000%29%20/%20t2%29%20printString%2C%20%27%20sends/sec%27'), +messageSends: ["whileTrue:", "millisecondsToRun:", "benchmark", unescape("%3C"), unescape("*"), "benchFib", unescape("+"), unescape("%2C"), "printString", unescape("/")], +referencedClasses: ["Date"] +}), +smalltalk.Number); + diff --git a/amber/src/js/Canvas.deploy.js b/amber/src/js/Canvas.deploy.js index e7064a222cf..cf2d2c346a3 100644 --- a/amber/src/js/Canvas.deploy.js +++ b/amber/src/js/Canvas.deploy.js @@ -1,2114 +1,2078 @@ smalltalk.addPackage('Canvas', {}); -smalltalk.addClass('Widget', smalltalk.Object, [], 'Canvas'); -smalltalk.addMethod( -unescape('_appendToBrush_'), -smalltalk.method({ -selector: unescape('appendToBrush%3A'), -fn: function (aTagBrush){ -var self=this; -smalltalk.send(self, "_appendToJQuery_", [smalltalk.send(aTagBrush, "_asJQuery", [])]); -return self;} -}), -smalltalk.Widget); - -smalltalk.addMethod( -unescape('_appendToJQuery_'), -smalltalk.method({ -selector: unescape('appendToJQuery%3A'), -fn: function (aJQuery){ -var self=this; -smalltalk.send(self, "_renderOn_", [smalltalk.send((smalltalk.HTMLCanvas || HTMLCanvas), "_onJQuery_", [aJQuery])]); -return self;} -}), -smalltalk.Widget); - -smalltalk.addMethod( -unescape('_renderOn_'), -smalltalk.method({ -selector: unescape('renderOn%3A'), -fn: function (html){ -var self=this; -self; -return self;} -}), -smalltalk.Widget); - - - -smalltalk.addClass('TagBrush', smalltalk.Object, ['canvas', 'element'], 'Canvas'); +smalltalk.addClass('HTMLCanvas', smalltalk.Object, ['root'], 'Canvas'); smalltalk.addMethod( -unescape('_element'), +unescape('_a'), smalltalk.method({ -selector: unescape('element'), +selector: unescape('a'), fn: function (){ var self=this; -return self['@element']; -return self;} -}), -smalltalk.TagBrush); - -smalltalk.addMethod( -unescape('_contents_'), -smalltalk.method({ -selector: unescape('contents%3A'), -fn: function (anObject){ -var self=this; -(function($rec){smalltalk.send($rec, "_empty", []);return smalltalk.send($rec, "_append_", [anObject]);})(self); +return smalltalk.send(self, "_tag_", ["a"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_addBrush_'), +unescape('_abbr'), smalltalk.method({ -selector: unescape('addBrush%3A'), -fn: function (aTagBrush){ +selector: unescape('abbr'), +fn: function (){ var self=this; -smalltalk.send(self, "_appendChild_", [smalltalk.send(aTagBrush, "_element", [])]); -return aTagBrush; +return smalltalk.send(self, "_tag_", ["abbr"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_with_'), +unescape('_address'), smalltalk.method({ -selector: unescape('with%3A'), -fn: function (anObject){ +selector: unescape('address'), +fn: function (){ var self=this; -smalltalk.send(self, "_append_", [anObject]); +return smalltalk.send(self, "_tag_", ["address"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_append_'), +unescape('_area'), smalltalk.method({ -selector: unescape('append%3A'), -fn: function (anObject){ +selector: unescape('area'), +fn: function (){ var self=this; -smalltalk.send(anObject, "_appendToBrush_", [self]); +return smalltalk.send(self, "_tag_", ["area"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_appendToBrush_'), +unescape('_article'), smalltalk.method({ -selector: unescape('appendToBrush%3A'), -fn: function (aTagBrush){ +selector: unescape('article'), +fn: function (){ var self=this; -smalltalk.send(aTagBrush, "_addBrush_", [self]); +return smalltalk.send(self, "_tag_", ["article"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_appendBlock_'), +unescape('_aside'), smalltalk.method({ -selector: unescape('appendBlock%3A'), -fn: function (aBlock){ +selector: unescape('aside'), +fn: function (){ var self=this; -var root=nil; -(root=smalltalk.send(self['@canvas'], "_root", [])); -smalltalk.send(self['@canvas'], "_root_", [self]); -smalltalk.send(aBlock, "_value_", [self['@canvas']]); -smalltalk.send(self['@canvas'], "_root_", [root]); +return smalltalk.send(self, "_tag_", ["aside"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_appendChild_'), +unescape('_audio'), smalltalk.method({ -selector: unescape('appendChild%3A'), -fn: function (anElement){ +selector: unescape('audio'), +fn: function (){ var self=this; -var element=self['@element']; - if (null == element.canHaveChildren || element.canHaveChildren) { - element.appendChild(anElement); - } else { - element.text = String(element.text) + anElement.innerHTML; - } ; +return smalltalk.send(self, "_tag_", ["audio"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_appendString_'), +unescape('_base'), smalltalk.method({ -selector: unescape('appendString%3A'), -fn: function (aString){ +selector: unescape('base'), +fn: function (){ var self=this; -smalltalk.send(self, "_appendChild_", [smalltalk.send(self, "_createTextNodeFor_", [aString])]); +return smalltalk.send(self, "_tag_", ["base"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_empty'), +unescape('_blockquote'), smalltalk.method({ -selector: unescape('empty'), +selector: unescape('blockquote'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []); +return smalltalk.send(self, "_tag_", ["blockquote"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_body'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), -fn: function (aString, aValue){ +selector: unescape('body'), +fn: function (){ var self=this; -self['@element'].setAttribute(aString, aValue); +return smalltalk.send(self, "_tag_", ["body"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_removeAt_'), +unescape('_br'), smalltalk.method({ -selector: unescape('removeAt%3A'), -fn: function (aString){ +selector: unescape('br'), +fn: function (){ var self=this; -self['@element'].removeAttribute(aString); +return smalltalk.send(self, "_tag_", ["br"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_class_'), +unescape('_button'), smalltalk.method({ -selector: unescape('class%3A'), -fn: function (aString){ +selector: unescape('button'), +fn: function (){ var self=this; -self['@element'].className = aString; +return smalltalk.send(self, "_tag_", ["button"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_id_'), +unescape('_canvas'), smalltalk.method({ -selector: unescape('id%3A'), -fn: function (aString){ +selector: unescape('canvas'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["id", aString]); +return smalltalk.send(self, "_tag_", ["canvas"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_src_'), +unescape('_caption'), smalltalk.method({ -selector: unescape('src%3A'), -fn: function (aString){ +selector: unescape('caption'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["src", aString]); +return smalltalk.send(self, "_tag_", ["caption"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_href_'), +unescape('_cite'), smalltalk.method({ -selector: unescape('href%3A'), -fn: function (aString){ +selector: unescape('cite'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["href", aString]); +return smalltalk.send(self, "_tag_", ["cite"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_title_'), +unescape('_code'), smalltalk.method({ -selector: unescape('title%3A'), -fn: function (aString){ +selector: unescape('code'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["title", aString]); +return smalltalk.send(self, "_tag_", ["code"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_style_'), +unescape('_col'), smalltalk.method({ -selector: unescape('style%3A'), -fn: function (aString){ +selector: unescape('col'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["style", aString]); +return smalltalk.send(self, "_tag_", ["col"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_type_'), +unescape('_colgroup'), smalltalk.method({ -selector: unescape('type%3A'), -fn: function (aString){ +selector: unescape('colgroup'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["type", aString]); +return smalltalk.send(self, "_tag_", ["colgroup"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_media_'), +unescape('_command'), smalltalk.method({ -selector: unescape('media%3A'), -fn: function (aString){ +selector: unescape('command'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["media", aString]); +return smalltalk.send(self, "_tag_", ["command"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_rel_'), +unescape('_datalist'), smalltalk.method({ -selector: unescape('rel%3A'), -fn: function (aString){ +selector: unescape('datalist'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["rel", aString]); +return smalltalk.send(self, "_tag_", ["datalist"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_width_'), +unescape('_dd'), smalltalk.method({ -selector: unescape('width%3A'), -fn: function (aString){ +selector: unescape('dd'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["width", aString]); +return smalltalk.send(self, "_tag_", ["dd"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_height_'), +unescape('_del'), smalltalk.method({ -selector: unescape('height%3A'), -fn: function (aString){ +selector: unescape('del'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["height", aString]); +return smalltalk.send(self, "_tag_", ["del"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_value_'), +unescape('_details'), smalltalk.method({ -selector: unescape('value%3A'), -fn: function (aString){ +selector: unescape('details'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["value", aString]); +return smalltalk.send(self, "_tag_", ["details"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_asJQuery'), +unescape('_div'), smalltalk.method({ -selector: unescape('asJQuery'), +selector: unescape('div'), fn: function (){ var self=this; -return smalltalk.send((typeof window == 'undefined' ? nil : window), "_jQuery_", [smalltalk.send(self, "_element", [])]); +return smalltalk.send(self, "_tag_", ["div"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onKeyDown_'), +unescape('_div_'), smalltalk.method({ -selector: unescape('onKeyDown%3A'), +selector: unescape('div%3A'), fn: function (aBlock){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["keydown", aBlock]); +return smalltalk.send(smalltalk.send(self, "_div", []), "_with_", [aBlock]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onKeyPress_'), +unescape('_dl'), smalltalk.method({ -selector: unescape('onKeyPress%3A'), -fn: function (aBlock){ +selector: unescape('dl'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["keypress", aBlock]); +return smalltalk.send(self, "_tag_", ["dl"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onKeyUp_'), +unescape('_dt'), smalltalk.method({ -selector: unescape('onKeyUp%3A'), -fn: function (aBlock){ +selector: unescape('dt'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["keyup", aBlock]); +return smalltalk.send(self, "_tag_", ["dt"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onFocus_'), +unescape('_em'), smalltalk.method({ -selector: unescape('onFocus%3A'), -fn: function (aBlock){ +selector: unescape('em'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["focus", aBlock]); +return smalltalk.send(self, "_tag_", ["em"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onBlur_'), +unescape('_embed'), smalltalk.method({ -selector: unescape('onBlur%3A'), -fn: function (aBlock){ +selector: unescape('embed'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["blur", aBlock]); +return smalltalk.send(self, "_tag_", ["embed"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onChange_'), +unescape('_fieldset'), smalltalk.method({ -selector: unescape('onChange%3A'), -fn: function (aBlock){ +selector: unescape('fieldset'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["change", aBlock]); +return smalltalk.send(self, "_tag_", ["fieldset"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onClick_'), +unescape('_figcaption'), smalltalk.method({ -selector: unescape('onClick%3A'), -fn: function (aBlock){ +selector: unescape('figcaption'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["click", aBlock]); +return smalltalk.send(self, "_tag_", ["figcaption"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_initializeFromString_canvas_'), +unescape('_figure'), smalltalk.method({ -selector: unescape('initializeFromString%3Acanvas%3A'), -fn: function (aString, aCanvas){ +selector: unescape('figure'), +fn: function (){ var self=this; -(self['@element']=smalltalk.send(self, "_createElementFor_", [aString])); -(self['@canvas']=aCanvas); +return smalltalk.send(self, "_tag_", ["figure"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_initializeFromJQuery_canvas_'), +unescape('_footer'), smalltalk.method({ -selector: unescape('initializeFromJQuery%3Acanvas%3A'), -fn: function (aJQuery, aCanvas){ +selector: unescape('footer'), +fn: function (){ var self=this; -(self['@element']=smalltalk.send(aJQuery, "_get_", [(0)])); -(self['@canvas']=aCanvas); +return smalltalk.send(self, "_tag_", ["footer"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_createElementFor_'), +unescape('_form'), smalltalk.method({ -selector: unescape('createElementFor%3A'), -fn: function (aString){ +selector: unescape('form'), +fn: function (){ var self=this; -return document.createElement(String(aString)); +return smalltalk.send(self, "_tag_", ["form"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_createTextNodeFor_'), +unescape('_h1'), smalltalk.method({ -selector: unescape('createTextNodeFor%3A'), -fn: function (aString){ +selector: unescape('h1'), +fn: function (){ var self=this; -return document.createTextNode(String(aString)); +return smalltalk.send(self, "_tag_", ["h1"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onSubmit_'), +unescape('_h1_'), smalltalk.method({ -selector: unescape('onSubmit%3A'), -fn: function (aBlock){ +selector: unescape('h1%3A'), +fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["submit", aBlock]); +return smalltalk.send(smalltalk.send(self, "_h1", []), "_with_", [anObject]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onDblClick_'), +unescape('_h2'), smalltalk.method({ -selector: unescape('onDblClick%3A'), -fn: function (aBlock){ +selector: unescape('h2'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["dblclick", aBlock]); +return smalltalk.send(self, "_tag_", ["h2"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onHover_'), +unescape('_h2_'), smalltalk.method({ -selector: unescape('onHover%3A'), -fn: function (aBlock){ +selector: unescape('h2%3A'), +fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["hover", aBlock]); +return smalltalk.send(smalltalk.send(self, "_h2", []), "_with_", [anObject]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onFocusIn_'), +unescape('_h3'), smalltalk.method({ -selector: unescape('onFocusIn%3A'), -fn: function (aBlock){ +selector: unescape('h3'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["focusin", aBlock]); +return smalltalk.send(self, "_tag_", ["h3"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onFocusOut_'), +unescape('_h3_'), smalltalk.method({ -selector: unescape('onFocusOut%3A'), -fn: function (aBlock){ +selector: unescape('h3%3A'), +fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["focusout", aBlock]); +return smalltalk.send(smalltalk.send(self, "_h3", []), "_with_", [anObject]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseDown_'), +unescape('_h4'), smalltalk.method({ -selector: unescape('onMouseDown%3A'), -fn: function (aBlock){ +selector: unescape('h4'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mousedown", aBlock]); +return smalltalk.send(self, "_tag_", ["h4"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseUp_'), +unescape('_h4_'), smalltalk.method({ -selector: unescape('onMouseUp%3A'), -fn: function (aBlock){ +selector: unescape('h4%3A'), +fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseup", aBlock]); +return smalltalk.send(smalltalk.send(self, "_h4", []), "_with_", [anObject]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseEnter_'), +unescape('_h5'), smalltalk.method({ -selector: unescape('onMouseEnter%3A'), -fn: function (aBlock){ +selector: unescape('h5'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseenter", aBlock]); +return smalltalk.send(self, "_tag_", ["h5"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseLeave_'), +unescape('_h5_'), smalltalk.method({ -selector: unescape('onMouseLeave%3A'), -fn: function (aBlock){ +selector: unescape('h5%3A'), +fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseleave", aBlock]); +return smalltalk.send(smalltalk.send(self, "_h5", []), "_with_", [anObject]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseMove_'), +unescape('_h6'), smalltalk.method({ -selector: unescape('onMouseMove%3A'), -fn: function (aBlock){ +selector: unescape('h6'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mousemove", aBlock]); +return smalltalk.send(self, "_tag_", ["h6"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseOut_'), +unescape('_h6_'), smalltalk.method({ -selector: unescape('onMouseOut%3A'), -fn: function (aBlock){ +selector: unescape('h6%3A'), +fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseout", aBlock]); +return smalltalk.send(smalltalk.send(self, "_h6", []), "_with_", [anObject]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseOver_'), +unescape('_head'), smalltalk.method({ -selector: unescape('onMouseOver%3A'), -fn: function (aBlock){ +selector: unescape('head'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseover", aBlock]); +return smalltalk.send(self, "_tag_", ["head"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onSelect_'), +unescape('_header'), smalltalk.method({ -selector: unescape('onSelect%3A'), -fn: function (aBlock){ +selector: unescape('header'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["select", aBlock]); +return smalltalk.send(self, "_tag_", ["header"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onUnload_'), +unescape('_hgroup'), smalltalk.method({ -selector: unescape('onUnload%3A'), -fn: function (aBlock){ +selector: unescape('hgroup'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["unload", aBlock]); +return smalltalk.send(self, "_tag_", ["hgroup"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_for_'), +unescape('_hr'), smalltalk.method({ -selector: unescape('for%3A'), -fn: function (aString){ +selector: unescape('hr'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["for", aString]); +return smalltalk.send(self, "_tag_", ["hr"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_placeholder_'), +unescape('_html'), smalltalk.method({ -selector: unescape('placeholder%3A'), -fn: function (aString){ +selector: unescape('html'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["placeholder", aString]); +return smalltalk.send(self, "_tag_", ["html"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_accesskey_'), +unescape('_iframe'), smalltalk.method({ -selector: unescape('accesskey%3A'), -fn: function (aString){ +selector: unescape('iframe'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["accesskey", aString]); +return smalltalk.send(self, "_tag_", ["iframe"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_contenteditable_'), +unescape('_iframe_'), smalltalk.method({ -selector: unescape('contenteditable%3A'), +selector: unescape('iframe%3A'), fn: function (aString){ var self=this; -smalltalk.send(self, "_at_put_", ["contenteditable", aString]); +return smalltalk.send(smalltalk.send(self, "_iframe", []), "_src_", [aString]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_contextmenu_'), +unescape('_img'), smalltalk.method({ -selector: unescape('contextmenu%3A'), -fn: function (aString){ +selector: unescape('img'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["contextmenu", aString]); +return smalltalk.send(self, "_tag_", ["img"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_draggable_'), +unescape('_img_'), smalltalk.method({ -selector: unescape('draggable%3A'), +selector: unescape('img%3A'), fn: function (aString){ var self=this; -smalltalk.send(self, "_at_put_", ["draggable", aString]); +return smalltalk.send(smalltalk.send(self, "_img", []), "_src_", [aString]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_hidden'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('hidden'), +selector: unescape('initialize'), fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["hidden", "hidden"]); +smalltalk.send(self, "_initialize", [], smalltalk.Object); +(($receiver = self['@root']) == nil || $receiver == undefined) ? (function(){return (self['@root']=smalltalk.send((smalltalk.TagBrush || TagBrush), "_fromString_canvas_", ["div", self]));})() : $receiver; return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_tabindex_'), +unescape('_initializeFromJQuery_'), smalltalk.method({ -selector: unescape('tabindex%3A'), -fn: function (aNumber){ +selector: unescape('initializeFromJQuery%3A'), +fn: function (aJQuery){ var self=this; -smalltalk.send(self, "_at_put_", ["tabindex", aNumber]); +(self['@root']=smalltalk.send((smalltalk.TagBrush || TagBrush), "_fromJQuery_canvas_", [aJQuery, self])); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_target_'), +unescape('_input'), smalltalk.method({ -selector: unescape('target%3A'), -fn: function (aString){ +selector: unescape('input'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["target", aString]); +return smalltalk.send(self, "_tag_", ["input"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_align_'), +unescape('_label'), smalltalk.method({ -selector: unescape('align%3A'), -fn: function (aString){ +selector: unescape('label'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["align", aString]); +return smalltalk.send(self, "_tag_", ["label"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_alt_'), +unescape('_legend'), smalltalk.method({ -selector: unescape('alt%3A'), -fn: function (aString){ +selector: unescape('legend'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["alt", aString]); +return smalltalk.send(self, "_tag_", ["legend"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_name_'), +unescape('_li'), smalltalk.method({ -selector: unescape('name%3A'), -fn: function (aString){ +selector: unescape('li'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["name", aString]); +return smalltalk.send(self, "_tag_", ["li"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_valign_'), +unescape('_li_'), smalltalk.method({ -selector: unescape('valign%3A'), -fn: function (aString){ +selector: unescape('li%3A'), +fn: function (anObject){ var self=this; -smalltalk.send(self, "_at_put_", ["valign", aString]); +return smalltalk.send(smalltalk.send(self, "_li", []), "_with_", [anObject]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_method_'), +unescape('_link'), smalltalk.method({ -selector: unescape('method%3A'), -fn: function (aString){ +selector: unescape('link'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["method", aString]); +return smalltalk.send(self, "_tag_", ["link"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_action_'), +unescape('_map'), smalltalk.method({ -selector: unescape('action%3A'), -fn: function (aString){ +selector: unescape('map'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["action", aString]); +return smalltalk.send(self, "_tag_", ["map"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_rows_'), +unescape('_mark'), smalltalk.method({ -selector: unescape('rows%3A'), -fn: function (aString){ +selector: unescape('mark'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["rows", aString]); +return smalltalk.send(self, "_tag_", ["mark"]); return self;} }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_cols_'), +unescape('_menu'), smalltalk.method({ -selector: unescape('cols%3A'), -fn: function (aString){ +selector: unescape('menu'), +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["cols", aString]); +return smalltalk.send(self, "_tag_", ["menu"]); return self;} }), -smalltalk.TagBrush); - +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_fromString_canvas_'), +unescape('_meta'), smalltalk.method({ -selector: unescape('fromString%3Acanvas%3A'), -fn: function (aString, aCanvas){ +selector: unescape('meta'), +fn: function (){ var self=this; -return (function($rec){smalltalk.send($rec, "_initializeFromString_canvas_", [aString, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return smalltalk.send(self, "_tag_", ["meta"]); return self;} }), -smalltalk.TagBrush.klass); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_fromJQuery_canvas_'), +unescape('_nav'), smalltalk.method({ -selector: unescape('fromJQuery%3Acanvas%3A'), -fn: function (aJQuery, aCanvas){ +selector: unescape('nav'), +fn: function (){ var self=this; -return (function($rec){smalltalk.send($rec, "_initializeFromJQuery_canvas_", [aJQuery, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return smalltalk.send(self, "_tag_", ["nav"]); return self;} }), -smalltalk.TagBrush.klass); - +smalltalk.HTMLCanvas); -smalltalk.addClass('HTMLCanvas', smalltalk.Object, ['root'], 'Canvas'); smalltalk.addMethod( -unescape('_root_'), +unescape('_newTag_'), smalltalk.method({ -selector: unescape('root%3A'), -fn: function (aTagBrush){ +selector: unescape('newTag%3A'), +fn: function (aString){ var self=this; -(self['@root']=aTagBrush); +return smalltalk.send((smalltalk.TagBrush || TagBrush), "_fromString_canvas_", [aString, self]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_root'), +unescape('_noscript'), smalltalk.method({ -selector: unescape('root'), +selector: unescape('noscript'), fn: function (){ var self=this; -return self['@root']; +return smalltalk.send(self, "_tag_", ["noscript"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_with_'), +unescape('_object'), smalltalk.method({ -selector: unescape('with%3A'), -fn: function (anObject){ +selector: unescape('object'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_root", []), "_with_", [anObject]); +return smalltalk.send(self, "_tag_", ["object"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_initialize'), +unescape('_ol'), smalltalk.method({ -selector: unescape('initialize'), +selector: unescape('ol'), fn: function (){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.Object); -(($receiver = self['@root']) == nil || $receiver == undefined) ? (function(){return (self['@root']=smalltalk.send((smalltalk.TagBrush || TagBrush), "_fromString_canvas_", ["div", self]));})() : $receiver; +return smalltalk.send(self, "_tag_", ["ol"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_initializeFromJQuery_'), +unescape('_ol_'), smalltalk.method({ -selector: unescape('initializeFromJQuery%3A'), -fn: function (aJQuery){ +selector: unescape('ol%3A'), +fn: function (anObject){ var self=this; -(self['@root']=smalltalk.send((smalltalk.TagBrush || TagBrush), "_fromJQuery_canvas_", [aJQuery, self])); +return smalltalk.send(smalltalk.send(self, "_ol", []), "_with_", [anObject]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_newTag_'), +unescape('_optgroup'), smalltalk.method({ -selector: unescape('newTag%3A'), -fn: function (aString){ +selector: unescape('optgroup'), +fn: function (){ var self=this; -return smalltalk.send((smalltalk.TagBrush || TagBrush), "_fromString_canvas_", [aString, self]); +return smalltalk.send(self, "_tag_", ["optgroup"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_tag_'), +unescape('_option'), smalltalk.method({ -selector: unescape('tag%3A'), -fn: function (aString){ +selector: unescape('option'), +fn: function (){ var self=this; -return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send(self, "_newTag_", [aString])]); +return smalltalk.send(self, "_tag_", ["option"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h1'), +unescape('_output'), smalltalk.method({ -selector: unescape('h1'), +selector: unescape('output'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["h1"]); +return smalltalk.send(self, "_tag_", ["output"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h2'), +unescape('_p'), smalltalk.method({ -selector: unescape('h2'), +selector: unescape('p'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["h2"]); +return smalltalk.send(self, "_tag_", ["p"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h3'), +unescape('_p_'), smalltalk.method({ -selector: unescape('h3'), +selector: unescape('p%3A'), +fn: function (anObject){ +var self=this; +return smalltalk.send(smalltalk.send(self, "_p", []), "_with_", [anObject]); +return self;} +}), +smalltalk.HTMLCanvas); + +smalltalk.addMethod( +unescape('_param'), +smalltalk.method({ +selector: unescape('param'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["h3"]); +return smalltalk.send(self, "_tag_", ["param"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h4'), +unescape('_pre'), smalltalk.method({ -selector: unescape('h4'), +selector: unescape('pre'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["h4"]); +return smalltalk.send(self, "_tag_", ["pre"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h5'), +unescape('_progress'), smalltalk.method({ -selector: unescape('h5'), +selector: unescape('progress'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["h5"]); +return smalltalk.send(self, "_tag_", ["progress"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h6'), +unescape('_root'), smalltalk.method({ -selector: unescape('h6'), +selector: unescape('root'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["h6"]); +return self['@root']; return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_p'), +unescape('_root_'), smalltalk.method({ -selector: unescape('p'), -fn: function (){ +selector: unescape('root%3A'), +fn: function (aTagBrush){ var self=this; -return smalltalk.send(self, "_tag_", ["p"]); +(self['@root']=aTagBrush); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_div'), +unescape('_script'), smalltalk.method({ -selector: unescape('div'), +selector: unescape('script'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["div"]); +return smalltalk.send(self, "_tag_", ["script"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_span'), +unescape('_section'), smalltalk.method({ -selector: unescape('span'), +selector: unescape('section'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["span"]); +return smalltalk.send(self, "_tag_", ["section"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_img'), +unescape('_select'), smalltalk.method({ -selector: unescape('img'), +selector: unescape('select'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["img"]); +return smalltalk.send(self, "_tag_", ["select"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_ul'), +unescape('_small'), smalltalk.method({ -selector: unescape('ul'), +selector: unescape('small'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["ul"]); +return smalltalk.send(self, "_tag_", ["small"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_ol'), +unescape('_source'), smalltalk.method({ -selector: unescape('ol'), +selector: unescape('source'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["ol"]); +return smalltalk.send(self, "_tag_", ["source"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_li'), +unescape('_span'), smalltalk.method({ -selector: unescape('li'), +selector: unescape('span'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["li"]); +return smalltalk.send(self, "_tag_", ["span"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_table'), +unescape('_span_'), smalltalk.method({ -selector: unescape('table'), -fn: function (){ +selector: unescape('span%3A'), +fn: function (anObject){ var self=this; -return smalltalk.send(self, "_tag_", ["table"]); +return smalltalk.send(smalltalk.send(self, "_span", []), "_with_", [anObject]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_tr'), +unescape('_strong'), smalltalk.method({ -selector: unescape('tr'), +selector: unescape('strong'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["tr"]); +return smalltalk.send(self, "_tag_", ["strong"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_td'), +unescape('_strong_'), smalltalk.method({ -selector: unescape('td'), -fn: function (){ +selector: unescape('strong%3A'), +fn: function (anObject){ var self=this; -return smalltalk.send(self, "_tag_", ["td"]); +return smalltalk.send(smalltalk.send(self, "_strong", []), "_with_", [anObject]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_th'), +unescape('_style'), smalltalk.method({ -selector: unescape('th'), +selector: unescape('style'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["th"]); +return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send((smalltalk.StyleTag || StyleTag), "_canvas_", [self])]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_form'), +unescape('_style_'), smalltalk.method({ -selector: unescape('form'), -fn: function (){ +selector: unescape('style%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["form"]); +return (function($rec){smalltalk.send($rec, "_with_", [aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_style", [])); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_input'), +unescape('_sub'), smalltalk.method({ -selector: unescape('input'), +selector: unescape('sub'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["input"]); +return smalltalk.send(self, "_tag_", ["sub"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_button'), +unescape('_summary'), smalltalk.method({ -selector: unescape('button'), +selector: unescape('summary'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["button"]); +return smalltalk.send(self, "_tag_", ["summary"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_select'), +unescape('_sup'), smalltalk.method({ -selector: unescape('select'), +selector: unescape('sup'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["select"]); +return smalltalk.send(self, "_tag_", ["sup"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_option'), +unescape('_table'), smalltalk.method({ -selector: unescape('option'), +selector: unescape('table'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["option"]); +return smalltalk.send(self, "_tag_", ["table"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_textarea'), +unescape('_tag_'), smalltalk.method({ -selector: unescape('textarea'), -fn: function (){ +selector: unescape('tag%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["textarea"]); +return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send(self, "_newTag_", [aString])]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_a'), +unescape('_tbody'), smalltalk.method({ -selector: unescape('a'), +selector: unescape('tbody'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["a"]); +return smalltalk.send(self, "_tag_", ["tbody"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_canvas'), +unescape('_td'), smalltalk.method({ -selector: unescape('canvas'), +selector: unescape('td'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["canvas"]); +return smalltalk.send(self, "_tag_", ["td"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_pre'), +unescape('_textarea'), smalltalk.method({ -selector: unescape('pre'), +selector: unescape('textarea'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["pre"]); +return smalltalk.send(self, "_tag_", ["textarea"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_code'), +unescape('_tfoot'), smalltalk.method({ -selector: unescape('code'), +selector: unescape('tfoot'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["code"]); +return smalltalk.send(self, "_tag_", ["tfoot"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_br'), +unescape('_th'), smalltalk.method({ -selector: unescape('br'), +selector: unescape('th'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["br"]); +return smalltalk.send(self, "_tag_", ["th"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_script'), +unescape('_thead'), smalltalk.method({ -selector: unescape('script'), +selector: unescape('thead'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["script"]); +return smalltalk.send(self, "_tag_", ["thead"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_link'), +unescape('_time'), smalltalk.method({ -selector: unescape('link'), +selector: unescape('time'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["link"]); +return smalltalk.send(self, "_tag_", ["time"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_style'), +unescape('_title'), smalltalk.method({ -selector: unescape('style'), +selector: unescape('title'), fn: function (){ var self=this; -return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send((smalltalk.StyleTag || StyleTag), "_canvas_", [self])]); +return smalltalk.send(self, "_tag_", ["title"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_p_'), +unescape('_tr'), smalltalk.method({ -selector: unescape('p%3A'), -fn: function (anObject){ +selector: unescape('tr'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_p", []), "_with_", [anObject]); +return smalltalk.send(self, "_tag_", ["tr"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h1_'), +unescape('_ul'), smalltalk.method({ -selector: unescape('h1%3A'), -fn: function (anObject){ +selector: unescape('ul'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_h1", []), "_with_", [anObject]); +return smalltalk.send(self, "_tag_", ["ul"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_iframe'), +unescape('_ul_'), smalltalk.method({ -selector: unescape('iframe'), -fn: function (){ +selector: unescape('ul%3A'), +fn: function (anObject){ var self=this; -return smalltalk.send(self, "_tag_", ["iframe"]); +return smalltalk.send(smalltalk.send(self, "_ul", []), "_with_", [anObject]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_iframe_'), +unescape('_video'), smalltalk.method({ -selector: unescape('iframe%3A'), -fn: function (aString){ +selector: unescape('video'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_iframe", []), "_src_", [aString]); +return smalltalk.send(self, "_tag_", ["video"]); return self;} }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h2_'), +unescape('_with_'), smalltalk.method({ -selector: unescape('h2%3A'), +selector: unescape('with%3A'), fn: function (anObject){ var self=this; -return smalltalk.send(smalltalk.send(self, "_h2", []), "_with_", [anObject]); +return smalltalk.send(smalltalk.send(self, "_root", []), "_with_", [anObject]); return self;} }), smalltalk.HTMLCanvas); + smalltalk.addMethod( -unescape('_h3_'), +unescape('_browserVersion'), smalltalk.method({ -selector: unescape('h3%3A'), -fn: function (anObject){ +selector: unescape('browserVersion'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_h3", []), "_with_", [anObject]); +return smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_version", []); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.HTMLCanvas.klass); smalltalk.addMethod( -unescape('_h4_'), +unescape('_isMSIE'), smalltalk.method({ -selector: unescape('h4%3A'), -fn: function (anObject){ +selector: unescape('isMSIE'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_h4", []), "_with_", [anObject]); +return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("msie")]), "_notNil", []); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.HTMLCanvas.klass); smalltalk.addMethod( -unescape('_h5_'), +unescape('_isMozilla'), smalltalk.method({ -selector: unescape('h5%3A'), -fn: function (anObject){ +selector: unescape('isMozilla'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_h5", []), "_with_", [anObject]); +return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("mozilla")]), "_notNil", []); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.HTMLCanvas.klass); smalltalk.addMethod( -unescape('_h6_'), +unescape('_isOpera'), smalltalk.method({ -selector: unescape('h6%3A'), -fn: function (anObject){ +selector: unescape('isOpera'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_h6", []), "_with_", [anObject]); +return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("opera")]), "_notNil", []); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.HTMLCanvas.klass); smalltalk.addMethod( -unescape('_img_'), +unescape('_isWebkit'), smalltalk.method({ -selector: unescape('img%3A'), -fn: function (aString){ +selector: unescape('isWebkit'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_img", []), "_src_", [aString]); +return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("webkit")]), "_notNil", []); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.HTMLCanvas.klass); smalltalk.addMethod( -unescape('_ol_'), +unescape('_onJQuery_'), smalltalk.method({ -selector: unescape('ol%3A'), -fn: function (anObject){ +selector: unescape('onJQuery%3A'), +fn: function (aJQuery){ var self=this; -return smalltalk.send(smalltalk.send(self, "_ol", []), "_with_", [anObject]); +return (function($rec){smalltalk.send($rec, "_initializeFromJQuery_", [aJQuery]);smalltalk.send($rec, "_initialize", []);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_basicNew", [])); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.HTMLCanvas.klass); + +smalltalk.addClass('TagBrush', smalltalk.Object, ['canvas', 'element'], 'Canvas'); smalltalk.addMethod( -unescape('_li_'), +unescape('_accesskey_'), smalltalk.method({ -selector: unescape('li%3A'), -fn: function (anObject){ +selector: unescape('accesskey%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(smalltalk.send(self, "_li", []), "_with_", [anObject]); +smalltalk.send(self, "_at_put_", ["accesskey", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_ul_'), +unescape('_action_'), smalltalk.method({ -selector: unescape('ul%3A'), -fn: function (anObject){ +selector: unescape('action%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(smalltalk.send(self, "_ul", []), "_with_", [anObject]); +smalltalk.send(self, "_at_put_", ["action", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_span_'), +unescape('_addBrush_'), smalltalk.method({ -selector: unescape('span%3A'), -fn: function (anObject){ +selector: unescape('addBrush%3A'), +fn: function (aTagBrush){ var self=this; -return smalltalk.send(smalltalk.send(self, "_span", []), "_with_", [anObject]); +smalltalk.send(self, "_appendChild_", [smalltalk.send(aTagBrush, "_element", [])]); +return aTagBrush; return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_style_'), +unescape('_align_'), smalltalk.method({ -selector: unescape('style%3A'), +selector: unescape('align%3A'), fn: function (aString){ var self=this; -return (function($rec){smalltalk.send($rec, "_with_", [aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_style", [])); +smalltalk.send(self, "_at_put_", ["align", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_audio'), +unescape('_alt_'), smalltalk.method({ -selector: unescape('audio'), -fn: function (){ +selector: unescape('alt%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["audio"]); +smalltalk.send(self, "_at_put_", ["alt", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_fieldset'), +unescape('_append_'), smalltalk.method({ -selector: unescape('fieldset'), -fn: function (){ +selector: unescape('append%3A'), +fn: function (anObject){ var self=this; -return smalltalk.send(self, "_tag_", ["fieldset"]); +smalltalk.send(anObject, "_appendToBrush_", [self]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_footer'), +unescape('_appendBlock_'), smalltalk.method({ -selector: unescape('footer'), -fn: function (){ +selector: unescape('appendBlock%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["footer"]); +var root=nil; +(root=smalltalk.send(self['@canvas'], "_root", [])); +smalltalk.send(self['@canvas'], "_root_", [self]); +smalltalk.send(aBlock, "_value_", [self['@canvas']]); +smalltalk.send(self['@canvas'], "_root_", [root]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_header'), +unescape('_appendChild_'), smalltalk.method({ -selector: unescape('header'), -fn: function (){ +selector: unescape('appendChild%3A'), +fn: function (anElement){ var self=this; -return smalltalk.send(self, "_tag_", ["header"]); +var element=self['@element']; + if (null == element.canHaveChildren || element.canHaveChildren) { + element.appendChild(anElement); + } else { + element.text = String(element.text) + anElement.innerHTML; + } ; return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_hr'), +unescape('_appendString_'), smalltalk.method({ -selector: unescape('hr'), -fn: function (){ +selector: unescape('appendString%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["hr"]); +smalltalk.send(self, "_appendChild_", [smalltalk.send(self, "_createTextNodeFor_", [aString])]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_section'), +unescape('_appendToBrush_'), smalltalk.method({ -selector: unescape('section'), -fn: function (){ +selector: unescape('appendToBrush%3A'), +fn: function (aTagBrush){ var self=this; -return smalltalk.send(self, "_tag_", ["section"]); +smalltalk.send(aTagBrush, "_addBrush_", [self]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_tbody'), +unescape('_asJQuery'), smalltalk.method({ -selector: unescape('tbody'), +selector: unescape('asJQuery'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["tbody"]); +return smalltalk.send((typeof window == 'undefined' ? nil : window), "_jQuery_", [smalltalk.send(self, "_element", [])]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_tfoot'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('tfoot'), -fn: function (){ +selector: unescape('at%3Aput%3A'), +fn: function (aString, aValue){ var self=this; -return smalltalk.send(self, "_tag_", ["tfoot"]); +self['@element'].setAttribute(aString, aValue); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_thead'), +unescape('_class_'), smalltalk.method({ -selector: unescape('thead'), -fn: function (){ +selector: unescape('class%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["thead"]); +self['@element'].className = aString; return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_video'), +unescape('_cols_'), smalltalk.method({ -selector: unescape('video'), -fn: function (){ +selector: unescape('cols%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["video"]); +smalltalk.send(self, "_at_put_", ["cols", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_label'), +unescape('_contenteditable_'), smalltalk.method({ -selector: unescape('label'), -fn: function (){ +selector: unescape('contenteditable%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["label"]); +smalltalk.send(self, "_at_put_", ["contenteditable", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_title'), +unescape('_contents_'), smalltalk.method({ -selector: unescape('title'), -fn: function (){ +selector: unescape('contents%3A'), +fn: function (anObject){ var self=this; -return smalltalk.send(self, "_tag_", ["title"]); +(function($rec){smalltalk.send($rec, "_empty", []);return smalltalk.send($rec, "_append_", [anObject]);})(self); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_time'), +unescape('_contextmenu_'), smalltalk.method({ -selector: unescape('time'), -fn: function (){ +selector: unescape('contextmenu%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["time"]); +smalltalk.send(self, "_at_put_", ["contextmenu", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_sup'), +unescape('_createElementFor_'), smalltalk.method({ -selector: unescape('sup'), -fn: function (){ +selector: unescape('createElementFor%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["sup"]); +return document.createElement(String(aString)); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_summary'), +unescape('_createTextNodeFor_'), smalltalk.method({ -selector: unescape('summary'), -fn: function (){ +selector: unescape('createTextNodeFor%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["summary"]); +return document.createTextNode(String(aString)); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_sub'), +unescape('_draggable_'), smalltalk.method({ -selector: unescape('sub'), -fn: function (){ +selector: unescape('draggable%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["sub"]); +smalltalk.send(self, "_at_put_", ["draggable", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_strong'), +unescape('_element'), smalltalk.method({ -selector: unescape('strong'), +selector: unescape('element'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["strong"]); +return self['@element']; return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_strong_'), +unescape('_empty'), smalltalk.method({ -selector: unescape('strong%3A'), -fn: function (anObject){ +selector: unescape('empty'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_strong", []), "_with_", [anObject]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_source'), +unescape('_for_'), smalltalk.method({ -selector: unescape('source'), -fn: function (){ +selector: unescape('for%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["source"]); +smalltalk.send(self, "_at_put_", ["for", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_small'), +unescape('_height_'), smalltalk.method({ -selector: unescape('small'), -fn: function (){ +selector: unescape('height%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["small"]); +smalltalk.send(self, "_at_put_", ["height", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_progress'), +unescape('_hidden'), smalltalk.method({ -selector: unescape('progress'), +selector: unescape('hidden'), fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["progress"]); +smalltalk.send(self, "_at_put_", ["hidden", "hidden"]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_param'), +unescape('_href_'), smalltalk.method({ -selector: unescape('param'), -fn: function (){ +selector: unescape('href%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["param"]); +smalltalk.send(self, "_at_put_", ["href", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_output'), +unescape('_id_'), smalltalk.method({ -selector: unescape('output'), -fn: function (){ +selector: unescape('id%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["output"]); +smalltalk.send(self, "_at_put_", ["id", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_optgroup'), +unescape('_initializeFromJQuery_canvas_'), smalltalk.method({ -selector: unescape('optgroup'), -fn: function (){ +selector: unescape('initializeFromJQuery%3Acanvas%3A'), +fn: function (aJQuery, aCanvas){ var self=this; -return smalltalk.send(self, "_tag_", ["optgroup"]); +(self['@element']=smalltalk.send(aJQuery, "_get_", [(0)])); +(self['@canvas']=aCanvas); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_object'), +unescape('_initializeFromString_canvas_'), smalltalk.method({ -selector: unescape('object'), -fn: function (){ +selector: unescape('initializeFromString%3Acanvas%3A'), +fn: function (aString, aCanvas){ var self=this; -return smalltalk.send(self, "_tag_", ["object"]); +(self['@element']=smalltalk.send(self, "_createElementFor_", [aString])); +(self['@canvas']=aCanvas); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_noscript'), +unescape('_media_'), smalltalk.method({ -selector: unescape('noscript'), -fn: function (){ +selector: unescape('media%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["noscript"]); +smalltalk.send(self, "_at_put_", ["media", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_nav'), +unescape('_method_'), smalltalk.method({ -selector: unescape('nav'), -fn: function (){ +selector: unescape('method%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["nav"]); +smalltalk.send(self, "_at_put_", ["method", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_meta'), +unescape('_name_'), smalltalk.method({ -selector: unescape('meta'), -fn: function (){ +selector: unescape('name%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["meta"]); +smalltalk.send(self, "_at_put_", ["name", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_menu'), +unescape('_onBlur_'), smalltalk.method({ -selector: unescape('menu'), -fn: function (){ +selector: unescape('onBlur%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["menu"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["blur", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_mark'), +unescape('_onChange_'), smalltalk.method({ -selector: unescape('mark'), -fn: function (){ +selector: unescape('onChange%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["mark"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["change", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_map'), +unescape('_onClick_'), smalltalk.method({ -selector: unescape('map'), -fn: function (){ +selector: unescape('onClick%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["map"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["click", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_legend'), +unescape('_onDblClick_'), smalltalk.method({ -selector: unescape('legend'), -fn: function (){ +selector: unescape('onDblClick%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["legend"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["dblclick", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_html'), +unescape('_onFocus_'), smalltalk.method({ -selector: unescape('html'), -fn: function (){ +selector: unescape('onFocus%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["html"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["focus", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_hgroup'), +unescape('_onFocusIn_'), smalltalk.method({ -selector: unescape('hgroup'), -fn: function (){ +selector: unescape('onFocusIn%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["hgroup"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["focusin", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_head'), +unescape('_onFocusOut_'), smalltalk.method({ -selector: unescape('head'), -fn: function (){ +selector: unescape('onFocusOut%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["head"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["focusout", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_figure'), +unescape('_onHover_'), smalltalk.method({ -selector: unescape('figure'), -fn: function (){ +selector: unescape('onHover%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["figure"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["hover", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_figcaption'), +unescape('_onKeyDown_'), smalltalk.method({ -selector: unescape('figcaption'), -fn: function (){ +selector: unescape('onKeyDown%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["figcaption"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["keydown", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_embed'), +unescape('_onKeyPress_'), smalltalk.method({ -selector: unescape('embed'), -fn: function (){ +selector: unescape('onKeyPress%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["embed"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["keypress", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_em'), +unescape('_onKeyUp_'), smalltalk.method({ -selector: unescape('em'), -fn: function (){ +selector: unescape('onKeyUp%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["em"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["keyup", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_dt'), +unescape('_onMouseDown_'), smalltalk.method({ -selector: unescape('dt'), -fn: function (){ +selector: unescape('onMouseDown%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["dt"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mousedown", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_dl'), +unescape('_onMouseEnter_'), smalltalk.method({ -selector: unescape('dl'), -fn: function (){ +selector: unescape('onMouseEnter%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["dl"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseenter", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_details'), +unescape('_onMouseLeave_'), smalltalk.method({ -selector: unescape('details'), -fn: function (){ +selector: unescape('onMouseLeave%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["details"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseleave", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_del'), +unescape('_onMouseMove_'), smalltalk.method({ -selector: unescape('del'), -fn: function (){ +selector: unescape('onMouseMove%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["del"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mousemove", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_dd'), +unescape('_onMouseOut_'), smalltalk.method({ -selector: unescape('dd'), -fn: function (){ +selector: unescape('onMouseOut%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["dd"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseout", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_datalist'), +unescape('_onMouseOver_'), smalltalk.method({ -selector: unescape('datalist'), -fn: function (){ +selector: unescape('onMouseOver%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["datalist"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseover", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_command'), +unescape('_onMouseUp_'), smalltalk.method({ -selector: unescape('command'), -fn: function (){ +selector: unescape('onMouseUp%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["command"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseup", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_colgroup'), +unescape('_onSelect_'), smalltalk.method({ -selector: unescape('colgroup'), -fn: function (){ +selector: unescape('onSelect%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["colgroup"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["select", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_col'), +unescape('_onSubmit_'), smalltalk.method({ -selector: unescape('col'), -fn: function (){ +selector: unescape('onSubmit%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["col"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["submit", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_cite'), +unescape('_onUnload_'), smalltalk.method({ -selector: unescape('cite'), -fn: function (){ +selector: unescape('onUnload%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["cite"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["unload", aBlock]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_caption'), +unescape('_placeholder_'), smalltalk.method({ -selector: unescape('caption'), -fn: function (){ +selector: unescape('placeholder%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["caption"]); +smalltalk.send(self, "_at_put_", ["placeholder", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_body'), +unescape('_rel_'), smalltalk.method({ -selector: unescape('body'), -fn: function (){ +selector: unescape('rel%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["body"]); +smalltalk.send(self, "_at_put_", ["rel", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_blockquote'), +unescape('_removeAt_'), smalltalk.method({ -selector: unescape('blockquote'), -fn: function (){ +selector: unescape('removeAt%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["blockquote"]); +self['@element'].removeAttribute(aString); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_base'), +unescape('_rows_'), smalltalk.method({ -selector: unescape('base'), -fn: function (){ +selector: unescape('rows%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["base"]); +smalltalk.send(self, "_at_put_", ["rows", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_aside'), +unescape('_src_'), smalltalk.method({ -selector: unescape('aside'), -fn: function (){ +selector: unescape('src%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["aside"]); +smalltalk.send(self, "_at_put_", ["src", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_article'), +unescape('_style_'), smalltalk.method({ -selector: unescape('article'), -fn: function (){ +selector: unescape('style%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["article"]); +smalltalk.send(self, "_at_put_", ["style", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_area'), +unescape('_tabindex_'), smalltalk.method({ -selector: unescape('area'), -fn: function (){ +selector: unescape('tabindex%3A'), +fn: function (aNumber){ var self=this; -return smalltalk.send(self, "_tag_", ["area"]); +smalltalk.send(self, "_at_put_", ["tabindex", aNumber]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_address'), +unescape('_target_'), smalltalk.method({ -selector: unescape('address'), -fn: function (){ +selector: unescape('target%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["address"]); +smalltalk.send(self, "_at_put_", ["target", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_abbr'), +unescape('_title_'), smalltalk.method({ -selector: unescape('abbr'), -fn: function (){ +selector: unescape('title%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["abbr"]); +smalltalk.send(self, "_at_put_", ["title", aString]); return self;} }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_div_'), +unescape('_type_'), smalltalk.method({ -selector: unescape('div%3A'), -fn: function (aBlock){ +selector: unescape('type%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(smalltalk.send(self, "_div", []), "_with_", [aBlock]); +smalltalk.send(self, "_at_put_", ["type", aString]); return self;} }), -smalltalk.HTMLCanvas); - +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_onJQuery_'), +unescape('_valign_'), smalltalk.method({ -selector: unescape('onJQuery%3A'), -fn: function (aJQuery){ +selector: unescape('valign%3A'), +fn: function (aString){ var self=this; -return (function($rec){smalltalk.send($rec, "_initializeFromJQuery_", [aJQuery]);smalltalk.send($rec, "_initialize", []);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_basicNew", [])); +smalltalk.send(self, "_at_put_", ["valign", aString]); return self;} }), -smalltalk.HTMLCanvas.klass); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_isMSIE'), +unescape('_value_'), smalltalk.method({ -selector: unescape('isMSIE'), -fn: function (){ +selector: unescape('value%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("msie")]), "_notNil", []); +smalltalk.send(self, "_at_put_", ["value", aString]); return self;} }), -smalltalk.HTMLCanvas.klass); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_isOpera'), +unescape('_width_'), smalltalk.method({ -selector: unescape('isOpera'), -fn: function (){ +selector: unescape('width%3A'), +fn: function (aString){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("opera")]), "_notNil", []); +smalltalk.send(self, "_at_put_", ["width", aString]); return self;} }), -smalltalk.HTMLCanvas.klass); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_isMozilla'), +unescape('_with_'), smalltalk.method({ -selector: unescape('isMozilla'), -fn: function (){ +selector: unescape('with%3A'), +fn: function (anObject){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("mozilla")]), "_notNil", []); +smalltalk.send(self, "_append_", [anObject]); return self;} }), -smalltalk.HTMLCanvas.klass); +smalltalk.TagBrush); + smalltalk.addMethod( -unescape('_isWebkit'), +unescape('_fromJQuery_canvas_'), smalltalk.method({ -selector: unescape('isWebkit'), -fn: function (){ +selector: unescape('fromJQuery%3Acanvas%3A'), +fn: function (aJQuery, aCanvas){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("webkit")]), "_notNil", []); +return (function($rec){smalltalk.send($rec, "_initializeFromJQuery_canvas_", [aJQuery, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;} }), -smalltalk.HTMLCanvas.klass); +smalltalk.TagBrush.klass); smalltalk.addMethod( -unescape('_browserVersion'), +unescape('_fromString_canvas_'), smalltalk.method({ -selector: unescape('browserVersion'), -fn: function (){ +selector: unescape('fromString%3Acanvas%3A'), +fn: function (aString, aCanvas){ var self=this; -return smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_version", []); +return (function($rec){smalltalk.send($rec, "_initializeFromString_canvas_", [aString, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;} }), -smalltalk.HTMLCanvas.klass); +smalltalk.TagBrush.klass); smalltalk.addClass('StyleTag', smalltalk.TagBrush, ['canvas', 'element'], 'Canvas'); @@ -2136,16 +2100,41 @@ return self;} smalltalk.StyleTag.klass); +smalltalk.addClass('Widget', smalltalk.Object, [], 'Canvas'); +smalltalk.addMethod( +unescape('_appendToBrush_'), +smalltalk.method({ +selector: unescape('appendToBrush%3A'), +fn: function (aTagBrush){ +var self=this; +smalltalk.send(self, "_appendToJQuery_", [smalltalk.send(aTagBrush, "_asJQuery", [])]); +return self;} +}), +smalltalk.Widget); + smalltalk.addMethod( unescape('_appendToJQuery_'), smalltalk.method({ selector: unescape('appendToJQuery%3A'), fn: function (aJQuery){ var self=this; -smalltalk.send(aJQuery, "_append_", [smalltalk.send(self, "_asString", [])]); +smalltalk.send(self, "_renderOn_", [smalltalk.send((smalltalk.HTMLCanvas || HTMLCanvas), "_onJQuery_", [aJQuery])]); return self;} }), -smalltalk.Object); +smalltalk.Widget); + +smalltalk.addMethod( +unescape('_renderOn_'), +smalltalk.method({ +selector: unescape('renderOn%3A'), +fn: function (html){ +var self=this; +self; +return self;} +}), +smalltalk.Widget); + + smalltalk.addMethod( unescape('_appendToBrush_'), @@ -2164,10 +2153,10 @@ smalltalk.method({ selector: unescape('appendToJQuery%3A'), fn: function (aJQuery){ var self=this; -smalltalk.send(self, "_value_", [smalltalk.send((smalltalk.HTMLCanvas || HTMLCanvas), "_onJQuery_", [aJQuery])]); +smalltalk.send(aJQuery, "_append_", [smalltalk.send(self, "_asString", [])]); return self;} }), -smalltalk.BlockClosure); +smalltalk.Object); smalltalk.addMethod( unescape('_appendToBrush_'), @@ -2181,12 +2170,23 @@ return self;} smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_asJQuery'), +unescape('_appendToJQuery_'), smalltalk.method({ -selector: unescape('asJQuery'), -fn: function (){ +selector: unescape('appendToJQuery%3A'), +fn: function (aJQuery){ var self=this; -return jQuery(String(self)); +smalltalk.send(self, "_value_", [smalltalk.send((smalltalk.HTMLCanvas || HTMLCanvas), "_onJQuery_", [aJQuery])]); +return self;} +}), +smalltalk.BlockClosure); + +smalltalk.addMethod( +unescape('_appendToBrush_'), +smalltalk.method({ +selector: unescape('appendToBrush%3A'), +fn: function (aTagBrush){ +var self=this; +smalltalk.send(aTagBrush, "_appendString_", [self]); return self;} }), smalltalk.String); @@ -2203,12 +2203,12 @@ return self;} smalltalk.String); smalltalk.addMethod( -unescape('_appendToBrush_'), +unescape('_asJQuery'), smalltalk.method({ -selector: unescape('appendToBrush%3A'), -fn: function (aTagBrush){ +selector: unescape('asJQuery'), +fn: function (){ var self=this; -smalltalk.send(aTagBrush, "_appendString_", [self]); +return jQuery(String(self)); return self;} }), smalltalk.String); diff --git a/amber/src/js/Canvas.js b/amber/src/js/Canvas.js index 4b969bb7e83..bc2eb8856fe 100755 --- a/amber/src/js/Canvas.js +++ b/amber/src/js/Canvas.js @@ -1,3064 +1,3013 @@ smalltalk.addPackage('Canvas', {}); -smalltalk.addClass('Widget', smalltalk.Object, [], 'Canvas'); -smalltalk.addMethod( -unescape('_appendToBrush_'), -smalltalk.method({ -selector: unescape('appendToBrush%3A'), -category: 'adding', -fn: function (aTagBrush){ -var self=this; -smalltalk.send(self, "_appendToJQuery_", [smalltalk.send(aTagBrush, "_asJQuery", [])]); -return self;}, -args: ["aTagBrush"], -source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20self%20appendToJQuery%3A%20aTagBrush%20asJQuery'), -messageSends: ["appendToJQuery:", "asJQuery"], -referencedClasses: [] -}), -smalltalk.Widget); - -smalltalk.addMethod( -unescape('_appendToJQuery_'), -smalltalk.method({ -selector: unescape('appendToJQuery%3A'), -category: 'adding', -fn: function (aJQuery){ -var self=this; -smalltalk.send(self, "_renderOn_", [smalltalk.send((smalltalk.HTMLCanvas || HTMLCanvas), "_onJQuery_", [aJQuery])]); -return self;}, -args: ["aJQuery"], -source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20self%20renderOn%3A%20%28HTMLCanvas%20onJQuery%3A%20aJQuery%29'), -messageSends: ["renderOn:", "onJQuery:"], -referencedClasses: ["HTMLCanvas"] -}), -smalltalk.Widget); - +smalltalk.addClass('HTMLCanvas', smalltalk.Object, ['root'], 'Canvas'); smalltalk.addMethod( -unescape('_renderOn_'), +unescape('_a'), smalltalk.method({ -selector: unescape('renderOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('a'), +category: 'tags', +fn: function (){ var self=this; -self; +return smalltalk.send(self, "_tag_", ["a"]); return self;}, -args: ["html"], -source: unescape('renderOn%3A%20html%0A%20%20%20%20self'), -messageSends: [], +args: [], +source: unescape('a%0A%20%20%20%20%5Eself%20tag%3A%20%27a%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.Widget); - - +smalltalk.HTMLCanvas); -smalltalk.addClass('TagBrush', smalltalk.Object, ['canvas', 'element'], 'Canvas'); smalltalk.addMethod( -unescape('_element'), +unescape('_abbr'), smalltalk.method({ -selector: unescape('element'), -category: 'accessing', +selector: unescape('abbr'), +category: 'tags', fn: function (){ var self=this; -return self['@element']; +return smalltalk.send(self, "_tag_", ["abbr"]); return self;}, args: [], -source: unescape('element%0A%20%20%20%20%5Eelement'), -messageSends: [], +source: unescape('abbr%0A%09%5Eself%20tag%3A%20%27abbr%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_contents_'), +unescape('_address'), smalltalk.method({ -selector: unescape('contents%3A'), -category: 'adding', -fn: function (anObject){ +selector: unescape('address'), +category: 'tags', +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_empty", []);return smalltalk.send($rec, "_append_", [anObject]);})(self); +return smalltalk.send(self, "_tag_", ["address"]); return self;}, -args: ["anObject"], -source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20%0A%09empty%3B%0A%20%20%20%09append%3A%20anObject'), -messageSends: ["empty", "append:"], +args: [], +source: unescape('address%0A%09%5Eself%20tag%3A%20%27address%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_addBrush_'), +unescape('_area'), smalltalk.method({ -selector: unescape('addBrush%3A'), -category: 'adding', -fn: function (aTagBrush){ +selector: unescape('area'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_appendChild_", [smalltalk.send(aTagBrush, "_element", [])]); -return aTagBrush; +return smalltalk.send(self, "_tag_", ["area"]); return self;}, -args: ["aTagBrush"], -source: unescape('addBrush%3A%20aTagBrush%0A%20%20%20%20self%20appendChild%3A%20aTagBrush%20element.%0A%20%20%20%20%5EaTagBrush'), -messageSends: ["appendChild:", "element"], +args: [], +source: unescape('area%0A%09%5Eself%20tag%3A%20%27area%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_with_'), +unescape('_article'), smalltalk.method({ -selector: unescape('with%3A'), -category: 'adding', -fn: function (anObject){ +selector: unescape('article'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_append_", [anObject]); +return smalltalk.send(self, "_tag_", ["article"]); return self;}, -args: ["anObject"], -source: unescape('with%3A%20anObject%0A%20%20%20%20self%20append%3A%20anObject'), -messageSends: ["append:"], +args: [], +source: unescape('article%0A%20%20%20%20%5Eself%20tag%3A%20%27article%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_append_'), +unescape('_aside'), smalltalk.method({ -selector: unescape('append%3A'), -category: 'adding', -fn: function (anObject){ +selector: unescape('aside'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(anObject, "_appendToBrush_", [self]); +return smalltalk.send(self, "_tag_", ["aside"]); return self;}, -args: ["anObject"], -source: unescape('append%3A%20anObject%0A%20%20%20%20anObject%20appendToBrush%3A%20self'), -messageSends: ["appendToBrush:"], +args: [], +source: unescape('aside%0A%09%5Eself%20tag%3A%20%27aside%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_appendToBrush_'), +unescape('_audio'), smalltalk.method({ -selector: unescape('appendToBrush%3A'), -category: 'adding', -fn: function (aTagBrush){ +selector: unescape('audio'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(aTagBrush, "_addBrush_", [self]); +return smalltalk.send(self, "_tag_", ["audio"]); return self;}, -args: ["aTagBrush"], -source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20addBrush%3A%20self'), -messageSends: ["addBrush:"], +args: [], +source: unescape('audio%0A%20%20%20%20%5Eself%20tag%3A%20%27audio%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_appendBlock_'), +unescape('_base'), smalltalk.method({ -selector: unescape('appendBlock%3A'), -category: 'adding', -fn: function (aBlock){ +selector: unescape('base'), +category: 'tags', +fn: function (){ var self=this; -var root=nil; -(root=smalltalk.send(self['@canvas'], "_root", [])); -smalltalk.send(self['@canvas'], "_root_", [self]); -smalltalk.send(aBlock, "_value_", [self['@canvas']]); -smalltalk.send(self['@canvas'], "_root_", [root]); +return smalltalk.send(self, "_tag_", ["base"]); return self;}, -args: ["aBlock"], -source: unescape('appendBlock%3A%20aBlock%0A%20%20%20%20%7C%20root%20%7C%0A%20%20%20%20root%20%3A%3D%20canvas%20root.%0A%20%20%20%20canvas%20root%3A%20self.%0A%20%20%20%20aBlock%20value%3A%20canvas.%0A%20%20%20%20canvas%20root%3A%20root'), -messageSends: ["root", "root:", "value:"], +args: [], +source: unescape('base%0A%09%5Eself%20tag%3A%20%27base%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_appendChild_'), +unescape('_blockquote'), smalltalk.method({ -selector: unescape('appendChild%3A'), -category: 'adding', -fn: function (anElement){ +selector: unescape('blockquote'), +category: 'tags', +fn: function (){ var self=this; -var element=self['@element']; - if (null == element.canHaveChildren || element.canHaveChildren) { - element.appendChild(anElement); - } else { - element.text = String(element.text) + anElement.innerHTML; - } ; +return smalltalk.send(self, "_tag_", ["blockquote"]); return self;}, -args: ["anElement"], -source: unescape('appendChild%3A%20anElement%0A%09%22In%20IE7%20and%20IE8%20appendChild%20fails%20on%20several%20node%20types.%20So%20we%20need%20to%20check%22%20%0A%20%09%3Cvar%20element%3Dself%5B%27@element%27%5D%3B%0A%20%09if%20%28null%20%3D%3D%20element.canHaveChildren%20%7C%7C%20element.canHaveChildren%29%20%7B%0A%09%09element.appendChild%28anElement%29%3B%0A%20%09%7D%20else%20%7B%0A%20%09%09element.text%20%3D%20String%28element.text%29%20+%20%20anElement.innerHTML%3B%0A%20%09%7D%20%3E'), -messageSends: [], +args: [], +source: unescape('blockquote%0A%09%5Eself%20tag%3A%20%27blockquote%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_appendString_'), +unescape('_body'), smalltalk.method({ -selector: unescape('appendString%3A'), -category: 'adding', -fn: function (aString){ +selector: unescape('body'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_appendChild_", [smalltalk.send(self, "_createTextNodeFor_", [aString])]); +return smalltalk.send(self, "_tag_", ["body"]); return self;}, -args: ["aString"], -source: unescape('appendString%3A%20aString%0A%20%20%20%20self%20appendChild%3A%20%28self%20createTextNodeFor%3A%20aString%29'), -messageSends: ["appendChild:", "createTextNodeFor:"], +args: [], +source: unescape('body%0A%09%5Eself%20tag%3A%20%27body%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_empty'), +unescape('_br'), smalltalk.method({ -selector: unescape('empty'), -category: 'adding', +selector: unescape('br'), +category: 'tags', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []); +return smalltalk.send(self, "_tag_", ["br"]); return self;}, args: [], -source: unescape('empty%0A%09self%20asJQuery%20empty'), -messageSends: ["empty", "asJQuery"], +source: unescape('br%0A%20%20%20%20%5Eself%20tag%3A%20%27br%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_button'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), -category: 'attributes', -fn: function (aString, aValue){ +selector: unescape('button'), +category: 'tags', +fn: function (){ var self=this; -self['@element'].setAttribute(aString, aValue); +return smalltalk.send(self, "_tag_", ["button"]); return self;}, -args: ["aString", "aValue"], -source: unescape('at%3A%20aString%20put%3A%20aValue%0A%20%20%20%20%3Cself%5B%27@element%27%5D.setAttribute%28aString%2C%20aValue%29%3E'), -messageSends: [], +args: [], +source: unescape('button%0A%20%20%20%20%5Eself%20tag%3A%20%27button%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_removeAt_'), +unescape('_canvas'), smalltalk.method({ -selector: unescape('removeAt%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('canvas'), +category: 'tags', +fn: function (){ var self=this; -self['@element'].removeAttribute(aString); +return smalltalk.send(self, "_tag_", ["canvas"]); return self;}, -args: ["aString"], -source: unescape('removeAt%3A%20aString%0A%20%20%20%20%3Cself%5B%27@element%27%5D.removeAttribute%28aString%29%3E'), -messageSends: [], +args: [], +source: unescape('canvas%0A%09%5Eself%20tag%3A%20%27canvas%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_class_'), +unescape('_caption'), smalltalk.method({ -selector: unescape('class%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('caption'), +category: 'tags', +fn: function (){ var self=this; -self['@element'].className = aString; +return smalltalk.send(self, "_tag_", ["caption"]); return self;}, -args: ["aString"], -source: unescape('class%3A%20aString%0A%20%20%20%20%20%20%3Cself%5B%27@element%27%5D.className%20%3D%20aString%3E'), -messageSends: [], +args: [], +source: unescape('caption%0A%09%5Eself%20tag%3A%20%27caption%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_id_'), +unescape('_cite'), smalltalk.method({ -selector: unescape('id%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('cite'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["id", aString]); +return smalltalk.send(self, "_tag_", ["cite"]); return self;}, -args: ["aString"], -source: unescape('id%3A%20aString%0A%20%20%20%20self%20at%3A%20%27id%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('cite%0A%09%5Eself%20tag%3A%20%27cite%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_src_'), +unescape('_code'), smalltalk.method({ -selector: unescape('src%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('code'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["src", aString]); +return smalltalk.send(self, "_tag_", ["code"]); return self;}, -args: ["aString"], -source: unescape('src%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27src%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('code%0A%20%20%20%20%5Eself%20tag%3A%20%27code%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_href_'), +unescape('_col'), smalltalk.method({ -selector: unescape('href%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('col'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["href", aString]); +return smalltalk.send(self, "_tag_", ["col"]); return self;}, -args: ["aString"], -source: unescape('href%3A%20aString%0A%20%20%20%20self%20at%3A%20%27href%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('col%0A%09%5Eself%20tag%3A%20%27col%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_title_'), +unescape('_colgroup'), smalltalk.method({ -selector: unescape('title%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('colgroup'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["title", aString]); +return smalltalk.send(self, "_tag_", ["colgroup"]); return self;}, -args: ["aString"], -source: unescape('title%3A%20aString%0A%20%20%20%20self%20at%3A%20%27title%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('colgroup%0A%09%5Eself%20tag%3A%20%27colgroup%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_style_'), +unescape('_command'), smalltalk.method({ -selector: unescape('style%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('command'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["style", aString]); +return smalltalk.send(self, "_tag_", ["command"]); return self;}, -args: ["aString"], -source: unescape('style%3A%20aString%0A%20%20%20%20self%20at%3A%20%27style%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('command%0A%09%5Eself%20tag%3A%20%27command%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_type_'), +unescape('_datalist'), smalltalk.method({ -selector: unescape('type%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('datalist'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["type", aString]); +return smalltalk.send(self, "_tag_", ["datalist"]); return self;}, -args: ["aString"], -source: unescape('type%3A%20aString%0A%20%20%20%20self%20at%3A%20%27type%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('datalist%0A%09%5Eself%20tag%3A%20%27datalist%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_media_'), +unescape('_dd'), smalltalk.method({ -selector: unescape('media%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('dd'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["media", aString]); +return smalltalk.send(self, "_tag_", ["dd"]); return self;}, -args: ["aString"], -source: unescape('media%3A%20aString%0A%20%20%20%20self%20at%3A%20%27media%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('dd%0A%09%5Eself%20tag%3A%20%27dd%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_rel_'), +unescape('_del'), smalltalk.method({ -selector: unescape('rel%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('del'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["rel", aString]); +return smalltalk.send(self, "_tag_", ["del"]); return self;}, -args: ["aString"], -source: unescape('rel%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27rel%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('del%0A%09%5Eself%20tag%3A%20%27del%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_width_'), +unescape('_details'), smalltalk.method({ -selector: unescape('width%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('details'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["width", aString]); +return smalltalk.send(self, "_tag_", ["details"]); return self;}, -args: ["aString"], -source: unescape('width%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27width%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('details%0A%09%5Eself%20tag%3A%20%27details%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_height_'), +unescape('_div'), smalltalk.method({ -selector: unescape('height%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('div'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["height", aString]); +return smalltalk.send(self, "_tag_", ["div"]); return self;}, -args: ["aString"], -source: unescape('height%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27height%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('div%0A%20%20%20%20%5Eself%20tag%3A%20%27div%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_value_'), +unescape('_div_'), smalltalk.method({ -selector: unescape('value%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('div%3A'), +category: 'tags', +fn: function (aBlock){ var self=this; -smalltalk.send(self, "_at_put_", ["value", aString]); +return smalltalk.send(smalltalk.send(self, "_div", []), "_with_", [aBlock]); return self;}, -args: ["aString"], -source: unescape('value%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27value%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: ["aBlock"], +source: unescape('div%3A%20aBlock%0A%20%20%20%20%5Eself%20div%20with%3A%20aBlock'), +messageSends: ["with:", "div"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_asJQuery'), +unescape('_dl'), smalltalk.method({ -selector: unescape('asJQuery'), -category: 'converting', +selector: unescape('dl'), +category: 'tags', fn: function (){ var self=this; -return smalltalk.send((typeof window == 'undefined' ? nil : window), "_jQuery_", [smalltalk.send(self, "_element", [])]); +return smalltalk.send(self, "_tag_", ["dl"]); return self;}, args: [], -source: unescape('asJQuery%0A%20%20%20%20%5Ewindow%20jQuery%3A%20self%20element'), -messageSends: ["jQuery:", "element"], +source: unescape('dl%0A%09%5Eself%20tag%3A%20%27dl%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onKeyDown_'), +unescape('_dt'), smalltalk.method({ -selector: unescape('onKeyDown%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('dt'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["keydown", aBlock]); +return smalltalk.send(self, "_tag_", ["dt"]); return self;}, -args: ["aBlock"], -source: unescape('onKeyDown%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27keydown%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('dt%0A%09%5Eself%20tag%3A%20%27dt%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onKeyPress_'), +unescape('_em'), smalltalk.method({ -selector: unescape('onKeyPress%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('em'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["keypress", aBlock]); +return smalltalk.send(self, "_tag_", ["em"]); return self;}, -args: ["aBlock"], -source: unescape('onKeyPress%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27keypress%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('em%0A%09%5Eself%20tag%3A%20%27em%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onKeyUp_'), +unescape('_embed'), smalltalk.method({ -selector: unescape('onKeyUp%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('embed'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["keyup", aBlock]); +return smalltalk.send(self, "_tag_", ["embed"]); return self;}, -args: ["aBlock"], -source: unescape('onKeyUp%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27keyup%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('embed%0A%09%5Eself%20tag%3A%20%27embed%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onFocus_'), +unescape('_fieldset'), smalltalk.method({ -selector: unescape('onFocus%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('fieldset'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["focus", aBlock]); +return smalltalk.send(self, "_tag_", ["fieldset"]); return self;}, -args: ["aBlock"], -source: unescape('onFocus%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27focus%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('fieldset%0A%20%20%20%20%5Eself%20tag%3A%20%27fieldset%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onBlur_'), +unescape('_figcaption'), smalltalk.method({ -selector: unescape('onBlur%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('figcaption'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["blur", aBlock]); +return smalltalk.send(self, "_tag_", ["figcaption"]); return self;}, -args: ["aBlock"], -source: unescape('onBlur%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27blur%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('figcaption%0A%09%5Eself%20tag%3A%20%27figcaption%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onChange_'), +unescape('_figure'), smalltalk.method({ -selector: unescape('onChange%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('figure'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["change", aBlock]); +return smalltalk.send(self, "_tag_", ["figure"]); return self;}, -args: ["aBlock"], -source: unescape('onChange%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27change%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('figure%0A%09%5Eself%20tag%3A%20%27figure%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onClick_'), +unescape('_footer'), smalltalk.method({ -selector: unescape('onClick%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('footer'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["click", aBlock]); +return smalltalk.send(self, "_tag_", ["footer"]); return self;}, -args: ["aBlock"], -source: unescape('onClick%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27click%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('footer%0A%20%20%20%20%5Eself%20tag%3A%20%27footer%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_initializeFromString_canvas_'), +unescape('_form'), smalltalk.method({ -selector: unescape('initializeFromString%3Acanvas%3A'), -category: 'initialization', -fn: function (aString, aCanvas){ +selector: unescape('form'), +category: 'tags', +fn: function (){ var self=this; -(self['@element']=smalltalk.send(self, "_createElementFor_", [aString])); -(self['@canvas']=aCanvas); +return smalltalk.send(self, "_tag_", ["form"]); return self;}, -args: ["aString", "aCanvas"], -source: unescape('initializeFromString%3A%20aString%20canvas%3A%20aCanvas%0A%20%20%20%20element%20%3A%3D%20self%20createElementFor%3A%20aString.%0A%20%20%20%20canvas%20%3A%3D%20aCanvas'), -messageSends: ["createElementFor:"], +args: [], +source: unescape('form%0A%20%20%20%20%5Eself%20tag%3A%20%27form%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_initializeFromJQuery_canvas_'), +unescape('_h1'), smalltalk.method({ -selector: unescape('initializeFromJQuery%3Acanvas%3A'), -category: 'initialization', -fn: function (aJQuery, aCanvas){ +selector: unescape('h1'), +category: 'tags', +fn: function (){ var self=this; -(self['@element']=smalltalk.send(aJQuery, "_get_", [(0)])); -(self['@canvas']=aCanvas); +return smalltalk.send(self, "_tag_", ["h1"]); return self;}, -args: ["aJQuery", "aCanvas"], -source: unescape('initializeFromJQuery%3A%20aJQuery%20canvas%3A%20aCanvas%0A%20%20%20%20element%20%3A%3D%20aJQuery%20get%3A%200.%0A%20%20%20%20canvas%20%3A%3D%20aCanvas'), -messageSends: ["get:"], +args: [], +source: unescape('h1%0A%20%20%20%20%5Eself%20tag%3A%20%27h1%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_createElementFor_'), +unescape('_h1_'), smalltalk.method({ -selector: unescape('createElementFor%3A'), -category: 'private', -fn: function (aString){ +selector: unescape('h1%3A'), +category: 'tags', +fn: function (anObject){ var self=this; -return document.createElement(String(aString)); +return smalltalk.send(smalltalk.send(self, "_h1", []), "_with_", [anObject]); return self;}, -args: ["aString"], -source: unescape('createElementFor%3A%20aString%0A%09%3Creturn%20document.createElement%28String%28aString%29%29%3E'), -messageSends: [], +args: ["anObject"], +source: unescape('h1%3A%20anObject%0A%20%20%20%20%5Eself%20h1%20with%3A%20anObject'), +messageSends: ["with:", "h1"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_createTextNodeFor_'), +unescape('_h2'), smalltalk.method({ -selector: unescape('createTextNodeFor%3A'), -category: 'private', -fn: function (aString){ +selector: unescape('h2'), +category: 'tags', +fn: function (){ var self=this; -return document.createTextNode(String(aString)); +return smalltalk.send(self, "_tag_", ["h2"]); return self;}, -args: ["aString"], -source: unescape('createTextNodeFor%3A%20aString%0A%09%3Creturn%20document.createTextNode%28String%28aString%29%29%3E'), -messageSends: [], +args: [], +source: unescape('h2%0A%20%20%20%20%5Eself%20tag%3A%20%27h2%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onSubmit_'), +unescape('_h2_'), smalltalk.method({ -selector: unescape('onSubmit%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('h2%3A'), +category: 'tags', +fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["submit", aBlock]); +return smalltalk.send(smalltalk.send(self, "_h2", []), "_with_", [anObject]); return self;}, -args: ["aBlock"], -source: unescape('onSubmit%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27submit%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: ["anObject"], +source: unescape('h2%3A%20anObject%0A%20%20%20%20%5E%20self%20h2%20with%3A%20anObject'), +messageSends: ["with:", "h2"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onDblClick_'), +unescape('_h3'), smalltalk.method({ -selector: unescape('onDblClick%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('h3'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["dblclick", aBlock]); +return smalltalk.send(self, "_tag_", ["h3"]); return self;}, -args: ["aBlock"], -source: unescape('onDblClick%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27dblclick%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('h3%0A%20%20%20%20%5Eself%20tag%3A%20%27h3%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onHover_'), +unescape('_h3_'), smalltalk.method({ -selector: unescape('onHover%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('h3%3A'), +category: 'tags', +fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["hover", aBlock]); +return smalltalk.send(smalltalk.send(self, "_h3", []), "_with_", [anObject]); return self;}, -args: ["aBlock"], -source: unescape('onHover%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27hover%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: ["anObject"], +source: unescape('h3%3A%20anObject%0A%20%20%20%20%5Eself%20h3%20with%3A%20anObject'), +messageSends: ["with:", "h3"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onFocusIn_'), +unescape('_h4'), smalltalk.method({ -selector: unescape('onFocusIn%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('h4'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["focusin", aBlock]); +return smalltalk.send(self, "_tag_", ["h4"]); return self;}, -args: ["aBlock"], -source: unescape('onFocusIn%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27focusin%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('h4%0A%20%20%20%20%5Eself%20tag%3A%20%27h4%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onFocusOut_'), +unescape('_h4_'), smalltalk.method({ -selector: unescape('onFocusOut%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('h4%3A'), +category: 'tags', +fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["focusout", aBlock]); +return smalltalk.send(smalltalk.send(self, "_h4", []), "_with_", [anObject]); return self;}, -args: ["aBlock"], -source: unescape('onFocusOut%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27focusout%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: ["anObject"], +source: unescape('h4%3A%20anObject%0A%20%20%20%20%5Eself%20h4%20with%3A%20anObject'), +messageSends: ["with:", "h4"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseDown_'), +unescape('_h5'), smalltalk.method({ -selector: unescape('onMouseDown%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('h5'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mousedown", aBlock]); +return smalltalk.send(self, "_tag_", ["h5"]); return self;}, -args: ["aBlock"], -source: unescape('onMouseDown%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mousedown%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('h5%0A%20%20%20%20%5Eself%20tag%3A%20%27h5%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseUp_'), +unescape('_h5_'), smalltalk.method({ -selector: unescape('onMouseUp%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('h5%3A'), +category: 'tags', +fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseup", aBlock]); +return smalltalk.send(smalltalk.send(self, "_h5", []), "_with_", [anObject]); return self;}, -args: ["aBlock"], -source: unescape('onMouseUp%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mouseup%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: ["anObject"], +source: unescape('h5%3A%20anObject%0A%20%20%20%20%5Eself%20h5%20with%3A%20anObject'), +messageSends: ["with:", "h5"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseEnter_'), +unescape('_h6'), smalltalk.method({ -selector: unescape('onMouseEnter%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('h6'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseenter", aBlock]); +return smalltalk.send(self, "_tag_", ["h6"]); return self;}, -args: ["aBlock"], -source: unescape('onMouseEnter%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mouseenter%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('h6%0A%20%20%20%20%5Eself%20tag%3A%20%27h6%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseLeave_'), +unescape('_h6_'), smalltalk.method({ -selector: unescape('onMouseLeave%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('h6%3A'), +category: 'tags', +fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseleave", aBlock]); +return smalltalk.send(smalltalk.send(self, "_h6", []), "_with_", [anObject]); return self;}, -args: ["aBlock"], -source: unescape('onMouseLeave%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mouseleave%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: ["anObject"], +source: unescape('h6%3A%20anObject%0A%20%20%20%20%5Eself%20h6%20with%3A%20anObject'), +messageSends: ["with:", "h6"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseMove_'), +unescape('_head'), smalltalk.method({ -selector: unescape('onMouseMove%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('head'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mousemove", aBlock]); +return smalltalk.send(self, "_tag_", ["head"]); return self;}, -args: ["aBlock"], -source: unescape('onMouseMove%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mousemove%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('head%0A%09%5Eself%20tag%3A%20%27head%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseOut_'), +unescape('_header'), smalltalk.method({ -selector: unescape('onMouseOut%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('header'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseout", aBlock]); +return smalltalk.send(self, "_tag_", ["header"]); return self;}, -args: ["aBlock"], -source: unescape('onMouseOut%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mouseout%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('header%0A%20%20%20%20%5Eself%20tag%3A%20%27header%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onMouseOver_'), +unescape('_hgroup'), smalltalk.method({ -selector: unescape('onMouseOver%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('hgroup'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseover", aBlock]); +return smalltalk.send(self, "_tag_", ["hgroup"]); return self;}, -args: ["aBlock"], -source: unescape('onMouseOver%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mouseover%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('hgroup%0A%09%5Eself%20tag%3A%20%27hgroup%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onSelect_'), +unescape('_hr'), smalltalk.method({ -selector: unescape('onSelect%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('hr'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["select", aBlock]); +return smalltalk.send(self, "_tag_", ["hr"]); return self;}, -args: ["aBlock"], -source: unescape('onSelect%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27select%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('hr%0A%20%20%20%20%5Eself%20tag%3A%20%27hr%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_onUnload_'), +unescape('_html'), smalltalk.method({ -selector: unescape('onUnload%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('html'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["unload", aBlock]); +return smalltalk.send(self, "_tag_", ["html"]); return self;}, -args: ["aBlock"], -source: unescape('onUnload%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27unload%27%20do%3A%20aBlock'), -messageSends: ["bind:do:", "asJQuery"], +args: [], +source: unescape('html%0A%09%5Eself%20tag%3A%20%27html%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_for_'), +unescape('_iframe'), smalltalk.method({ -selector: unescape('for%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('iframe'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["for", aString]); +return smalltalk.send(self, "_tag_", ["iframe"]); return self;}, -args: ["aString"], -source: unescape('for%3A%20aString%0A%09self%20at%3A%20%27for%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('iframe%0A%20%20%20%20%5Eself%20tag%3A%20%27iframe%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_placeholder_'), +unescape('_iframe_'), smalltalk.method({ -selector: unescape('placeholder%3A'), -category: 'attributes', +selector: unescape('iframe%3A'), +category: 'tags', fn: function (aString){ var self=this; -smalltalk.send(self, "_at_put_", ["placeholder", aString]); +return smalltalk.send(smalltalk.send(self, "_iframe", []), "_src_", [aString]); return self;}, args: ["aString"], -source: unescape('placeholder%3A%20aString%0A%09self%20at%3A%20%27placeholder%27%20put%3A%20aString'), -messageSends: ["at:put:"], +source: unescape('iframe%3A%20aString%0A%20%20%20%20%5Eself%20iframe%20src%3A%20aString'), +messageSends: ["src:", "iframe"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_accesskey_'), +unescape('_img'), smalltalk.method({ -selector: unescape('accesskey%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('img'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["accesskey", aString]); +return smalltalk.send(self, "_tag_", ["img"]); return self;}, -args: ["aString"], -source: unescape('accesskey%3A%20aString%0A%09self%20at%3A%20%27accesskey%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('img%0A%20%20%20%20%5Eself%20tag%3A%20%27img%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_contenteditable_'), +unescape('_img_'), smalltalk.method({ -selector: unescape('contenteditable%3A'), -category: 'attributes', +selector: unescape('img%3A'), +category: 'tags', fn: function (aString){ var self=this; -smalltalk.send(self, "_at_put_", ["contenteditable", aString]); +return smalltalk.send(smalltalk.send(self, "_img", []), "_src_", [aString]); return self;}, args: ["aString"], -source: unescape('contenteditable%3A%20aString%0A%09self%20at%3A%20%27contenteditable%27%20put%3A%20aString'), -messageSends: ["at:put:"], +source: unescape('img%3A%20aString%0A%20%20%20%20%5Eself%20img%20src%3A%20aString'), +messageSends: ["src:", "img"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_contextmenu_'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('contextmenu%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('initialize'), +category: 'initialization', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["contextmenu", aString]); +smalltalk.send(self, "_initialize", [], smalltalk.Object); +(($receiver = self['@root']) == nil || $receiver == undefined) ? (function(){return (self['@root']=smalltalk.send((smalltalk.TagBrush || TagBrush), "_fromString_canvas_", ["div", self]));})() : $receiver; return self;}, -args: ["aString"], -source: unescape('contextmenu%3A%20aString%0A%09self%20at%3A%20%27contextmenu%27%20put%3A%20aString'), -messageSends: ["at:put:"], -referencedClasses: [] +args: [], +source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20root%20ifNil%3A%20%5Broot%20%3A%3D%20TagBrush%20fromString%3A%20%27div%27%20canvas%3A%20self%5D'), +messageSends: ["initialize", "ifNil:", "fromString:canvas:"], +referencedClasses: ["TagBrush"] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_draggable_'), +unescape('_initializeFromJQuery_'), smalltalk.method({ -selector: unescape('draggable%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('initializeFromJQuery%3A'), +category: 'initialization', +fn: function (aJQuery){ var self=this; -smalltalk.send(self, "_at_put_", ["draggable", aString]); +(self['@root']=smalltalk.send((smalltalk.TagBrush || TagBrush), "_fromJQuery_canvas_", [aJQuery, self])); return self;}, -args: ["aString"], -source: unescape('draggable%3A%20aString%0A%09self%20at%3A%20%27draggable%27%20put%3A%20aString'), -messageSends: ["at:put:"], -referencedClasses: [] +args: ["aJQuery"], +source: unescape('initializeFromJQuery%3A%20aJQuery%0A%20%20%20%20root%20%3A%3D%20TagBrush%20fromJQuery%3A%20aJQuery%20canvas%3A%20self'), +messageSends: ["fromJQuery:canvas:"], +referencedClasses: ["TagBrush"] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_hidden'), +unescape('_input'), smalltalk.method({ -selector: unescape('hidden'), -category: 'attributes', +selector: unescape('input'), +category: 'tags', fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["hidden", "hidden"]); +return smalltalk.send(self, "_tag_", ["input"]); return self;}, args: [], -source: unescape('hidden%0A%09self%20at%3A%20%27hidden%27%20put%3A%20%27hidden%27'), -messageSends: ["at:put:"], +source: unescape('input%0A%20%20%20%20%5Eself%20tag%3A%20%27input%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_tabindex_'), +unescape('_label'), smalltalk.method({ -selector: unescape('tabindex%3A'), -category: 'attributes', -fn: function (aNumber){ +selector: unescape('label'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["tabindex", aNumber]); +return smalltalk.send(self, "_tag_", ["label"]); return self;}, -args: ["aNumber"], -source: unescape('tabindex%3A%20aNumber%0A%09self%20at%3A%20%27tabindex%27%20put%3A%20aNumber'), -messageSends: ["at:put:"], +args: [], +source: unescape('label%0A%09%5Eself%20tag%3A%20%27label%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_target_'), +unescape('_legend'), smalltalk.method({ -selector: unescape('target%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('legend'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["target", aString]); +return smalltalk.send(self, "_tag_", ["legend"]); return self;}, -args: ["aString"], -source: unescape('target%3A%20aString%0A%09self%20at%3A%20%27target%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('legend%0A%09%5Eself%20tag%3A%20%27legend%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_align_'), +unescape('_li'), smalltalk.method({ -selector: unescape('align%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('li'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["align", aString]); +return smalltalk.send(self, "_tag_", ["li"]); return self;}, -args: ["aString"], -source: unescape('align%3A%20aString%0A%09self%20at%3A%20%27align%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('li%0A%20%20%20%20%5Eself%20tag%3A%20%27li%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_alt_'), +unescape('_li_'), smalltalk.method({ -selector: unescape('alt%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('li%3A'), +category: 'tags', +fn: function (anObject){ var self=this; -smalltalk.send(self, "_at_put_", ["alt", aString]); +return smalltalk.send(smalltalk.send(self, "_li", []), "_with_", [anObject]); return self;}, -args: ["aString"], -source: unescape('alt%3A%20aString%0A%09self%20at%3A%20%27alt%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: ["anObject"], +source: unescape('li%3A%20anObject%0A%20%20%20%20%5Eself%20li%20with%3A%20anObject'), +messageSends: ["with:", "li"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_name_'), +unescape('_link'), smalltalk.method({ -selector: unescape('name%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('link'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["name", aString]); +return smalltalk.send(self, "_tag_", ["link"]); return self;}, -args: ["aString"], -source: unescape('name%3A%20aString%0A%09self%20at%3A%20%27name%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('link%0A%20%20%20%20%5Eself%20tag%3A%20%27link%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_valign_'), +unescape('_map'), smalltalk.method({ -selector: unescape('valign%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('map'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["valign", aString]); +return smalltalk.send(self, "_tag_", ["map"]); return self;}, -args: ["aString"], -source: unescape('valign%3A%20aString%0A%09self%20at%3A%20%27valign%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('map%0A%09%5Eself%20tag%3A%20%27map%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_method_'), +unescape('_mark'), smalltalk.method({ -selector: unescape('method%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('mark'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["method", aString]); +return smalltalk.send(self, "_tag_", ["mark"]); return self;}, -args: ["aString"], -source: unescape('method%3A%20aString%0A%09self%20at%3A%20%27method%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('mark%0A%09%5Eself%20tag%3A%20%27mark%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_action_'), +unescape('_menu'), smalltalk.method({ -selector: unescape('action%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('menu'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["action", aString]); +return smalltalk.send(self, "_tag_", ["menu"]); return self;}, -args: ["aString"], -source: unescape('action%3A%20aString%0A%09self%20at%3A%20%27action%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('menu%0A%09%5Eself%20tag%3A%20%27menu%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_rows_'), +unescape('_meta'), smalltalk.method({ -selector: unescape('rows%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('meta'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["rows", aString]); +return smalltalk.send(self, "_tag_", ["meta"]); return self;}, -args: ["aString"], -source: unescape('rows%3A%20aString%0A%09self%20at%3A%20%27rows%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('meta%0A%09%5Eself%20tag%3A%20%27meta%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_cols_'), +unescape('_nav'), smalltalk.method({ -selector: unescape('cols%3A'), -category: 'attributes', -fn: function (aString){ +selector: unescape('nav'), +category: 'tags', +fn: function (){ var self=this; -smalltalk.send(self, "_at_put_", ["cols", aString]); +return smalltalk.send(self, "_tag_", ["nav"]); return self;}, -args: ["aString"], -source: unescape('cols%3A%20aString%0A%09self%20at%3A%20%27cols%27%20put%3A%20aString'), -messageSends: ["at:put:"], +args: [], +source: unescape('nav%0A%09%5Eself%20tag%3A%20%27nav%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush); - +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_fromString_canvas_'), +unescape('_newTag_'), smalltalk.method({ -selector: unescape('fromString%3Acanvas%3A'), -category: 'instance creation', -fn: function (aString, aCanvas){ +selector: unescape('newTag%3A'), +category: 'tags', +fn: function (aString){ var self=this; -return (function($rec){smalltalk.send($rec, "_initializeFromString_canvas_", [aString, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return smalltalk.send((smalltalk.TagBrush || TagBrush), "_fromString_canvas_", [aString, self]); return self;}, -args: ["aString", "aCanvas"], -source: unescape('fromString%3A%20aString%20canvas%3A%20aCanvas%0A%20%20%20%20%5Eself%20new%0A%09initializeFromString%3A%20aString%20canvas%3A%20aCanvas%3B%0A%09yourself'), -messageSends: ["initializeFromString:canvas:", "yourself", "new"], -referencedClasses: [] +args: ["aString"], +source: unescape('newTag%3A%20aString%0A%20%20%20%20%5ETagBrush%20fromString%3A%20aString%20canvas%3A%20self'), +messageSends: ["fromString:canvas:"], +referencedClasses: ["TagBrush"] }), -smalltalk.TagBrush.klass); +smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_fromJQuery_canvas_'), +unescape('_noscript'), smalltalk.method({ -selector: unescape('fromJQuery%3Acanvas%3A'), -category: 'instance creation', -fn: function (aJQuery, aCanvas){ +selector: unescape('noscript'), +category: 'tags', +fn: function (){ var self=this; -return (function($rec){smalltalk.send($rec, "_initializeFromJQuery_canvas_", [aJQuery, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return smalltalk.send(self, "_tag_", ["noscript"]); return self;}, -args: ["aJQuery", "aCanvas"], -source: unescape('fromJQuery%3A%20aJQuery%20canvas%3A%20aCanvas%0A%20%20%20%20%5Eself%20new%0A%09initializeFromJQuery%3A%20aJQuery%20canvas%3A%20aCanvas%3B%0A%09yourself'), -messageSends: ["initializeFromJQuery:canvas:", "yourself", "new"], +args: [], +source: unescape('noscript%0A%09%5Eself%20tag%3A%20%27noscript%27'), +messageSends: ["tag:"], referencedClasses: [] }), -smalltalk.TagBrush.klass); - +smalltalk.HTMLCanvas); -smalltalk.addClass('HTMLCanvas', smalltalk.Object, ['root'], 'Canvas'); smalltalk.addMethod( -unescape('_root_'), +unescape('_object'), smalltalk.method({ -selector: unescape('root%3A'), -category: 'accessing', -fn: function (aTagBrush){ +selector: unescape('object'), +category: 'tags', +fn: function (){ var self=this; -(self['@root']=aTagBrush); +return smalltalk.send(self, "_tag_", ["object"]); return self;}, -args: ["aTagBrush"], -source: unescape('root%3A%20aTagBrush%0A%20%20%20%20root%20%3A%3D%20aTagBrush'), -messageSends: [], +args: [], +source: unescape('object%0A%09%5Eself%20tag%3A%20%27object%27'), +messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_root'), +unescape('_ol'), smalltalk.method({ -selector: unescape('root'), -category: 'accessing', +selector: unescape('ol'), +category: 'tags', fn: function (){ var self=this; -return self['@root']; +return smalltalk.send(self, "_tag_", ["ol"]); return self;}, args: [], -source: unescape('root%0A%20%20%20%20%5Eroot'), -messageSends: [], +source: unescape('ol%0A%20%20%20%20%5Eself%20tag%3A%20%27ol%27'), +messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_with_'), +unescape('_ol_'), smalltalk.method({ -selector: unescape('with%3A'), -category: 'adding', +selector: unescape('ol%3A'), +category: 'tags', fn: function (anObject){ var self=this; -return smalltalk.send(smalltalk.send(self, "_root", []), "_with_", [anObject]); +return smalltalk.send(smalltalk.send(self, "_ol", []), "_with_", [anObject]); return self;}, args: ["anObject"], -source: unescape('with%3A%20anObject%0A%20%20%20%20%5Eself%20root%20with%3A%20anObject'), -messageSends: ["with:", "root"], +source: unescape('ol%3A%20anObject%0A%20%20%20%20%5Eself%20ol%20with%3A%20anObject'), +messageSends: ["with:", "ol"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_initialize'), +unescape('_optgroup'), smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', +selector: unescape('optgroup'), +category: 'tags', fn: function (){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.Object); -(($receiver = self['@root']) == nil || $receiver == undefined) ? (function(){return (self['@root']=smalltalk.send((smalltalk.TagBrush || TagBrush), "_fromString_canvas_", ["div", self]));})() : $receiver; +return smalltalk.send(self, "_tag_", ["optgroup"]); return self;}, args: [], -source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20root%20ifNil%3A%20%5Broot%20%3A%3D%20TagBrush%20fromString%3A%20%27div%27%20canvas%3A%20self%5D'), -messageSends: ["initialize", "ifNil:", "fromString:canvas:"], -referencedClasses: ["TagBrush"] +source: unescape('optgroup%0A%09%5Eself%20tag%3A%20%27optgroup%27'), +messageSends: ["tag:"], +referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_initializeFromJQuery_'), +unescape('_option'), smalltalk.method({ -selector: unescape('initializeFromJQuery%3A'), -category: 'initialization', -fn: function (aJQuery){ +selector: unescape('option'), +category: 'tags', +fn: function (){ var self=this; -(self['@root']=smalltalk.send((smalltalk.TagBrush || TagBrush), "_fromJQuery_canvas_", [aJQuery, self])); +return smalltalk.send(self, "_tag_", ["option"]); return self;}, -args: ["aJQuery"], -source: unescape('initializeFromJQuery%3A%20aJQuery%0A%20%20%20%20root%20%3A%3D%20TagBrush%20fromJQuery%3A%20aJQuery%20canvas%3A%20self'), -messageSends: ["fromJQuery:canvas:"], -referencedClasses: ["TagBrush"] +args: [], +source: unescape('option%0A%20%20%20%20%5Eself%20tag%3A%20%27option%27'), +messageSends: ["tag:"], +referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_newTag_'), +unescape('_output'), smalltalk.method({ -selector: unescape('newTag%3A'), +selector: unescape('output'), category: 'tags', -fn: function (aString){ +fn: function (){ var self=this; -return smalltalk.send((smalltalk.TagBrush || TagBrush), "_fromString_canvas_", [aString, self]); +return smalltalk.send(self, "_tag_", ["output"]); return self;}, -args: ["aString"], -source: unescape('newTag%3A%20aString%0A%20%20%20%20%5ETagBrush%20fromString%3A%20aString%20canvas%3A%20self'), -messageSends: ["fromString:canvas:"], -referencedClasses: ["TagBrush"] +args: [], +source: unescape('output%0A%09%5Eself%20tag%3A%20%27output%27'), +messageSends: ["tag:"], +referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_tag_'), +unescape('_p'), smalltalk.method({ -selector: unescape('tag%3A'), +selector: unescape('p'), category: 'tags', -fn: function (aString){ +fn: function (){ var self=this; -return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send(self, "_newTag_", [aString])]); +return smalltalk.send(self, "_tag_", ["p"]); return self;}, -args: ["aString"], -source: unescape('tag%3A%20aString%0A%20%20%20%20%5Eroot%20addBrush%3A%20%28self%20newTag%3A%20aString%29'), -messageSends: ["addBrush:", "newTag:"], +args: [], +source: unescape('p%0A%20%20%20%20%5Eself%20tag%3A%20%27p%27'), +messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h1'), +unescape('_p_'), smalltalk.method({ -selector: unescape('h1'), +selector: unescape('p%3A'), category: 'tags', -fn: function (){ +fn: function (anObject){ var self=this; -return smalltalk.send(self, "_tag_", ["h1"]); +return smalltalk.send(smalltalk.send(self, "_p", []), "_with_", [anObject]); return self;}, -args: [], -source: unescape('h1%0A%20%20%20%20%5Eself%20tag%3A%20%27h1%27'), -messageSends: ["tag:"], +args: ["anObject"], +source: unescape('p%3A%20anObject%0A%20%20%20%20%5Eself%20p%20with%3A%20anObject'), +messageSends: ["with:", "p"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h2'), +unescape('_param'), smalltalk.method({ -selector: unescape('h2'), +selector: unescape('param'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["h2"]); +return smalltalk.send(self, "_tag_", ["param"]); return self;}, args: [], -source: unescape('h2%0A%20%20%20%20%5Eself%20tag%3A%20%27h2%27'), +source: unescape('param%0A%09%5Eself%20tag%3A%20%27param%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h3'), +unescape('_pre'), smalltalk.method({ -selector: unescape('h3'), +selector: unescape('pre'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["h3"]); +return smalltalk.send(self, "_tag_", ["pre"]); return self;}, args: [], -source: unescape('h3%0A%20%20%20%20%5Eself%20tag%3A%20%27h3%27'), +source: unescape('pre%0A%20%20%20%20%5Eself%20tag%3A%20%27pre%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h4'), +unescape('_progress'), smalltalk.method({ -selector: unescape('h4'), +selector: unescape('progress'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["h4"]); +return smalltalk.send(self, "_tag_", ["progress"]); return self;}, args: [], -source: unescape('h4%0A%20%20%20%20%5Eself%20tag%3A%20%27h4%27'), +source: unescape('progress%0A%09%5Eself%20tag%3A%20%27progress%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h5'), +unescape('_root'), smalltalk.method({ -selector: unescape('h5'), -category: 'tags', +selector: unescape('root'), +category: 'accessing', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["h5"]); +return self['@root']; return self;}, args: [], -source: unescape('h5%0A%20%20%20%20%5Eself%20tag%3A%20%27h5%27'), -messageSends: ["tag:"], +source: unescape('root%0A%20%20%20%20%5Eroot'), +messageSends: [], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h6'), +unescape('_root_'), smalltalk.method({ -selector: unescape('h6'), -category: 'tags', -fn: function (){ +selector: unescape('root%3A'), +category: 'accessing', +fn: function (aTagBrush){ var self=this; -return smalltalk.send(self, "_tag_", ["h6"]); +(self['@root']=aTagBrush); return self;}, -args: [], -source: unescape('h6%0A%20%20%20%20%5Eself%20tag%3A%20%27h6%27'), -messageSends: ["tag:"], +args: ["aTagBrush"], +source: unescape('root%3A%20aTagBrush%0A%20%20%20%20root%20%3A%3D%20aTagBrush'), +messageSends: [], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_p'), +unescape('_script'), smalltalk.method({ -selector: unescape('p'), +selector: unescape('script'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["p"]); +return smalltalk.send(self, "_tag_", ["script"]); return self;}, args: [], -source: unescape('p%0A%20%20%20%20%5Eself%20tag%3A%20%27p%27'), +source: unescape('script%0A%20%20%20%20%5Eself%20tag%3A%20%27script%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_div'), +unescape('_section'), smalltalk.method({ -selector: unescape('div'), +selector: unescape('section'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["div"]); +return smalltalk.send(self, "_tag_", ["section"]); return self;}, args: [], -source: unescape('div%0A%20%20%20%20%5Eself%20tag%3A%20%27div%27'), +source: unescape('section%0A%20%20%20%20%5Eself%20tag%3A%20%27section%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_span'), +unescape('_select'), smalltalk.method({ -selector: unescape('span'), +selector: unescape('select'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["span"]); +return smalltalk.send(self, "_tag_", ["select"]); return self;}, args: [], -source: unescape('span%0A%20%20%20%20%5Eself%20tag%3A%20%27span%27'), +source: unescape('select%0A%20%20%20%20%5Eself%20tag%3A%20%27select%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_img'), +unescape('_small'), smalltalk.method({ -selector: unescape('img'), +selector: unescape('small'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["img"]); +return smalltalk.send(self, "_tag_", ["small"]); return self;}, args: [], -source: unescape('img%0A%20%20%20%20%5Eself%20tag%3A%20%27img%27'), +source: unescape('small%0A%09%5Eself%20tag%3A%20%27small%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_ul'), +unescape('_source'), smalltalk.method({ -selector: unescape('ul'), +selector: unescape('source'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["ul"]); +return smalltalk.send(self, "_tag_", ["source"]); return self;}, args: [], -source: unescape('ul%0A%20%20%20%20%5Eself%20tag%3A%20%27ul%27'), +source: unescape('source%0A%09%5Eself%20tag%3A%20%27source%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_ol'), +unescape('_span'), smalltalk.method({ -selector: unescape('ol'), +selector: unescape('span'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["ol"]); +return smalltalk.send(self, "_tag_", ["span"]); return self;}, args: [], -source: unescape('ol%0A%20%20%20%20%5Eself%20tag%3A%20%27ol%27'), +source: unescape('span%0A%20%20%20%20%5Eself%20tag%3A%20%27span%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_li'), +unescape('_span_'), smalltalk.method({ -selector: unescape('li'), +selector: unescape('span%3A'), category: 'tags', -fn: function (){ +fn: function (anObject){ var self=this; -return smalltalk.send(self, "_tag_", ["li"]); +return smalltalk.send(smalltalk.send(self, "_span", []), "_with_", [anObject]); return self;}, -args: [], -source: unescape('li%0A%20%20%20%20%5Eself%20tag%3A%20%27li%27'), -messageSends: ["tag:"], +args: ["anObject"], +source: unescape('span%3A%20anObject%0A%20%20%20%20%5Eself%20span%20with%3A%20anObject'), +messageSends: ["with:", "span"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_table'), +unescape('_strong'), smalltalk.method({ -selector: unescape('table'), +selector: unescape('strong'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["table"]); +return smalltalk.send(self, "_tag_", ["strong"]); return self;}, args: [], -source: unescape('table%0A%20%20%20%20%5Eself%20tag%3A%20%27table%27'), +source: unescape('strong%0A%09%5Eself%20tag%3A%20%27strong%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_tr'), +unescape('_strong_'), smalltalk.method({ -selector: unescape('tr'), +selector: unescape('strong%3A'), category: 'tags', -fn: function (){ +fn: function (anObject){ var self=this; -return smalltalk.send(self, "_tag_", ["tr"]); +return smalltalk.send(smalltalk.send(self, "_strong", []), "_with_", [anObject]); return self;}, -args: [], -source: unescape('tr%0A%20%20%20%20%5Eself%20tag%3A%20%27tr%27'), -messageSends: ["tag:"], +args: ["anObject"], +source: unescape('strong%3A%20anObject%0A%09%5Eself%20strong%20with%3A%20anObject'), +messageSends: ["with:", "strong"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_td'), +unescape('_style'), smalltalk.method({ -selector: unescape('td'), +selector: unescape('style'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["td"]); +return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send((smalltalk.StyleTag || StyleTag), "_canvas_", [self])]); return self;}, args: [], -source: unescape('td%20%0A%20%20%20%20%5Eself%20tag%3A%20%27td%27'), -messageSends: ["tag:"], -referencedClasses: [] +source: unescape('style%0A%09%5E%20root%20addBrush%3A%20%20%28StyleTag%20canvas%3A%20self%29'), +messageSends: ["addBrush:", "canvas:"], +referencedClasses: ["StyleTag"] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_th'), +unescape('_style_'), smalltalk.method({ -selector: unescape('th'), +selector: unescape('style%3A'), category: 'tags', -fn: function (){ +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["th"]); +return (function($rec){smalltalk.send($rec, "_with_", [aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_style", [])); return self;}, -args: [], -source: unescape('th%0A%20%20%20%20%5Eself%20tag%3A%20%27th%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('style%3A%20aString%0A%09%5E%20self%20style%20with%3A%20aString%3B%20yourself'), +messageSends: ["with:", "yourself", "style"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_form'), +unescape('_sub'), smalltalk.method({ -selector: unescape('form'), +selector: unescape('sub'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["form"]); +return smalltalk.send(self, "_tag_", ["sub"]); return self;}, args: [], -source: unescape('form%0A%20%20%20%20%5Eself%20tag%3A%20%27form%27'), +source: unescape('sub%0A%09%5Eself%20tag%3A%20%27sub%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_input'), +unescape('_summary'), smalltalk.method({ -selector: unescape('input'), +selector: unescape('summary'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["input"]); +return smalltalk.send(self, "_tag_", ["summary"]); return self;}, args: [], -source: unescape('input%0A%20%20%20%20%5Eself%20tag%3A%20%27input%27'), +source: unescape('summary%0A%09%5Eself%20tag%3A%20%27summary%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_button'), +unescape('_sup'), smalltalk.method({ -selector: unescape('button'), +selector: unescape('sup'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["button"]); +return smalltalk.send(self, "_tag_", ["sup"]); return self;}, args: [], -source: unescape('button%0A%20%20%20%20%5Eself%20tag%3A%20%27button%27'), +source: unescape('sup%0A%09%5Eself%20tag%3A%20%27sup%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_select'), +unescape('_table'), smalltalk.method({ -selector: unescape('select'), +selector: unescape('table'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["select"]); +return smalltalk.send(self, "_tag_", ["table"]); return self;}, args: [], -source: unescape('select%0A%20%20%20%20%5Eself%20tag%3A%20%27select%27'), +source: unescape('table%0A%20%20%20%20%5Eself%20tag%3A%20%27table%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_option'), +unescape('_tag_'), smalltalk.method({ -selector: unescape('option'), +selector: unescape('tag%3A'), category: 'tags', -fn: function (){ +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["option"]); +return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send(self, "_newTag_", [aString])]); return self;}, -args: [], -source: unescape('option%0A%20%20%20%20%5Eself%20tag%3A%20%27option%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('tag%3A%20aString%0A%20%20%20%20%5Eroot%20addBrush%3A%20%28self%20newTag%3A%20aString%29'), +messageSends: ["addBrush:", "newTag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_textarea'), +unescape('_tbody'), smalltalk.method({ -selector: unescape('textarea'), +selector: unescape('tbody'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["textarea"]); +return smalltalk.send(self, "_tag_", ["tbody"]); return self;}, args: [], -source: unescape('textarea%0A%20%20%20%20%5Eself%20tag%3A%20%27textarea%27'), +source: unescape('tbody%0A%20%20%20%20%5Eself%20tag%3A%20%27tbody%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_a'), +unescape('_td'), smalltalk.method({ -selector: unescape('a'), +selector: unescape('td'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["a"]); +return smalltalk.send(self, "_tag_", ["td"]); return self;}, args: [], -source: unescape('a%0A%20%20%20%20%5Eself%20tag%3A%20%27a%27'), +source: unescape('td%20%0A%20%20%20%20%5Eself%20tag%3A%20%27td%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_canvas'), +unescape('_textarea'), smalltalk.method({ -selector: unescape('canvas'), +selector: unescape('textarea'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["canvas"]); +return smalltalk.send(self, "_tag_", ["textarea"]); return self;}, args: [], -source: unescape('canvas%0A%09%5Eself%20tag%3A%20%27canvas%27'), +source: unescape('textarea%0A%20%20%20%20%5Eself%20tag%3A%20%27textarea%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_pre'), +unescape('_tfoot'), smalltalk.method({ -selector: unescape('pre'), +selector: unescape('tfoot'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["pre"]); +return smalltalk.send(self, "_tag_", ["tfoot"]); return self;}, args: [], -source: unescape('pre%0A%20%20%20%20%5Eself%20tag%3A%20%27pre%27'), +source: unescape('tfoot%0A%20%20%20%20%5Eself%20tag%3A%20%27tfoot%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_code'), +unescape('_th'), smalltalk.method({ -selector: unescape('code'), +selector: unescape('th'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["code"]); +return smalltalk.send(self, "_tag_", ["th"]); return self;}, args: [], -source: unescape('code%0A%20%20%20%20%5Eself%20tag%3A%20%27code%27'), +source: unescape('th%0A%20%20%20%20%5Eself%20tag%3A%20%27th%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_br'), +unescape('_thead'), smalltalk.method({ -selector: unescape('br'), +selector: unescape('thead'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["br"]); +return smalltalk.send(self, "_tag_", ["thead"]); return self;}, args: [], -source: unescape('br%0A%20%20%20%20%5Eself%20tag%3A%20%27br%27'), +source: unescape('thead%0A%20%20%20%20%5Eself%20tag%3A%20%27thead%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_script'), +unescape('_time'), smalltalk.method({ -selector: unescape('script'), +selector: unescape('time'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["script"]); +return smalltalk.send(self, "_tag_", ["time"]); return self;}, args: [], -source: unescape('script%0A%20%20%20%20%5Eself%20tag%3A%20%27script%27'), +source: unescape('time%0A%09%5Eself%20tag%3A%20%27time%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_link'), +unescape('_title'), smalltalk.method({ -selector: unescape('link'), +selector: unescape('title'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["link"]); +return smalltalk.send(self, "_tag_", ["title"]); return self;}, args: [], -source: unescape('link%0A%20%20%20%20%5Eself%20tag%3A%20%27link%27'), +source: unescape('title%0A%09%5Eself%20tag%3A%20%27title%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_style'), +unescape('_tr'), smalltalk.method({ -selector: unescape('style'), +selector: unescape('tr'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send((smalltalk.StyleTag || StyleTag), "_canvas_", [self])]); +return smalltalk.send(self, "_tag_", ["tr"]); return self;}, args: [], -source: unescape('style%0A%09%5E%20root%20addBrush%3A%20%20%28StyleTag%20canvas%3A%20self%29'), -messageSends: ["addBrush:", "canvas:"], -referencedClasses: ["StyleTag"] +source: unescape('tr%0A%20%20%20%20%5Eself%20tag%3A%20%27tr%27'), +messageSends: ["tag:"], +referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_p_'), +unescape('_ul'), smalltalk.method({ -selector: unescape('p%3A'), +selector: unescape('ul'), category: 'tags', -fn: function (anObject){ +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_p", []), "_with_", [anObject]); +return smalltalk.send(self, "_tag_", ["ul"]); return self;}, -args: ["anObject"], -source: unescape('p%3A%20anObject%0A%20%20%20%20%5Eself%20p%20with%3A%20anObject'), -messageSends: ["with:", "p"], +args: [], +source: unescape('ul%0A%20%20%20%20%5Eself%20tag%3A%20%27ul%27'), +messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_h1_'), +unescape('_ul_'), smalltalk.method({ -selector: unescape('h1%3A'), +selector: unescape('ul%3A'), category: 'tags', fn: function (anObject){ var self=this; -return smalltalk.send(smalltalk.send(self, "_h1", []), "_with_", [anObject]); +return smalltalk.send(smalltalk.send(self, "_ul", []), "_with_", [anObject]); return self;}, args: ["anObject"], -source: unescape('h1%3A%20anObject%0A%20%20%20%20%5Eself%20h1%20with%3A%20anObject'), -messageSends: ["with:", "h1"], +source: unescape('ul%3A%20anObject%0A%20%20%20%20%5Eself%20ul%20with%3A%20anObject'), +messageSends: ["with:", "ul"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_iframe'), +unescape('_video'), smalltalk.method({ -selector: unescape('iframe'), +selector: unescape('video'), category: 'tags', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["iframe"]); +return smalltalk.send(self, "_tag_", ["video"]); return self;}, args: [], -source: unescape('iframe%0A%20%20%20%20%5Eself%20tag%3A%20%27iframe%27'), +source: unescape('video%0A%20%20%20%20%5Eself%20tag%3A%20%27video%27'), messageSends: ["tag:"], referencedClasses: [] }), smalltalk.HTMLCanvas); smalltalk.addMethod( -unescape('_iframe_'), -smalltalk.method({ -selector: unescape('iframe%3A'), -category: 'tags', -fn: function (aString){ -var self=this; -return smalltalk.send(smalltalk.send(self, "_iframe", []), "_src_", [aString]); -return self;}, -args: ["aString"], -source: unescape('iframe%3A%20aString%0A%20%20%20%20%5Eself%20iframe%20src%3A%20aString'), -messageSends: ["src:", "iframe"], -referencedClasses: [] -}), -smalltalk.HTMLCanvas); - -smalltalk.addMethod( -unescape('_h2_'), +unescape('_with_'), smalltalk.method({ -selector: unescape('h2%3A'), -category: 'tags', +selector: unescape('with%3A'), +category: 'adding', fn: function (anObject){ var self=this; -return smalltalk.send(smalltalk.send(self, "_h2", []), "_with_", [anObject]); +return smalltalk.send(smalltalk.send(self, "_root", []), "_with_", [anObject]); return self;}, args: ["anObject"], -source: unescape('h2%3A%20anObject%0A%20%20%20%20%5E%20self%20h2%20with%3A%20anObject'), -messageSends: ["with:", "h2"], +source: unescape('with%3A%20anObject%0A%20%20%20%20%5Eself%20root%20with%3A%20anObject'), +messageSends: ["with:", "root"], referencedClasses: [] }), smalltalk.HTMLCanvas); + smalltalk.addMethod( -unescape('_h3_'), +unescape('_browserVersion'), smalltalk.method({ -selector: unescape('h3%3A'), -category: 'tags', -fn: function (anObject){ +selector: unescape('browserVersion'), +category: 'instance creation', +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_h3", []), "_with_", [anObject]); +return smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_version", []); return self;}, -args: ["anObject"], -source: unescape('h3%3A%20anObject%0A%20%20%20%20%5Eself%20h3%20with%3A%20anObject'), -messageSends: ["with:", "h3"], +args: [], +source: unescape('browserVersion%0A%09%5E%28jQuery%20at%3A%20%23browser%29%20version'), +messageSends: ["version", "at:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.HTMLCanvas.klass); smalltalk.addMethod( -unescape('_h4_'), +unescape('_isMSIE'), smalltalk.method({ -selector: unescape('h4%3A'), -category: 'tags', -fn: function (anObject){ +selector: unescape('isMSIE'), +category: 'instance creation', +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_h4", []), "_with_", [anObject]); +return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("msie")]), "_notNil", []); return self;}, -args: ["anObject"], -source: unescape('h4%3A%20anObject%0A%20%20%20%20%5Eself%20h4%20with%3A%20anObject'), -messageSends: ["with:", "h4"], +args: [], +source: unescape('isMSIE%0A%09%5E%28%28jQuery%20at%3A%20%23browser%29%20at%3A%20%23msie%29%20notNil'), +messageSends: ["notNil", "at:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.HTMLCanvas.klass); smalltalk.addMethod( -unescape('_h5_'), +unescape('_isMozilla'), smalltalk.method({ -selector: unescape('h5%3A'), -category: 'tags', -fn: function (anObject){ +selector: unescape('isMozilla'), +category: 'instance creation', +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_h5", []), "_with_", [anObject]); +return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("mozilla")]), "_notNil", []); return self;}, -args: ["anObject"], -source: unescape('h5%3A%20anObject%0A%20%20%20%20%5Eself%20h5%20with%3A%20anObject'), -messageSends: ["with:", "h5"], +args: [], +source: unescape('isMozilla%0A%09%5E%28%28jQuery%20at%3A%20%23browser%29%20at%3A%20%23mozilla%29%20notNil'), +messageSends: ["notNil", "at:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.HTMLCanvas.klass); smalltalk.addMethod( -unescape('_h6_'), +unescape('_isOpera'), smalltalk.method({ -selector: unescape('h6%3A'), -category: 'tags', -fn: function (anObject){ +selector: unescape('isOpera'), +category: 'instance creation', +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_h6", []), "_with_", [anObject]); +return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("opera")]), "_notNil", []); return self;}, -args: ["anObject"], -source: unescape('h6%3A%20anObject%0A%20%20%20%20%5Eself%20h6%20with%3A%20anObject'), -messageSends: ["with:", "h6"], +args: [], +source: unescape('isOpera%0A%09%5E%28%28jQuery%20at%3A%20%23browser%29%20at%3A%20%23opera%29%20notNil'), +messageSends: ["notNil", "at:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.HTMLCanvas.klass); smalltalk.addMethod( -unescape('_img_'), +unescape('_isWebkit'), smalltalk.method({ -selector: unescape('img%3A'), -category: 'tags', -fn: function (aString){ +selector: unescape('isWebkit'), +category: 'instance creation', +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_img", []), "_src_", [aString]); +return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("webkit")]), "_notNil", []); return self;}, -args: ["aString"], -source: unescape('img%3A%20aString%0A%20%20%20%20%5Eself%20img%20src%3A%20aString'), -messageSends: ["src:", "img"], +args: [], +source: unescape('isWebkit%0A%09%5E%28%28jQuery%20at%3A%20%23browser%29%20at%3A%20%23webkit%29%20notNil'), +messageSends: ["notNil", "at:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.HTMLCanvas.klass); smalltalk.addMethod( -unescape('_ol_'), +unescape('_onJQuery_'), smalltalk.method({ -selector: unescape('ol%3A'), -category: 'tags', -fn: function (anObject){ +selector: unescape('onJQuery%3A'), +category: 'instance creation', +fn: function (aJQuery){ var self=this; -return smalltalk.send(smalltalk.send(self, "_ol", []), "_with_", [anObject]); +return (function($rec){smalltalk.send($rec, "_initializeFromJQuery_", [aJQuery]);smalltalk.send($rec, "_initialize", []);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_basicNew", [])); return self;}, -args: ["anObject"], -source: unescape('ol%3A%20anObject%0A%20%20%20%20%5Eself%20ol%20with%3A%20anObject'), -messageSends: ["with:", "ol"], +args: ["aJQuery"], +source: unescape('onJQuery%3A%20aJQuery%0A%09%5Eself%20basicNew%0A%09%09initializeFromJQuery%3A%20aJQuery%3B%0A%09%09initialize%3B%0A%09%09yourself'), +messageSends: ["initializeFromJQuery:", "initialize", "yourself", "basicNew"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.HTMLCanvas.klass); + +smalltalk.addClass('TagBrush', smalltalk.Object, ['canvas', 'element'], 'Canvas'); smalltalk.addMethod( -unescape('_li_'), +unescape('_accesskey_'), smalltalk.method({ -selector: unescape('li%3A'), -category: 'tags', -fn: function (anObject){ +selector: unescape('accesskey%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(smalltalk.send(self, "_li", []), "_with_", [anObject]); +smalltalk.send(self, "_at_put_", ["accesskey", aString]); return self;}, -args: ["anObject"], -source: unescape('li%3A%20anObject%0A%20%20%20%20%5Eself%20li%20with%3A%20anObject'), -messageSends: ["with:", "li"], +args: ["aString"], +source: unescape('accesskey%3A%20aString%0A%09self%20at%3A%20%27accesskey%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_ul_'), +unescape('_action_'), smalltalk.method({ -selector: unescape('ul%3A'), -category: 'tags', -fn: function (anObject){ +selector: unescape('action%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(smalltalk.send(self, "_ul", []), "_with_", [anObject]); +smalltalk.send(self, "_at_put_", ["action", aString]); return self;}, -args: ["anObject"], -source: unescape('ul%3A%20anObject%0A%20%20%20%20%5Eself%20ul%20with%3A%20anObject'), -messageSends: ["with:", "ul"], +args: ["aString"], +source: unescape('action%3A%20aString%0A%09self%20at%3A%20%27action%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_span_'), +unescape('_addBrush_'), smalltalk.method({ -selector: unescape('span%3A'), -category: 'tags', -fn: function (anObject){ +selector: unescape('addBrush%3A'), +category: 'adding', +fn: function (aTagBrush){ var self=this; -return smalltalk.send(smalltalk.send(self, "_span", []), "_with_", [anObject]); +smalltalk.send(self, "_appendChild_", [smalltalk.send(aTagBrush, "_element", [])]); +return aTagBrush; return self;}, -args: ["anObject"], -source: unescape('span%3A%20anObject%0A%20%20%20%20%5Eself%20span%20with%3A%20anObject'), -messageSends: ["with:", "span"], +args: ["aTagBrush"], +source: unescape('addBrush%3A%20aTagBrush%0A%20%20%20%20self%20appendChild%3A%20aTagBrush%20element.%0A%20%20%20%20%5EaTagBrush'), +messageSends: ["appendChild:", "element"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_style_'), +unescape('_align_'), smalltalk.method({ -selector: unescape('style%3A'), -category: 'tags', +selector: unescape('align%3A'), +category: 'attributes', fn: function (aString){ var self=this; -return (function($rec){smalltalk.send($rec, "_with_", [aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_style", [])); +smalltalk.send(self, "_at_put_", ["align", aString]); return self;}, args: ["aString"], -source: unescape('style%3A%20aString%0A%09%5E%20self%20style%20with%3A%20aString%3B%20yourself'), -messageSends: ["with:", "yourself", "style"], +source: unescape('align%3A%20aString%0A%09self%20at%3A%20%27align%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_audio'), +unescape('_alt_'), smalltalk.method({ -selector: unescape('audio'), -category: 'tags', -fn: function (){ +selector: unescape('alt%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["audio"]); +smalltalk.send(self, "_at_put_", ["alt", aString]); return self;}, -args: [], -source: unescape('audio%0A%20%20%20%20%5Eself%20tag%3A%20%27audio%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('alt%3A%20aString%0A%09self%20at%3A%20%27alt%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_fieldset'), +unescape('_append_'), smalltalk.method({ -selector: unescape('fieldset'), -category: 'tags', -fn: function (){ +selector: unescape('append%3A'), +category: 'adding', +fn: function (anObject){ var self=this; -return smalltalk.send(self, "_tag_", ["fieldset"]); +smalltalk.send(anObject, "_appendToBrush_", [self]); return self;}, -args: [], -source: unescape('fieldset%0A%20%20%20%20%5Eself%20tag%3A%20%27fieldset%27'), -messageSends: ["tag:"], +args: ["anObject"], +source: unescape('append%3A%20anObject%0A%20%20%20%20anObject%20appendToBrush%3A%20self'), +messageSends: ["appendToBrush:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_footer'), +unescape('_appendBlock_'), smalltalk.method({ -selector: unescape('footer'), -category: 'tags', -fn: function (){ +selector: unescape('appendBlock%3A'), +category: 'adding', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["footer"]); +var root=nil; +(root=smalltalk.send(self['@canvas'], "_root", [])); +smalltalk.send(self['@canvas'], "_root_", [self]); +smalltalk.send(aBlock, "_value_", [self['@canvas']]); +smalltalk.send(self['@canvas'], "_root_", [root]); return self;}, -args: [], -source: unescape('footer%0A%20%20%20%20%5Eself%20tag%3A%20%27footer%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('appendBlock%3A%20aBlock%0A%20%20%20%20%7C%20root%20%7C%0A%20%20%20%20root%20%3A%3D%20canvas%20root.%0A%20%20%20%20canvas%20root%3A%20self.%0A%20%20%20%20aBlock%20value%3A%20canvas.%0A%20%20%20%20canvas%20root%3A%20root'), +messageSends: ["root", "root:", "value:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_header'), +unescape('_appendChild_'), smalltalk.method({ -selector: unescape('header'), -category: 'tags', -fn: function (){ +selector: unescape('appendChild%3A'), +category: 'adding', +fn: function (anElement){ var self=this; -return smalltalk.send(self, "_tag_", ["header"]); +var element=self['@element']; + if (null == element.canHaveChildren || element.canHaveChildren) { + element.appendChild(anElement); + } else { + element.text = String(element.text) + anElement.innerHTML; + } ; return self;}, -args: [], -source: unescape('header%0A%20%20%20%20%5Eself%20tag%3A%20%27header%27'), -messageSends: ["tag:"], +args: ["anElement"], +source: unescape('appendChild%3A%20anElement%0A%09%22In%20IE7%20and%20IE8%20appendChild%20fails%20on%20several%20node%20types.%20So%20we%20need%20to%20check%22%20%0A%20%09%3Cvar%20element%3Dself%5B%27@element%27%5D%3B%0A%20%09if%20%28null%20%3D%3D%20element.canHaveChildren%20%7C%7C%20element.canHaveChildren%29%20%7B%0A%09%09element.appendChild%28anElement%29%3B%0A%20%09%7D%20else%20%7B%0A%20%09%09element.text%20%3D%20String%28element.text%29%20+%20%20anElement.innerHTML%3B%0A%20%09%7D%20%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_hr'), +unescape('_appendString_'), smalltalk.method({ -selector: unescape('hr'), -category: 'tags', -fn: function (){ +selector: unescape('appendString%3A'), +category: 'adding', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["hr"]); +smalltalk.send(self, "_appendChild_", [smalltalk.send(self, "_createTextNodeFor_", [aString])]); return self;}, -args: [], -source: unescape('hr%0A%20%20%20%20%5Eself%20tag%3A%20%27hr%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('appendString%3A%20aString%0A%20%20%20%20self%20appendChild%3A%20%28self%20createTextNodeFor%3A%20aString%29'), +messageSends: ["appendChild:", "createTextNodeFor:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_section'), +unescape('_appendToBrush_'), smalltalk.method({ -selector: unescape('section'), -category: 'tags', -fn: function (){ +selector: unescape('appendToBrush%3A'), +category: 'adding', +fn: function (aTagBrush){ var self=this; -return smalltalk.send(self, "_tag_", ["section"]); +smalltalk.send(aTagBrush, "_addBrush_", [self]); return self;}, -args: [], -source: unescape('section%0A%20%20%20%20%5Eself%20tag%3A%20%27section%27'), -messageSends: ["tag:"], +args: ["aTagBrush"], +source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20addBrush%3A%20self'), +messageSends: ["addBrush:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_tbody'), +unescape('_asJQuery'), smalltalk.method({ -selector: unescape('tbody'), -category: 'tags', +selector: unescape('asJQuery'), +category: 'converting', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["tbody"]); +return smalltalk.send((typeof window == 'undefined' ? nil : window), "_jQuery_", [smalltalk.send(self, "_element", [])]); return self;}, args: [], -source: unescape('tbody%0A%20%20%20%20%5Eself%20tag%3A%20%27tbody%27'), -messageSends: ["tag:"], +source: unescape('asJQuery%0A%20%20%20%20%5Ewindow%20jQuery%3A%20self%20element'), +messageSends: ["jQuery:", "element"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_tfoot'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('tfoot'), -category: 'tags', -fn: function (){ +selector: unescape('at%3Aput%3A'), +category: 'attributes', +fn: function (aString, aValue){ var self=this; -return smalltalk.send(self, "_tag_", ["tfoot"]); +self['@element'].setAttribute(aString, aValue); return self;}, -args: [], -source: unescape('tfoot%0A%20%20%20%20%5Eself%20tag%3A%20%27tfoot%27'), -messageSends: ["tag:"], +args: ["aString", "aValue"], +source: unescape('at%3A%20aString%20put%3A%20aValue%0A%20%20%20%20%3Cself%5B%27@element%27%5D.setAttribute%28aString%2C%20aValue%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_thead'), +unescape('_class_'), smalltalk.method({ -selector: unescape('thead'), -category: 'tags', -fn: function (){ +selector: unescape('class%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["thead"]); +self['@element'].className = aString; return self;}, -args: [], -source: unescape('thead%0A%20%20%20%20%5Eself%20tag%3A%20%27thead%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('class%3A%20aString%0A%20%20%20%20%20%20%3Cself%5B%27@element%27%5D.className%20%3D%20aString%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_video'), +unescape('_cols_'), smalltalk.method({ -selector: unescape('video'), -category: 'tags', -fn: function (){ +selector: unescape('cols%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["video"]); +smalltalk.send(self, "_at_put_", ["cols", aString]); return self;}, -args: [], -source: unescape('video%0A%20%20%20%20%5Eself%20tag%3A%20%27video%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('cols%3A%20aString%0A%09self%20at%3A%20%27cols%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_label'), +unescape('_contenteditable_'), smalltalk.method({ -selector: unescape('label'), -category: 'tags', -fn: function (){ +selector: unescape('contenteditable%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["label"]); +smalltalk.send(self, "_at_put_", ["contenteditable", aString]); return self;}, -args: [], -source: unescape('label%0A%09%5Eself%20tag%3A%20%27label%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('contenteditable%3A%20aString%0A%09self%20at%3A%20%27contenteditable%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_title'), +unescape('_contents_'), smalltalk.method({ -selector: unescape('title'), -category: 'tags', -fn: function (){ +selector: unescape('contents%3A'), +category: 'adding', +fn: function (anObject){ var self=this; -return smalltalk.send(self, "_tag_", ["title"]); +(function($rec){smalltalk.send($rec, "_empty", []);return smalltalk.send($rec, "_append_", [anObject]);})(self); return self;}, -args: [], -source: unescape('title%0A%09%5Eself%20tag%3A%20%27title%27'), -messageSends: ["tag:"], +args: ["anObject"], +source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20%0A%09empty%3B%0A%20%20%20%09append%3A%20anObject'), +messageSends: ["empty", "append:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_time'), +unescape('_contextmenu_'), smalltalk.method({ -selector: unescape('time'), -category: 'tags', -fn: function (){ +selector: unescape('contextmenu%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["time"]); +smalltalk.send(self, "_at_put_", ["contextmenu", aString]); return self;}, -args: [], -source: unescape('time%0A%09%5Eself%20tag%3A%20%27time%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('contextmenu%3A%20aString%0A%09self%20at%3A%20%27contextmenu%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_sup'), +unescape('_createElementFor_'), smalltalk.method({ -selector: unescape('sup'), -category: 'tags', -fn: function (){ +selector: unescape('createElementFor%3A'), +category: 'private', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["sup"]); +return document.createElement(String(aString)); return self;}, -args: [], -source: unescape('sup%0A%09%5Eself%20tag%3A%20%27sup%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('createElementFor%3A%20aString%0A%09%3Creturn%20document.createElement%28String%28aString%29%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_summary'), +unescape('_createTextNodeFor_'), smalltalk.method({ -selector: unescape('summary'), -category: 'tags', -fn: function (){ +selector: unescape('createTextNodeFor%3A'), +category: 'private', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["summary"]); +return document.createTextNode(String(aString)); return self;}, -args: [], -source: unescape('summary%0A%09%5Eself%20tag%3A%20%27summary%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('createTextNodeFor%3A%20aString%0A%09%3Creturn%20document.createTextNode%28String%28aString%29%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_sub'), +unescape('_draggable_'), smalltalk.method({ -selector: unescape('sub'), -category: 'tags', -fn: function (){ +selector: unescape('draggable%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["sub"]); +smalltalk.send(self, "_at_put_", ["draggable", aString]); return self;}, -args: [], -source: unescape('sub%0A%09%5Eself%20tag%3A%20%27sub%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('draggable%3A%20aString%0A%09self%20at%3A%20%27draggable%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_strong'), +unescape('_element'), smalltalk.method({ -selector: unescape('strong'), -category: 'tags', +selector: unescape('element'), +category: 'accessing', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["strong"]); +return self['@element']; return self;}, args: [], -source: unescape('strong%0A%09%5Eself%20tag%3A%20%27strong%27'), -messageSends: ["tag:"], +source: unescape('element%0A%20%20%20%20%5Eelement'), +messageSends: [], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_strong_'), +unescape('_empty'), smalltalk.method({ -selector: unescape('strong%3A'), -category: 'tags', -fn: function (anObject){ +selector: unescape('empty'), +category: 'adding', +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_strong", []), "_with_", [anObject]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []); return self;}, -args: ["anObject"], -source: unescape('strong%3A%20anObject%0A%09%5Eself%20strong%20with%3A%20anObject'), -messageSends: ["with:", "strong"], +args: [], +source: unescape('empty%0A%09self%20asJQuery%20empty'), +messageSends: ["empty", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_source'), +unescape('_for_'), smalltalk.method({ -selector: unescape('source'), -category: 'tags', -fn: function (){ +selector: unescape('for%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["source"]); +smalltalk.send(self, "_at_put_", ["for", aString]); return self;}, -args: [], -source: unescape('source%0A%09%5Eself%20tag%3A%20%27source%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('for%3A%20aString%0A%09self%20at%3A%20%27for%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_small'), +unescape('_height_'), smalltalk.method({ -selector: unescape('small'), -category: 'tags', -fn: function (){ +selector: unescape('height%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["small"]); +smalltalk.send(self, "_at_put_", ["height", aString]); return self;}, -args: [], -source: unescape('small%0A%09%5Eself%20tag%3A%20%27small%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('height%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27height%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_progress'), +unescape('_hidden'), smalltalk.method({ -selector: unescape('progress'), -category: 'tags', +selector: unescape('hidden'), +category: 'attributes', fn: function (){ var self=this; -return smalltalk.send(self, "_tag_", ["progress"]); +smalltalk.send(self, "_at_put_", ["hidden", "hidden"]); return self;}, args: [], -source: unescape('progress%0A%09%5Eself%20tag%3A%20%27progress%27'), -messageSends: ["tag:"], +source: unescape('hidden%0A%09self%20at%3A%20%27hidden%27%20put%3A%20%27hidden%27'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_param'), +unescape('_href_'), smalltalk.method({ -selector: unescape('param'), -category: 'tags', -fn: function (){ +selector: unescape('href%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["param"]); +smalltalk.send(self, "_at_put_", ["href", aString]); return self;}, -args: [], -source: unescape('param%0A%09%5Eself%20tag%3A%20%27param%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('href%3A%20aString%0A%20%20%20%20self%20at%3A%20%27href%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_output'), +unescape('_id_'), smalltalk.method({ -selector: unescape('output'), -category: 'tags', -fn: function (){ +selector: unescape('id%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["output"]); +smalltalk.send(self, "_at_put_", ["id", aString]); return self;}, -args: [], -source: unescape('output%0A%09%5Eself%20tag%3A%20%27output%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('id%3A%20aString%0A%20%20%20%20self%20at%3A%20%27id%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_optgroup'), +unescape('_initializeFromJQuery_canvas_'), smalltalk.method({ -selector: unescape('optgroup'), -category: 'tags', -fn: function (){ +selector: unescape('initializeFromJQuery%3Acanvas%3A'), +category: 'initialization', +fn: function (aJQuery, aCanvas){ var self=this; -return smalltalk.send(self, "_tag_", ["optgroup"]); +(self['@element']=smalltalk.send(aJQuery, "_get_", [(0)])); +(self['@canvas']=aCanvas); return self;}, -args: [], -source: unescape('optgroup%0A%09%5Eself%20tag%3A%20%27optgroup%27'), -messageSends: ["tag:"], +args: ["aJQuery", "aCanvas"], +source: unescape('initializeFromJQuery%3A%20aJQuery%20canvas%3A%20aCanvas%0A%20%20%20%20element%20%3A%3D%20aJQuery%20get%3A%200.%0A%20%20%20%20canvas%20%3A%3D%20aCanvas'), +messageSends: ["get:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_object'), +unescape('_initializeFromString_canvas_'), smalltalk.method({ -selector: unescape('object'), -category: 'tags', -fn: function (){ +selector: unescape('initializeFromString%3Acanvas%3A'), +category: 'initialization', +fn: function (aString, aCanvas){ var self=this; -return smalltalk.send(self, "_tag_", ["object"]); +(self['@element']=smalltalk.send(self, "_createElementFor_", [aString])); +(self['@canvas']=aCanvas); return self;}, -args: [], -source: unescape('object%0A%09%5Eself%20tag%3A%20%27object%27'), -messageSends: ["tag:"], +args: ["aString", "aCanvas"], +source: unescape('initializeFromString%3A%20aString%20canvas%3A%20aCanvas%0A%20%20%20%20element%20%3A%3D%20self%20createElementFor%3A%20aString.%0A%20%20%20%20canvas%20%3A%3D%20aCanvas'), +messageSends: ["createElementFor:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_noscript'), +unescape('_media_'), smalltalk.method({ -selector: unescape('noscript'), -category: 'tags', -fn: function (){ +selector: unescape('media%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["noscript"]); +smalltalk.send(self, "_at_put_", ["media", aString]); return self;}, -args: [], -source: unescape('noscript%0A%09%5Eself%20tag%3A%20%27noscript%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('media%3A%20aString%0A%20%20%20%20self%20at%3A%20%27media%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_nav'), +unescape('_method_'), smalltalk.method({ -selector: unescape('nav'), -category: 'tags', -fn: function (){ +selector: unescape('method%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["nav"]); +smalltalk.send(self, "_at_put_", ["method", aString]); return self;}, -args: [], -source: unescape('nav%0A%09%5Eself%20tag%3A%20%27nav%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('method%3A%20aString%0A%09self%20at%3A%20%27method%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_meta'), +unescape('_name_'), smalltalk.method({ -selector: unescape('meta'), -category: 'tags', -fn: function (){ +selector: unescape('name%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["meta"]); +smalltalk.send(self, "_at_put_", ["name", aString]); return self;}, -args: [], -source: unescape('meta%0A%09%5Eself%20tag%3A%20%27meta%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('name%3A%20aString%0A%09self%20at%3A%20%27name%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_menu'), +unescape('_onBlur_'), smalltalk.method({ -selector: unescape('menu'), -category: 'tags', -fn: function (){ +selector: unescape('onBlur%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["menu"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["blur", aBlock]); return self;}, -args: [], -source: unescape('menu%0A%09%5Eself%20tag%3A%20%27menu%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onBlur%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27blur%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_mark'), +unescape('_onChange_'), smalltalk.method({ -selector: unescape('mark'), -category: 'tags', -fn: function (){ +selector: unescape('onChange%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["mark"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["change", aBlock]); return self;}, -args: [], -source: unescape('mark%0A%09%5Eself%20tag%3A%20%27mark%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onChange%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27change%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_map'), +unescape('_onClick_'), smalltalk.method({ -selector: unescape('map'), -category: 'tags', -fn: function (){ +selector: unescape('onClick%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["map"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["click", aBlock]); return self;}, -args: [], -source: unescape('map%0A%09%5Eself%20tag%3A%20%27map%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onClick%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27click%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_legend'), +unescape('_onDblClick_'), smalltalk.method({ -selector: unescape('legend'), -category: 'tags', -fn: function (){ +selector: unescape('onDblClick%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["legend"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["dblclick", aBlock]); return self;}, -args: [], -source: unescape('legend%0A%09%5Eself%20tag%3A%20%27legend%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onDblClick%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27dblclick%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_html'), +unescape('_onFocus_'), smalltalk.method({ -selector: unescape('html'), -category: 'tags', -fn: function (){ +selector: unescape('onFocus%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["html"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["focus", aBlock]); return self;}, -args: [], -source: unescape('html%0A%09%5Eself%20tag%3A%20%27html%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onFocus%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27focus%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_hgroup'), +unescape('_onFocusIn_'), smalltalk.method({ -selector: unescape('hgroup'), -category: 'tags', -fn: function (){ +selector: unescape('onFocusIn%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["hgroup"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["focusin", aBlock]); return self;}, -args: [], -source: unescape('hgroup%0A%09%5Eself%20tag%3A%20%27hgroup%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onFocusIn%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27focusin%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_head'), +unescape('_onFocusOut_'), smalltalk.method({ -selector: unescape('head'), -category: 'tags', -fn: function (){ +selector: unescape('onFocusOut%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["head"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["focusout", aBlock]); return self;}, -args: [], -source: unescape('head%0A%09%5Eself%20tag%3A%20%27head%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onFocusOut%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27focusout%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_figure'), +unescape('_onHover_'), smalltalk.method({ -selector: unescape('figure'), -category: 'tags', -fn: function (){ +selector: unescape('onHover%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["figure"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["hover", aBlock]); return self;}, -args: [], -source: unescape('figure%0A%09%5Eself%20tag%3A%20%27figure%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onHover%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27hover%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_figcaption'), +unescape('_onKeyDown_'), smalltalk.method({ -selector: unescape('figcaption'), -category: 'tags', -fn: function (){ +selector: unescape('onKeyDown%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["figcaption"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["keydown", aBlock]); return self;}, -args: [], -source: unescape('figcaption%0A%09%5Eself%20tag%3A%20%27figcaption%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onKeyDown%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27keydown%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_embed'), +unescape('_onKeyPress_'), smalltalk.method({ -selector: unescape('embed'), -category: 'tags', -fn: function (){ +selector: unescape('onKeyPress%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["embed"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["keypress", aBlock]); return self;}, -args: [], -source: unescape('embed%0A%09%5Eself%20tag%3A%20%27embed%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onKeyPress%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27keypress%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_em'), +unescape('_onKeyUp_'), smalltalk.method({ -selector: unescape('em'), -category: 'tags', -fn: function (){ +selector: unescape('onKeyUp%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["em"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["keyup", aBlock]); return self;}, -args: [], -source: unescape('em%0A%09%5Eself%20tag%3A%20%27em%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onKeyUp%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20bind%3A%20%27keyup%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_dt'), +unescape('_onMouseDown_'), smalltalk.method({ -selector: unescape('dt'), -category: 'tags', -fn: function (){ +selector: unescape('onMouseDown%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["dt"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mousedown", aBlock]); return self;}, -args: [], -source: unescape('dt%0A%09%5Eself%20tag%3A%20%27dt%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onMouseDown%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mousedown%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_dl'), +unescape('_onMouseEnter_'), smalltalk.method({ -selector: unescape('dl'), -category: 'tags', -fn: function (){ +selector: unescape('onMouseEnter%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["dl"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseenter", aBlock]); return self;}, -args: [], -source: unescape('dl%0A%09%5Eself%20tag%3A%20%27dl%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onMouseEnter%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mouseenter%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_details'), +unescape('_onMouseLeave_'), smalltalk.method({ -selector: unescape('details'), -category: 'tags', -fn: function (){ +selector: unescape('onMouseLeave%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["details"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseleave", aBlock]); return self;}, -args: [], -source: unescape('details%0A%09%5Eself%20tag%3A%20%27details%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onMouseLeave%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mouseleave%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_del'), +unescape('_onMouseMove_'), smalltalk.method({ -selector: unescape('del'), -category: 'tags', -fn: function (){ +selector: unescape('onMouseMove%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["del"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mousemove", aBlock]); return self;}, -args: [], -source: unescape('del%0A%09%5Eself%20tag%3A%20%27del%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onMouseMove%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mousemove%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_dd'), +unescape('_onMouseOut_'), smalltalk.method({ -selector: unescape('dd'), -category: 'tags', -fn: function (){ +selector: unescape('onMouseOut%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["dd"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseout", aBlock]); return self;}, -args: [], -source: unescape('dd%0A%09%5Eself%20tag%3A%20%27dd%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onMouseOut%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mouseout%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_datalist'), +unescape('_onMouseOver_'), smalltalk.method({ -selector: unescape('datalist'), -category: 'tags', -fn: function (){ +selector: unescape('onMouseOver%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["datalist"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseover", aBlock]); return self;}, -args: [], -source: unescape('datalist%0A%09%5Eself%20tag%3A%20%27datalist%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onMouseOver%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mouseover%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_command'), +unescape('_onMouseUp_'), smalltalk.method({ -selector: unescape('command'), -category: 'tags', -fn: function (){ +selector: unescape('onMouseUp%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["command"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["mouseup", aBlock]); return self;}, -args: [], -source: unescape('command%0A%09%5Eself%20tag%3A%20%27command%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onMouseUp%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27mouseup%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_colgroup'), +unescape('_onSelect_'), smalltalk.method({ -selector: unescape('colgroup'), -category: 'tags', -fn: function (){ +selector: unescape('onSelect%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["colgroup"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["select", aBlock]); return self;}, -args: [], -source: unescape('colgroup%0A%09%5Eself%20tag%3A%20%27colgroup%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onSelect%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27select%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_col'), +unescape('_onSubmit_'), smalltalk.method({ -selector: unescape('col'), -category: 'tags', -fn: function (){ +selector: unescape('onSubmit%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["col"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["submit", aBlock]); return self;}, -args: [], -source: unescape('col%0A%09%5Eself%20tag%3A%20%27col%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onSubmit%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27submit%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_cite'), +unescape('_onUnload_'), smalltalk.method({ -selector: unescape('cite'), -category: 'tags', -fn: function (){ +selector: unescape('onUnload%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_tag_", ["cite"]); +smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_bind_do_", ["unload", aBlock]); return self;}, -args: [], -source: unescape('cite%0A%09%5Eself%20tag%3A%20%27cite%27'), -messageSends: ["tag:"], +args: ["aBlock"], +source: unescape('onUnload%3A%20aBlock%0A%09self%20asJQuery%20bind%3A%20%27unload%27%20do%3A%20aBlock'), +messageSends: ["bind:do:", "asJQuery"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_caption'), +unescape('_placeholder_'), smalltalk.method({ -selector: unescape('caption'), -category: 'tags', -fn: function (){ +selector: unescape('placeholder%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["caption"]); +smalltalk.send(self, "_at_put_", ["placeholder", aString]); return self;}, -args: [], -source: unescape('caption%0A%09%5Eself%20tag%3A%20%27caption%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('placeholder%3A%20aString%0A%09self%20at%3A%20%27placeholder%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_body'), +unescape('_rel_'), smalltalk.method({ -selector: unescape('body'), -category: 'tags', -fn: function (){ +selector: unescape('rel%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["body"]); +smalltalk.send(self, "_at_put_", ["rel", aString]); return self;}, -args: [], -source: unescape('body%0A%09%5Eself%20tag%3A%20%27body%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('rel%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27rel%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_blockquote'), +unescape('_removeAt_'), smalltalk.method({ -selector: unescape('blockquote'), -category: 'tags', -fn: function (){ +selector: unescape('removeAt%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["blockquote"]); +self['@element'].removeAttribute(aString); return self;}, -args: [], -source: unescape('blockquote%0A%09%5Eself%20tag%3A%20%27blockquote%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('removeAt%3A%20aString%0A%20%20%20%20%3Cself%5B%27@element%27%5D.removeAttribute%28aString%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_base'), +unescape('_rows_'), smalltalk.method({ -selector: unescape('base'), -category: 'tags', -fn: function (){ +selector: unescape('rows%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["base"]); +smalltalk.send(self, "_at_put_", ["rows", aString]); return self;}, -args: [], -source: unescape('base%0A%09%5Eself%20tag%3A%20%27base%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('rows%3A%20aString%0A%09self%20at%3A%20%27rows%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_aside'), +unescape('_src_'), smalltalk.method({ -selector: unescape('aside'), -category: 'tags', -fn: function (){ +selector: unescape('src%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["aside"]); +smalltalk.send(self, "_at_put_", ["src", aString]); return self;}, -args: [], -source: unescape('aside%0A%09%5Eself%20tag%3A%20%27aside%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('src%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27src%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_article'), +unescape('_style_'), smalltalk.method({ -selector: unescape('article'), -category: 'tags', -fn: function (){ +selector: unescape('style%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["article"]); +smalltalk.send(self, "_at_put_", ["style", aString]); return self;}, -args: [], -source: unescape('article%0A%20%20%20%20%5Eself%20tag%3A%20%27article%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('style%3A%20aString%0A%20%20%20%20self%20at%3A%20%27style%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_area'), +unescape('_tabindex_'), smalltalk.method({ -selector: unescape('area'), -category: 'tags', -fn: function (){ +selector: unescape('tabindex%3A'), +category: 'attributes', +fn: function (aNumber){ var self=this; -return smalltalk.send(self, "_tag_", ["area"]); +smalltalk.send(self, "_at_put_", ["tabindex", aNumber]); return self;}, -args: [], -source: unescape('area%0A%09%5Eself%20tag%3A%20%27area%27'), -messageSends: ["tag:"], +args: ["aNumber"], +source: unescape('tabindex%3A%20aNumber%0A%09self%20at%3A%20%27tabindex%27%20put%3A%20aNumber'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_address'), -smalltalk.method({ -selector: unescape('address'), -category: 'tags', -fn: function (){ +unescape('_target_'), +smalltalk.method({ +selector: unescape('target%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["address"]); +smalltalk.send(self, "_at_put_", ["target", aString]); return self;}, -args: [], -source: unescape('address%0A%09%5Eself%20tag%3A%20%27address%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('target%3A%20aString%0A%09self%20at%3A%20%27target%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_abbr'), +unescape('_title_'), smalltalk.method({ -selector: unescape('abbr'), -category: 'tags', -fn: function (){ +selector: unescape('title%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(self, "_tag_", ["abbr"]); +smalltalk.send(self, "_at_put_", ["title", aString]); return self;}, -args: [], -source: unescape('abbr%0A%09%5Eself%20tag%3A%20%27abbr%27'), -messageSends: ["tag:"], +args: ["aString"], +source: unescape('title%3A%20aString%0A%20%20%20%20self%20at%3A%20%27title%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_div_'), +unescape('_type_'), smalltalk.method({ -selector: unescape('div%3A'), -category: 'tags', -fn: function (aBlock){ +selector: unescape('type%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(smalltalk.send(self, "_div", []), "_with_", [aBlock]); +smalltalk.send(self, "_at_put_", ["type", aString]); return self;}, -args: ["aBlock"], -source: unescape('div%3A%20aBlock%0A%20%20%20%20%5Eself%20div%20with%3A%20aBlock'), -messageSends: ["with:", "div"], +args: ["aString"], +source: unescape('type%3A%20aString%0A%20%20%20%20self%20at%3A%20%27type%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas); - +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_onJQuery_'), +unescape('_valign_'), smalltalk.method({ -selector: unescape('onJQuery%3A'), -category: 'instance creation', -fn: function (aJQuery){ +selector: unescape('valign%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return (function($rec){smalltalk.send($rec, "_initializeFromJQuery_", [aJQuery]);smalltalk.send($rec, "_initialize", []);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_basicNew", [])); +smalltalk.send(self, "_at_put_", ["valign", aString]); return self;}, -args: ["aJQuery"], -source: unescape('onJQuery%3A%20aJQuery%0A%09%5Eself%20basicNew%0A%09%09initializeFromJQuery%3A%20aJQuery%3B%0A%09%09initialize%3B%0A%09%09yourself'), -messageSends: ["initializeFromJQuery:", "initialize", "yourself", "basicNew"], +args: ["aString"], +source: unescape('valign%3A%20aString%0A%09self%20at%3A%20%27valign%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas.klass); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_isMSIE'), +unescape('_value_'), smalltalk.method({ -selector: unescape('isMSIE'), -category: 'instance creation', -fn: function (){ +selector: unescape('value%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("msie")]), "_notNil", []); +smalltalk.send(self, "_at_put_", ["value", aString]); return self;}, -args: [], -source: unescape('isMSIE%0A%09%5E%28%28jQuery%20at%3A%20%23browser%29%20at%3A%20%23msie%29%20notNil'), -messageSends: ["notNil", "at:"], +args: ["aString"], +source: unescape('value%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27value%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas.klass); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_isOpera'), +unescape('_width_'), smalltalk.method({ -selector: unescape('isOpera'), -category: 'instance creation', -fn: function (){ +selector: unescape('width%3A'), +category: 'attributes', +fn: function (aString){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("opera")]), "_notNil", []); +smalltalk.send(self, "_at_put_", ["width", aString]); return self;}, -args: [], -source: unescape('isOpera%0A%09%5E%28%28jQuery%20at%3A%20%23browser%29%20at%3A%20%23opera%29%20notNil'), -messageSends: ["notNil", "at:"], +args: ["aString"], +source: unescape('width%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27width%27%20put%3A%20aString'), +messageSends: ["at:put:"], referencedClasses: [] }), -smalltalk.HTMLCanvas.klass); +smalltalk.TagBrush); smalltalk.addMethod( -unescape('_isMozilla'), +unescape('_with_'), smalltalk.method({ -selector: unescape('isMozilla'), -category: 'instance creation', -fn: function (){ +selector: unescape('with%3A'), +category: 'adding', +fn: function (anObject){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("mozilla")]), "_notNil", []); +smalltalk.send(self, "_append_", [anObject]); return self;}, -args: [], -source: unescape('isMozilla%0A%09%5E%28%28jQuery%20at%3A%20%23browser%29%20at%3A%20%23mozilla%29%20notNil'), -messageSends: ["notNil", "at:"], +args: ["anObject"], +source: unescape('with%3A%20anObject%0A%20%20%20%20self%20append%3A%20anObject'), +messageSends: ["append:"], referencedClasses: [] }), -smalltalk.HTMLCanvas.klass); +smalltalk.TagBrush); + smalltalk.addMethod( -unescape('_isWebkit'), +unescape('_fromJQuery_canvas_'), smalltalk.method({ -selector: unescape('isWebkit'), +selector: unescape('fromJQuery%3Acanvas%3A'), category: 'instance creation', -fn: function (){ +fn: function (aJQuery, aCanvas){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_at_", [smalltalk.symbolFor("webkit")]), "_notNil", []); +return (function($rec){smalltalk.send($rec, "_initializeFromJQuery_canvas_", [aJQuery, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, -args: [], -source: unescape('isWebkit%0A%09%5E%28%28jQuery%20at%3A%20%23browser%29%20at%3A%20%23webkit%29%20notNil'), -messageSends: ["notNil", "at:"], +args: ["aJQuery", "aCanvas"], +source: unescape('fromJQuery%3A%20aJQuery%20canvas%3A%20aCanvas%0A%20%20%20%20%5Eself%20new%0A%09initializeFromJQuery%3A%20aJQuery%20canvas%3A%20aCanvas%3B%0A%09yourself'), +messageSends: ["initializeFromJQuery:canvas:", "yourself", "new"], referencedClasses: [] }), -smalltalk.HTMLCanvas.klass); +smalltalk.TagBrush.klass); smalltalk.addMethod( -unescape('_browserVersion'), +unescape('_fromString_canvas_'), smalltalk.method({ -selector: unescape('browserVersion'), +selector: unescape('fromString%3Acanvas%3A'), category: 'instance creation', -fn: function (){ +fn: function (aString, aCanvas){ var self=this; -return smalltalk.send(smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_at_", [smalltalk.symbolFor("browser")]), "_version", []); +return (function($rec){smalltalk.send($rec, "_initializeFromString_canvas_", [aString, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, -args: [], -source: unescape('browserVersion%0A%09%5E%28jQuery%20at%3A%20%23browser%29%20version'), -messageSends: ["version", "at:"], +args: ["aString", "aCanvas"], +source: unescape('fromString%3A%20aString%20canvas%3A%20aCanvas%0A%20%20%20%20%5Eself%20new%0A%09initializeFromString%3A%20aString%20canvas%3A%20aCanvas%3B%0A%09yourself'), +messageSends: ["initializeFromString:canvas:", "yourself", "new"], referencedClasses: [] }), -smalltalk.HTMLCanvas.klass); +smalltalk.TagBrush.klass); smalltalk.addClass('StyleTag', smalltalk.TagBrush, ['canvas', 'element'], 'Canvas'); @@ -3097,21 +3046,56 @@ referencedClasses: [] smalltalk.StyleTag.klass); +smalltalk.addClass('Widget', smalltalk.Object, [], 'Canvas'); +smalltalk.addMethod( +unescape('_appendToBrush_'), +smalltalk.method({ +selector: unescape('appendToBrush%3A'), +category: 'adding', +fn: function (aTagBrush){ +var self=this; +smalltalk.send(self, "_appendToJQuery_", [smalltalk.send(aTagBrush, "_asJQuery", [])]); +return self;}, +args: ["aTagBrush"], +source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20self%20appendToJQuery%3A%20aTagBrush%20asJQuery'), +messageSends: ["appendToJQuery:", "asJQuery"], +referencedClasses: [] +}), +smalltalk.Widget); + smalltalk.addMethod( unescape('_appendToJQuery_'), smalltalk.method({ selector: unescape('appendToJQuery%3A'), -category: '*Canvas', +category: 'adding', fn: function (aJQuery){ var self=this; -smalltalk.send(aJQuery, "_append_", [smalltalk.send(self, "_asString", [])]); +smalltalk.send(self, "_renderOn_", [smalltalk.send((smalltalk.HTMLCanvas || HTMLCanvas), "_onJQuery_", [aJQuery])]); return self;}, args: ["aJQuery"], -source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20aJQuery%20append%3A%20self%20asString'), -messageSends: ["append:", "asString"], +source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20self%20renderOn%3A%20%28HTMLCanvas%20onJQuery%3A%20aJQuery%29'), +messageSends: ["renderOn:", "onJQuery:"], +referencedClasses: ["HTMLCanvas"] +}), +smalltalk.Widget); + +smalltalk.addMethod( +unescape('_renderOn_'), +smalltalk.method({ +selector: unescape('renderOn%3A'), +category: 'rendering', +fn: function (html){ +var self=this; +self; +return self;}, +args: ["html"], +source: unescape('renderOn%3A%20html%0A%20%20%20%20self'), +messageSends: [], referencedClasses: [] }), -smalltalk.Object); +smalltalk.Widget); + + smalltalk.addMethod( unescape('_appendToBrush_'), @@ -3136,14 +3120,14 @@ selector: unescape('appendToJQuery%3A'), category: '*Canvas', fn: function (aJQuery){ var self=this; -smalltalk.send(self, "_value_", [smalltalk.send((smalltalk.HTMLCanvas || HTMLCanvas), "_onJQuery_", [aJQuery])]); +smalltalk.send(aJQuery, "_append_", [smalltalk.send(self, "_asString", [])]); return self;}, args: ["aJQuery"], -source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20self%20value%3A%20%28HTMLCanvas%20onJQuery%3A%20aJQuery%29'), -messageSends: ["value:", "onJQuery:"], -referencedClasses: ["HTMLCanvas"] +source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20aJQuery%20append%3A%20self%20asString'), +messageSends: ["append:", "asString"], +referencedClasses: [] }), -smalltalk.BlockClosure); +smalltalk.Object); smalltalk.addMethod( unescape('_appendToBrush_'), @@ -3162,17 +3146,33 @@ referencedClasses: [] smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_asJQuery'), +unescape('_appendToJQuery_'), smalltalk.method({ -selector: unescape('asJQuery'), +selector: unescape('appendToJQuery%3A'), category: '*Canvas', -fn: function (){ +fn: function (aJQuery){ var self=this; -return jQuery(String(self)); +smalltalk.send(self, "_value_", [smalltalk.send((smalltalk.HTMLCanvas || HTMLCanvas), "_onJQuery_", [aJQuery])]); return self;}, -args: [], -source: unescape('asJQuery%0A%20%20%20%20%3Creturn%20jQuery%28String%28self%29%29%3E'), -messageSends: [], +args: ["aJQuery"], +source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20self%20value%3A%20%28HTMLCanvas%20onJQuery%3A%20aJQuery%29'), +messageSends: ["value:", "onJQuery:"], +referencedClasses: ["HTMLCanvas"] +}), +smalltalk.BlockClosure); + +smalltalk.addMethod( +unescape('_appendToBrush_'), +smalltalk.method({ +selector: unescape('appendToBrush%3A'), +category: '*Canvas', +fn: function (aTagBrush){ +var self=this; +smalltalk.send(aTagBrush, "_appendString_", [self]); +return self;}, +args: ["aTagBrush"], +source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20appendString%3A%20self'), +messageSends: ["appendString:"], referencedClasses: [] }), smalltalk.String); @@ -3194,17 +3194,17 @@ referencedClasses: [] smalltalk.String); smalltalk.addMethod( -unescape('_appendToBrush_'), +unescape('_asJQuery'), smalltalk.method({ -selector: unescape('appendToBrush%3A'), +selector: unescape('asJQuery'), category: '*Canvas', -fn: function (aTagBrush){ +fn: function (){ var self=this; -smalltalk.send(aTagBrush, "_appendString_", [self]); +return jQuery(String(self)); return self;}, -args: ["aTagBrush"], -source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20appendString%3A%20self'), -messageSends: ["appendString:"], +args: [], +source: unescape('asJQuery%0A%20%20%20%20%3Creturn%20jQuery%28String%28self%29%29%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.String); diff --git a/amber/src/js/Compiler.deploy.js b/amber/src/js/Compiler.deploy.js index a99d9324a2a..1d973a2c2d9 100644 --- a/amber/src/js/Compiler.deploy.js +++ b/amber/src/js/Compiler.deploy.js @@ -1,221 +1,209 @@ smalltalk.addPackage('Compiler', {}); -smalltalk.addClass('NodeVisitor', smalltalk.Object, [], 'Compiler'); +smalltalk.addClass('ChunkParser', smalltalk.Object, ['stream'], 'Compiler'); smalltalk.addMethod( -unescape('_visit_'), +unescape('_nextChunk'), smalltalk.method({ -selector: unescape('visit%3A'), -fn: function (aNode){ +selector: unescape('nextChunk'), +fn: function (){ var self=this; -smalltalk.send(aNode, "_accept_", [self]); -return self;} +try{var char_=nil; +var result=nil; +var chunk=nil; +(result=smalltalk.send("", "_writeStream", [])); +(function(){while((function(){(char_=smalltalk.send(self['@stream'], "_next", []));return smalltalk.send(char_, "_notNil", []);})()) {(function(){((($receiver = smalltalk.send(char_, "__eq", [unescape("%21")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@stream'], "_peek", []), "__eq", [unescape("%21")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_next", []);})() : (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_next", []);}), (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@stream'], "_peek", []), "__eq", [unescape("%21")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_next", []);})() : (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_next", []);}), (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})]));})]));return smalltalk.send(result, "_nextPut_", [char_]);})()}})(); +(function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return nil}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_nextChunk'){return e.fn()} throw(e)}} }), -smalltalk.NodeVisitor); +smalltalk.ChunkParser); smalltalk.addMethod( -unescape('_visitNode_'), +unescape('_stream_'), smalltalk.method({ -selector: unescape('visitNode%3A'), -fn: function (aNode){ +selector: unescape('stream%3A'), +fn: function (aStream){ var self=this; - +(self['@stream']=aStream); return self;} }), -smalltalk.NodeVisitor); +smalltalk.ChunkParser); -smalltalk.addMethod( -unescape('_visitMethodNode_'), -smalltalk.method({ -selector: unescape('visitMethodNode%3A'), -fn: function (aNode){ -var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); -return self;} -}), -smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitSequenceNode_'), +unescape('_on_'), smalltalk.method({ -selector: unescape('visitSequenceNode%3A'), -fn: function (aNode){ +selector: unescape('on%3A'), +fn: function (aStream){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +return smalltalk.send(smalltalk.send(self, "_new", []), "_stream_", [aStream]); return self;} }), -smalltalk.NodeVisitor); +smalltalk.ChunkParser.klass); -smalltalk.addMethod( -unescape('_visitBlockSequenceNode_'), -smalltalk.method({ -selector: unescape('visitBlockSequenceNode%3A'), -fn: function (aNode){ -var self=this; -smalltalk.send(self, "_visitSequenceNode_", [aNode]); -return self;} -}), -smalltalk.NodeVisitor); +smalltalk.addClass('DoIt', smalltalk.Object, [], 'Compiler'); + + +smalltalk.addClass('Exporter', smalltalk.Object, [], 'Compiler'); smalltalk.addMethod( -unescape('_visitBlockNode_'), +unescape('_classNameFor_'), smalltalk.method({ -selector: unescape('visitBlockNode%3A'), -fn: function (aNode){ +selector: unescape('classNameFor%3A'), +fn: function (aClass){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +return ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);})() : (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);}), (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})])); return self;} }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitReturnNode_'), +unescape('_exportAll'), smalltalk.method({ -selector: unescape('visitReturnNode%3A'), -fn: function (aNode){ +selector: unescape('exportAll'), +fn: function (){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){return smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_packages", []), "_do_", [(function(pkg){return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(self, "_exportPackage_", [smalltalk.send(pkg, "_name", [])])]);})]);})]); return self;} }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitSendNode_'), +unescape('_exportClass_'), smalltalk.method({ -selector: unescape('visitSendNode%3A'), -fn: function (aNode){ +selector: unescape('exportClass%3A'), +fn: function (aClass){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){smalltalk.send(self, "_exportDefinitionOf_on_", [aClass, stream]);smalltalk.send(self, "_exportMethodsOf_on_", [aClass, stream]);smalltalk.send(self, "_exportMetaDefinitionOf_on_", [aClass, stream]);return smalltalk.send(self, "_exportMethodsOf_on_", [smalltalk.send(aClass, "_class", []), stream]);})]); return self;} }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitCascadeNode_'), +unescape('_exportDefinitionOf_on_'), smalltalk.method({ -selector: unescape('visitCascadeNode%3A'), -fn: function (aNode){ +selector: unescape('exportDefinitionOf%3Aon%3A'), +fn: function (aClass, aStream){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addClass%28")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%27%2C%20")])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20%5B")]);})(aStream); +smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C%20")]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%5D%2C%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(aClass, "_category", []), "__comma", [unescape("%27")])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);})(aStream); +((($receiver = smalltalk.send(smalltalk.send(aClass, "_comment", []), "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [aClass])]);smalltalk.send($rec, "_nextPutAll_", [unescape(".comment%3D")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aClass, "_comment", []), "_escaped", [])]), "__comma", [unescape("%27%29")])]);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [aClass])]);smalltalk.send($rec, "_nextPutAll_", [unescape(".comment%3D")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aClass, "_comment", []), "_escaped", [])]), "__comma", [unescape("%27%29")])]);})(aStream);})])); +smalltalk.send(aStream, "_lf", []); return self;} }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitValueNode_'), +unescape('_exportMetaDefinitionOf_on_'), smalltalk.method({ -selector: unescape('visitValueNode%3A'), -fn: function (aNode){ +selector: unescape('exportMetaDefinitionOf%3Aon%3A'), +fn: function (aClass, aStream){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape(".iVarNames%20%3D%20%5B")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(unescape("%5D%3B"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape(".iVarNames%20%3D%20%5B")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(unescape("%5D%3B"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])])]);})])); return self;} }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitVariableNode_'), +unescape('_exportMethod_of_on_'), smalltalk.method({ -selector: unescape('visitVariableNode%3A'), -fn: function (aNode){ +selector: unescape('exportMethod%3Aof%3Aon%3A'), +fn: function (aMethod, aClass, aStream){ var self=this; - +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("category%3A%20%27"), "__comma", [smalltalk.send(aMethod, "_category", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("args: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_arguments", []), "_asJavascript", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("source%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_source", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("messageSends: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_messageSends", []), "_asJavascript", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("referencedClasses: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_referencedClasses", []), "_asJavascript", [])])]);})(aStream); +(function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream); return self;} }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitAssignmentNode_'), +unescape('_exportMethodsOf_on_'), smalltalk.method({ -selector: unescape('visitAssignmentNode%3A'), -fn: function (aNode){ +selector: unescape('exportMethodsOf%3Aon%3A'), +fn: function (aClass, aStream){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_sorted_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_selector", [])).klass === smalltalk.Number) ? $receiver <=smalltalk.send(b, "_selector", []) : smalltalk.send($receiver, "__lt_eq", [smalltalk.send(b, "_selector", [])]));})]), "_do_", [(function(each){return ((($receiver = smalltalk.send(smalltalk.send(each, "_category", []), "_match_", [unescape("%5E%5C*")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})]));})]); +smalltalk.send(aStream, "_lf", []); return self;} }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitClassReferenceNode_'), +unescape('_exportPackage_'), smalltalk.method({ -selector: unescape('visitClassReferenceNode%3A'), -fn: function (aNode){ +selector: unescape('exportPackage%3A'), +fn: function (packageName){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(aNode, "_value", [])]);})(self); +var package=nil; +return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){(package=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_packageAt_", [packageName]));smalltalk.send(self, "_exportPackageDefinitionOf_on_", [package, stream]);smalltalk.send(smalltalk.send(package, "_sortedClasses", []), "_do_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(self, "_exportClass_", [each])]);})]);return smalltalk.send(self, "_exportPackageExtensionsOf_on_", [package, stream]);})]); return self;} }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitJSStatementNode_'), +unescape('_exportPackageDefinitionOf_on_'), smalltalk.method({ -selector: unescape('visitJSStatementNode%3A'), -fn: function (aNode){ +selector: unescape('exportPackageDefinitionOf%3Aon%3A'), +fn: function (package, aStream){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("function%28%29%7B")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(aNode, "_source", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%28%29")]);})(self); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addPackage%28")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(package, "_name", [])]), "__comma", [unescape("%27%2C%20")]), "__comma", [smalltalk.send(package, "_propertiesAsJSON", [])]), "__comma", [unescape("%29%3B")])]);})(aStream); +smalltalk.send(aStream, "_lf", []); return self;} }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitDynamicArrayNode_'), +unescape('_exportPackageExtensionsOf_on_'), smalltalk.method({ -selector: unescape('visitDynamicArrayNode%3A'), -fn: function (aNode){ +selector: unescape('exportPackageExtensionsOf%3Aon%3A'), +fn: function (package, aStream){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +var name=nil; +(name=smalltalk.send(package, "_name", [])); +smalltalk.send(smalltalk.send((smalltalk.Package || Package), "_sortedClasses_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", [])]), "_do_", [(function(each){return smalltalk.send([each,smalltalk.send(each, "_class", [])], "_do_", [(function(aClass){return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_sorted_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_selector", [])).klass === smalltalk.Number) ? $receiver <=smalltalk.send(b, "_selector", []) : smalltalk.send($receiver, "__lt_eq", [smalltalk.send(b, "_selector", [])]));})]), "_do_", [(function(method){return ((($receiver = smalltalk.send(smalltalk.send(method, "_category", []), "_match_", [smalltalk.send(unescape("%5E%5C*"), "__comma", [name])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_exportMethod_of_on_", [method, each, aStream]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self, "_exportMethod_of_on_", [method, each, aStream]);})]));})]);})]);})]); return self;} }), -smalltalk.NodeVisitor); +smalltalk.Exporter); + + +smalltalk.addClass('ChunkExporter', smalltalk.Exporter, [], 'Compiler'); smalltalk.addMethod( -unescape('_visitDynamicDictionaryNode_'), +unescape('_chunkEscape_'), smalltalk.method({ -selector: unescape('visitDynamicDictionaryNode%3A'), -fn: function (aNode){ +selector: unescape('chunkEscape%3A'), +fn: function (aString){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +return smalltalk.send(smalltalk.send(aString, "_replace_with_", [unescape("%21"), unescape("%21%21")]), "_trimBoth", []); return self;} }), -smalltalk.NodeVisitor); - - - -smalltalk.addClass('DoIt', smalltalk.Object, [], 'Compiler'); - +smalltalk.ChunkExporter); -smalltalk.addClass('Importer', smalltalk.Object, [], 'Compiler'); smalltalk.addMethod( -unescape('_import_'), +unescape('_classNameFor_'), smalltalk.method({ -selector: unescape('import%3A'), -fn: function (aStream){ +selector: unescape('classNameFor%3A'), +fn: function (aClass){ var self=this; -var chunk=nil; -var result=nil; -var parser=nil; -var lastEmpty=nil; -(parser=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_on_", [aStream])); -(lastEmpty=false); -(function(){while(!(function(){(chunk=smalltalk.send(parser, "_nextChunk", []));return smalltalk.send(chunk, "_isNil", []);})()) {(function(){return ((($receiver = smalltalk.send(chunk, "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (lastEmpty=true);})() : (function(){(result=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_loadExpression_", [chunk]));return ((($receiver = lastEmpty).klass === smalltalk.Boolean) ? ($receiver ? (function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (lastEmpty=true);}), (function(){(result=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_loadExpression_", [chunk]));return ((($receiver = lastEmpty).klass === smalltalk.Boolean) ? ($receiver ? (function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})]));})]));})()}})(); +return ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [" class"]);})() : (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [" class"]);}), (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})])); return self;} }), -smalltalk.Importer); - - +smalltalk.ChunkExporter); -smalltalk.addClass('Exporter', smalltalk.Object, [], 'Compiler'); smalltalk.addMethod( unescape('_exportDefinitionOf_on_'), smalltalk.method({ selector: unescape('exportDefinitionOf%3Aon%3A'), fn: function (aClass, aStream){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addClass%28")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%27%2C%20")])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20%5B")]);})(aStream); -smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C%20")]);})]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%5D%2C%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(aClass, "_category", []), "__comma", [unescape("%27")])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);})(aStream); -((($receiver = smalltalk.send(smalltalk.send(aClass, "_comment", []), "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [aClass])]);smalltalk.send($rec, "_nextPutAll_", [unescape(".comment%3D")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aClass, "_comment", []), "_escaped", [])]), "__comma", [unescape("%27%29")])]);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [aClass])]);smalltalk.send($rec, "_nextPutAll_", [unescape(".comment%3D")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aClass, "_comment", []), "_escaped", [])]), "__comma", [unescape("%27%29")])]);})(aStream);})])); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("%20subclass%3A%20%23"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("%09instanceVariableNames%3A%20%27")]);})(aStream); +smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%09package%3A%20%27"), "__comma", [smalltalk.send(aClass, "_category", [])]), "__comma", [unescape("%27%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream); +((($receiver = smalltalk.send(smalltalk.send(aClass, "_comment", []), "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})])); smalltalk.send(aStream, "_lf", []); return self;} }), -smalltalk.Exporter); +smalltalk.ChunkExporter); smalltalk.addMethod( unescape('_exportMetaDefinitionOf_on_'), @@ -223,79 +211,60 @@ smalltalk.method({ selector: unescape('exportMetaDefinitionOf%3Aon%3A'), fn: function (aClass, aStream){ var self=this; -((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape(".iVarNames%20%3D%20%5B")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(unescape("%5D%3B"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape(".iVarNames%20%3D%20%5B")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(unescape("%5D%3B"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])])]);})])); +((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%20instanceVariableNames%3A%20%27")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%20instanceVariableNames%3A%20%27")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);})])); return self;} }), -smalltalk.Exporter); +smalltalk.ChunkExporter); smalltalk.addMethod( -unescape('_exportMethodsOf_on_'), +unescape('_exportMethod_of_on_'), smalltalk.method({ -selector: unescape('exportMethodsOf%3Aon%3A'), -fn: function (aClass, aStream){ +selector: unescape('exportMethod%3Aof%3Aon%3A'), +fn: function (aMethod, aClass, aStream){ var self=this; -smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(smalltalk.send(each, "_category", []), "_match_", [unescape("%5E%5C*")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})]));})]); -smalltalk.send(aStream, "_lf", []); +(function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aMethod, "_source", [])])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("%21")]);})(aStream); return self;} }), -smalltalk.Exporter); +smalltalk.ChunkExporter); smalltalk.addMethod( -unescape('_classNameFor_'), +unescape('_exportMethods_category_of_on_'), smalltalk.method({ -selector: unescape('classNameFor%3A'), -fn: function (aClass){ +selector: unescape('exportMethods%3Acategory%3Aof%3Aon%3A'), +fn: function (methods, category, aClass, aStream){ var self=this; -return ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);})() : (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);}), (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})])); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%20methodsFor%3A%20%27"), "__comma", [category]), "__comma", [unescape("%27%21")])]);})(aStream); +smalltalk.send(smalltalk.send(methods, "_sorted_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_selector", [])).klass === smalltalk.Number) ? $receiver <=smalltalk.send(b, "_selector", []) : smalltalk.send($receiver, "__lt_eq", [smalltalk.send(b, "_selector", [])]));})]), "_do_", [(function(each){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%20%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream); return self;} }), -smalltalk.Exporter); +smalltalk.ChunkExporter); smalltalk.addMethod( -unescape('_exportMethod_of_on_'), +unescape('_exportMethodsOf_on_'), smalltalk.method({ -selector: unescape('exportMethod%3Aof%3Aon%3A'), -fn: function (aMethod, aClass, aStream){ +selector: unescape('exportMethodsOf%3Aon%3A'), +fn: function (aClass, aStream){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("category%3A%20%27"), "__comma", [smalltalk.send(aMethod, "_category", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("args: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_arguments", []), "_asJavascript", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("source%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_source", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("messageSends: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_messageSends", []), "_asJavascript", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("referencedClasses: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_referencedClasses", []), "_asJavascript", [])])]);})(aStream); -(function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream); +var map=nil; +(map=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); +smalltalk.send(aClass, "_protocolsDo_", [(function(category, methods){return ((($receiver = smalltalk.send(category, "_match_", [unescape("%5E%5C*")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(map, "_at_put_", [category, methods]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(map, "_at_put_", [category, methods]);})]));})]); +smalltalk.send(smalltalk.send(smalltalk.send(map, "_keys", []), "_sorted_", [(function(a, b){return ((($receiver = a).klass === smalltalk.Number) ? $receiver <=b : smalltalk.send($receiver, "__lt_eq", [b]));})]), "_do_", [(function(category){var methods=nil; +(methods=smalltalk.send(map, "_at_", [category]));return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, aClass, aStream]);})]); return self;} }), -smalltalk.Exporter); +smalltalk.ChunkExporter); smalltalk.addMethod( -unescape('_exportPackage_'), +unescape('_exportPackageDefinitionOf_on_'), smalltalk.method({ -selector: unescape('exportPackage%3A'), -fn: function (packageName){ -var self=this; -var package=nil; -return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){(package=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_packageAt_", [packageName]));smalltalk.send(self, "_exportPackageDefinitionOf_on_", [package, stream]);smalltalk.send(smalltalk.send(package, "_sortedClasses", []), "_do_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(self, "_exportClass_", [each])]);})]);return smalltalk.send(self, "_exportPackageExtensionsOf_on_", [package, stream]);})]); -return self;} -}), -smalltalk.Exporter); - -smalltalk.addMethod( -unescape('_exportAll'), -smalltalk.method({ -selector: unescape('exportAll'), -fn: function (){ -var self=this; -return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){return smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_packages", []), "_do_", [(function(pkg){return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(self, "_exportPackage_", [smalltalk.send(pkg, "_name", [])])]);})]);})]); -return self;} -}), -smalltalk.Exporter); - -smalltalk.addMethod( -unescape('_exportClass_'), -smalltalk.method({ -selector: unescape('exportClass%3A'), -fn: function (aClass){ +selector: unescape('exportPackageDefinitionOf%3Aon%3A'), +fn: function (package, aStream){ var self=this; -return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){smalltalk.send(self, "_exportDefinitionOf_on_", [aClass, stream]);smalltalk.send(self, "_exportMethodsOf_on_", [aClass, stream]);smalltalk.send(self, "_exportMetaDefinitionOf_on_", [aClass, stream]);return smalltalk.send(self, "_exportMethodsOf_on_", [smalltalk.send(aClass, "_class", []), stream]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("Smalltalk%20current%20createPackage%3A%20%27"), "__comma", [smalltalk.send(package, "_name", [])]), "__comma", [unescape("%27%20properties%3A%20")]), "__comma", [smalltalk.send(smalltalk.send(package, "_properties", []), "_storeString", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream); return self;} }), -smalltalk.Exporter); +smalltalk.ChunkExporter); smalltalk.addMethod( unescape('_exportPackageExtensionsOf_on_'), @@ -304,109 +273,105 @@ selector: unescape('exportPackageExtensionsOf%3Aon%3A'), fn: function (package, aStream){ var self=this; var name=nil; +var map=nil; (name=smalltalk.send(package, "_name", [])); -smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_collect_", [(function(each){return smalltalk.send(each, "_class", []);})])]), "_do_", [(function(each){return smalltalk.send(smalltalk.send(smalltalk.send(each, "_methodDictionary", []), "_values", []), "_do_", [(function(method){return ((($receiver = smalltalk.send(smalltalk.send(method, "_category", []), "__eq", [smalltalk.send(unescape("*"), "__comma", [name])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_exportMethod_of_on_", [method, each, aStream]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self, "_exportMethod_of_on_", [method, each, aStream]);})]));})]);})]); +smalltalk.send(smalltalk.send((smalltalk.Package || Package), "_sortedClasses_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", [])]), "_do_", [(function(each){return smalltalk.send([each,smalltalk.send(each, "_class", [])], "_do_", [(function(aClass){(map=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []));smalltalk.send(aClass, "_protocolsDo_", [(function(category, methods){return ((($receiver = smalltalk.send(category, "_match_", [smalltalk.send(unescape("%5E%5C*"), "__comma", [name])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(map, "_at_put_", [category, methods]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(map, "_at_put_", [category, methods]);})]));})]);return smalltalk.send(smalltalk.send(smalltalk.send(map, "_keys", []), "_sorted_", [(function(a, b){return ((($receiver = a).klass === smalltalk.Number) ? $receiver <=b : smalltalk.send($receiver, "__lt_eq", [b]));})]), "_do_", [(function(category){var methods=nil; +(methods=smalltalk.send(map, "_at_", [category]));return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, each, aStream]);})]);})]);})]); return self;} }), -smalltalk.Exporter); +smalltalk.ChunkExporter); + + +smalltalk.addClass('StrippedExporter', smalltalk.Exporter, [], 'Compiler'); smalltalk.addMethod( -unescape('_exportPackageDefinitionOf_on_'), +unescape('_exportDefinitionOf_on_'), smalltalk.method({ -selector: unescape('exportPackageDefinitionOf%3Aon%3A'), -fn: function (package, aStream){ +selector: unescape('exportDefinitionOf%3Aon%3A'), +fn: function (aClass, aStream){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addPackage%28")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(package, "_name", [])]), "__comma", [unescape("%27%2C%20")]), "__comma", [smalltalk.send(package, "_propertiesAsJSON", [])]), "__comma", [unescape("%29%3B")])]);})(aStream); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addClass%28")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%27%2C%20")])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20%5B")]);})(aStream); +smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C%20")]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%5D%2C%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(aClass, "_category", []), "__comma", [unescape("%27")])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);})(aStream); smalltalk.send(aStream, "_lf", []); return self;} }), -smalltalk.Exporter); - - +smalltalk.StrippedExporter); -smalltalk.addClass('ChunkParser', smalltalk.Object, ['stream'], 'Compiler'); smalltalk.addMethod( -unescape('_stream_'), +unescape('_exportMethod_of_on_'), smalltalk.method({ -selector: unescape('stream%3A'), -fn: function (aStream){ +selector: unescape('exportMethod%3Aof%3Aon%3A'), +fn: function (aMethod, aClass, aStream){ var self=this; -(self['@stream']=aStream); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream); return self;} }), -smalltalk.ChunkParser); +smalltalk.StrippedExporter); -smalltalk.addMethod( -unescape('_nextChunk'), -smalltalk.method({ -selector: unescape('nextChunk'), -fn: function (){ -var self=this; -try{var char_=nil; -var result=nil; -var chunk=nil; -(result=smalltalk.send("", "_writeStream", [])); -(function(){while((function(){(char_=smalltalk.send(self['@stream'], "_next", []));return smalltalk.send(char_, "_notNil", []);})()) {(function(){((($receiver = smalltalk.send(char_, "__eq", [unescape("%21")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@stream'], "_peek", []), "__eq", [unescape("%21")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_next", []);})() : (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_next", []);}), (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@stream'], "_peek", []), "__eq", [unescape("%21")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_next", []);})() : (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_next", []);}), (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})]));})]));return smalltalk.send(result, "_nextPut_", [char_]);})()}})(); -(function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return nil}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_nextChunk'){return e.fn()} throw(e)}} -}), -smalltalk.ChunkParser); +smalltalk.addClass('Importer', smalltalk.Object, [], 'Compiler'); smalltalk.addMethod( -unescape('_on_'), +unescape('_import_'), smalltalk.method({ -selector: unescape('on%3A'), +selector: unescape('import%3A'), fn: function (aStream){ var self=this; -return smalltalk.send(smalltalk.send(self, "_new", []), "_stream_", [aStream]); +var chunk=nil; +var result=nil; +var parser=nil; +var lastEmpty=nil; +(parser=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_on_", [aStream])); +(lastEmpty=false); +(function(){while(!(function(){(chunk=smalltalk.send(parser, "_nextChunk", []));return smalltalk.send(chunk, "_isNil", []);})()) {(function(){return ((($receiver = smalltalk.send(chunk, "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (lastEmpty=true);})() : (function(){(result=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_loadExpression_", [chunk]));return ((($receiver = lastEmpty).klass === smalltalk.Boolean) ? ($receiver ? (function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (lastEmpty=true);}), (function(){(result=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_loadExpression_", [chunk]));return ((($receiver = lastEmpty).klass === smalltalk.Boolean) ? ($receiver ? (function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})]));})]));})()}})(); return self;} }), -smalltalk.ChunkParser.klass); +smalltalk.Importer); + smalltalk.addClass('Node', smalltalk.Object, ['nodes'], 'Compiler'); smalltalk.addMethod( -unescape('_nodes'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('nodes'), -fn: function (){ +selector: unescape('accept%3A'), +fn: function (aVisitor){ var self=this; -return (($receiver = self['@nodes']) == nil || $receiver == undefined) ? (function(){return (self['@nodes']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +smalltalk.send(aVisitor, "_visitNode_", [self]); return self;} }), smalltalk.Node); smalltalk.addMethod( -unescape('_nodes_'), +unescape('_addNode_'), smalltalk.method({ -selector: unescape('nodes%3A'), -fn: function (aCollection){ +selector: unescape('addNode%3A'), +fn: function (aNode){ var self=this; -(self['@nodes']=aCollection); +smalltalk.send(smalltalk.send(self, "_nodes", []), "_add_", [aNode]); return self;} }), smalltalk.Node); smalltalk.addMethod( -unescape('_addNode_'), +unescape('_isBlockNode'), smalltalk.method({ -selector: unescape('addNode%3A'), -fn: function (aNode){ +selector: unescape('isBlockNode'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_nodes", []), "_add_", [aNode]); +return false; return self;} }), smalltalk.Node); smalltalk.addMethod( -unescape('_accept_'), +unescape('_isBlockSequenceNode'), smalltalk.method({ -selector: unescape('accept%3A'), -fn: function (aVisitor){ +selector: unescape('isBlockSequenceNode'), +fn: function (){ var self=this; -smalltalk.send(aVisitor, "_visitNode_", [self]); +return false; return self;} }), smalltalk.Node); @@ -423,330 +388,359 @@ return self;} smalltalk.Node); smalltalk.addMethod( -unescape('_isBlockNode'), +unescape('_nodes'), smalltalk.method({ -selector: unescape('isBlockNode'), +selector: unescape('nodes'), fn: function (){ var self=this; -return false; +return (($receiver = self['@nodes']) == nil || $receiver == undefined) ? (function(){return (self['@nodes']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;} }), smalltalk.Node); smalltalk.addMethod( -unescape('_isBlockSequenceNode'), +unescape('_nodes_'), smalltalk.method({ -selector: unescape('isBlockSequenceNode'), -fn: function (){ +selector: unescape('nodes%3A'), +fn: function (aCollection){ var self=this; -return false; +(self['@nodes']=aCollection); return self;} }), smalltalk.Node); -smalltalk.addClass('SequenceNode', smalltalk.Node, ['temps'], 'Compiler'); +smalltalk.addClass('AssignmentNode', smalltalk.Node, ['left', 'right'], 'Compiler'); smalltalk.addMethod( -unescape('_temps'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('temps'), -fn: function (){ +selector: unescape('accept%3A'), +fn: function (aVisitor){ var self=this; -return (($receiver = self['@temps']) == nil || $receiver == undefined) ? (function(){return [];})() : $receiver; +smalltalk.send(aVisitor, "_visitAssignmentNode_", [self]); return self;} }), -smalltalk.SequenceNode); +smalltalk.AssignmentNode); smalltalk.addMethod( -unescape('_temps_'), +unescape('_left'), smalltalk.method({ -selector: unescape('temps%3A'), -fn: function (aCollection){ +selector: unescape('left'), +fn: function (){ var self=this; -(self['@temps']=aCollection); +return self['@left']; return self;} }), -smalltalk.SequenceNode); +smalltalk.AssignmentNode); smalltalk.addMethod( -unescape('_asBlockSequenceNode'), +unescape('_left_'), smalltalk.method({ -selector: unescape('asBlockSequenceNode'), -fn: function (){ +selector: unescape('left%3A'), +fn: function (aNode){ var self=this; -return (function($rec){smalltalk.send($rec, "_nodes_", [smalltalk.send(self, "_nodes", [])]);smalltalk.send($rec, "_temps_", [smalltalk.send(self, "_temps", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.BlockSequenceNode || BlockSequenceNode), "_new", [])); +(self['@left']=aNode); +smalltalk.send(self['@left'], "_assigned_", [true]); return self;} }), -smalltalk.SequenceNode); +smalltalk.AssignmentNode); smalltalk.addMethod( -unescape('_accept_'), +unescape('_right'), smalltalk.method({ -selector: unescape('accept%3A'), -fn: function (aVisitor){ +selector: unescape('right'), +fn: function (){ var self=this; -smalltalk.send(aVisitor, "_visitSequenceNode_", [self]); +return self['@right']; return self;} }), -smalltalk.SequenceNode); - - +smalltalk.AssignmentNode); -smalltalk.addClass('DynamicDictionaryNode', smalltalk.Node, [], 'Compiler'); smalltalk.addMethod( -unescape('_accept_'), +unescape('_right_'), smalltalk.method({ -selector: unescape('accept%3A'), -fn: function (aVisitor){ +selector: unescape('right%3A'), +fn: function (aNode){ var self=this; -smalltalk.send(aVisitor, "_visitDynamicDictionaryNode_", [self]); +(self['@right']=aNode); return self;} }), -smalltalk.DynamicDictionaryNode); +smalltalk.AssignmentNode); -smalltalk.addClass('ReturnNode', smalltalk.Node, [], 'Compiler'); +smalltalk.addClass('BlockNode', smalltalk.Node, ['parameters', 'inlined'], 'Compiler'); smalltalk.addMethod( unescape('_accept_'), smalltalk.method({ selector: unescape('accept%3A'), fn: function (aVisitor){ var self=this; -smalltalk.send(aVisitor, "_visitReturnNode_", [self]); +smalltalk.send(aVisitor, "_visitBlockNode_", [self]); return self;} }), -smalltalk.ReturnNode); - - +smalltalk.BlockNode); -smalltalk.addClass('ValueNode', smalltalk.Node, ['value'], 'Compiler'); smalltalk.addMethod( -unescape('_value'), +unescape('_inlined'), smalltalk.method({ -selector: unescape('value'), +selector: unescape('inlined'), fn: function (){ var self=this; -return self['@value']; +return (($receiver = self['@inlined']) == nil || $receiver == undefined) ? (function(){return false;})() : $receiver; return self;} }), -smalltalk.ValueNode); +smalltalk.BlockNode); smalltalk.addMethod( -unescape('_value_'), +unescape('_inlined_'), smalltalk.method({ -selector: unescape('value%3A'), -fn: function (anObject){ +selector: unescape('inlined%3A'), +fn: function (aBoolean){ var self=this; -(self['@value']=anObject); +(self['@inlined']=aBoolean); return self;} }), -smalltalk.ValueNode); +smalltalk.BlockNode); smalltalk.addMethod( -unescape('_accept_'), +unescape('_isBlockNode'), smalltalk.method({ -selector: unescape('accept%3A'), -fn: function (aVisitor){ +selector: unescape('isBlockNode'), +fn: function (){ var self=this; -smalltalk.send(aVisitor, "_visitValueNode_", [self]); +return true; return self;} }), -smalltalk.ValueNode); +smalltalk.BlockNode); smalltalk.addMethod( -unescape('_isValueNode'), +unescape('_parameters'), smalltalk.method({ -selector: unescape('isValueNode'), +selector: unescape('parameters'), fn: function (){ var self=this; -return true; +return (($receiver = self['@parameters']) == nil || $receiver == undefined) ? (function(){return (self['@parameters']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;} }), -smalltalk.ValueNode); +smalltalk.BlockNode); +smalltalk.addMethod( +unescape('_parameters_'), +smalltalk.method({ +selector: unescape('parameters%3A'), +fn: function (aCollection){ +var self=this; +(self['@parameters']=aCollection); +return self;} +}), +smalltalk.BlockNode); -smalltalk.addClass('VariableNode', smalltalk.ValueNode, ['assigned'], 'Compiler'); + +smalltalk.addClass('CascadeNode', smalltalk.Node, ['receiver'], 'Compiler'); smalltalk.addMethod( unescape('_accept_'), smalltalk.method({ selector: unescape('accept%3A'), fn: function (aVisitor){ var self=this; -smalltalk.send(aVisitor, "_visitVariableNode_", [self]); +smalltalk.send(aVisitor, "_visitCascadeNode_", [self]); return self;} }), -smalltalk.VariableNode); +smalltalk.CascadeNode); smalltalk.addMethod( -unescape('_assigned'), +unescape('_receiver'), smalltalk.method({ -selector: unescape('assigned'), +selector: unescape('receiver'), fn: function (){ var self=this; -return (($receiver = self['@assigned']) == nil || $receiver == undefined) ? (function(){return false;})() : $receiver; +return self['@receiver']; return self;} }), -smalltalk.VariableNode); +smalltalk.CascadeNode); smalltalk.addMethod( -unescape('_assigned_'), +unescape('_receiver_'), smalltalk.method({ -selector: unescape('assigned%3A'), -fn: function (aBoolean){ +selector: unescape('receiver%3A'), +fn: function (aNode){ var self=this; -(self['@assigned']=aBoolean); +(self['@receiver']=aNode); return self;} }), -smalltalk.VariableNode); +smalltalk.CascadeNode); -smalltalk.addClass('ChunkExporter', smalltalk.Exporter, [], 'Compiler'); +smalltalk.addClass('DynamicArrayNode', smalltalk.Node, [], 'Compiler'); smalltalk.addMethod( -unescape('_exportDefinitionOf_on_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('exportDefinitionOf%3Aon%3A'), -fn: function (aClass, aStream){ +selector: unescape('accept%3A'), +fn: function (aVisitor){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("%20subclass%3A%20%23"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("%09instanceVariableNames%3A%20%27")]);})(aStream); -smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%09category%3A%20%27"), "__comma", [smalltalk.send(aClass, "_category", [])]), "__comma", [unescape("%27%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream); -((($receiver = smalltalk.send(smalltalk.send(aClass, "_comment", []), "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})])); -smalltalk.send(aStream, "_lf", []); +smalltalk.send(aVisitor, "_visitDynamicArrayNode_", [self]); return self;} }), -smalltalk.ChunkExporter); +smalltalk.DynamicArrayNode); + + +smalltalk.addClass('DynamicDictionaryNode', smalltalk.Node, [], 'Compiler'); smalltalk.addMethod( -unescape('_exportMethod_of_on_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('exportMethod%3Aof%3Aon%3A'), -fn: function (aMethod, aClass, aStream){ +selector: unescape('accept%3A'), +fn: function (aVisitor){ var self=this; -(function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aMethod, "_source", [])])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("%21")]);})(aStream); +smalltalk.send(aVisitor, "_visitDynamicDictionaryNode_", [self]); return self;} }), -smalltalk.ChunkExporter); +smalltalk.DynamicDictionaryNode); + + +smalltalk.addClass('JSStatementNode', smalltalk.Node, ['source'], 'Compiler'); smalltalk.addMethod( -unescape('_exportMethodsOf_on_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('exportMethodsOf%3Aon%3A'), -fn: function (aClass, aStream){ +selector: unescape('accept%3A'), +fn: function (aVisitor){ var self=this; -smalltalk.send(aClass, "_protocolsDo_", [(function(category, methods){return ((($receiver = smalltalk.send(category, "_match_", [unescape("%5E%5C*")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, aClass, aStream]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, aClass, aStream]);})]));})]); +smalltalk.send(aVisitor, "_visitJSStatementNode_", [self]); return self;} }), -smalltalk.ChunkExporter); +smalltalk.JSStatementNode); smalltalk.addMethod( -unescape('_exportMetaDefinitionOf_on_'), +unescape('_source'), smalltalk.method({ -selector: unescape('exportMetaDefinitionOf%3Aon%3A'), -fn: function (aClass, aStream){ +selector: unescape('source'), +fn: function (){ var self=this; -((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%20instanceVariableNames%3A%20%27")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%20instanceVariableNames%3A%20%27")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);})])); +return (($receiver = self['@source']) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver; return self;} }), -smalltalk.ChunkExporter); +smalltalk.JSStatementNode); smalltalk.addMethod( -unescape('_classNameFor_'), +unescape('_source_'), smalltalk.method({ -selector: unescape('classNameFor%3A'), -fn: function (aClass){ +selector: unescape('source%3A'), +fn: function (aString){ var self=this; -return ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [" class"]);})() : (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [" class"]);}), (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})])); +(self['@source']=aString); return self;} }), -smalltalk.ChunkExporter); +smalltalk.JSStatementNode); + + +smalltalk.addClass('MethodNode', smalltalk.Node, ['selector', 'arguments', 'source'], 'Compiler'); smalltalk.addMethod( -unescape('_chunkEscape_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('chunkEscape%3A'), -fn: function (aString){ +selector: unescape('accept%3A'), +fn: function (aVisitor){ var self=this; -return smalltalk.send(smalltalk.send(aString, "_replace_with_", [unescape("%21"), unescape("%21%21")]), "_trimBoth", []); +smalltalk.send(aVisitor, "_visitMethodNode_", [self]); return self;} }), -smalltalk.ChunkExporter); +smalltalk.MethodNode); smalltalk.addMethod( -unescape('_exportMethods_category_of_on_'), +unescape('_arguments'), smalltalk.method({ -selector: unescape('exportMethods%3Acategory%3Aof%3Aon%3A'), -fn: function (methods, category, aClass, aStream){ +selector: unescape('arguments'), +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%20methodsFor%3A%20%27"), "__comma", [category]), "__comma", [unescape("%27%21")])]);})(aStream); -smalltalk.send(methods, "_do_", [(function(each){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%20%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream); +return (($receiver = self['@arguments']) == nil || $receiver == undefined) ? (function(){return [];})() : $receiver; return self;} }), -smalltalk.ChunkExporter); +smalltalk.MethodNode); smalltalk.addMethod( -unescape('_exportPackageExtensionsOf_on_'), +unescape('_arguments_'), smalltalk.method({ -selector: unescape('exportPackageExtensionsOf%3Aon%3A'), -fn: function (package, aStream){ +selector: unescape('arguments%3A'), +fn: function (aCollection){ var self=this; -var name=nil; -(name=smalltalk.send(package, "_name", [])); -smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_collect_", [(function(each){return smalltalk.send(each, "_class", []);})])]), "_do_", [(function(each){return smalltalk.send(each, "_protocolsDo_", [(function(category, methods){return ((($receiver = smalltalk.send(category, "__eq", [smalltalk.send(unescape("*"), "__comma", [name])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, each, aStream]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, each, aStream]);})]));})]);})]); +(self['@arguments']=aCollection); return self;} }), -smalltalk.ChunkExporter); +smalltalk.MethodNode); smalltalk.addMethod( -unescape('_exportPackageDefinitionOf_on_'), +unescape('_selector'), smalltalk.method({ -selector: unescape('exportPackageDefinitionOf%3Aon%3A'), -fn: function (package, aStream){ +selector: unescape('selector'), +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("Smalltalk%20current%20createPackage%3A%20%27"), "__comma", [smalltalk.send(package, "_name", [])]), "__comma", [unescape("%27%20properties%3A%20")]), "__comma", [smalltalk.send(smalltalk.send(package, "_properties", []), "_storeString", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream); +return self['@selector']; return self;} }), -smalltalk.ChunkExporter); +smalltalk.MethodNode); +smalltalk.addMethod( +unescape('_selector_'), +smalltalk.method({ +selector: unescape('selector%3A'), +fn: function (aString){ +var self=this; +(self['@selector']=aString); +return self;} +}), +smalltalk.MethodNode); +smalltalk.addMethod( +unescape('_source'), +smalltalk.method({ +selector: unescape('source'), +fn: function (){ +var self=this; +return self['@source']; +return self;} +}), +smalltalk.MethodNode); -smalltalk.addClass('ClassReferenceNode', smalltalk.VariableNode, [], 'Compiler'); smalltalk.addMethod( -unescape('_accept_'), +unescape('_source_'), smalltalk.method({ -selector: unescape('accept%3A'), -fn: function (aVisitor){ +selector: unescape('source%3A'), +fn: function (aString){ var self=this; -smalltalk.send(aVisitor, "_visitClassReferenceNode_", [self]); +(self['@source']=aString); return self;} }), -smalltalk.ClassReferenceNode); +smalltalk.MethodNode); -smalltalk.addClass('SendNode', smalltalk.Node, ['selector', 'arguments', 'receiver'], 'Compiler'); +smalltalk.addClass('ReturnNode', smalltalk.Node, [], 'Compiler'); smalltalk.addMethod( -unescape('_selector'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('selector'), -fn: function (){ +selector: unescape('accept%3A'), +fn: function (aVisitor){ var self=this; -return self['@selector']; +smalltalk.send(aVisitor, "_visitReturnNode_", [self]); return self;} }), -smalltalk.SendNode); +smalltalk.ReturnNode); + + +smalltalk.addClass('SendNode', smalltalk.Node, ['selector', 'arguments', 'receiver'], 'Compiler'); smalltalk.addMethod( -unescape('_selector_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('selector%3A'), -fn: function (aString){ +selector: unescape('accept%3A'), +fn: function (aVisitor){ var self=this; -(self['@selector']=aString); +smalltalk.send(aVisitor, "_visitSendNode_", [self]); return self;} }), smalltalk.SendNode); @@ -773,6 +767,19 @@ return self;} }), smalltalk.SendNode); +smalltalk.addMethod( +unescape('_cascadeNodeWithMessages_'), +smalltalk.method({ +selector: unescape('cascadeNodeWithMessages%3A'), +fn: function (aCollection){ +var self=this; +var first=nil; +(first=(function($rec){smalltalk.send($rec, "_selector_", [smalltalk.send(self, "_selector", [])]);smalltalk.send($rec, "_arguments_", [smalltalk.send(self, "_arguments", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.SendNode || SendNode), "_new", []))); +return (function($rec){smalltalk.send($rec, "_receiver_", [smalltalk.send(self, "_receiver", [])]);smalltalk.send($rec, "_nodes_", [smalltalk.send(smalltalk.send((smalltalk.Array || Array), "_with_", [first]), "__comma", [aCollection])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.CascadeNode || CascadeNode), "_new", [])); +return self;} +}), +smalltalk.SendNode); + smalltalk.addMethod( unescape('_receiver'), smalltalk.method({ @@ -796,476 +803,374 @@ return self;} smalltalk.SendNode); smalltalk.addMethod( -unescape('_valueForReceiver_'), +unescape('_selector'), smalltalk.method({ -selector: unescape('valueForReceiver%3A'), -fn: function (anObject){ +selector: unescape('selector'), +fn: function (){ var self=this; -return (function($rec){smalltalk.send($rec, "_receiver_", [(($receiver = smalltalk.send(self, "_receiver", [])) == nil || $receiver == undefined) ? (function(){return anObject;})() : (function(){return smalltalk.send(smalltalk.send(self, "_receiver", []), "_valueForReceiver_", [anObject]);})()]);smalltalk.send($rec, "_selector_", [smalltalk.send(self, "_selector", [])]);smalltalk.send($rec, "_arguments_", [smalltalk.send(self, "_arguments", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.SendNode || SendNode), "_new", [])); +return self['@selector']; return self;} }), smalltalk.SendNode); smalltalk.addMethod( -unescape('_cascadeNodeWithMessages_'), +unescape('_selector_'), smalltalk.method({ -selector: unescape('cascadeNodeWithMessages%3A'), -fn: function (aCollection){ +selector: unescape('selector%3A'), +fn: function (aString){ var self=this; -var first=nil; -(first=(function($rec){smalltalk.send($rec, "_selector_", [smalltalk.send(self, "_selector", [])]);smalltalk.send($rec, "_arguments_", [smalltalk.send(self, "_arguments", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.SendNode || SendNode), "_new", []))); -return (function($rec){smalltalk.send($rec, "_receiver_", [smalltalk.send(self, "_receiver", [])]);smalltalk.send($rec, "_nodes_", [smalltalk.send(smalltalk.send((smalltalk.Array || Array), "_with_", [first]), "__comma", [aCollection])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.CascadeNode || CascadeNode), "_new", [])); +(self['@selector']=aString); return self;} }), smalltalk.SendNode); smalltalk.addMethod( -unescape('_accept_'), +unescape('_valueForReceiver_'), smalltalk.method({ -selector: unescape('accept%3A'), -fn: function (aVisitor){ +selector: unescape('valueForReceiver%3A'), +fn: function (anObject){ var self=this; -smalltalk.send(aVisitor, "_visitSendNode_", [self]); +return (function($rec){smalltalk.send($rec, "_receiver_", [(($receiver = smalltalk.send(self, "_receiver", [])) == nil || $receiver == undefined) ? (function(){return anObject;})() : (function(){return smalltalk.send(smalltalk.send(self, "_receiver", []), "_valueForReceiver_", [anObject]);})()]);smalltalk.send($rec, "_selector_", [smalltalk.send(self, "_selector", [])]);smalltalk.send($rec, "_arguments_", [smalltalk.send(self, "_arguments", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.SendNode || SendNode), "_new", [])); return self;} }), smalltalk.SendNode); -smalltalk.addClass('JSStatementNode', smalltalk.Node, ['source'], 'Compiler'); +smalltalk.addClass('SequenceNode', smalltalk.Node, ['temps'], 'Compiler'); smalltalk.addMethod( -unescape('_source'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('source'), -fn: function (){ +selector: unescape('accept%3A'), +fn: function (aVisitor){ var self=this; -return (($receiver = self['@source']) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver; +smalltalk.send(aVisitor, "_visitSequenceNode_", [self]); return self;} }), -smalltalk.JSStatementNode); +smalltalk.SequenceNode); smalltalk.addMethod( -unescape('_source_'), +unescape('_asBlockSequenceNode'), smalltalk.method({ -selector: unescape('source%3A'), -fn: function (aString){ +selector: unescape('asBlockSequenceNode'), +fn: function (){ var self=this; -(self['@source']=aString); +return (function($rec){smalltalk.send($rec, "_nodes_", [smalltalk.send(self, "_nodes", [])]);smalltalk.send($rec, "_temps_", [smalltalk.send(self, "_temps", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.BlockSequenceNode || BlockSequenceNode), "_new", [])); return self;} }), -smalltalk.JSStatementNode); +smalltalk.SequenceNode); smalltalk.addMethod( -unescape('_accept_'), +unescape('_temps'), smalltalk.method({ -selector: unescape('accept%3A'), -fn: function (aVisitor){ +selector: unescape('temps'), +fn: function (){ var self=this; -smalltalk.send(aVisitor, "_visitJSStatementNode_", [self]); +return (($receiver = self['@temps']) == nil || $receiver == undefined) ? (function(){return [];})() : $receiver; return self;} }), -smalltalk.JSStatementNode); - - +smalltalk.SequenceNode); -smalltalk.addClass('AssignmentNode', smalltalk.Node, ['left', 'right'], 'Compiler'); smalltalk.addMethod( -unescape('_left'), +unescape('_temps_'), smalltalk.method({ -selector: unescape('left'), -fn: function (){ +selector: unescape('temps%3A'), +fn: function (aCollection){ var self=this; -return self['@left']; +(self['@temps']=aCollection); return self;} }), -smalltalk.AssignmentNode); +smalltalk.SequenceNode); -smalltalk.addMethod( -unescape('_left_'), -smalltalk.method({ -selector: unescape('left%3A'), -fn: function (aNode){ -var self=this; -(self['@left']=aNode); -smalltalk.send(self['@left'], "_assigned_", [true]); -return self;} -}), -smalltalk.AssignmentNode); -smalltalk.addMethod( -unescape('_right'), -smalltalk.method({ -selector: unescape('right'), -fn: function (){ -var self=this; -return self['@right']; -return self;} -}), -smalltalk.AssignmentNode); +smalltalk.addClass('BlockSequenceNode', smalltalk.SequenceNode, [], 'Compiler'); smalltalk.addMethod( -unescape('_right_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('right%3A'), -fn: function (aNode){ +selector: unescape('accept%3A'), +fn: function (aVisitor){ var self=this; -(self['@right']=aNode); +smalltalk.send(aVisitor, "_visitBlockSequenceNode_", [self]); return self;} }), -smalltalk.AssignmentNode); +smalltalk.BlockSequenceNode); smalltalk.addMethod( -unescape('_accept_'), +unescape('_isBlockSequenceNode'), smalltalk.method({ -selector: unescape('accept%3A'), -fn: function (aVisitor){ +selector: unescape('isBlockSequenceNode'), +fn: function (){ var self=this; -smalltalk.send(aVisitor, "_visitAssignmentNode_", [self]); +return true; return self;} }), -smalltalk.AssignmentNode); +smalltalk.BlockSequenceNode); -smalltalk.addClass('DynamicArrayNode', smalltalk.Node, [], 'Compiler'); +smalltalk.addClass('ValueNode', smalltalk.Node, ['value'], 'Compiler'); smalltalk.addMethod( unescape('_accept_'), smalltalk.method({ selector: unescape('accept%3A'), fn: function (aVisitor){ var self=this; -smalltalk.send(aVisitor, "_visitDynamicArrayNode_", [self]); +smalltalk.send(aVisitor, "_visitValueNode_", [self]); return self;} }), -smalltalk.DynamicArrayNode); - - +smalltalk.ValueNode); -smalltalk.addClass('Compiler', smalltalk.NodeVisitor, ['stream', 'nestedBlocks', 'earlyReturn', 'currentClass', 'currentSelector', 'unknownVariables', 'tempVariables', 'messageSends', 'referencedClasses', 'classReferenced', 'source', 'argVariables'], 'Compiler'); smalltalk.addMethod( -unescape('_initialize'), +unescape('_isValueNode'), smalltalk.method({ -selector: unescape('initialize'), +selector: unescape('isValueNode'), fn: function (){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.NodeVisitor); -(self['@stream']=smalltalk.send("", "_writeStream", [])); -(self['@unknownVariables']=[]); -(self['@tempVariables']=[]); -(self['@argVariables']=[]); -(self['@messageSends']=[]); -(self['@classReferenced']=[]); +return true; return self;} }), -smalltalk.Compiler); +smalltalk.ValueNode); smalltalk.addMethod( -unescape('_parser'), +unescape('_value'), smalltalk.method({ -selector: unescape('parser'), +selector: unescape('value'), fn: function (){ var self=this; -return smalltalk.send((smalltalk.SmalltalkParser || SmalltalkParser), "_new", []); +return self['@value']; return self;} }), -smalltalk.Compiler); +smalltalk.ValueNode); smalltalk.addMethod( -unescape('_currentClass'), +unescape('_value_'), smalltalk.method({ -selector: unescape('currentClass'), -fn: function (){ +selector: unescape('value%3A'), +fn: function (anObject){ var self=this; -return self['@currentClass']; +(self['@value']=anObject); return self;} }), -smalltalk.Compiler); +smalltalk.ValueNode); + + +smalltalk.addClass('VariableNode', smalltalk.ValueNode, ['assigned'], 'Compiler'); smalltalk.addMethod( -unescape('_currentClass_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('currentClass%3A'), -fn: function (aClass){ +selector: unescape('accept%3A'), +fn: function (aVisitor){ var self=this; -(self['@currentClass']=aClass); +smalltalk.send(aVisitor, "_visitVariableNode_", [self]); return self;} }), -smalltalk.Compiler); +smalltalk.VariableNode); smalltalk.addMethod( -unescape('_loadExpression_'), +unescape('_assigned'), smalltalk.method({ -selector: unescape('loadExpression%3A'), -fn: function (aString){ +selector: unescape('assigned'), +fn: function (){ var self=this; -var result=nil; -smalltalk.send((smalltalk.DoIt || DoIt), "_addCompiledMethod_", [smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compileExpression_", [aString])])]); -(result=smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt), "_new", []), "_doIt", [])); -smalltalk.send((smalltalk.DoIt || DoIt), "_removeCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt), "_methodDictionary", []), "_at_", ["doIt"])]); -return result; +return (($receiver = self['@assigned']) == nil || $receiver == undefined) ? (function(){return false;})() : $receiver; return self;} }), -smalltalk.Compiler); +smalltalk.VariableNode); smalltalk.addMethod( -unescape('_load_forClass_'), +unescape('_assigned_'), smalltalk.method({ -selector: unescape('load%3AforClass%3A'), -fn: function (aString, aClass){ +selector: unescape('assigned%3A'), +fn: function (aBoolean){ var self=this; -var compiled=nil; -(compiled=smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compile_forClass_", [aString, aClass])])); -smalltalk.send(self, "_setupClass_", [aClass]); -return compiled; +(self['@assigned']=aBoolean); return self;} }), -smalltalk.Compiler); +smalltalk.VariableNode); + + +smalltalk.addClass('ClassReferenceNode', smalltalk.VariableNode, [], 'Compiler'); smalltalk.addMethod( -unescape('_compile_forClass_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('compile%3AforClass%3A'), -fn: function (aString, aClass){ +selector: unescape('accept%3A'), +fn: function (aVisitor){ var self=this; -smalltalk.send(self, "_currentClass_", [aClass]); -smalltalk.send(self, "_source_", [aString]); -return smalltalk.send(self, "_compile_", [aString]); +smalltalk.send(aVisitor, "_visitClassReferenceNode_", [self]); return self;} }), -smalltalk.Compiler); +smalltalk.ClassReferenceNode); + + +smalltalk.addClass('NodeVisitor', smalltalk.Object, [], 'Compiler'); smalltalk.addMethod( -unescape('_compileExpression_'), +unescape('_visit_'), smalltalk.method({ -selector: unescape('compileExpression%3A'), -fn: function (aString){ +selector: unescape('visit%3A'), +fn: function (aNode){ var self=this; -smalltalk.send(self, "_currentClass_", [(smalltalk.DoIt || DoIt)]); -smalltalk.send(self, "_source_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")])]); -return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [smalltalk.send(self, "_source", [])])]); +smalltalk.send(aNode, "_accept_", [self]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_eval_'), +unescape('_visitAssignmentNode_'), smalltalk.method({ -selector: unescape('eval%3A'), -fn: function (aString){ +selector: unescape('visitAssignmentNode%3A'), +fn: function (aNode){ var self=this; -return eval(aString); +smalltalk.send(self, "_visitNode_", [aNode]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_compile_'), +unescape('_visitBlockNode_'), smalltalk.method({ -selector: unescape('compile%3A'), -fn: function (aString){ +selector: unescape('visitBlockNode%3A'), +fn: function (aNode){ var self=this; -return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [aString])]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_compileNode_'), +unescape('_visitBlockSequenceNode_'), smalltalk.method({ -selector: unescape('compileNode%3A'), +selector: unescape('visitBlockSequenceNode%3A'), fn: function (aNode){ var self=this; -(self['@stream']=smalltalk.send("", "_writeStream", [])); -smalltalk.send(self, "_visit_", [aNode]); -return smalltalk.send(self['@stream'], "_contents", []); +smalltalk.send(self, "_visitSequenceNode_", [aNode]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visit_'), +unescape('_visitCascadeNode_'), smalltalk.method({ -selector: unescape('visit%3A'), +selector: unescape('visitCascadeNode%3A'), fn: function (aNode){ var self=this; -smalltalk.send(aNode, "_accept_", [self]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitMethodNode_'), +unescape('_visitClassReferenceNode_'), smalltalk.method({ -selector: unescape('visitMethodNode%3A'), +selector: unescape('visitClassReferenceNode%3A'), fn: function (aNode){ var self=this; -var str=nil; -var currentSelector=nil; -(self['@currentSelector']=smalltalk.send(smalltalk.send(aNode, "_selector", []), "_asSelector", [])); -(self['@nestedBlocks']=(0)); -(self['@earlyReturn']=false); -(self['@messageSends']=[]); -(self['@referencedClasses']=[]); -(self['@unknownVariables']=[]); -(self['@tempVariables']=[]); -(self['@argVariables']=[]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20%22"), "__comma", [smalltalk.send(aNode, "_selector", [])]), "__comma", [unescape("%22%2C")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("source%3A%20unescape%28%22"), "__comma", [smalltalk.send(smalltalk.send(self, "_source", []), "_escaped", [])]), "__comma", [unescape("%22%29%2C")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("fn%3A%20function%28")]); -smalltalk.send(smalltalk.send(aNode, "_arguments", []), "_do_separatedBy_", [(function(each){smalltalk.send(self['@argVariables'], "_add_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%29%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("var%20self%3Dthis%3B")]);return smalltalk.send($rec, "_lf", []);})(self['@stream']); -(str=self['@stream']); -(self['@stream']=smalltalk.send("", "_writeStream", [])); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]); -((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(str, "_nextPutAll_", [unescape("try%7B")]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(str, "_nextPutAll_", [unescape("try%7B")]);})])); -smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self['@stream'], "_contents", [])]); -(self['@stream']=str); -(function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("return%20self%3B")]);})(self['@stream']); -((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%7D%20catch%28e%29%20%7Bif%28e.name%20%3D%3D%3D%20%27stReturn%27%20%26%26%20e.selector%20%3D%3D%3D%20"), "__comma", [smalltalk.send(self['@currentSelector'], "_printString", [])]), "__comma", [unescape("%29%7Breturn%20e.fn%28%29%7D%20throw%28e%29%7D")])]);})(self['@stream']);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%7D%20catch%28e%29%20%7Bif%28e.name%20%3D%3D%3D%20%27stReturn%27%20%26%26%20e.selector%20%3D%3D%3D%20"), "__comma", [smalltalk.send(self['@currentSelector'], "_printString", [])]), "__comma", [unescape("%29%7Breturn%20e.fn%28%29%7D%20throw%28e%29%7D")])]);})(self['@stream']);})])); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D")]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%2C"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", ["messageSends: "])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@messageSends'], "_asJavascript", []), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("args: ", "__comma", [smalltalk.send(self['@argVariables'], "_asJavascript", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("referencedClasses%3A%20%5B")]);})(self['@stream']); -smalltalk.send(self['@referencedClasses'], "_do_separatedBy_", [(function(each){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(each, "_printString", [])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D")]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29")]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(aNode, "_value", [])]);})(self); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitBlockNode_'), +unescape('_visitDynamicArrayNode_'), smalltalk.method({ -selector: unescape('visitBlockNode%3A'), +selector: unescape('visitDynamicArrayNode%3A'), fn: function (aNode){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28function%28")]); -smalltalk.send(smalltalk.send(aNode, "_parameters", []), "_do_separatedBy_", [(function(each){smalltalk.send(self['@tempVariables'], "_add_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29%7B")]); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29")]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitSequenceNode_'), +unescape('_visitDynamicDictionaryNode_'), smalltalk.method({ -selector: unescape('visitSequenceNode%3A'), +selector: unescape('visitDynamicDictionaryNode%3A'), fn: function (aNode){ var self=this; -smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil; -(temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);}), (function(){return smalltalk.send(self['@stream'], "_lf", []);})]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitBlockSequenceNode_'), +unescape('_visitJSStatementNode_'), smalltalk.method({ -selector: unescape('visitBlockSequenceNode%3A'), +selector: unescape('visitJSStatementNode%3A'), fn: function (aNode){ var self=this; -var index=nil; -(self['@nestedBlocks']=((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); -((($receiver = smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("return%20nil%3B")]);})() : (function(){smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil; -(temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]);(index=(0));return smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){(index=((($receiver = index).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));((($receiver = smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("return%20nil%3B")]);}), (function(){smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil; -(temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]);(index=(0));return smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){(index=((($receiver = index).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));((($receiver = smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]);})])); -(self['@nestedBlocks']=((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)]))); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("function%28%29%7B")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(aNode, "_source", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%28%29")]);})(self); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitReturnNode_'), +unescape('_visitMethodNode_'), smalltalk.method({ -selector: unescape('visitReturnNode%3A'), +selector: unescape('visitMethodNode%3A'), fn: function (aNode){ var self=this; -((($receiver = ((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver >(0) : smalltalk.send($receiver, "__gt", [(0)]))).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (self['@earlyReturn']=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (self['@earlyReturn']=true);})])); -((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%28function%28%29%7Bthrow%28")]);smalltalk.send($rec, "_nextPutAll_", [unescape("%7Bname%3A%20%27stReturn%27%2C%20selector%3A%20")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@currentSelector'], "_printString", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20fn%3A%20function%28%29%7Breturn%20")]);})(self['@stream']);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%28function%28%29%7Bthrow%28")]);smalltalk.send($rec, "_nextPutAll_", [unescape("%7Bname%3A%20%27stReturn%27%2C%20selector%3A%20")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@currentSelector'], "_printString", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20fn%3A%20function%28%29%7Breturn%20")]);})(self['@stream']);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})])); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]); -((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%7D%29%7D%29%28%29")]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%7D%29%7D%29%28%29")]);})])); +smalltalk.send(self, "_visitNode_", [aNode]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitSendNode_'), +unescape('_visitNode_'), smalltalk.method({ -selector: unescape('visitSendNode%3A'), +selector: unescape('visitNode%3A'), fn: function (aNode){ var self=this; -var str=nil; -var receiver=nil; -var superSend=nil; -var inlined=nil; -(str=self['@stream']); -((($receiver = smalltalk.send(self['@messageSends'], "_includes_", [smalltalk.send(aNode, "_selector", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@messageSends'], "_add_", [smalltalk.send(aNode, "_selector", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@messageSends'], "_add_", [smalltalk.send(aNode, "_selector", [])]);})])); -(self['@stream']=smalltalk.send("", "_writeStream", [])); -smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]); -(superSend=smalltalk.send(smalltalk.send(self['@stream'], "_contents", []), "__eq", ["super"])); -(receiver=((($receiver = superSend).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "self";})() : (function(){return smalltalk.send(self['@stream'], "_contents", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "self";}), (function(){return smalltalk.send(self['@stream'], "_contents", []);})]))); -(self['@stream']=str); -((($receiver = smalltalk.send(self, "_performOptimizations", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inlineLiteral_receiverNode_argumentNodes_", [smalltalk.send(aNode, "_selector", []), smalltalk.send(aNode, "_receiver", []), smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})]));})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inlineLiteral_receiverNode_argumentNodes_", [smalltalk.send(aNode, "_selector", []), smalltalk.send(aNode, "_receiver", []), smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})]));}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})])); + return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitCascadeNode_'), +unescape('_visitReturnNode_'), smalltalk.method({ -selector: unescape('visitCascadeNode%3A'), +selector: unescape('visitReturnNode%3A'), fn: function (aNode){ var self=this; -var index=nil; -(index=(0)); -((($receiver = smalltalk.send(self['@tempVariables'], "_includes_", ["$rec"])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@tempVariables'], "_add_", ["$rec"]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@tempVariables'], "_add_", ["$rec"]);})])); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28function%28%24rec%29%7B")]); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){(index=((($receiver = index).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));((($receiver = smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));smalltalk.send(each, "_receiver_", [smalltalk.send(smalltalk.send((smalltalk.VariableNode || VariableNode), "_new", []), "_value_", ["$rec"])]);smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29%28")]); -smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29")]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitValueNode_'), +unescape('_visitSendNode_'), smalltalk.method({ -selector: unescape('visitValueNode%3A'), +selector: unescape('visitSendNode%3A'), fn: function (aNode){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(aNode, "_value", []), "_asJavascript", [])]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitAssignmentNode_'), +unescape('_visitSequenceNode_'), smalltalk.method({ -selector: unescape('visitAssignmentNode%3A'), +selector: unescape('visitSequenceNode%3A'), fn: function (aNode){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28")]); -smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_left", [])]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3D")]); -smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_right", [])]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29")]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitClassReferenceNode_'), +unescape('_visitValueNode_'), smalltalk.method({ -selector: unescape('visitClassReferenceNode%3A'), +selector: unescape('visitValueNode%3A'), fn: function (aNode){ var self=this; -((($receiver = smalltalk.send(self['@referencedClasses'], "_includes_", [smalltalk.send(aNode, "_value", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@referencedClasses'], "_add_", [smalltalk.send(aNode, "_value", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@referencedClasses'], "_add_", [smalltalk.send(aNode, "_value", [])]);})])); -smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28smalltalk."), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%20%7C%7C%20")]), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%29")])]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( unescape('_visitVariableNode_'), @@ -1273,165 +1178,168 @@ smalltalk.method({ selector: unescape('visitVariableNode%3A'), fn: function (aNode){ var self=this; -var varName=nil; -((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_currentClass", []), "_allInstanceVariableNames", []), "_includes_", [smalltalk.send(aNode, "_value", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("self%5B%27@"), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%27%5D")])]);})() : (function(){(varName=smalltalk.send(self, "_safeVariableNameFor_", [smalltalk.send(aNode, "_value", [])]));return ((($receiver = smalltalk.send(smalltalk.send(self, "_knownVariables", []), "_includes_", [varName])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("self%5B%27@"), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%27%5D")])]);}), (function(){(varName=smalltalk.send(self, "_safeVariableNameFor_", [smalltalk.send(aNode, "_value", [])]));return ((($receiver = smalltalk.send(smalltalk.send(self, "_knownVariables", []), "_includes_", [varName])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})]));})])); -return self;} -}), -smalltalk.Compiler); -smalltalk.addMethod( -unescape('_visitJSStatementNode_'), -smalltalk.method({ -selector: unescape('visitJSStatementNode%3A'), -fn: function (aNode){ -var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(aNode, "_source", []), "_replace_with_", [unescape("%3E%3E"), unescape("%3E")])]); return self;} }), -smalltalk.Compiler); +smalltalk.NodeVisitor); + + +smalltalk.addClass('Compiler', smalltalk.NodeVisitor, ['stream', 'nestedBlocks', 'earlyReturn', 'currentClass', 'currentSelector', 'unknownVariables', 'tempVariables', 'messageSends', 'referencedClasses', 'classReferenced', 'source', 'argVariables'], 'Compiler'); smalltalk.addMethod( -unescape('_parse_'), +unescape('_argVariables'), smalltalk.method({ -selector: unescape('parse%3A'), -fn: function (aString){ +selector: unescape('argVariables'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_parse_", [aString]); +return smalltalk.send(self['@argVariables'], "_copy", []); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_parseExpression_'), +unescape('_checkClass_for_'), smalltalk.method({ -selector: unescape('parseExpression%3A'), -fn: function (aString){ +selector: unescape('checkClass%3Afor%3A'), +fn: function (aClassName, receiver){ var self=this; -return smalltalk.send(self, "_parse_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")])]); +smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28%28%28%24receiver%20%3D%20"), "__comma", [receiver]), "__comma", [unescape("%29.klass%20%3D%3D%3D%20smalltalk.")]), "__comma", [aClassName]), "__comma", [unescape("%29%20%3F%20")])]); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_unknownVariables'), +unescape('_classNameFor_'), smalltalk.method({ -selector: unescape('unknownVariables'), -fn: function (){ +selector: unescape('classNameFor%3A'), +fn: function (aClass){ var self=this; -return smalltalk.send(self['@unknownVariables'], "_copy", []); +return ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);})() : (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);}), (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})])); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_pseudoVariables'), +unescape('_compile_'), smalltalk.method({ -selector: unescape('pseudoVariables'), -fn: function (){ +selector: unescape('compile%3A'), +fn: function (aString){ var self=this; -return ["self", "super", "true", "false", "nil", "thisContext"]; +return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [aString])]); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_tempVariables'), +unescape('_compile_forClass_'), smalltalk.method({ -selector: unescape('tempVariables'), -fn: function (){ +selector: unescape('compile%3AforClass%3A'), +fn: function (aString, aClass){ var self=this; -return smalltalk.send(self['@tempVariables'], "_copy", []); +smalltalk.send(self, "_currentClass_", [aClass]); +smalltalk.send(self, "_source_", [aString]); +return smalltalk.send(self, "_compile_", [aString]); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_knownVariables'), +unescape('_compileExpression_'), smalltalk.method({ -selector: unescape('knownVariables'), -fn: function (){ +selector: unescape('compileExpression%3A'), +fn: function (aString){ var self=this; -return (function($rec){smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_tempVariables", [])]);smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_argVariables", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_pseudoVariables", [])); +smalltalk.send(self, "_currentClass_", [(smalltalk.DoIt || DoIt)]); +smalltalk.send(self, "_source_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")])]); +return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [smalltalk.send(self, "_source", [])])]); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_recompile_'), +unescape('_compileNode_'), smalltalk.method({ -selector: unescape('recompile%3A'), -fn: function (aClass){ +selector: unescape('compileNode%3A'), +fn: function (aNode){ var self=this; -smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_do_", [(function(each){var method=nil; -(method=smalltalk.send(self, "_load_forClass_", [smalltalk.send(each, "_source", []), aClass]));smalltalk.send(method, "_category_", [smalltalk.send(each, "_category", [])]);return smalltalk.send(aClass, "_addCompiledMethod_", [method]);})]); -((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})])); +(self['@stream']=smalltalk.send("", "_writeStream", [])); +smalltalk.send(self, "_visit_", [aNode]); +return smalltalk.send(self['@stream'], "_contents", []); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_recompileAll'), +unescape('_currentClass'), smalltalk.method({ -selector: unescape('recompileAll'), +selector: unescape('currentClass'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){(function($rec){smalltalk.send($rec, "_show_", [each]);return smalltalk.send($rec, "_cr", []);})((smalltalk.Transcript || Transcript));return smalltalk.send((function(){return smalltalk.send(self, "_recompile_", [each]);}), "_valueWithTimeout_", [(100)]);})]); +return self['@currentClass']; return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_classNameFor_'), +unescape('_currentClass_'), smalltalk.method({ -selector: unescape('classNameFor%3A'), +selector: unescape('currentClass%3A'), fn: function (aClass){ var self=this; -return ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);})() : (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);}), (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})])); -return self;} -}), -smalltalk.Compiler); - -smalltalk.addMethod( -unescape('_visitFailure_'), -smalltalk.method({ -selector: unescape('visitFailure%3A'), -fn: function (aFailure){ -var self=this; -smalltalk.send(self, "_error_", [smalltalk.send(aFailure, "_asString", [])]); +(self['@currentClass']=aClass); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_setupClass_'), +unescape('_eval_'), smalltalk.method({ -selector: unescape('setupClass%3A'), -fn: function (aClass){ +selector: unescape('eval%3A'), +fn: function (aString){ var self=this; -smalltalk.init(aClass); +return eval(aString); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_send_to_arguments_superSend_'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('send%3Ato%3Aarguments%3AsuperSend%3A'), -fn: function (aSelector, aReceiver, aCollection, aBoolean){ +selector: unescape('initialize'), +fn: function (){ var self=this; -return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(str){var tmp=nil; -(tmp=self['@stream']);smalltalk.send(str, "_nextPutAll_", [unescape("smalltalk.send%28")]);smalltalk.send(str, "_nextPutAll_", [aReceiver]);smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%2C%20%22"), "__comma", [smalltalk.send(aSelector, "_asSelector", [])]), "__comma", [unescape("%22%2C%20%5B")])]);(self['@stream']=str);smalltalk.send(aCollection, "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]);(self['@stream']=tmp);smalltalk.send(str, "_nextPutAll_", [unescape("%5D")]);((($receiver = aBoolean).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(unescape("%2C%20smalltalk."), "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(smalltalk.send(self, "_currentClass", []), "_superclass", [])])])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(unescape("%2C%20smalltalk."), "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(smalltalk.send(self, "_currentClass", []), "_superclass", [])])])]);})]));return smalltalk.send(str, "_nextPutAll_", [unescape("%29")]);})]); +smalltalk.send(self, "_initialize", [], smalltalk.NodeVisitor); +(self['@stream']=smalltalk.send("", "_writeStream", [])); +(self['@unknownVariables']=[]); +(self['@tempVariables']=[]); +(self['@argVariables']=[]); +(self['@messageSends']=[]); +(self['@classReferenced']=[]); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_checkClass_for_'), +unescape('_inline_receiver_argumentNodes_'), smalltalk.method({ -selector: unescape('checkClass%3Afor%3A'), -fn: function (aClassName, receiver){ +selector: unescape('inline%3Areceiver%3AargumentNodes%3A'), +fn: function (aSelector, receiver, aCollection){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28%28%28%24receiver%20%3D%20"), "__comma", [receiver]), "__comma", [unescape("%29.klass%20%3D%3D%3D%20smalltalk.")]), "__comma", [aClassName]), "__comma", [unescape("%29%20%3F%20")])]); +var inlined=nil; +(inlined=false); +((($receiver = smalltalk.send(aSelector, "__eq", ["ifFalse:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})])); +((($receiver = smalltalk.send(aSelector, "__eq", ["ifTrue:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})])); +((($receiver = smalltalk.send(aSelector, "__eq", ["ifTrue:ifFalse:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})])); +((($receiver = smalltalk.send(aSelector, "__eq", ["ifFalse:ifTrue:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3C")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3C%3D")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3E")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3E%3D")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("+")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20+")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20+")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("-")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20-")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20-")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("*")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20*")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20*")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("/")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20/")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20/")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +return inlined; return self;} }), smalltalk.Compiler); @@ -1477,113 +1385,100 @@ return self;} smalltalk.Compiler); smalltalk.addMethod( -unescape('_inline_receiver_argumentNodes_'), +unescape('_knownVariables'), smalltalk.method({ -selector: unescape('inline%3Areceiver%3AargumentNodes%3A'), -fn: function (aSelector, receiver, aCollection){ +selector: unescape('knownVariables'), +fn: function (){ var self=this; -var inlined=nil; -(inlined=false); -((($receiver = smalltalk.send(aSelector, "__eq", ["ifFalse:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})])); -((($receiver = smalltalk.send(aSelector, "__eq", ["ifTrue:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})])); -((($receiver = smalltalk.send(aSelector, "__eq", ["ifTrue:ifFalse:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})])); -((($receiver = smalltalk.send(aSelector, "__eq", ["ifFalse:ifTrue:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3C")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3C%3D")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3E")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3E%3D")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("+")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20+")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20+")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("-")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20-")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20-")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("*")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20*")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20*")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("/")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20/")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20/")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -return inlined; +return (function($rec){smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_tempVariables", [])]);smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_argVariables", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_pseudoVariables", [])); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_performOptimizations'), +unescape('_load_forClass_'), smalltalk.method({ -selector: unescape('performOptimizations'), -fn: function (){ +selector: unescape('load%3AforClass%3A'), +fn: function (aString, aClass){ var self=this; -return smalltalk.send(smalltalk.send(self, "_class", []), "_performOptimizations", []); +var compiled=nil; +(compiled=smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compile_forClass_", [aString, aClass])])); +smalltalk.send(self, "_setupClass_", [aClass]); +return compiled; return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_source'), +unescape('_loadExpression_'), smalltalk.method({ -selector: unescape('source'), -fn: function (){ +selector: unescape('loadExpression%3A'), +fn: function (aString){ var self=this; -return (($receiver = self['@source']) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver; +var result=nil; +smalltalk.send((smalltalk.DoIt || DoIt), "_addCompiledMethod_", [smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compileExpression_", [aString])])]); +(result=smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt), "_new", []), "_doIt", [])); +smalltalk.send((smalltalk.DoIt || DoIt), "_removeCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt), "_methodDictionary", []), "_at_", ["doIt"])]); +return result; return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_source_'), +unescape('_parse_'), smalltalk.method({ -selector: unescape('source%3A'), +selector: unescape('parse%3A'), fn: function (aString){ var self=this; -(self['@source']=aString); +return smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_parse_", [aString]); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_visitDynamicArrayNode_'), +unescape('_parseExpression_'), smalltalk.method({ -selector: unescape('visitDynamicArrayNode%3A'), -fn: function (aNode){ +selector: unescape('parseExpression%3A'), +fn: function (aString){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5B")]); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D")]); +return smalltalk.send(self, "_parse_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")])]); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_visitDynamicDictionaryNode_'), +unescape('_parser'), smalltalk.method({ -selector: unescape('visitDynamicDictionaryNode%3A'), -fn: function (aNode){ +selector: unescape('parser'), +fn: function (){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("smalltalk.HashedCollection._fromPairs_%28%5B")]); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D%29")]); +return smalltalk.send((smalltalk.SmalltalkParser || SmalltalkParser), "_new", []); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_argVariables'), +unescape('_performOptimizations'), smalltalk.method({ -selector: unescape('argVariables'), +selector: unescape('performOptimizations'), fn: function (){ var self=this; -return smalltalk.send(self['@argVariables'], "_copy", []); +return smalltalk.send(smalltalk.send(self, "_class", []), "_performOptimizations", []); return self;} }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_safeVariableNameFor_'), +unescape('_pseudoVariables'), smalltalk.method({ -selector: unescape('safeVariableNameFor%3A'), -fn: function (aString){ +selector: unescape('pseudoVariables'), +fn: function (){ var self=this; -return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_reservedWords", []), "_includes_", [aString])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(aString, "__comma", ["_"]);})() : (function(){return aString;})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(aString, "__comma", ["_"]);}), (function(){return aString;})])); +return ["self", "super", "true", "false", "nil", "thisContext"]; return self;} }), smalltalk.Compiler); - -smalltalk.Compiler.klass.iVarNames = ['performOptimizations']; smalltalk.addMethod( unescape('_recompile_'), smalltalk.method({ @@ -1591,11 +1486,11 @@ selector: unescape('recompile%3A'), fn: function (aClass){ var self=this; smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_do_", [(function(each){var method=nil; -(method=smalltalk.send(smalltalk.send(self, "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), aClass]));smalltalk.send(method, "_category_", [smalltalk.send(each, "_category", [])]);return smalltalk.send(aClass, "_addCompiledMethod_", [method]);})]); +(method=smalltalk.send(self, "_load_forClass_", [smalltalk.send(each, "_source", []), aClass]));smalltalk.send(method, "_category_", [smalltalk.send(each, "_category", [])]);return smalltalk.send(aClass, "_addCompiledMethod_", [method]);})]); ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})])); return self;} }), -smalltalk.Compiler.klass); +smalltalk.Compiler); smalltalk.addMethod( unescape('_recompileAll'), @@ -1603,269 +1498,380 @@ smalltalk.method({ selector: unescape('recompileAll'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){return smalltalk.send(self, "_recompile_", [each]);})]); +smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){(function($rec){smalltalk.send($rec, "_show_", [each]);return smalltalk.send($rec, "_cr", []);})((smalltalk.Transcript || Transcript));return smalltalk.send((function(){return smalltalk.send(self, "_recompile_", [each]);}), "_valueWithTimeout_", [(100)]);})]); return self;} }), -smalltalk.Compiler.klass); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_performOptimizations'), +unescape('_safeVariableNameFor_'), smalltalk.method({ -selector: unescape('performOptimizations'), -fn: function (){ +selector: unescape('safeVariableNameFor%3A'), +fn: function (aString){ var self=this; -return (($receiver = self['@performOptimizations']) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver; +return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_reservedWords", []), "_includes_", [aString])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(aString, "__comma", ["_"]);})() : (function(){return aString;})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(aString, "__comma", ["_"]);}), (function(){return aString;})])); return self;} }), -smalltalk.Compiler.klass); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_performOptimizations_'), +unescape('_send_to_arguments_superSend_'), smalltalk.method({ -selector: unescape('performOptimizations%3A'), -fn: function (aBoolean){ +selector: unescape('send%3Ato%3Aarguments%3AsuperSend%3A'), +fn: function (aSelector, aReceiver, aCollection, aBoolean){ var self=this; -(self['@performOptimizations']=aBoolean); +return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(str){var tmp=nil; +(tmp=self['@stream']);smalltalk.send(str, "_nextPutAll_", [unescape("smalltalk.send%28")]);smalltalk.send(str, "_nextPutAll_", [aReceiver]);smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%2C%20%22"), "__comma", [smalltalk.send(aSelector, "_asSelector", [])]), "__comma", [unescape("%22%2C%20%5B")])]);(self['@stream']=str);smalltalk.send(aCollection, "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]);(self['@stream']=tmp);smalltalk.send(str, "_nextPutAll_", [unescape("%5D")]);((($receiver = aBoolean).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(unescape("%2C%20smalltalk."), "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(smalltalk.send(self, "_currentClass", []), "_superclass", [])])])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(unescape("%2C%20smalltalk."), "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(smalltalk.send(self, "_currentClass", []), "_superclass", [])])])]);})]));return smalltalk.send(str, "_nextPutAll_", [unescape("%29")]);})]); return self;} }), -smalltalk.Compiler.klass); - +smalltalk.Compiler); -smalltalk.addClass('BlockSequenceNode', smalltalk.SequenceNode, [], 'Compiler'); smalltalk.addMethod( -unescape('_accept_'), +unescape('_setupClass_'), smalltalk.method({ -selector: unescape('accept%3A'), -fn: function (aVisitor){ +selector: unescape('setupClass%3A'), +fn: function (aClass){ var self=this; -smalltalk.send(aVisitor, "_visitBlockSequenceNode_", [self]); +smalltalk.init(aClass); return self;} }), -smalltalk.BlockSequenceNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_isBlockSequenceNode'), +unescape('_source'), smalltalk.method({ -selector: unescape('isBlockSequenceNode'), +selector: unescape('source'), fn: function (){ var self=this; -return true; +return (($receiver = self['@source']) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver; return self;} }), -smalltalk.BlockSequenceNode); - +smalltalk.Compiler); +smalltalk.addMethod( +unescape('_source_'), +smalltalk.method({ +selector: unescape('source%3A'), +fn: function (aString){ +var self=this; +(self['@source']=aString); +return self;} +}), +smalltalk.Compiler); -smalltalk.addClass('BlockNode', smalltalk.Node, ['parameters', 'inlined'], 'Compiler'); smalltalk.addMethod( -unescape('_parameters'), +unescape('_tempVariables'), smalltalk.method({ -selector: unescape('parameters'), +selector: unescape('tempVariables'), fn: function (){ var self=this; -return (($receiver = self['@parameters']) == nil || $receiver == undefined) ? (function(){return (self['@parameters']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +return smalltalk.send(self['@tempVariables'], "_copy", []); return self;} }), -smalltalk.BlockNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_parameters_'), +unescape('_unknownVariables'), smalltalk.method({ -selector: unescape('parameters%3A'), -fn: function (aCollection){ +selector: unescape('unknownVariables'), +fn: function (){ var self=this; -(self['@parameters']=aCollection); +return smalltalk.send(self['@unknownVariables'], "_copy", []); return self;} }), -smalltalk.BlockNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_accept_'), +unescape('_visit_'), smalltalk.method({ -selector: unescape('accept%3A'), -fn: function (aVisitor){ +selector: unescape('visit%3A'), +fn: function (aNode){ var self=this; -smalltalk.send(aVisitor, "_visitBlockNode_", [self]); +smalltalk.send(aNode, "_accept_", [self]); return self;} }), -smalltalk.BlockNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_isBlockNode'), +unescape('_visitAssignmentNode_'), smalltalk.method({ -selector: unescape('isBlockNode'), -fn: function (){ +selector: unescape('visitAssignmentNode%3A'), +fn: function (aNode){ var self=this; -return true; +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28")]); +smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_left", [])]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3D")]); +smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_right", [])]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29")]); return self;} }), -smalltalk.BlockNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_inlined'), +unescape('_visitBlockNode_'), smalltalk.method({ -selector: unescape('inlined'), -fn: function (){ +selector: unescape('visitBlockNode%3A'), +fn: function (aNode){ var self=this; -return (($receiver = self['@inlined']) == nil || $receiver == undefined) ? (function(){return false;})() : $receiver; +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28function%28")]); +smalltalk.send(smalltalk.send(aNode, "_parameters", []), "_do_separatedBy_", [(function(each){smalltalk.send(self['@tempVariables'], "_add_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29%7B")]); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29")]); return self;} }), -smalltalk.BlockNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_inlined_'), +unescape('_visitBlockSequenceNode_'), smalltalk.method({ -selector: unescape('inlined%3A'), -fn: function (aBoolean){ +selector: unescape('visitBlockSequenceNode%3A'), +fn: function (aNode){ var self=this; -(self['@inlined']=aBoolean); +var index=nil; +(self['@nestedBlocks']=((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); +((($receiver = smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("return%20nil%3B")]);})() : (function(){smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil; +(temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]);(index=(0));return smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){(index=((($receiver = index).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));((($receiver = smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("return%20nil%3B")]);}), (function(){smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil; +(temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]);(index=(0));return smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){(index=((($receiver = index).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));((($receiver = smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]);})])); +(self['@nestedBlocks']=((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)]))); return self;} }), -smalltalk.BlockNode); - - +smalltalk.Compiler); -smalltalk.addClass('CascadeNode', smalltalk.Node, ['receiver'], 'Compiler'); smalltalk.addMethod( -unescape('_receiver'), +unescape('_visitCascadeNode_'), smalltalk.method({ -selector: unescape('receiver'), -fn: function (){ +selector: unescape('visitCascadeNode%3A'), +fn: function (aNode){ var self=this; -return self['@receiver']; +var index=nil; +(index=(0)); +((($receiver = smalltalk.send(self['@tempVariables'], "_includes_", ["$rec"])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@tempVariables'], "_add_", ["$rec"]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@tempVariables'], "_add_", ["$rec"]);})])); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28function%28%24rec%29%7B")]); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){(index=((($receiver = index).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));((($receiver = smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));smalltalk.send(each, "_receiver_", [smalltalk.send(smalltalk.send((smalltalk.VariableNode || VariableNode), "_new", []), "_value_", ["$rec"])]);smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29%28")]); +smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29")]); return self;} }), -smalltalk.CascadeNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_receiver_'), +unescape('_visitClassReferenceNode_'), smalltalk.method({ -selector: unescape('receiver%3A'), +selector: unescape('visitClassReferenceNode%3A'), fn: function (aNode){ var self=this; -(self['@receiver']=aNode); +((($receiver = smalltalk.send(self['@referencedClasses'], "_includes_", [smalltalk.send(aNode, "_value", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@referencedClasses'], "_add_", [smalltalk.send(aNode, "_value", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@referencedClasses'], "_add_", [smalltalk.send(aNode, "_value", [])]);})])); +smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28smalltalk."), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%20%7C%7C%20")]), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%29")])]); return self;} }), -smalltalk.CascadeNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_accept_'), +unescape('_visitDynamicArrayNode_'), smalltalk.method({ -selector: unescape('accept%3A'), -fn: function (aVisitor){ +selector: unescape('visitDynamicArrayNode%3A'), +fn: function (aNode){ var self=this; -smalltalk.send(aVisitor, "_visitCascadeNode_", [self]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5B")]); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D")]); return self;} }), -smalltalk.CascadeNode); +smalltalk.Compiler); +smalltalk.addMethod( +unescape('_visitDynamicDictionaryNode_'), +smalltalk.method({ +selector: unescape('visitDynamicDictionaryNode%3A'), +fn: function (aNode){ +var self=this; +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("smalltalk.HashedCollection._fromPairs_%28%5B")]); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D%29")]); +return self;} +}), +smalltalk.Compiler); +smalltalk.addMethod( +unescape('_visitFailure_'), +smalltalk.method({ +selector: unescape('visitFailure%3A'), +fn: function (aFailure){ +var self=this; +smalltalk.send(self, "_error_", [smalltalk.send(aFailure, "_asString", [])]); +return self;} +}), +smalltalk.Compiler); -smalltalk.addClass('MethodNode', smalltalk.Node, ['selector', 'arguments', 'source'], 'Compiler'); smalltalk.addMethod( -unescape('_selector'), +unescape('_visitJSStatementNode_'), smalltalk.method({ -selector: unescape('selector'), -fn: function (){ +selector: unescape('visitJSStatementNode%3A'), +fn: function (aNode){ var self=this; -return self['@selector']; +smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(aNode, "_source", []), "_replace_with_", [unescape("%3E%3E"), unescape("%3E")])]); return self;} }), -smalltalk.MethodNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_selector_'), +unescape('_visitMethodNode_'), smalltalk.method({ -selector: unescape('selector%3A'), -fn: function (aString){ +selector: unescape('visitMethodNode%3A'), +fn: function (aNode){ var self=this; -(self['@selector']=aString); +var str=nil; +var currentSelector=nil; +(self['@currentSelector']=smalltalk.send(smalltalk.send(aNode, "_selector", []), "_asSelector", [])); +(self['@nestedBlocks']=(0)); +(self['@earlyReturn']=false); +(self['@messageSends']=[]); +(self['@referencedClasses']=[]); +(self['@unknownVariables']=[]); +(self['@tempVariables']=[]); +(self['@argVariables']=[]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20%22"), "__comma", [smalltalk.send(aNode, "_selector", [])]), "__comma", [unescape("%22%2C")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("source%3A%20unescape%28%22"), "__comma", [smalltalk.send(smalltalk.send(self, "_source", []), "_escaped", [])]), "__comma", [unescape("%22%29%2C")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("fn%3A%20function%28")]); +smalltalk.send(smalltalk.send(aNode, "_arguments", []), "_do_separatedBy_", [(function(each){smalltalk.send(self['@argVariables'], "_add_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%29%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("var%20self%3Dthis%3B")]);return smalltalk.send($rec, "_lf", []);})(self['@stream']); +(str=self['@stream']); +(self['@stream']=smalltalk.send("", "_writeStream", [])); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]); +((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(str, "_nextPutAll_", [unescape("try%7B")]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(str, "_nextPutAll_", [unescape("try%7B")]);})])); +smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self['@stream'], "_contents", [])]); +(self['@stream']=str); +(function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("return%20self%3B")]);})(self['@stream']); +((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%7D%20catch%28e%29%20%7Bif%28e.name%20%3D%3D%3D%20%27stReturn%27%20%26%26%20e.selector%20%3D%3D%3D%20"), "__comma", [smalltalk.send(self['@currentSelector'], "_printString", [])]), "__comma", [unescape("%29%7Breturn%20e.fn%28%29%7D%20throw%28e%29%7D")])]);})(self['@stream']);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%7D%20catch%28e%29%20%7Bif%28e.name%20%3D%3D%3D%20%27stReturn%27%20%26%26%20e.selector%20%3D%3D%3D%20"), "__comma", [smalltalk.send(self['@currentSelector'], "_printString", [])]), "__comma", [unescape("%29%7Breturn%20e.fn%28%29%7D%20throw%28e%29%7D")])]);})(self['@stream']);})])); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D")]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%2C"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", ["messageSends: "])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@messageSends'], "_asJavascript", []), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("args: ", "__comma", [smalltalk.send(self['@argVariables'], "_asJavascript", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("referencedClasses%3A%20%5B")]);})(self['@stream']); +smalltalk.send(self['@referencedClasses'], "_do_separatedBy_", [(function(each){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(each, "_printString", [])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D")]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29")]); return self;} }), -smalltalk.MethodNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_arguments'), +unescape('_visitReturnNode_'), smalltalk.method({ -selector: unescape('arguments'), -fn: function (){ +selector: unescape('visitReturnNode%3A'), +fn: function (aNode){ var self=this; -return (($receiver = self['@arguments']) == nil || $receiver == undefined) ? (function(){return [];})() : $receiver; +((($receiver = ((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver >(0) : smalltalk.send($receiver, "__gt", [(0)]))).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (self['@earlyReturn']=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (self['@earlyReturn']=true);})])); +((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%28function%28%29%7Bthrow%28")]);smalltalk.send($rec, "_nextPutAll_", [unescape("%7Bname%3A%20%27stReturn%27%2C%20selector%3A%20")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@currentSelector'], "_printString", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20fn%3A%20function%28%29%7Breturn%20")]);})(self['@stream']);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%28function%28%29%7Bthrow%28")]);smalltalk.send($rec, "_nextPutAll_", [unescape("%7Bname%3A%20%27stReturn%27%2C%20selector%3A%20")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@currentSelector'], "_printString", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20fn%3A%20function%28%29%7Breturn%20")]);})(self['@stream']);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})])); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]); +((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%7D%29%7D%29%28%29")]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%7D%29%7D%29%28%29")]);})])); return self;} }), -smalltalk.MethodNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_arguments_'), +unescape('_visitSendNode_'), smalltalk.method({ -selector: unescape('arguments%3A'), -fn: function (aCollection){ +selector: unescape('visitSendNode%3A'), +fn: function (aNode){ var self=this; -(self['@arguments']=aCollection); +var str=nil; +var receiver=nil; +var superSend=nil; +var inlined=nil; +(str=self['@stream']); +((($receiver = smalltalk.send(self['@messageSends'], "_includes_", [smalltalk.send(aNode, "_selector", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@messageSends'], "_add_", [smalltalk.send(aNode, "_selector", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@messageSends'], "_add_", [smalltalk.send(aNode, "_selector", [])]);})])); +(self['@stream']=smalltalk.send("", "_writeStream", [])); +smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]); +(superSend=smalltalk.send(smalltalk.send(self['@stream'], "_contents", []), "__eq", ["super"])); +(receiver=((($receiver = superSend).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "self";})() : (function(){return smalltalk.send(self['@stream'], "_contents", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "self";}), (function(){return smalltalk.send(self['@stream'], "_contents", []);})]))); +(self['@stream']=str); +((($receiver = smalltalk.send(self, "_performOptimizations", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inlineLiteral_receiverNode_argumentNodes_", [smalltalk.send(aNode, "_selector", []), smalltalk.send(aNode, "_receiver", []), smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})]));})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inlineLiteral_receiverNode_argumentNodes_", [smalltalk.send(aNode, "_selector", []), smalltalk.send(aNode, "_receiver", []), smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})]));}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})])); return self;} }), -smalltalk.MethodNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_source'), +unescape('_visitSequenceNode_'), smalltalk.method({ -selector: unescape('source'), -fn: function (){ +selector: unescape('visitSequenceNode%3A'), +fn: function (aNode){ var self=this; -return self['@source']; +smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil; +(temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);}), (function(){return smalltalk.send(self['@stream'], "_lf", []);})]); return self;} }), -smalltalk.MethodNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_source_'), +unescape('_visitValueNode_'), smalltalk.method({ -selector: unescape('source%3A'), -fn: function (aString){ +selector: unescape('visitValueNode%3A'), +fn: function (aNode){ var self=this; -(self['@source']=aString); +smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(aNode, "_value", []), "_asJavascript", [])]); return self;} }), -smalltalk.MethodNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_accept_'), +unescape('_visitVariableNode_'), smalltalk.method({ -selector: unescape('accept%3A'), -fn: function (aVisitor){ +selector: unescape('visitVariableNode%3A'), +fn: function (aNode){ var self=this; -smalltalk.send(aVisitor, "_visitMethodNode_", [self]); +var varName=nil; +((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_currentClass", []), "_allInstanceVariableNames", []), "_includes_", [smalltalk.send(aNode, "_value", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("self%5B%27@"), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%27%5D")])]);})() : (function(){(varName=smalltalk.send(self, "_safeVariableNameFor_", [smalltalk.send(aNode, "_value", [])]));return ((($receiver = smalltalk.send(smalltalk.send(self, "_knownVariables", []), "_includes_", [varName])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("self%5B%27@"), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%27%5D")])]);}), (function(){(varName=smalltalk.send(self, "_safeVariableNameFor_", [smalltalk.send(aNode, "_value", [])]));return ((($receiver = smalltalk.send(smalltalk.send(self, "_knownVariables", []), "_includes_", [varName])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})]));})])); return self;} }), -smalltalk.MethodNode); +smalltalk.Compiler); +smalltalk.Compiler.klass.iVarNames = ['performOptimizations']; +smalltalk.addMethod( +unescape('_performOptimizations'), +smalltalk.method({ +selector: unescape('performOptimizations'), +fn: function (){ +var self=this; +return (($receiver = self['@performOptimizations']) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver; +return self;} +}), +smalltalk.Compiler.klass); -smalltalk.addClass('StrippedExporter', smalltalk.Exporter, [], 'Compiler'); smalltalk.addMethod( -unescape('_exportDefinitionOf_on_'), +unescape('_performOptimizations_'), smalltalk.method({ -selector: unescape('exportDefinitionOf%3Aon%3A'), -fn: function (aClass, aStream){ +selector: unescape('performOptimizations%3A'), +fn: function (aBoolean){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addClass%28")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%27%2C%20")])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20%5B")]);})(aStream); -smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C%20")]);})]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%5D%2C%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(aClass, "_category", []), "__comma", [unescape("%27")])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);})(aStream); -smalltalk.send(aStream, "_lf", []); +(self['@performOptimizations']=aBoolean); return self;} }), -smalltalk.StrippedExporter); +smalltalk.Compiler.klass); smalltalk.addMethod( -unescape('_exportMethod_of_on_'), +unescape('_recompile_'), smalltalk.method({ -selector: unescape('exportMethod%3Aof%3Aon%3A'), -fn: function (aMethod, aClass, aStream){ +selector: unescape('recompile%3A'), +fn: function (aClass){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream); +smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_do_", [(function(each){var method=nil; +(method=smalltalk.send(smalltalk.send(self, "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), aClass]));smalltalk.send(method, "_category_", [smalltalk.send(each, "_category", [])]);return smalltalk.send(aClass, "_addCompiledMethod_", [method]);})]); +((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})])); return self;} }), -smalltalk.StrippedExporter); +smalltalk.Compiler.klass); +smalltalk.addMethod( +unescape('_recompileAll'), +smalltalk.method({ +selector: unescape('recompileAll'), +fn: function (){ +var self=this; +smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){return smalltalk.send(self, "_recompile_", [each]);})]); +return self;} +}), +smalltalk.Compiler.klass); diff --git a/amber/src/js/Compiler.js b/amber/src/js/Compiler.js index add94f1d653..7958604e834 100755 --- a/amber/src/js/Compiler.js +++ b/amber/src/js/Compiler.js @@ -1,550 +1,474 @@ smalltalk.addPackage('Compiler', {}); -smalltalk.addClass('NodeVisitor', smalltalk.Object, [], 'Compiler'); +smalltalk.addClass('ChunkParser', smalltalk.Object, ['stream'], 'Compiler'); smalltalk.addMethod( -unescape('_visit_'), +unescape('_nextChunk'), smalltalk.method({ -selector: unescape('visit%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('nextChunk'), +category: 'reading', +fn: function (){ var self=this; -smalltalk.send(aNode, "_accept_", [self]); -return self;}, -args: ["aNode"], -source: unescape('visit%3A%20aNode%0A%09aNode%20accept%3A%20self'), -messageSends: ["accept:"], +try{var char_=nil; +var result=nil; +var chunk=nil; +(result=smalltalk.send("", "_writeStream", [])); +(function(){while((function(){(char_=smalltalk.send(self['@stream'], "_next", []));return smalltalk.send(char_, "_notNil", []);})()) {(function(){((($receiver = smalltalk.send(char_, "__eq", [unescape("%21")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@stream'], "_peek", []), "__eq", [unescape("%21")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_next", []);})() : (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_next", []);}), (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@stream'], "_peek", []), "__eq", [unescape("%21")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_next", []);})() : (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_next", []);}), (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})]));})]));return smalltalk.send(result, "_nextPut_", [char_]);})()}})(); +(function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return nil}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_nextChunk'){return e.fn()} throw(e)}}, +args: [], +source: unescape('nextChunk%0A%09%22The%20chunk%20format%20%28Smalltalk%20Interchange%20Format%20or%20Fileout%20format%29%0A%09is%20a%20trivial%20format%20but%20can%20be%20a%20bit%20tricky%20to%20understand%3A%0A%09%09-%20Uses%20the%20exclamation%20mark%20as%20delimiter%20of%20chunks.%0A%09%09-%20Inside%20a%20chunk%20a%20normal%20exclamation%20mark%20must%20be%20doubled.%0A%09%09-%20A%20non%20empty%20chunk%20must%20be%20a%20valid%20Smalltalk%20expression.%0A%09%09-%20A%20chunk%20on%20top%20level%20with%20a%20preceding%20empty%20chunk%20is%20an%20instruction%20chunk%3A%0A%09%09%09-%20The%20object%20created%20by%20the%20expression%20then%20takes%20over%20reading%20chunks.%0A%0A%09This%20metod%20returns%20next%20chunk%20as%20a%20String%20%28trimmed%29%2C%20empty%20String%20%28all%20whitespace%29%20or%20nil.%22%0A%0A%09%7C%20char%20result%20chunk%20%7C%0A%09result%20%3A%3D%20%27%27%20writeStream.%0A%20%20%20%20%20%20%20%20%5Bchar%20%3A%3D%20stream%20next.%0A%20%20%20%20%20%20%20%20char%20notNil%5D%20whileTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20char%20%3D%20%27%21%27%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20peek%20%3D%20%27%21%27%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ifTrue%3A%20%5Bstream%20next%20%22skipping%20the%20escape%20double%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ifFalse%3A%20%5B%5Eresult%20contents%20trimBoth%20%20%22chunk%20end%20marker%20found%22%5D%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20nextPut%3A%20char%5D.%0A%09%5Enil%20%22a%20chunk%20needs%20to%20end%20with%20%21%22'), +messageSends: ["writeStream", "whileTrue:", "next", "notNil", "ifTrue:", unescape("%3D"), "ifTrue:ifFalse:", "peek", "trimBoth", "contents", "nextPut:"], referencedClasses: [] }), -smalltalk.NodeVisitor); +smalltalk.ChunkParser); smalltalk.addMethod( -unescape('_visitNode_'), +unescape('_stream_'), smalltalk.method({ -selector: unescape('visitNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('stream%3A'), +category: 'accessing', +fn: function (aStream){ var self=this; - +(self['@stream']=aStream); return self;}, -args: ["aNode"], -source: unescape('visitNode%3A%20aNode'), +args: ["aStream"], +source: unescape('stream%3A%20aStream%0A%09stream%20%3A%3D%20aStream'), messageSends: [], referencedClasses: [] }), -smalltalk.NodeVisitor); +smalltalk.ChunkParser); + smalltalk.addMethod( -unescape('_visitMethodNode_'), +unescape('_on_'), smalltalk.method({ -selector: unescape('visitMethodNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('on%3A'), +category: 'not yet classified', +fn: function (aStream){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +return smalltalk.send(smalltalk.send(self, "_new", []), "_stream_", [aStream]); return self;}, -args: ["aNode"], -source: unescape('visitMethodNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), -messageSends: ["visitNode:"], +args: ["aStream"], +source: unescape('on%3A%20aStream%0A%09%5Eself%20new%20stream%3A%20aStream'), +messageSends: ["stream:", "new"], referencedClasses: [] }), -smalltalk.NodeVisitor); +smalltalk.ChunkParser.klass); + +smalltalk.addClass('DoIt', smalltalk.Object, [], 'Compiler'); + + +smalltalk.addClass('Exporter', smalltalk.Object, [], 'Compiler'); smalltalk.addMethod( -unescape('_visitSequenceNode_'), +unescape('_classNameFor_'), smalltalk.method({ -selector: unescape('visitSequenceNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('classNameFor%3A'), +category: 'private', +fn: function (aClass){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +return ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);})() : (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);}), (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})])); return self;}, -args: ["aNode"], -source: unescape('visitSequenceNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), -messageSends: ["visitNode:"], +args: ["aClass"], +source: unescape('classNameFor%3A%20aClass%0A%09%5EaClass%20isMetaclass%0A%09%20%20%20%20ifTrue%3A%20%5BaClass%20instanceClass%20name%2C%20%27.klass%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5B%0A%09%09aClass%20isNil%0A%09%09%20%20%20%20ifTrue%3A%20%5B%27nil%27%5D%0A%09%09%20%20%20%20ifFalse%3A%20%5BaClass%20name%5D%5D'), +messageSends: ["ifTrue:ifFalse:", "isMetaclass", unescape("%2C"), "name", "instanceClass", "isNil"], referencedClasses: [] }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitBlockSequenceNode_'), +unescape('_exportAll'), smalltalk.method({ -selector: unescape('visitBlockSequenceNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('exportAll'), +category: 'fileOut', +fn: function (){ var self=this; -smalltalk.send(self, "_visitSequenceNode_", [aNode]); +return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){return smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_packages", []), "_do_", [(function(pkg){return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(self, "_exportPackage_", [smalltalk.send(pkg, "_name", [])])]);})]);})]); return self;}, -args: ["aNode"], -source: unescape('visitBlockSequenceNode%3A%20aNode%0A%09self%20visitSequenceNode%3A%20aNode'), -messageSends: ["visitSequenceNode:"], -referencedClasses: [] +args: [], +source: unescape('exportAll%0A%20%20%20%20%22Export%20all%20packages%20in%20the%20system.%22%0A%0A%20%20%20%20%5EString%20streamContents%3A%20%5B%3Astream%20%7C%0A%20%20%20%20%09Smalltalk%20current%20packages%20do%3A%20%5B%3Apkg%20%7C%0A%09%09stream%20nextPutAll%3A%20%28self%20exportPackage%3A%20pkg%20name%29%5D%5D'), +messageSends: ["streamContents:", "do:", "packages", "current", "nextPutAll:", "exportPackage:", "name"], +referencedClasses: ["String", "Smalltalk"] }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitBlockNode_'), +unescape('_exportClass_'), smalltalk.method({ -selector: unescape('visitBlockNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('exportClass%3A'), +category: 'fileOut', +fn: function (aClass){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){smalltalk.send(self, "_exportDefinitionOf_on_", [aClass, stream]);smalltalk.send(self, "_exportMethodsOf_on_", [aClass, stream]);smalltalk.send(self, "_exportMetaDefinitionOf_on_", [aClass, stream]);return smalltalk.send(self, "_exportMethodsOf_on_", [smalltalk.send(aClass, "_class", []), stream]);})]); return self;}, -args: ["aNode"], -source: unescape('visitBlockNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), -messageSends: ["visitNode:"], -referencedClasses: [] +args: ["aClass"], +source: unescape('exportClass%3A%20aClass%0A%09%22Export%20a%20single%20class.%20Subclasses%20override%20these%20methods.%22%0A%0A%09%5EString%20streamContents%3A%20%5B%3Astream%20%7C%0A%09%09self%20exportDefinitionOf%3A%20aClass%20on%3A%20stream.%0A%09%09self%20exportMethodsOf%3A%20aClass%20on%3A%20stream.%0A%09%09self%20exportMetaDefinitionOf%3A%20aClass%20on%3A%20stream.%0A%09%09self%20exportMethodsOf%3A%20aClass%20class%20on%3A%20stream%5D'), +messageSends: ["streamContents:", "exportDefinitionOf:on:", "exportMethodsOf:on:", "exportMetaDefinitionOf:on:", "class"], +referencedClasses: ["String"] }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitReturnNode_'), +unescape('_exportDefinitionOf_on_'), smalltalk.method({ -selector: unescape('visitReturnNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('exportDefinitionOf%3Aon%3A'), +category: 'private', +fn: function (aClass, aStream){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addClass%28")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%27%2C%20")])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20%5B")]);})(aStream); +smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C%20")]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%5D%2C%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(aClass, "_category", []), "__comma", [unescape("%27")])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);})(aStream); +((($receiver = smalltalk.send(smalltalk.send(aClass, "_comment", []), "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [aClass])]);smalltalk.send($rec, "_nextPutAll_", [unescape(".comment%3D")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aClass, "_comment", []), "_escaped", [])]), "__comma", [unescape("%27%29")])]);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [aClass])]);smalltalk.send($rec, "_nextPutAll_", [unescape(".comment%3D")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aClass, "_comment", []), "_escaped", [])]), "__comma", [unescape("%27%29")])]);})(aStream);})])); +smalltalk.send(aStream, "_lf", []); return self;}, -args: ["aNode"], -source: unescape('visitReturnNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), -messageSends: ["visitNode:"], +args: ["aClass", "aStream"], +source: unescape('exportDefinitionOf%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.addClass%28%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27%2C%20%28self%20classNameFor%3A%20aClass%29%2C%20%27%27%27%2C%20%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%20superclass%29%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%2C%20%5B%27.%0A%09aClass%20instanceVariableNames%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20aStream%20nextPutAll%3A%20%27%27%27%27%2C%20each%2C%20%27%27%27%27%5D%0A%09%20%20%20%20separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%09aStream%09%0A%09%20%20%20%20nextPutAll%3A%20%27%5D%2C%20%27%27%27%3B%0A%09%20%20%20%20nextPutAll%3A%20aClass%20category%2C%20%27%27%27%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%29%3B%27.%0A%09aClass%20comment%20notEmpty%20ifTrue%3A%20%5B%0A%09%20%20%20%20aStream%20%0A%09%20%20%20%20%09lf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.%27%3B%0A%09%09nextPutAll%3A%20%28self%20classNameFor%3A%20aClass%29%3B%0A%09%09nextPutAll%3A%20%27.comment%3D%27%3B%0A%09%09nextPutAll%3A%20%27unescape%28%27%27%27%2C%20aClass%20comment%20escaped%2C%20%27%27%27%29%27%5D.%0A%09aStream%20lf'), +messageSends: ["nextPutAll:", unescape("%2C"), "classNameFor:", "superclass", "do:separatedBy:", "instanceVariableNames", "category", "ifTrue:", "notEmpty", "comment", "lf", "escaped"], referencedClasses: [] }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitSendNode_'), +unescape('_exportMetaDefinitionOf_on_'), smalltalk.method({ -selector: unescape('visitSendNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('exportMetaDefinitionOf%3Aon%3A'), +category: 'private', +fn: function (aClass, aStream){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape(".iVarNames%20%3D%20%5B")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(unescape("%5D%3B"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape(".iVarNames%20%3D%20%5B")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(unescape("%5D%3B"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])])]);})])); return self;}, -args: ["aNode"], -source: unescape('visitSendNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), -messageSends: ["visitNode:"], -referencedClasses: [] +args: ["aClass", "aStream"], +source: unescape('exportMetaDefinitionOf%3A%20aClass%20on%3A%20aStream%0A%09aClass%20class%20instanceVariableNames%20isEmpty%20ifFalse%3A%20%5B%0A%09%20%20%20%20aStream%20%0A%09%09nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%20class%29%3B%0A%09%09nextPutAll%3A%20%27.iVarNames%20%3D%20%5B%27.%0A%09%20%20%20%20aClass%20class%20instanceVariableNames%0A%09%09do%3A%20%5B%3Aeach%20%7C%20aStream%20nextPutAll%3A%20%27%27%27%27%2C%20each%2C%20%27%27%27%27%5D%0A%09%09separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%2C%27%5D.%0A%09%20%20%20%20aStream%20nextPutAll%3A%20%27%5D%3B%27%2C%20String%20lf%5D'), +messageSends: ["ifFalse:", "isEmpty", "instanceVariableNames", "class", "nextPutAll:", unescape("%2C"), "classNameFor:", "do:separatedBy:", "lf"], +referencedClasses: ["String"] }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitCascadeNode_'), +unescape('_exportMethod_of_on_'), smalltalk.method({ -selector: unescape('visitCascadeNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('exportMethod%3Aof%3Aon%3A'), +category: 'private', +fn: function (aMethod, aClass, aStream){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("category%3A%20%27"), "__comma", [smalltalk.send(aMethod, "_category", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("args: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_arguments", []), "_asJavascript", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("source%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_source", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("messageSends: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_messageSends", []), "_asJavascript", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("referencedClasses: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_referencedClasses", []), "_asJavascript", [])])]);})(aStream); +(function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream); return self;}, -args: ["aNode"], -source: unescape('visitCascadeNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), -messageSends: ["visitNode:"], +args: ["aMethod", "aClass", "aStream"], +source: unescape('exportMethod%3A%20aMethod%20of%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%09nextPutAll%3A%20%27smalltalk.addMethod%28%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27unescape%28%27%27%27%2C%20aMethod%20selector%20asSelector%20escaped%2C%20%27%27%27%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.method%28%7B%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27selector%3A%20unescape%28%27%27%27%2C%20aMethod%20selector%20escaped%2C%20%27%27%27%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27category%3A%20%27%27%27%2C%20aMethod%20category%2C%20%27%27%27%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27fn%3A%20%27%2C%20aMethod%20fn%20compiledSource%2C%20%27%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27args%3A%20%27%2C%20aMethod%20arguments%20asJavascript%2C%20%27%2C%27%3B%20lf%3B%0A%09%09nextPutAll%3A%20%27source%3A%20unescape%28%27%27%27%2C%20aMethod%20source%20escaped%2C%20%27%27%27%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27messageSends%3A%20%27%2C%20aMethod%20messageSends%20asJavascript%2C%20%27%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27referencedClasses%3A%20%27%2C%20aMethod%20referencedClasses%20asJavascript.%0A%09aStream%0A%09%09lf%3B%0A%09%09nextPutAll%3A%20%27%7D%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%0A%09%09nextPutAll%3A%20%27%29%3B%27%3Blf%3Blf'), +messageSends: ["nextPutAll:", "lf", unescape("%2C"), "escaped", "asSelector", "selector", "category", "compiledSource", "fn", "asJavascript", "arguments", "source", "messageSends", "referencedClasses", "classNameFor:"], referencedClasses: [] }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitValueNode_'), +unescape('_exportMethodsOf_on_'), smalltalk.method({ -selector: unescape('visitValueNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('exportMethodsOf%3Aon%3A'), +category: 'private', +fn: function (aClass, aStream){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_sorted_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_selector", [])).klass === smalltalk.Number) ? $receiver <=smalltalk.send(b, "_selector", []) : smalltalk.send($receiver, "__lt_eq", [smalltalk.send(b, "_selector", [])]));})]), "_do_", [(function(each){return ((($receiver = smalltalk.send(smalltalk.send(each, "_category", []), "_match_", [unescape("%5E%5C*")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})]));})]); +smalltalk.send(aStream, "_lf", []); return self;}, -args: ["aNode"], -source: unescape('visitValueNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), -messageSends: ["visitNode:"], +args: ["aClass", "aStream"], +source: unescape('exportMethodsOf%3A%20aClass%20on%3A%20aStream%0A%09%22Issue%20%23143%3A%20sort%20methods%20alphabetically%22%0A%0A%09%28%28aClass%20methodDictionary%20values%29%20sorted%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20selector%20%3C%3D%20b%20selector%5D%29%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%28each%20category%20match%3A%20%27%5E%5C*%27%29%20ifFalse%3A%20%5B%0A%09%09%09self%20exportMethod%3A%20each%20of%3A%20aClass%20on%3A%20aStream%5D%5D.%0A%09aStream%20lf'), +messageSends: ["do:", "sorted:", "values", "methodDictionary", unescape("%3C%3D"), "selector", "ifFalse:", "match:", "category", "exportMethod:of:on:", "lf"], referencedClasses: [] }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitVariableNode_'), +unescape('_exportPackage_'), smalltalk.method({ -selector: unescape('visitVariableNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('exportPackage%3A'), +category: 'fileOut', +fn: function (packageName){ var self=this; - +var package=nil; +return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){(package=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_packageAt_", [packageName]));smalltalk.send(self, "_exportPackageDefinitionOf_on_", [package, stream]);smalltalk.send(smalltalk.send(package, "_sortedClasses", []), "_do_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(self, "_exportClass_", [each])]);})]);return smalltalk.send(self, "_exportPackageExtensionsOf_on_", [package, stream]);})]); return self;}, -args: ["aNode"], -source: unescape('visitVariableNode%3A%20aNode'), -messageSends: [], -referencedClasses: [] +args: ["packageName"], +source: unescape('exportPackage%3A%20packageName%0A%09%22Export%20a%20given%20package%20by%20name.%22%0A%0A%09%7C%20package%20%7C%0A%09%5EString%20streamContents%3A%20%5B%3Astream%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20package%20%3A%3D%20Smalltalk%20current%20packageAt%3A%20packageName.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20exportPackageDefinitionOf%3A%20package%20on%3A%20stream.%0A%09%09%22Export%20classes%20in%20dependency%20order%22%0A%09%20%20%20%20%09package%20sortedClasses%20do%3A%20%5B%3Aeach%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%28self%20exportClass%3A%20each%29%5D.%0A%09%09self%20exportPackageExtensionsOf%3A%20package%20on%3A%20stream%5D'), +messageSends: ["streamContents:", "packageAt:", "current", "exportPackageDefinitionOf:on:", "do:", "sortedClasses", "nextPutAll:", "exportClass:", "exportPackageExtensionsOf:on:"], +referencedClasses: ["String", "Smalltalk"] }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitAssignmentNode_'), +unescape('_exportPackageDefinitionOf_on_'), smalltalk.method({ -selector: unescape('visitAssignmentNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('exportPackageDefinitionOf%3Aon%3A'), +category: 'private', +fn: function (package, aStream){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addPackage%28")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(package, "_name", [])]), "__comma", [unescape("%27%2C%20")]), "__comma", [smalltalk.send(package, "_propertiesAsJSON", [])]), "__comma", [unescape("%29%3B")])]);})(aStream); +smalltalk.send(aStream, "_lf", []); return self;}, -args: ["aNode"], -source: unescape('visitAssignmentNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), -messageSends: ["visitNode:"], +args: ["package", "aStream"], +source: unescape('exportPackageDefinitionOf%3A%20package%20on%3A%20aStream%0A%09aStream%20%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.addPackage%28%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27%2C%20package%20name%2C%20%27%27%27%2C%20%27%2C%20package%20propertiesAsJSON%20%2C%20%27%29%3B%27.%0A%09aStream%20lf'), +messageSends: ["nextPutAll:", unescape("%2C"), "name", "propertiesAsJSON", "lf"], referencedClasses: [] }), -smalltalk.NodeVisitor); +smalltalk.Exporter); smalltalk.addMethod( -unescape('_visitClassReferenceNode_'), +unescape('_exportPackageExtensionsOf_on_'), smalltalk.method({ -selector: unescape('visitClassReferenceNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('exportPackageExtensionsOf%3Aon%3A'), +category: 'private', +fn: function (package, aStream){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(aNode, "_value", [])]);})(self); +var name=nil; +(name=smalltalk.send(package, "_name", [])); +smalltalk.send(smalltalk.send((smalltalk.Package || Package), "_sortedClasses_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", [])]), "_do_", [(function(each){return smalltalk.send([each,smalltalk.send(each, "_class", [])], "_do_", [(function(aClass){return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_sorted_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_selector", [])).klass === smalltalk.Number) ? $receiver <=smalltalk.send(b, "_selector", []) : smalltalk.send($receiver, "__lt_eq", [smalltalk.send(b, "_selector", [])]));})]), "_do_", [(function(method){return ((($receiver = smalltalk.send(smalltalk.send(method, "_category", []), "_match_", [smalltalk.send(unescape("%5E%5C*"), "__comma", [name])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_exportMethod_of_on_", [method, each, aStream]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self, "_exportMethod_of_on_", [method, each, aStream]);})]));})]);})]);})]); return self;}, -args: ["aNode"], -source: unescape('visitClassReferenceNode%3A%20aNode%0A%09self%20%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.%27%3B%0A%09%20%20%20%20nextPutAll%3A%20aNode%20value'), -messageSends: ["nextPutAll:", "value"], -referencedClasses: [] +args: ["package", "aStream"], +source: unescape('exportPackageExtensionsOf%3A%20package%20on%3A%20aStream%0A%09%22Issue%20%23143%3A%20sort%20classes%20and%20methods%20alphabetically%22%0A%0A%09%7C%20name%20%7C%0A%09name%20%3A%3D%20package%20name.%0A%09%28Package%20sortedClasses%3A%20Smalltalk%20current%20classes%29%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%7Beach.%20each%20class%7D%20do%3A%20%5B%3AaClass%20%7C%20%0A%09%09%09%28%28aClass%20methodDictionary%20values%29%20sorted%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20selector%20%3C%3D%20b%20selector%5D%29%20do%3A%20%5B%3Amethod%20%7C%0A%09%09%09%09%28method%20category%20match%3A%20%27%5E%5C*%27%2C%20name%29%20ifTrue%3A%20%5B%0A%09%09%09%09%09self%20exportMethod%3A%20method%20of%3A%20each%20on%3A%20aStream%20%5D%5D%5D%5D%0A'), +messageSends: ["name", "do:", "sortedClasses:", "classes", "current", "class", "sorted:", "values", "methodDictionary", unescape("%3C%3D"), "selector", "ifTrue:", "match:", "category", unescape("%2C"), "exportMethod:of:on:"], +referencedClasses: ["Package", "Smalltalk"] }), -smalltalk.NodeVisitor); +smalltalk.Exporter); -smalltalk.addMethod( -unescape('_visitJSStatementNode_'), -smalltalk.method({ -selector: unescape('visitJSStatementNode%3A'), -category: 'visiting', -fn: function (aNode){ -var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("function%28%29%7B")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(aNode, "_source", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%28%29")]);})(self); -return self;}, -args: ["aNode"], -source: unescape('visitJSStatementNode%3A%20aNode%0A%09self%20%0A%09%20%20%20%20nextPutAll%3A%20%27function%28%29%7B%27%3B%0A%09%20%20%20%20nextPutAll%3A%20aNode%20source%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%7D%29%28%29%27'), -messageSends: ["nextPutAll:", "source"], -referencedClasses: [] -}), -smalltalk.NodeVisitor); -smalltalk.addMethod( -unescape('_visitDynamicArrayNode_'), -smalltalk.method({ -selector: unescape('visitDynamicArrayNode%3A'), -category: 'visiting', -fn: function (aNode){ -var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); -return self;}, -args: ["aNode"], -source: unescape('visitDynamicArrayNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), -messageSends: ["visitNode:"], -referencedClasses: [] -}), -smalltalk.NodeVisitor); +smalltalk.addClass('ChunkExporter', smalltalk.Exporter, [], 'Compiler'); smalltalk.addMethod( -unescape('_visitDynamicDictionaryNode_'), +unescape('_chunkEscape_'), smalltalk.method({ -selector: unescape('visitDynamicDictionaryNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('chunkEscape%3A'), +category: 'not yet classified', +fn: function (aString){ var self=this; -smalltalk.send(self, "_visitNode_", [aNode]); +return smalltalk.send(smalltalk.send(aString, "_replace_with_", [unescape("%21"), unescape("%21%21")]), "_trimBoth", []); return self;}, -args: ["aNode"], -source: unescape('visitDynamicDictionaryNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), -messageSends: ["visitNode:"], +args: ["aString"], +source: unescape('chunkEscape%3A%20aString%0A%09%22Replace%20all%20occurrences%20of%20%21%20with%20%21%21%20and%20trim%20at%20both%20ends.%22%0A%0A%09%5E%28aString%20replace%3A%20%27%21%27%20with%3A%20%27%21%21%27%29%20trimBoth'), +messageSends: ["trimBoth", "replace:with:"], referencedClasses: [] }), -smalltalk.NodeVisitor); - - - -smalltalk.addClass('DoIt', smalltalk.Object, [], 'Compiler'); - +smalltalk.ChunkExporter); -smalltalk.addClass('Importer', smalltalk.Object, [], 'Compiler'); smalltalk.addMethod( -unescape('_import_'), +unescape('_classNameFor_'), smalltalk.method({ -selector: unescape('import%3A'), -category: 'fileIn', -fn: function (aStream){ +selector: unescape('classNameFor%3A'), +category: 'not yet classified', +fn: function (aClass){ var self=this; -var chunk=nil; -var result=nil; -var parser=nil; -var lastEmpty=nil; -(parser=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_on_", [aStream])); -(lastEmpty=false); -(function(){while(!(function(){(chunk=smalltalk.send(parser, "_nextChunk", []));return smalltalk.send(chunk, "_isNil", []);})()) {(function(){return ((($receiver = smalltalk.send(chunk, "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (lastEmpty=true);})() : (function(){(result=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_loadExpression_", [chunk]));return ((($receiver = lastEmpty).klass === smalltalk.Boolean) ? ($receiver ? (function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (lastEmpty=true);}), (function(){(result=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_loadExpression_", [chunk]));return ((($receiver = lastEmpty).klass === smalltalk.Boolean) ? ($receiver ? (function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})]));})]));})()}})(); +return ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [" class"]);})() : (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [" class"]);}), (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})])); return self;}, -args: ["aStream"], -source: unescape('import%3A%20aStream%0A%20%20%20%20%7C%20chunk%20result%20parser%20lastEmpty%20%7C%0A%20%20%20%20parser%20%3A%3D%20ChunkParser%20on%3A%20aStream.%0A%20%20%20%20lastEmpty%20%3A%3D%20false.%0A%20%20%20%20%5Bchunk%20%3A%3D%20parser%20nextChunk.%0A%20%20%20%20%20chunk%20isNil%5D%20whileFalse%3A%20%5B%0A%20%20%20%20%20%20%20%20chunk%20isEmpty%0A%20%20%20%20%20%20%20%09%09ifTrue%3A%20%5BlastEmpty%20%3A%3D%20true%5D%0A%20%20%20%20%20%20%20%09%09ifFalse%3A%20%5B%0A%20%20%20%20%20%20%20%20%09%09result%20%3A%3D%20Compiler%20new%20loadExpression%3A%20chunk.%0A%20%20%20%20%20%20%20%20%09%09lastEmpty%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09lastEmpty%20%3A%3D%20false.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09result%20scanFrom%3A%20parser%5D%5D%5D'), -messageSends: ["on:", "whileFalse:", "nextChunk", "isNil", "ifTrue:ifFalse:", "isEmpty", "loadExpression:", "new", "ifTrue:", "scanFrom:"], -referencedClasses: ["ChunkParser", "Compiler"] +args: ["aClass"], +source: unescape('classNameFor%3A%20aClass%0A%09%5EaClass%20isMetaclass%0A%09%20%20%20%20ifTrue%3A%20%5BaClass%20instanceClass%20name%2C%20%27%20class%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5B%0A%09%09aClass%20isNil%0A%09%09%20%20%20%20ifTrue%3A%20%5B%27nil%27%5D%0A%09%09%20%20%20%20ifFalse%3A%20%5BaClass%20name%5D%5D'), +messageSends: ["ifTrue:ifFalse:", "isMetaclass", unescape("%2C"), "name", "instanceClass", "isNil"], +referencedClasses: [] }), -smalltalk.Importer); - - +smalltalk.ChunkExporter); -smalltalk.addClass('Exporter', smalltalk.Object, [], 'Compiler'); smalltalk.addMethod( unescape('_exportDefinitionOf_on_'), smalltalk.method({ selector: unescape('exportDefinitionOf%3Aon%3A'), -category: 'private', +category: 'not yet classified', fn: function (aClass, aStream){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addClass%28")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%27%2C%20")])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20%5B")]);})(aStream); -smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C%20")]);})]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%5D%2C%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(aClass, "_category", []), "__comma", [unescape("%27")])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);})(aStream); -((($receiver = smalltalk.send(smalltalk.send(aClass, "_comment", []), "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [aClass])]);smalltalk.send($rec, "_nextPutAll_", [unescape(".comment%3D")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aClass, "_comment", []), "_escaped", [])]), "__comma", [unescape("%27%29")])]);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [aClass])]);smalltalk.send($rec, "_nextPutAll_", [unescape(".comment%3D")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aClass, "_comment", []), "_escaped", [])]), "__comma", [unescape("%27%29")])]);})(aStream);})])); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("%20subclass%3A%20%23"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("%09instanceVariableNames%3A%20%27")]);})(aStream); +smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%09package%3A%20%27"), "__comma", [smalltalk.send(aClass, "_category", [])]), "__comma", [unescape("%27%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream); +((($receiver = smalltalk.send(smalltalk.send(aClass, "_comment", []), "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})])); smalltalk.send(aStream, "_lf", []); return self;}, args: ["aClass", "aStream"], -source: unescape('exportDefinitionOf%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.addClass%28%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27%2C%20%28self%20classNameFor%3A%20aClass%29%2C%20%27%27%27%2C%20%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%20superclass%29%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%2C%20%5B%27.%0A%09aClass%20instanceVariableNames%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20aStream%20nextPutAll%3A%20%27%27%27%27%2C%20each%2C%20%27%27%27%27%5D%0A%09%20%20%20%20separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%09aStream%09%0A%09%20%20%20%20nextPutAll%3A%20%27%5D%2C%20%27%27%27%3B%0A%09%20%20%20%20nextPutAll%3A%20aClass%20category%2C%20%27%27%27%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%29%3B%27.%0A%09aClass%20comment%20notEmpty%20ifTrue%3A%20%5B%0A%09%20%20%20%20aStream%20%0A%09%20%20%20%20%09lf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.%27%3B%0A%09%09nextPutAll%3A%20%28self%20classNameFor%3A%20aClass%29%3B%0A%09%09nextPutAll%3A%20%27.comment%3D%27%3B%0A%09%09nextPutAll%3A%20%27unescape%28%27%27%27%2C%20aClass%20comment%20escaped%2C%20%27%27%27%29%27%5D.%0A%09aStream%20lf'), -messageSends: ["nextPutAll:", unescape("%2C"), "classNameFor:", "superclass", "do:separatedBy:", "instanceVariableNames", "category", "ifTrue:", "notEmpty", "comment", "lf", "escaped"], +source: unescape('exportDefinitionOf%3A%20aClass%20on%3A%20aStream%0A%20%20%20%20%22Chunk%20format.%22%0A%0A%20%20%20%20aStream%20%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%28self%20classNameFor%3A%20aClass%20superclass%29%3B%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%27%20subclass%3A%20%23%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%20lf%3B%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%27%09instanceVariableNames%3A%20%27%27%27.%0A%20%20%20%20aClass%20instanceVariableNames%20%0A%20%20%20%20%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20aStream%20nextPutAll%3A%20each%5D%0A%20%20%20%20%20%20%20%20separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%20%27%5D.%0A%20%20%20%20aStream%20%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%27%27%27%27%3B%20lf%3B%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%27%09package%3A%20%27%27%27%2C%20aClass%20category%2C%20%27%27%27%21%27%3B%20lf.%0A%20%20%20%20aClass%20comment%20notEmpty%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20aStream%20%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%27%21%27%2C%20%28self%20classNameFor%3A%20aClass%29%2C%20%27%20commentStamp%21%27%3Blf%3B%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%28self%20chunkEscape%3A%20aClass%20comment%29%2C%20%27%21%27%3Blf%5D.%0A%20%20%20%20aStream%20lf'), +messageSends: ["nextPutAll:", "classNameFor:", "superclass", unescape("%2C"), "lf", "do:separatedBy:", "instanceVariableNames", "category", "ifTrue:", "notEmpty", "comment", "chunkEscape:"], referencedClasses: [] }), -smalltalk.Exporter); +smalltalk.ChunkExporter); smalltalk.addMethod( unescape('_exportMetaDefinitionOf_on_'), smalltalk.method({ selector: unescape('exportMetaDefinitionOf%3Aon%3A'), -category: 'private', -fn: function (aClass, aStream){ -var self=this; -((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape(".iVarNames%20%3D%20%5B")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(unescape("%5D%3B"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape(".iVarNames%20%3D%20%5B")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(unescape("%5D%3B"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])])]);})])); -return self;}, -args: ["aClass", "aStream"], -source: unescape('exportMetaDefinitionOf%3A%20aClass%20on%3A%20aStream%0A%09aClass%20class%20instanceVariableNames%20isEmpty%20ifFalse%3A%20%5B%0A%09%20%20%20%20aStream%20%0A%09%09nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%20class%29%3B%0A%09%09nextPutAll%3A%20%27.iVarNames%20%3D%20%5B%27.%0A%09%20%20%20%20aClass%20class%20instanceVariableNames%0A%09%09do%3A%20%5B%3Aeach%20%7C%20aStream%20nextPutAll%3A%20%27%27%27%27%2C%20each%2C%20%27%27%27%27%5D%0A%09%09separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%2C%27%5D.%0A%09%20%20%20%20aStream%20nextPutAll%3A%20%27%5D%3B%27%2C%20String%20lf%5D'), -messageSends: ["ifFalse:", "isEmpty", "instanceVariableNames", "class", "nextPutAll:", unescape("%2C"), "classNameFor:", "do:separatedBy:", "lf"], -referencedClasses: ["String"] -}), -smalltalk.Exporter); - -smalltalk.addMethod( -unescape('_exportMethodsOf_on_'), -smalltalk.method({ -selector: unescape('exportMethodsOf%3Aon%3A'), -category: 'private', +category: 'not yet classified', fn: function (aClass, aStream){ var self=this; -smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(smalltalk.send(each, "_category", []), "_match_", [unescape("%5E%5C*")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})]));})]); -smalltalk.send(aStream, "_lf", []); +((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%20instanceVariableNames%3A%20%27")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%20instanceVariableNames%3A%20%27")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);})])); return self;}, args: ["aClass", "aStream"], -source: unescape('exportMethodsOf%3A%20aClass%20on%3A%20aStream%0A%09aClass%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%28each%20category%20match%3A%20%27%5E%5C*%27%29%20ifFalse%3A%20%5B%0A%09%09%09self%20exportMethod%3A%20each%20of%3A%20aClass%20on%3A%20aStream%5D%5D.%0A%09aStream%20lf'), -messageSends: ["do:", "values", "methodDictionary", "ifFalse:", "match:", "category", "exportMethod:of:on:", "lf"], -referencedClasses: [] -}), -smalltalk.Exporter); - -smalltalk.addMethod( -unescape('_classNameFor_'), -smalltalk.method({ -selector: unescape('classNameFor%3A'), -category: 'private', -fn: function (aClass){ -var self=this; -return ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);})() : (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);}), (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})])); -return self;}, -args: ["aClass"], -source: unescape('classNameFor%3A%20aClass%0A%09%5EaClass%20isMetaclass%0A%09%20%20%20%20ifTrue%3A%20%5BaClass%20instanceClass%20name%2C%20%27.klass%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5B%0A%09%09aClass%20isNil%0A%09%09%20%20%20%20ifTrue%3A%20%5B%27nil%27%5D%0A%09%09%20%20%20%20ifFalse%3A%20%5BaClass%20name%5D%5D'), -messageSends: ["ifTrue:ifFalse:", "isMetaclass", unescape("%2C"), "name", "instanceClass", "isNil"], +source: unescape('exportMetaDefinitionOf%3A%20aClass%20on%3A%20aStream%0A%0A%09aClass%20class%20instanceVariableNames%20isEmpty%20ifFalse%3A%20%5B%0A%09%09aStream%20%0A%09%09%20%20%20%20nextPutAll%3A%20%28self%20classNameFor%3A%20aClass%20class%29%3B%0A%09%09%20%20%20%20nextPutAll%3A%20%27%20instanceVariableNames%3A%20%27%27%27.%0A%09%09aClass%20class%20instanceVariableNames%20%0A%09%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20aStream%20nextPutAll%3A%20each%5D%0A%09%09%20%20%20%20separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%20%27%5D.%0A%09%09aStream%09%0A%09%09%20%20%20%20nextPutAll%3A%20%27%27%27%21%27%3B%20lf%3B%20lf%5D'), +messageSends: ["ifFalse:", "isEmpty", "instanceVariableNames", "class", "nextPutAll:", "classNameFor:", "do:separatedBy:", "lf"], referencedClasses: [] }), -smalltalk.Exporter); +smalltalk.ChunkExporter); smalltalk.addMethod( unescape('_exportMethod_of_on_'), smalltalk.method({ selector: unescape('exportMethod%3Aof%3Aon%3A'), -category: 'private', +category: 'not yet classified', fn: function (aMethod, aClass, aStream){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("category%3A%20%27"), "__comma", [smalltalk.send(aMethod, "_category", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("args: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_arguments", []), "_asJavascript", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("source%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_source", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("messageSends: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_messageSends", []), "_asJavascript", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("referencedClasses: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_referencedClasses", []), "_asJavascript", [])])]);})(aStream); -(function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream); +(function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aMethod, "_source", [])])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("%21")]);})(aStream); return self;}, args: ["aMethod", "aClass", "aStream"], -source: unescape('exportMethod%3A%20aMethod%20of%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%09nextPutAll%3A%20%27smalltalk.addMethod%28%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27unescape%28%27%27%27%2C%20aMethod%20selector%20asSelector%20escaped%2C%20%27%27%27%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.method%28%7B%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27selector%3A%20unescape%28%27%27%27%2C%20aMethod%20selector%20escaped%2C%20%27%27%27%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27category%3A%20%27%27%27%2C%20aMethod%20category%2C%20%27%27%27%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27fn%3A%20%27%2C%20aMethod%20fn%20compiledSource%2C%20%27%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27args%3A%20%27%2C%20aMethod%20arguments%20asJavascript%2C%20%27%2C%27%3B%20lf%3B%0A%09%09nextPutAll%3A%20%27source%3A%20unescape%28%27%27%27%2C%20aMethod%20source%20escaped%2C%20%27%27%27%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27messageSends%3A%20%27%2C%20aMethod%20messageSends%20asJavascript%2C%20%27%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27referencedClasses%3A%20%27%2C%20aMethod%20referencedClasses%20asJavascript.%0A%09aStream%0A%09%09lf%3B%0A%09%09nextPutAll%3A%20%27%7D%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%0A%09%09nextPutAll%3A%20%27%29%3B%27%3Blf%3Blf'), -messageSends: ["nextPutAll:", "lf", unescape("%2C"), "escaped", "asSelector", "selector", "category", "compiledSource", "fn", "asJavascript", "arguments", "source", "messageSends", "referencedClasses", "classNameFor:"], +source: unescape('exportMethod%3A%20aMethod%20of%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%09lf%3B%20lf%3B%20nextPutAll%3A%20%28self%20chunkEscape%3A%20aMethod%20source%29%3B%20lf%3B%0A%09%09nextPutAll%3A%20%27%21%27'), +messageSends: ["lf", "nextPutAll:", "chunkEscape:", "source"], referencedClasses: [] }), -smalltalk.Exporter); +smalltalk.ChunkExporter); smalltalk.addMethod( -unescape('_exportPackage_'), +unescape('_exportMethods_category_of_on_'), smalltalk.method({ -selector: unescape('exportPackage%3A'), -category: 'fileOut', -fn: function (packageName){ +selector: unescape('exportMethods%3Acategory%3Aof%3Aon%3A'), +category: 'not yet classified', +fn: function (methods, category, aClass, aStream){ var self=this; -var package=nil; -return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){(package=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_packageAt_", [packageName]));smalltalk.send(self, "_exportPackageDefinitionOf_on_", [package, stream]);smalltalk.send(smalltalk.send(package, "_sortedClasses", []), "_do_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(self, "_exportClass_", [each])]);})]);return smalltalk.send(self, "_exportPackageExtensionsOf_on_", [package, stream]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%20methodsFor%3A%20%27"), "__comma", [category]), "__comma", [unescape("%27%21")])]);})(aStream); +smalltalk.send(smalltalk.send(methods, "_sorted_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_selector", [])).klass === smalltalk.Number) ? $receiver <=smalltalk.send(b, "_selector", []) : smalltalk.send($receiver, "__lt_eq", [smalltalk.send(b, "_selector", [])]));})]), "_do_", [(function(each){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%20%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream); return self;}, -args: ["packageName"], -source: unescape('exportPackage%3A%20packageName%0A%09%22Export%20a%20given%20package%20by%20name.%22%0A%0A%09%7C%20package%20%7C%0A%09%5EString%20streamContents%3A%20%5B%3Astream%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20package%20%3A%3D%20Smalltalk%20current%20packageAt%3A%20packageName.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20exportPackageDefinitionOf%3A%20package%20on%3A%20stream.%0A%09%09%22Export%20classes%20in%20dependency%20order%22%0A%09%20%20%20%20%09package%20sortedClasses%20do%3A%20%5B%3Aeach%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%28self%20exportClass%3A%20each%29%5D.%0A%09%09self%20exportPackageExtensionsOf%3A%20package%20on%3A%20stream%5D'), -messageSends: ["streamContents:", "packageAt:", "current", "exportPackageDefinitionOf:on:", "do:", "sortedClasses", "nextPutAll:", "exportClass:", "exportPackageExtensionsOf:on:"], -referencedClasses: ["String", "Smalltalk"] +args: ["methods", "category", "aClass", "aStream"], +source: unescape('exportMethods%3A%20methods%20category%3A%20category%20of%3A%20aClass%20on%3A%20aStream%0A%09%22Issue%20%23143%3A%20sort%20methods%20alphabetically%22%0A%0A%09aStream%0A%09%09nextPutAll%3A%20%27%21%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%0A%09%09nextPutAll%3A%20%27%20methodsFor%3A%20%27%27%27%2C%20category%2C%20%27%27%27%21%27.%0A%09%09%28methods%20sorted%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20selector%20%3C%3D%20b%20selector%5D%29%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%09%09self%20exportMethod%3A%20each%20of%3A%20aClass%20on%3A%20aStream%5D.%0A%09aStream%20nextPutAll%3A%20%27%20%21%27%3B%20lf%3B%20lf'), +messageSends: ["nextPutAll:", unescape("%2C"), "classNameFor:", "do:", "sorted:", unescape("%3C%3D"), "selector", "exportMethod:of:on:", "lf"], +referencedClasses: [] }), -smalltalk.Exporter); +smalltalk.ChunkExporter); smalltalk.addMethod( -unescape('_exportAll'), +unescape('_exportMethodsOf_on_'), smalltalk.method({ -selector: unescape('exportAll'), -category: 'fileOut', -fn: function (){ +selector: unescape('exportMethodsOf%3Aon%3A'), +category: 'not yet classified', +fn: function (aClass, aStream){ var self=this; -return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){return smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_packages", []), "_do_", [(function(pkg){return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(self, "_exportPackage_", [smalltalk.send(pkg, "_name", [])])]);})]);})]); +var map=nil; +(map=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); +smalltalk.send(aClass, "_protocolsDo_", [(function(category, methods){return ((($receiver = smalltalk.send(category, "_match_", [unescape("%5E%5C*")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(map, "_at_put_", [category, methods]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(map, "_at_put_", [category, methods]);})]));})]); +smalltalk.send(smalltalk.send(smalltalk.send(map, "_keys", []), "_sorted_", [(function(a, b){return ((($receiver = a).klass === smalltalk.Number) ? $receiver <=b : smalltalk.send($receiver, "__lt_eq", [b]));})]), "_do_", [(function(category){var methods=nil; +(methods=smalltalk.send(map, "_at_", [category]));return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, aClass, aStream]);})]); return self;}, -args: [], -source: unescape('exportAll%0A%20%20%20%20%22Export%20all%20packages%20in%20the%20system.%22%0A%0A%20%20%20%20%5EString%20streamContents%3A%20%5B%3Astream%20%7C%0A%20%20%20%20%09Smalltalk%20current%20packages%20do%3A%20%5B%3Apkg%20%7C%0A%09%09stream%20nextPutAll%3A%20%28self%20exportPackage%3A%20pkg%20name%29%5D%5D'), -messageSends: ["streamContents:", "do:", "packages", "current", "nextPutAll:", "exportPackage:", "name"], -referencedClasses: ["String", "Smalltalk"] +args: ["aClass", "aStream"], +source: unescape('exportMethodsOf%3A%20aClass%20on%3A%20aStream%0A%09%22Issue%20%23143%3A%20sort%20protocol%20alphabetically%22%0A%0A%09%7C%20map%20%7C%0A%09map%20%3A%3D%20Dictionary%20new.%0A%09aClass%20protocolsDo%3A%20%5B%3Acategory%20%3Amethods%20%7C%20%0A%09%09%28category%20match%3A%20%27%5E%5C*%27%29%20ifFalse%3A%20%5B%20map%20at%3A%20category%20put%3A%20methods%20%5D%5D.%0A%09%28map%20keys%20sorted%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20%3C%3D%20b%20%5D%29%20do%3A%20%5B%3Acategory%20%7C%20%7C%20methods%20%7C%0A%09%09methods%20%3A%3D%20map%20at%3A%20category.%0A%09%09self%0A%09%09%09exportMethods%3A%20methods%0A%09%09%09category%3A%20category%0A%09%09%09of%3A%20aClass%0A%09%09%09on%3A%20aStream%20%5D'), +messageSends: ["new", "protocolsDo:", "ifFalse:", "match:", "at:put:", "do:", "sorted:", "keys", unescape("%3C%3D"), "at:", "exportMethods:category:of:on:"], +referencedClasses: ["Dictionary"] }), -smalltalk.Exporter); +smalltalk.ChunkExporter); smalltalk.addMethod( -unescape('_exportClass_'), +unescape('_exportPackageDefinitionOf_on_'), smalltalk.method({ -selector: unescape('exportClass%3A'), -category: 'fileOut', -fn: function (aClass){ +selector: unescape('exportPackageDefinitionOf%3Aon%3A'), +category: 'not yet classified', +fn: function (package, aStream){ var self=this; -return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){smalltalk.send(self, "_exportDefinitionOf_on_", [aClass, stream]);smalltalk.send(self, "_exportMethodsOf_on_", [aClass, stream]);smalltalk.send(self, "_exportMetaDefinitionOf_on_", [aClass, stream]);return smalltalk.send(self, "_exportMethodsOf_on_", [smalltalk.send(aClass, "_class", []), stream]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("Smalltalk%20current%20createPackage%3A%20%27"), "__comma", [smalltalk.send(package, "_name", [])]), "__comma", [unescape("%27%20properties%3A%20")]), "__comma", [smalltalk.send(smalltalk.send(package, "_properties", []), "_storeString", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream); return self;}, -args: ["aClass"], -source: unescape('exportClass%3A%20aClass%0A%09%22Export%20a%20single%20class.%20Subclasses%20override%20these%20methods.%22%0A%0A%09%5EString%20streamContents%3A%20%5B%3Astream%20%7C%0A%09%09self%20exportDefinitionOf%3A%20aClass%20on%3A%20stream.%0A%09%09self%20exportMethodsOf%3A%20aClass%20on%3A%20stream.%0A%09%09self%20exportMetaDefinitionOf%3A%20aClass%20on%3A%20stream.%0A%09%09self%20exportMethodsOf%3A%20aClass%20class%20on%3A%20stream%5D'), -messageSends: ["streamContents:", "exportDefinitionOf:on:", "exportMethodsOf:on:", "exportMetaDefinitionOf:on:", "class"], -referencedClasses: ["String"] +args: ["package", "aStream"], +source: unescape('exportPackageDefinitionOf%3A%20package%20on%3A%20aStream%0A%09%22Chunk%20format.%22%0A%0A%09aStream%20%0A%09%20%20%20%20nextPutAll%3A%20%27Smalltalk%20current%20createPackage%3A%20%27%27%27%2C%20package%20name%2C%0A%09%09%27%27%27%20properties%3A%20%27%2C%20package%20properties%20storeString%2C%20%27%21%27%3B%20lf.'), +messageSends: ["nextPutAll:", unescape("%2C"), "name", "storeString", "properties", "lf"], +referencedClasses: [] }), -smalltalk.Exporter); +smalltalk.ChunkExporter); smalltalk.addMethod( unescape('_exportPackageExtensionsOf_on_'), smalltalk.method({ selector: unescape('exportPackageExtensionsOf%3Aon%3A'), -category: 'private', +category: 'not yet classified', fn: function (package, aStream){ var self=this; var name=nil; +var map=nil; (name=smalltalk.send(package, "_name", [])); -smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_collect_", [(function(each){return smalltalk.send(each, "_class", []);})])]), "_do_", [(function(each){return smalltalk.send(smalltalk.send(smalltalk.send(each, "_methodDictionary", []), "_values", []), "_do_", [(function(method){return ((($receiver = smalltalk.send(smalltalk.send(method, "_category", []), "__eq", [smalltalk.send(unescape("*"), "__comma", [name])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_exportMethod_of_on_", [method, each, aStream]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self, "_exportMethod_of_on_", [method, each, aStream]);})]));})]);})]); +smalltalk.send(smalltalk.send((smalltalk.Package || Package), "_sortedClasses_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", [])]), "_do_", [(function(each){return smalltalk.send([each,smalltalk.send(each, "_class", [])], "_do_", [(function(aClass){(map=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []));smalltalk.send(aClass, "_protocolsDo_", [(function(category, methods){return ((($receiver = smalltalk.send(category, "_match_", [smalltalk.send(unescape("%5E%5C*"), "__comma", [name])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(map, "_at_put_", [category, methods]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(map, "_at_put_", [category, methods]);})]));})]);return smalltalk.send(smalltalk.send(smalltalk.send(map, "_keys", []), "_sorted_", [(function(a, b){return ((($receiver = a).klass === smalltalk.Number) ? $receiver <=b : smalltalk.send($receiver, "__lt_eq", [b]));})]), "_do_", [(function(category){var methods=nil; +(methods=smalltalk.send(map, "_at_", [category]));return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, each, aStream]);})]);})]);})]); return self;}, args: ["package", "aStream"], -source: unescape('exportPackageExtensionsOf%3A%20package%20on%3A%20aStream%0A%09%7C%20name%20%7C%0A%09name%20%3A%3D%20package%20name.%0A%09Smalltalk%20current%20classes%2C%20%28Smalltalk%20current%20classes%20collect%3A%20%5B%3Aeach%20%7C%20each%20class%5D%29%20do%3A%20%5B%3Aeach%20%7C%0A%09%09each%20methodDictionary%20values%20do%3A%20%5B%3Amethod%20%7C%0A%09%09%09method%20category%20%3D%20%28%27*%27%2C%20name%29%20ifTrue%3A%20%5B%0A%09%09%09%09self%20exportMethod%3A%20method%20of%3A%20each%20on%3A%20aStream%5D%5D%5D'), -messageSends: ["name", "do:", unescape("%2C"), "classes", "current", "collect:", "class", "values", "methodDictionary", "ifTrue:", unescape("%3D"), "category", "exportMethod:of:on:"], -referencedClasses: ["Smalltalk"] +source: unescape('exportPackageExtensionsOf%3A%20package%20on%3A%20aStream%0A%09%22We%20need%20to%20override%20this%20one%20too%20since%20we%20need%20to%20group%0A%09all%20methods%20in%20a%20given%20protocol%20under%20a%20leading%20methodsFor%3A%20chunk%0A%09for%20that%20class.%22%0A%0A%09%22Issue%20%23143%3A%20sort%20protocol%20alphabetically%22%0A%0A%09%7C%20name%20map%20%7C%0A%09name%20%3A%3D%20package%20name.%0A%09%28Package%20sortedClasses%3A%20Smalltalk%20current%20classes%29%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%7Beach.%20each%20class%7D%20do%3A%20%5B%3AaClass%20%7C%0A%09%09%09map%20%3A%3D%20Dictionary%20new.%0A%09%09%09aClass%20protocolsDo%3A%20%5B%3Acategory%20%3Amethods%20%7C%20%0A%09%09%09%09%28category%20match%3A%20%27%5E%5C*%27%2C%20name%29%20ifTrue%3A%20%5B%20map%20at%3A%20category%20put%3A%20methods%20%5D%5D.%0A%09%09%09%28map%20keys%20sorted%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20%3C%3D%20b%20%5D%29%20do%3A%20%5B%3Acategory%20%7C%20%7C%20methods%20%7C%0A%09%09%09%09methods%20%3A%3D%20map%20at%3A%20category.%09%0A%09%09%09%09self%20exportMethods%3A%20methods%20category%3A%20category%20of%3A%20each%20on%3A%20aStream%20%5D%5D%5D'), +messageSends: ["name", "do:", "sortedClasses:", "classes", "current", "class", "new", "protocolsDo:", "ifTrue:", "match:", unescape("%2C"), "at:put:", "sorted:", "keys", unescape("%3C%3D"), "at:", "exportMethods:category:of:on:"], +referencedClasses: ["Package", "Smalltalk", "Dictionary"] }), -smalltalk.Exporter); +smalltalk.ChunkExporter); + + +smalltalk.addClass('StrippedExporter', smalltalk.Exporter, [], 'Compiler'); smalltalk.addMethod( -unescape('_exportPackageDefinitionOf_on_'), +unescape('_exportDefinitionOf_on_'), smalltalk.method({ -selector: unescape('exportPackageDefinitionOf%3Aon%3A'), +selector: unescape('exportDefinitionOf%3Aon%3A'), category: 'private', -fn: function (package, aStream){ +fn: function (aClass, aStream){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addPackage%28")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(package, "_name", [])]), "__comma", [unescape("%27%2C%20")]), "__comma", [smalltalk.send(package, "_propertiesAsJSON", [])]), "__comma", [unescape("%29%3B")])]);})(aStream); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addClass%28")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%27%2C%20")])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20%5B")]);})(aStream); +smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C%20")]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%5D%2C%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(aClass, "_category", []), "__comma", [unescape("%27")])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);})(aStream); smalltalk.send(aStream, "_lf", []); return self;}, -args: ["package", "aStream"], -source: unescape('exportPackageDefinitionOf%3A%20package%20on%3A%20aStream%0A%09aStream%20%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.addPackage%28%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27%2C%20package%20name%2C%20%27%27%27%2C%20%27%2C%20package%20propertiesAsJSON%20%2C%20%27%29%3B%27.%0A%09aStream%20lf'), -messageSends: ["nextPutAll:", unescape("%2C"), "name", "propertiesAsJSON", "lf"], +args: ["aClass", "aStream"], +source: unescape('exportDefinitionOf%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.addClass%28%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27%2C%20%28self%20classNameFor%3A%20aClass%29%2C%20%27%27%27%2C%20%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%20superclass%29%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%2C%20%5B%27.%0A%09aClass%20instanceVariableNames%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20aStream%20nextPutAll%3A%20%27%27%27%27%2C%20each%2C%20%27%27%27%27%5D%0A%09%20%20%20%20separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%09aStream%09%0A%09%20%20%20%20nextPutAll%3A%20%27%5D%2C%20%27%27%27%3B%0A%09%20%20%20%20nextPutAll%3A%20aClass%20category%2C%20%27%27%27%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%29%3B%27.%0A%09aStream%20lf'), +messageSends: ["nextPutAll:", unescape("%2C"), "classNameFor:", "superclass", "do:separatedBy:", "instanceVariableNames", "category", "lf"], referencedClasses: [] }), -smalltalk.Exporter); - - +smalltalk.StrippedExporter); -smalltalk.addClass('ChunkParser', smalltalk.Object, ['stream'], 'Compiler'); smalltalk.addMethod( -unescape('_stream_'), +unescape('_exportMethod_of_on_'), smalltalk.method({ -selector: unescape('stream%3A'), -category: 'accessing', -fn: function (aStream){ +selector: unescape('exportMethod%3Aof%3Aon%3A'), +category: 'private', +fn: function (aMethod, aClass, aStream){ var self=this; -(self['@stream']=aStream); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream); return self;}, -args: ["aStream"], -source: unescape('stream%3A%20aStream%0A%09stream%20%3A%3D%20aStream'), -messageSends: [], +args: ["aMethod", "aClass", "aStream"], +source: unescape('exportMethod%3A%20aMethod%20of%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%09nextPutAll%3A%20%27smalltalk.addMethod%28%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27unescape%28%27%27%27%2C%20aMethod%20selector%20asSelector%20escaped%2C%20%27%27%27%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.method%28%7B%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27selector%3A%20unescape%28%27%27%27%2C%20aMethod%20selector%20escaped%2C%20%27%27%27%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27fn%3A%20%27%2C%20aMethod%20fn%20compiledSource%3Blf%3B%0A%09%09nextPutAll%3A%20%27%7D%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%0A%09%09nextPutAll%3A%20%27%29%3B%27%3Blf%3Blf'), +messageSends: ["nextPutAll:", "lf", unescape("%2C"), "escaped", "asSelector", "selector", "compiledSource", "fn", "classNameFor:"], referencedClasses: [] }), -smalltalk.ChunkParser); +smalltalk.StrippedExporter); -smalltalk.addMethod( -unescape('_nextChunk'), -smalltalk.method({ -selector: unescape('nextChunk'), -category: 'reading', -fn: function (){ -var self=this; -try{var char_=nil; -var result=nil; -var chunk=nil; -(result=smalltalk.send("", "_writeStream", [])); -(function(){while((function(){(char_=smalltalk.send(self['@stream'], "_next", []));return smalltalk.send(char_, "_notNil", []);})()) {(function(){((($receiver = smalltalk.send(char_, "__eq", [unescape("%21")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@stream'], "_peek", []), "__eq", [unescape("%21")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_next", []);})() : (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_next", []);}), (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@stream'], "_peek", []), "__eq", [unescape("%21")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_next", []);})() : (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_next", []);}), (function(){return (function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return smalltalk.send(smalltalk.send(result, "_contents", []), "_trimBoth", [])}})})();})]));})]));return smalltalk.send(result, "_nextPut_", [char_]);})()}})(); -(function(){throw({name: 'stReturn', selector: '_nextChunk', fn: function(){return nil}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_nextChunk'){return e.fn()} throw(e)}}, -args: [], -source: unescape('nextChunk%0A%09%22The%20chunk%20format%20%28Smalltalk%20Interchange%20Format%20or%20Fileout%20format%29%0A%09is%20a%20trivial%20format%20but%20can%20be%20a%20bit%20tricky%20to%20understand%3A%0A%09%09-%20Uses%20the%20exclamation%20mark%20as%20delimiter%20of%20chunks.%0A%09%09-%20Inside%20a%20chunk%20a%20normal%20exclamation%20mark%20must%20be%20doubled.%0A%09%09-%20A%20non%20empty%20chunk%20must%20be%20a%20valid%20Smalltalk%20expression.%0A%09%09-%20A%20chunk%20on%20top%20level%20with%20a%20preceding%20empty%20chunk%20is%20an%20instruction%20chunk%3A%0A%09%09%09-%20The%20object%20created%20by%20the%20expression%20then%20takes%20over%20reading%20chunks.%0A%0A%09This%20metod%20returns%20next%20chunk%20as%20a%20String%20%28trimmed%29%2C%20empty%20String%20%28all%20whitespace%29%20or%20nil.%22%0A%0A%09%7C%20char%20result%20chunk%20%7C%0A%09result%20%3A%3D%20%27%27%20writeStream.%0A%20%20%20%20%20%20%20%20%5Bchar%20%3A%3D%20stream%20next.%0A%20%20%20%20%20%20%20%20char%20notNil%5D%20whileTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20char%20%3D%20%27%21%27%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20peek%20%3D%20%27%21%27%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ifTrue%3A%20%5Bstream%20next%20%22skipping%20the%20escape%20double%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ifFalse%3A%20%5B%5Eresult%20contents%20trimBoth%20%20%22chunk%20end%20marker%20found%22%5D%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20nextPut%3A%20char%5D.%0A%09%5Enil%20%22a%20chunk%20needs%20to%20end%20with%20%21%22'), -messageSends: ["writeStream", "whileTrue:", "next", "notNil", "ifTrue:", unescape("%3D"), "ifTrue:ifFalse:", "peek", "trimBoth", "contents", "nextPut:"], -referencedClasses: [] -}), -smalltalk.ChunkParser); +smalltalk.addClass('Importer', smalltalk.Object, [], 'Compiler'); smalltalk.addMethod( -unescape('_on_'), +unescape('_import_'), smalltalk.method({ -selector: unescape('on%3A'), -category: 'not yet classified', +selector: unescape('import%3A'), +category: 'fileIn', fn: function (aStream){ var self=this; -return smalltalk.send(smalltalk.send(self, "_new", []), "_stream_", [aStream]); +var chunk=nil; +var result=nil; +var parser=nil; +var lastEmpty=nil; +(parser=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_on_", [aStream])); +(lastEmpty=false); +(function(){while(!(function(){(chunk=smalltalk.send(parser, "_nextChunk", []));return smalltalk.send(chunk, "_isNil", []);})()) {(function(){return ((($receiver = smalltalk.send(chunk, "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (lastEmpty=true);})() : (function(){(result=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_loadExpression_", [chunk]));return ((($receiver = lastEmpty).klass === smalltalk.Boolean) ? ($receiver ? (function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (lastEmpty=true);}), (function(){(result=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_loadExpression_", [chunk]));return ((($receiver = lastEmpty).klass === smalltalk.Boolean) ? ($receiver ? (function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(lastEmpty=false);return smalltalk.send(result, "_scanFrom_", [parser]);})]));})]));})()}})(); return self;}, args: ["aStream"], -source: unescape('on%3A%20aStream%0A%09%5Eself%20new%20stream%3A%20aStream'), -messageSends: ["stream:", "new"], -referencedClasses: [] +source: unescape('import%3A%20aStream%0A%20%20%20%20%7C%20chunk%20result%20parser%20lastEmpty%20%7C%0A%20%20%20%20parser%20%3A%3D%20ChunkParser%20on%3A%20aStream.%0A%20%20%20%20lastEmpty%20%3A%3D%20false.%0A%20%20%20%20%5Bchunk%20%3A%3D%20parser%20nextChunk.%0A%20%20%20%20%20chunk%20isNil%5D%20whileFalse%3A%20%5B%0A%20%20%20%20%20%20%20%20chunk%20isEmpty%0A%20%20%20%20%20%20%20%09%09ifTrue%3A%20%5BlastEmpty%20%3A%3D%20true%5D%0A%20%20%20%20%20%20%20%09%09ifFalse%3A%20%5B%0A%20%20%20%20%20%20%20%20%09%09result%20%3A%3D%20Compiler%20new%20loadExpression%3A%20chunk.%0A%20%20%20%20%20%20%20%20%09%09lastEmpty%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09lastEmpty%20%3A%3D%20false.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09result%20scanFrom%3A%20parser%5D%5D%5D'), +messageSends: ["on:", "whileFalse:", "nextChunk", "isNil", "ifTrue:ifFalse:", "isEmpty", "loadExpression:", "new", "ifTrue:", "scanFrom:"], +referencedClasses: ["ChunkParser", "Compiler"] }), -smalltalk.ChunkParser.klass); +smalltalk.Importer); -smalltalk.addClass('Node', smalltalk.Object, ['nodes'], 'Compiler'); -smalltalk.addMethod( -unescape('_nodes'), -smalltalk.method({ -selector: unescape('nodes'), -category: 'accessing', -fn: function (){ -var self=this; -return (($receiver = self['@nodes']) == nil || $receiver == undefined) ? (function(){return (self['@nodes']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; -return self;}, -args: [], -source: unescape('nodes%0A%09%5Enodes%20ifNil%3A%20%5Bnodes%20%3A%3D%20Array%20new%5D'), -messageSends: ["ifNil:", "new"], -referencedClasses: ["Array"] -}), -smalltalk.Node); +smalltalk.addClass('Node', smalltalk.Object, ['nodes'], 'Compiler'); smalltalk.addMethod( -unescape('_nodes_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('nodes%3A'), -category: 'building', -fn: function (aCollection){ +selector: unescape('accept%3A'), +category: 'visiting', +fn: function (aVisitor){ var self=this; -(self['@nodes']=aCollection); +smalltalk.send(aVisitor, "_visitNode_", [self]); return self;}, -args: ["aCollection"], -source: unescape('nodes%3A%20aCollection%0A%09nodes%20%3A%3D%20aCollection'), -messageSends: [], +args: ["aVisitor"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitNode%3A%20self'), +messageSends: ["visitNode:"], referencedClasses: [] }), smalltalk.Node); @@ -566,120 +490,88 @@ referencedClasses: [] smalltalk.Node); smalltalk.addMethod( -unescape('_accept_'), -smalltalk.method({ -selector: unescape('accept%3A'), -category: 'visiting', -fn: function (aVisitor){ -var self=this; -smalltalk.send(aVisitor, "_visitNode_", [self]); -return self;}, -args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitNode%3A%20self'), -messageSends: ["visitNode:"], -referencedClasses: [] -}), -smalltalk.Node); - -smalltalk.addMethod( -unescape('_isValueNode'), +unescape('_isBlockNode'), smalltalk.method({ -selector: unescape('isValueNode'), +selector: unescape('isBlockNode'), category: 'testing', fn: function (){ var self=this; return false; return self;}, args: [], -source: unescape('isValueNode%0A%09%5Efalse'), +source: unescape('isBlockNode%0A%09%5Efalse'), messageSends: [], referencedClasses: [] }), smalltalk.Node); smalltalk.addMethod( -unescape('_isBlockNode'), +unescape('_isBlockSequenceNode'), smalltalk.method({ -selector: unescape('isBlockNode'), +selector: unescape('isBlockSequenceNode'), category: 'testing', fn: function (){ var self=this; return false; return self;}, args: [], -source: unescape('isBlockNode%0A%09%5Efalse'), +source: unescape('isBlockSequenceNode%0A%09%5Efalse'), messageSends: [], referencedClasses: [] }), smalltalk.Node); smalltalk.addMethod( -unescape('_isBlockSequenceNode'), +unescape('_isValueNode'), smalltalk.method({ -selector: unescape('isBlockSequenceNode'), +selector: unescape('isValueNode'), category: 'testing', fn: function (){ var self=this; return false; return self;}, args: [], -source: unescape('isBlockSequenceNode%0A%09%5Efalse'), +source: unescape('isValueNode%0A%09%5Efalse'), messageSends: [], referencedClasses: [] }), smalltalk.Node); - - -smalltalk.addClass('SequenceNode', smalltalk.Node, ['temps'], 'Compiler'); smalltalk.addMethod( -unescape('_temps'), +unescape('_nodes'), smalltalk.method({ -selector: unescape('temps'), +selector: unescape('nodes'), category: 'accessing', fn: function (){ var self=this; -return (($receiver = self['@temps']) == nil || $receiver == undefined) ? (function(){return [];})() : $receiver; +return (($receiver = self['@nodes']) == nil || $receiver == undefined) ? (function(){return (self['@nodes']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;}, args: [], -source: unescape('temps%0A%09%5Etemps%20ifNil%3A%20%5B%23%28%29%5D'), -messageSends: ["ifNil:"], -referencedClasses: [] +source: unescape('nodes%0A%09%5Enodes%20ifNil%3A%20%5Bnodes%20%3A%3D%20Array%20new%5D'), +messageSends: ["ifNil:", "new"], +referencedClasses: ["Array"] }), -smalltalk.SequenceNode); +smalltalk.Node); smalltalk.addMethod( -unescape('_temps_'), +unescape('_nodes_'), smalltalk.method({ -selector: unescape('temps%3A'), -category: 'accessing', +selector: unescape('nodes%3A'), +category: 'building', fn: function (aCollection){ var self=this; -(self['@temps']=aCollection); +(self['@nodes']=aCollection); return self;}, args: ["aCollection"], -source: unescape('temps%3A%20aCollection%0A%09temps%20%3A%3D%20aCollection'), +source: unescape('nodes%3A%20aCollection%0A%09nodes%20%3A%3D%20aCollection'), messageSends: [], referencedClasses: [] }), -smalltalk.SequenceNode); +smalltalk.Node); -smalltalk.addMethod( -unescape('_asBlockSequenceNode'), -smalltalk.method({ -selector: unescape('asBlockSequenceNode'), -category: 'testing', -fn: function (){ -var self=this; -return (function($rec){smalltalk.send($rec, "_nodes_", [smalltalk.send(self, "_nodes", [])]);smalltalk.send($rec, "_temps_", [smalltalk.send(self, "_temps", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.BlockSequenceNode || BlockSequenceNode), "_new", [])); -return self;}, -args: [], -source: unescape('asBlockSequenceNode%0A%09%5EBlockSequenceNode%20new%0A%09%20%20%20%20nodes%3A%20self%20nodes%3B%0A%09%20%20%20%20temps%3A%20self%20temps%3B%0A%09%20%20%20%20yourself'), -messageSends: ["nodes:", "nodes", "temps:", "temps", "yourself", "new"], -referencedClasses: ["BlockSequenceNode"] -}), -smalltalk.SequenceNode); + +smalltalk.addClass('AssignmentNode', smalltalk.Node, ['left', 'right'], 'Compiler'); smalltalk.addMethod( unescape('_accept_'), smalltalk.method({ @@ -687,88 +579,83 @@ selector: unescape('accept%3A'), category: 'visiting', fn: function (aVisitor){ var self=this; -smalltalk.send(aVisitor, "_visitSequenceNode_", [self]); +smalltalk.send(aVisitor, "_visitAssignmentNode_", [self]); return self;}, args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitSequenceNode%3A%20self'), -messageSends: ["visitSequenceNode:"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitAssignmentNode%3A%20self'), +messageSends: ["visitAssignmentNode:"], referencedClasses: [] }), -smalltalk.SequenceNode); - - +smalltalk.AssignmentNode); -smalltalk.addClass('DynamicDictionaryNode', smalltalk.Node, [], 'Compiler'); smalltalk.addMethod( -unescape('_accept_'), +unescape('_left'), smalltalk.method({ -selector: unescape('accept%3A'), -category: 'visiting', -fn: function (aVisitor){ +selector: unescape('left'), +category: 'accessing', +fn: function (){ var self=this; -smalltalk.send(aVisitor, "_visitDynamicDictionaryNode_", [self]); +return self['@left']; return self;}, -args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitDynamicDictionaryNode%3A%20self'), -messageSends: ["visitDynamicDictionaryNode:"], +args: [], +source: unescape('left%0A%09%5Eleft'), +messageSends: [], referencedClasses: [] }), -smalltalk.DynamicDictionaryNode); - - +smalltalk.AssignmentNode); -smalltalk.addClass('ReturnNode', smalltalk.Node, [], 'Compiler'); smalltalk.addMethod( -unescape('_accept_'), +unescape('_left_'), smalltalk.method({ -selector: unescape('accept%3A'), -category: 'visiting', -fn: function (aVisitor){ +selector: unescape('left%3A'), +category: 'accessing', +fn: function (aNode){ var self=this; -smalltalk.send(aVisitor, "_visitReturnNode_", [self]); +(self['@left']=aNode); +smalltalk.send(self['@left'], "_assigned_", [true]); return self;}, -args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitReturnNode%3A%20self'), -messageSends: ["visitReturnNode:"], +args: ["aNode"], +source: unescape('left%3A%20aNode%0A%09left%20%3A%3D%20aNode.%0A%09left%20assigned%3A%20true'), +messageSends: ["assigned:"], referencedClasses: [] }), -smalltalk.ReturnNode); - - +smalltalk.AssignmentNode); -smalltalk.addClass('ValueNode', smalltalk.Node, ['value'], 'Compiler'); smalltalk.addMethod( -unescape('_value'), +unescape('_right'), smalltalk.method({ -selector: unescape('value'), +selector: unescape('right'), category: 'accessing', fn: function (){ var self=this; -return self['@value']; +return self['@right']; return self;}, args: [], -source: unescape('value%0A%09%5Evalue'), +source: unescape('right%0A%09%5Eright'), messageSends: [], referencedClasses: [] }), -smalltalk.ValueNode); +smalltalk.AssignmentNode); smalltalk.addMethod( -unescape('_value_'), +unescape('_right_'), smalltalk.method({ -selector: unescape('value%3A'), +selector: unescape('right%3A'), category: 'accessing', -fn: function (anObject){ +fn: function (aNode){ var self=this; -(self['@value']=anObject); +(self['@right']=aNode); return self;}, -args: ["anObject"], -source: unescape('value%3A%20anObject%0A%09value%20%3A%3D%20anObject'), +args: ["aNode"], +source: unescape('right%3A%20aNode%0A%09right%20%3A%3D%20aNode'), messageSends: [], referencedClasses: [] }), -smalltalk.ValueNode); +smalltalk.AssignmentNode); + + +smalltalk.addClass('BlockNode', smalltalk.Node, ['parameters', 'inlined'], 'Compiler'); smalltalk.addMethod( unescape('_accept_'), smalltalk.method({ @@ -776,240 +663,238 @@ selector: unescape('accept%3A'), category: 'visiting', fn: function (aVisitor){ var self=this; -smalltalk.send(aVisitor, "_visitValueNode_", [self]); +smalltalk.send(aVisitor, "_visitBlockNode_", [self]); return self;}, args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitValueNode%3A%20self'), -messageSends: ["visitValueNode:"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitBlockNode%3A%20self'), +messageSends: ["visitBlockNode:"], referencedClasses: [] }), -smalltalk.ValueNode); +smalltalk.BlockNode); smalltalk.addMethod( -unescape('_isValueNode'), +unescape('_inlined'), smalltalk.method({ -selector: unescape('isValueNode'), -category: 'testing', +selector: unescape('inlined'), +category: 'accessing', fn: function (){ var self=this; -return true; +return (($receiver = self['@inlined']) == nil || $receiver == undefined) ? (function(){return false;})() : $receiver; return self;}, args: [], -source: unescape('isValueNode%0A%09%5Etrue'), -messageSends: [], +source: unescape('inlined%0A%09%5Einlined%20ifNil%3A%20%5Bfalse%5D'), +messageSends: ["ifNil:"], referencedClasses: [] }), -smalltalk.ValueNode); - - +smalltalk.BlockNode); -smalltalk.addClass('VariableNode', smalltalk.ValueNode, ['assigned'], 'Compiler'); smalltalk.addMethod( -unescape('_accept_'), +unescape('_inlined_'), smalltalk.method({ -selector: unescape('accept%3A'), -category: 'visiting', -fn: function (aVisitor){ +selector: unescape('inlined%3A'), +category: 'accessing', +fn: function (aBoolean){ var self=this; -smalltalk.send(aVisitor, "_visitVariableNode_", [self]); +(self['@inlined']=aBoolean); return self;}, -args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitVariableNode%3A%20self'), -messageSends: ["visitVariableNode:"], +args: ["aBoolean"], +source: unescape('inlined%3A%20aBoolean%0A%09inlined%20%3A%3D%20aBoolean'), +messageSends: [], referencedClasses: [] }), -smalltalk.VariableNode); +smalltalk.BlockNode); smalltalk.addMethod( -unescape('_assigned'), +unescape('_isBlockNode'), smalltalk.method({ -selector: unescape('assigned'), -category: 'accessing', +selector: unescape('isBlockNode'), +category: 'testing', fn: function (){ var self=this; -return (($receiver = self['@assigned']) == nil || $receiver == undefined) ? (function(){return false;})() : $receiver; +return true; return self;}, args: [], -source: unescape('assigned%0A%09%5Eassigned%20ifNil%3A%20%5Bfalse%5D'), -messageSends: ["ifNil:"], +source: unescape('isBlockNode%0A%09%5Etrue'), +messageSends: [], referencedClasses: [] }), -smalltalk.VariableNode); +smalltalk.BlockNode); smalltalk.addMethod( -unescape('_assigned_'), +unescape('_parameters'), smalltalk.method({ -selector: unescape('assigned%3A'), +selector: unescape('parameters'), category: 'accessing', -fn: function (aBoolean){ +fn: function (){ var self=this; -(self['@assigned']=aBoolean); +return (($receiver = self['@parameters']) == nil || $receiver == undefined) ? (function(){return (self['@parameters']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;}, -args: ["aBoolean"], -source: unescape('assigned%3A%20aBoolean%0A%09assigned%20%3A%3D%20aBoolean'), -messageSends: [], -referencedClasses: [] +args: [], +source: unescape('parameters%0A%09%5Eparameters%20ifNil%3A%20%5Bparameters%20%3A%3D%20Array%20new%5D'), +messageSends: ["ifNil:", "new"], +referencedClasses: ["Array"] }), -smalltalk.VariableNode); - - +smalltalk.BlockNode); -smalltalk.addClass('ChunkExporter', smalltalk.Exporter, [], 'Compiler'); smalltalk.addMethod( -unescape('_exportDefinitionOf_on_'), +unescape('_parameters_'), smalltalk.method({ -selector: unescape('exportDefinitionOf%3Aon%3A'), -category: 'not yet classified', -fn: function (aClass, aStream){ +selector: unescape('parameters%3A'), +category: 'accessing', +fn: function (aCollection){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("%20subclass%3A%20%23"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("%09instanceVariableNames%3A%20%27")]);})(aStream); -smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%09category%3A%20%27"), "__comma", [smalltalk.send(aClass, "_category", [])]), "__comma", [unescape("%27%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream); -((($receiver = smalltalk.send(smalltalk.send(aClass, "_comment", []), "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})])); -smalltalk.send(aStream, "_lf", []); +(self['@parameters']=aCollection); return self;}, -args: ["aClass", "aStream"], -source: unescape('exportDefinitionOf%3A%20aClass%20on%3A%20aStream%0A%09%22Chunk%20format.%22%0A%0A%09aStream%20%0A%09%20%20%20%20nextPutAll%3A%20%28self%20classNameFor%3A%20aClass%20superclass%29%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%20subclass%3A%20%23%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%20lf%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%09instanceVariableNames%3A%20%27%27%27.%0A%09aClass%20instanceVariableNames%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20aStream%20nextPutAll%3A%20each%5D%0A%09%20%20%20%20separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%20%27%5D.%0A%09aStream%09%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27%3B%20lf%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%09category%3A%20%27%27%27%2C%20aClass%20category%2C%20%27%27%27%21%27%3B%20lf.%0A%20%09aClass%20comment%20notEmpty%20ifTrue%3A%20%5B%0A%09%20%20%20%20aStream%20%0A%09%09nextPutAll%3A%20%27%21%27%2C%20%28self%20classNameFor%3A%20aClass%29%2C%20%27%20commentStamp%21%27%3Blf%3B%0A%09%09nextPutAll%3A%20%28self%20chunkEscape%3A%20aClass%20comment%29%2C%20%27%21%27%3Blf%5D.%0A%09aStream%20lf'), -messageSends: ["nextPutAll:", "classNameFor:", "superclass", unescape("%2C"), "lf", "do:separatedBy:", "instanceVariableNames", "category", "ifTrue:", "notEmpty", "comment", "chunkEscape:"], +args: ["aCollection"], +source: unescape('parameters%3A%20aCollection%0A%09parameters%20%3A%3D%20aCollection'), +messageSends: [], referencedClasses: [] }), -smalltalk.ChunkExporter); +smalltalk.BlockNode); + + +smalltalk.addClass('CascadeNode', smalltalk.Node, ['receiver'], 'Compiler'); smalltalk.addMethod( -unescape('_exportMethod_of_on_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('exportMethod%3Aof%3Aon%3A'), -category: 'not yet classified', -fn: function (aMethod, aClass, aStream){ +selector: unescape('accept%3A'), +category: 'visiting', +fn: function (aVisitor){ var self=this; -(function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aMethod, "_source", [])])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("%21")]);})(aStream); +smalltalk.send(aVisitor, "_visitCascadeNode_", [self]); return self;}, -args: ["aMethod", "aClass", "aStream"], -source: unescape('exportMethod%3A%20aMethod%20of%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%09lf%3B%20lf%3B%20nextPutAll%3A%20%28self%20chunkEscape%3A%20aMethod%20source%29%3B%20lf%3B%0A%09%09nextPutAll%3A%20%27%21%27'), -messageSends: ["lf", "nextPutAll:", "chunkEscape:", "source"], +args: ["aVisitor"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitCascadeNode%3A%20self'), +messageSends: ["visitCascadeNode:"], referencedClasses: [] }), -smalltalk.ChunkExporter); +smalltalk.CascadeNode); smalltalk.addMethod( -unescape('_exportMethodsOf_on_'), +unescape('_receiver'), smalltalk.method({ -selector: unescape('exportMethodsOf%3Aon%3A'), -category: 'not yet classified', -fn: function (aClass, aStream){ +selector: unescape('receiver'), +category: 'accessing', +fn: function (){ var self=this; -smalltalk.send(aClass, "_protocolsDo_", [(function(category, methods){return ((($receiver = smalltalk.send(category, "_match_", [unescape("%5E%5C*")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, aClass, aStream]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, aClass, aStream]);})]));})]); +return self['@receiver']; return self;}, -args: ["aClass", "aStream"], -source: unescape('exportMethodsOf%3A%20aClass%20on%3A%20aStream%0A%0A%20%20%20aClass%20protocolsDo%3A%20%5B%3Acategory%20%3Amethods%20%7C%0A%09%28category%20match%3A%20%27%5E%5C*%27%29%20ifFalse%3A%20%5B%20%0A%09%09self%0A%09%09%09exportMethods%3A%20methods%0A%09%09%09category%3A%20category%0A%09%09%09of%3A%20aClass%0A%09%09%09on%3A%20aStream%5D%5D'), -messageSends: ["protocolsDo:", "ifFalse:", "match:", "exportMethods:category:of:on:"], +args: [], +source: unescape('receiver%0A%09%5Ereceiver'), +messageSends: [], referencedClasses: [] }), -smalltalk.ChunkExporter); +smalltalk.CascadeNode); smalltalk.addMethod( -unescape('_exportMetaDefinitionOf_on_'), +unescape('_receiver_'), smalltalk.method({ -selector: unescape('exportMetaDefinitionOf%3Aon%3A'), -category: 'not yet classified', -fn: function (aClass, aStream){ +selector: unescape('receiver%3A'), +category: 'accessing', +fn: function (aNode){ var self=this; -((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%20instanceVariableNames%3A%20%27")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%20instanceVariableNames%3A%20%27")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);})])); +(self['@receiver']=aNode); return self;}, -args: ["aClass", "aStream"], -source: unescape('exportMetaDefinitionOf%3A%20aClass%20on%3A%20aStream%0A%0A%09aClass%20class%20instanceVariableNames%20isEmpty%20ifFalse%3A%20%5B%0A%09%09aStream%20%0A%09%09%20%20%20%20nextPutAll%3A%20%28self%20classNameFor%3A%20aClass%20class%29%3B%0A%09%09%20%20%20%20nextPutAll%3A%20%27%20instanceVariableNames%3A%20%27%27%27.%0A%09%09aClass%20class%20instanceVariableNames%20%0A%09%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20aStream%20nextPutAll%3A%20each%5D%0A%09%09%20%20%20%20separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%20%27%5D.%0A%09%09aStream%09%0A%09%09%20%20%20%20nextPutAll%3A%20%27%27%27%21%27%3B%20lf%3B%20lf%5D'), -messageSends: ["ifFalse:", "isEmpty", "instanceVariableNames", "class", "nextPutAll:", "classNameFor:", "do:separatedBy:", "lf"], +args: ["aNode"], +source: unescape('receiver%3A%20aNode%0A%09receiver%20%3A%3D%20aNode'), +messageSends: [], referencedClasses: [] }), -smalltalk.ChunkExporter); +smalltalk.CascadeNode); + + +smalltalk.addClass('DynamicArrayNode', smalltalk.Node, [], 'Compiler'); smalltalk.addMethod( -unescape('_classNameFor_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('classNameFor%3A'), -category: 'not yet classified', -fn: function (aClass){ +selector: unescape('accept%3A'), +category: 'visiting', +fn: function (aVisitor){ var self=this; -return ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [" class"]);})() : (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [" class"]);}), (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})])); +smalltalk.send(aVisitor, "_visitDynamicArrayNode_", [self]); return self;}, -args: ["aClass"], -source: unescape('classNameFor%3A%20aClass%0A%09%5EaClass%20isMetaclass%0A%09%20%20%20%20ifTrue%3A%20%5BaClass%20instanceClass%20name%2C%20%27%20class%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5B%0A%09%09aClass%20isNil%0A%09%09%20%20%20%20ifTrue%3A%20%5B%27nil%27%5D%0A%09%09%20%20%20%20ifFalse%3A%20%5BaClass%20name%5D%5D'), -messageSends: ["ifTrue:ifFalse:", "isMetaclass", unescape("%2C"), "name", "instanceClass", "isNil"], +args: ["aVisitor"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitDynamicArrayNode%3A%20self'), +messageSends: ["visitDynamicArrayNode:"], referencedClasses: [] }), -smalltalk.ChunkExporter); +smalltalk.DynamicArrayNode); + + +smalltalk.addClass('DynamicDictionaryNode', smalltalk.Node, [], 'Compiler'); smalltalk.addMethod( -unescape('_chunkEscape_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('chunkEscape%3A'), -category: 'not yet classified', -fn: function (aString){ +selector: unescape('accept%3A'), +category: 'visiting', +fn: function (aVisitor){ var self=this; -return smalltalk.send(smalltalk.send(aString, "_replace_with_", [unescape("%21"), unescape("%21%21")]), "_trimBoth", []); +smalltalk.send(aVisitor, "_visitDynamicDictionaryNode_", [self]); return self;}, -args: ["aString"], -source: unescape('chunkEscape%3A%20aString%0A%09%22Replace%20all%20occurrences%20of%20%21%20with%20%21%21%20and%20trim%20at%20both%20ends.%22%0A%0A%09%5E%28aString%20replace%3A%20%27%21%27%20with%3A%20%27%21%21%27%29%20trimBoth'), -messageSends: ["trimBoth", "replace:with:"], +args: ["aVisitor"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitDynamicDictionaryNode%3A%20self'), +messageSends: ["visitDynamicDictionaryNode:"], referencedClasses: [] }), -smalltalk.ChunkExporter); +smalltalk.DynamicDictionaryNode); + + +smalltalk.addClass('JSStatementNode', smalltalk.Node, ['source'], 'Compiler'); smalltalk.addMethod( -unescape('_exportMethods_category_of_on_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('exportMethods%3Acategory%3Aof%3Aon%3A'), -category: 'not yet classified', -fn: function (methods, category, aClass, aStream){ +selector: unescape('accept%3A'), +category: 'visiting', +fn: function (aVisitor){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%20methodsFor%3A%20%27"), "__comma", [category]), "__comma", [unescape("%27%21")])]);})(aStream); -smalltalk.send(methods, "_do_", [(function(each){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%20%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream); +smalltalk.send(aVisitor, "_visitJSStatementNode_", [self]); return self;}, -args: ["methods", "category", "aClass", "aStream"], -source: unescape('exportMethods%3A%20methods%20category%3A%20category%20of%3A%20aClass%20on%3A%20aStream%0A%0A%09aStream%0A%09%09nextPutAll%3A%20%27%21%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%0A%09%09nextPutAll%3A%20%27%20methodsFor%3A%20%27%27%27%2C%20category%2C%20%27%27%27%21%27.%0A%20%20%20%20%09methods%20do%3A%20%5B%3Aeach%20%7C%0A%09%09self%20exportMethod%3A%20each%20of%3A%20aClass%20on%3A%20aStream%5D.%0A%09aStream%20nextPutAll%3A%20%27%20%21%27%3B%20lf%3B%20lf'), -messageSends: ["nextPutAll:", unescape("%2C"), "classNameFor:", "do:", "exportMethod:of:on:", "lf"], +args: ["aVisitor"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitJSStatementNode%3A%20self'), +messageSends: ["visitJSStatementNode:"], referencedClasses: [] }), -smalltalk.ChunkExporter); +smalltalk.JSStatementNode); smalltalk.addMethod( -unescape('_exportPackageExtensionsOf_on_'), +unescape('_source'), smalltalk.method({ -selector: unescape('exportPackageExtensionsOf%3Aon%3A'), -category: 'not yet classified', -fn: function (package, aStream){ +selector: unescape('source'), +category: 'accessing', +fn: function (){ var self=this; -var name=nil; -(name=smalltalk.send(package, "_name", [])); -smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_collect_", [(function(each){return smalltalk.send(each, "_class", []);})])]), "_do_", [(function(each){return smalltalk.send(each, "_protocolsDo_", [(function(category, methods){return ((($receiver = smalltalk.send(category, "__eq", [smalltalk.send(unescape("*"), "__comma", [name])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, each, aStream]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, each, aStream]);})]));})]);})]); +return (($receiver = self['@source']) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver; return self;}, -args: ["package", "aStream"], -source: unescape('exportPackageExtensionsOf%3A%20package%20on%3A%20aStream%0A%09%22We%20need%20to%20override%20this%20one%20too%20since%20we%20need%20to%20group%0A%09all%20methods%20in%20a%20given%20protocol%20under%20a%20leading%20methodsFor%3A%20chunk%0A%09for%20that%20class.%22%0A%0A%09%7C%20name%20%7C%0A%09name%20%3A%3D%20package%20name.%0A%09Smalltalk%20current%20classes%2C%20%28Smalltalk%20current%20classes%20collect%3A%20%5B%3Aeach%20%7C%20each%20class%5D%29%20do%3A%20%5B%3Aeach%20%7C%0A%09%09each%20protocolsDo%3A%20%5B%3Acategory%20%3Amethods%20%7C%0A%09%09%09category%20%3D%20%28%27*%27%2C%20name%29%20ifTrue%3A%20%5B%0A%09%09%09%09self%20exportMethods%3A%20methods%20category%3A%20category%20of%3A%20each%20on%3A%20aStream%5D%5D%5D'), -messageSends: ["name", "do:", unescape("%2C"), "classes", "current", "collect:", "class", "protocolsDo:", "ifTrue:", unescape("%3D"), "exportMethods:category:of:on:"], -referencedClasses: ["Smalltalk"] +args: [], +source: unescape('source%0A%09%5Esource%20ifNil%3A%20%5B%27%27%5D'), +messageSends: ["ifNil:"], +referencedClasses: [] }), -smalltalk.ChunkExporter); +smalltalk.JSStatementNode); smalltalk.addMethod( -unescape('_exportPackageDefinitionOf_on_'), +unescape('_source_'), smalltalk.method({ -selector: unescape('exportPackageDefinitionOf%3Aon%3A'), -category: 'not yet classified', -fn: function (package, aStream){ +selector: unescape('source%3A'), +category: 'accessing', +fn: function (aString){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("Smalltalk%20current%20createPackage%3A%20%27"), "__comma", [smalltalk.send(package, "_name", [])]), "__comma", [unescape("%27%20properties%3A%20")]), "__comma", [smalltalk.send(smalltalk.send(package, "_properties", []), "_storeString", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream); +(self['@source']=aString); return self;}, -args: ["package", "aStream"], -source: unescape('exportPackageDefinitionOf%3A%20package%20on%3A%20aStream%0A%09%22Chunk%20format.%22%0A%0A%09aStream%20%0A%09%20%20%20%20nextPutAll%3A%20%27Smalltalk%20current%20createPackage%3A%20%27%27%27%2C%20package%20name%2C%0A%09%09%27%27%27%20properties%3A%20%27%2C%20package%20properties%20storeString%2C%20%27%21%27%3B%20lf.'), -messageSends: ["nextPutAll:", unescape("%2C"), "name", "storeString", "properties", "lf"], +args: ["aString"], +source: unescape('source%3A%20aString%0A%09source%20%3A%3D%20aString'), +messageSends: [], referencedClasses: [] }), -smalltalk.ChunkExporter); +smalltalk.JSStatementNode); -smalltalk.addClass('ClassReferenceNode', smalltalk.VariableNode, [], 'Compiler'); +smalltalk.addClass('MethodNode', smalltalk.Node, ['selector', 'arguments', 'source'], 'Compiler'); smalltalk.addMethod( unescape('_accept_'), smalltalk.method({ @@ -1017,148 +902,133 @@ selector: unescape('accept%3A'), category: 'visiting', fn: function (aVisitor){ var self=this; -smalltalk.send(aVisitor, "_visitClassReferenceNode_", [self]); +smalltalk.send(aVisitor, "_visitMethodNode_", [self]); return self;}, args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitClassReferenceNode%3A%20self'), -messageSends: ["visitClassReferenceNode:"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitMethodNode%3A%20self'), +messageSends: ["visitMethodNode:"], referencedClasses: [] }), -smalltalk.ClassReferenceNode); - - +smalltalk.MethodNode); -smalltalk.addClass('SendNode', smalltalk.Node, ['selector', 'arguments', 'receiver'], 'Compiler'); smalltalk.addMethod( -unescape('_selector'), +unescape('_arguments'), smalltalk.method({ -selector: unescape('selector'), +selector: unescape('arguments'), category: 'accessing', fn: function (){ var self=this; -return self['@selector']; +return (($receiver = self['@arguments']) == nil || $receiver == undefined) ? (function(){return [];})() : $receiver; return self;}, args: [], -source: unescape('selector%0A%09%5Eselector'), -messageSends: [], -referencedClasses: [] +source: unescape('arguments%0A%09%5Earguments%20ifNil%3A%20%5B%23%28%29%5D'), +messageSends: ["ifNil:"], +referencedClasses: [] }), -smalltalk.SendNode); +smalltalk.MethodNode); smalltalk.addMethod( -unescape('_selector_'), +unescape('_arguments_'), smalltalk.method({ -selector: unescape('selector%3A'), +selector: unescape('arguments%3A'), category: 'accessing', -fn: function (aString){ +fn: function (aCollection){ var self=this; -(self['@selector']=aString); +(self['@arguments']=aCollection); return self;}, -args: ["aString"], -source: unescape('selector%3A%20aString%0A%09selector%20%3A%3D%20aString'), +args: ["aCollection"], +source: unescape('arguments%3A%20aCollection%0A%09arguments%20%3A%3D%20aCollection'), messageSends: [], referencedClasses: [] }), -smalltalk.SendNode); +smalltalk.MethodNode); smalltalk.addMethod( -unescape('_arguments'), +unescape('_selector'), smalltalk.method({ -selector: unescape('arguments'), +selector: unescape('selector'), category: 'accessing', fn: function (){ var self=this; -return (($receiver = self['@arguments']) == nil || $receiver == undefined) ? (function(){return (self['@arguments']=[]);})() : $receiver; +return self['@selector']; return self;}, args: [], -source: unescape('arguments%0A%09%5Earguments%20ifNil%3A%20%5Barguments%20%3A%3D%20%23%28%29%5D'), -messageSends: ["ifNil:"], +source: unescape('selector%0A%09%5Eselector'), +messageSends: [], referencedClasses: [] }), -smalltalk.SendNode); +smalltalk.MethodNode); smalltalk.addMethod( -unescape('_arguments_'), +unescape('_selector_'), smalltalk.method({ -selector: unescape('arguments%3A'), +selector: unescape('selector%3A'), category: 'accessing', -fn: function (aCollection){ +fn: function (aString){ var self=this; -(self['@arguments']=aCollection); +(self['@selector']=aString); return self;}, -args: ["aCollection"], -source: unescape('arguments%3A%20aCollection%0A%09arguments%20%3A%3D%20aCollection'), +args: ["aString"], +source: unescape('selector%3A%20aString%0A%09selector%20%3A%3D%20aString'), messageSends: [], referencedClasses: [] }), -smalltalk.SendNode); +smalltalk.MethodNode); smalltalk.addMethod( -unescape('_receiver'), +unescape('_source'), smalltalk.method({ -selector: unescape('receiver'), +selector: unescape('source'), category: 'accessing', fn: function (){ var self=this; -return self['@receiver']; +return self['@source']; return self;}, args: [], -source: unescape('receiver%0A%09%5Ereceiver'), +source: unescape('source%0A%09%5Esource'), messageSends: [], referencedClasses: [] }), -smalltalk.SendNode); +smalltalk.MethodNode); smalltalk.addMethod( -unescape('_receiver_'), +unescape('_source_'), smalltalk.method({ -selector: unescape('receiver%3A'), +selector: unescape('source%3A'), category: 'accessing', -fn: function (aNode){ +fn: function (aString){ var self=this; -(self['@receiver']=aNode); +(self['@source']=aString); return self;}, -args: ["aNode"], -source: unescape('receiver%3A%20aNode%0A%09receiver%20%3A%3D%20aNode'), +args: ["aString"], +source: unescape('source%3A%20aString%0A%09source%20%3A%3D%20aString'), messageSends: [], referencedClasses: [] }), -smalltalk.SendNode); +smalltalk.MethodNode); -smalltalk.addMethod( -unescape('_valueForReceiver_'), -smalltalk.method({ -selector: unescape('valueForReceiver%3A'), -category: 'accessing', -fn: function (anObject){ -var self=this; -return (function($rec){smalltalk.send($rec, "_receiver_", [(($receiver = smalltalk.send(self, "_receiver", [])) == nil || $receiver == undefined) ? (function(){return anObject;})() : (function(){return smalltalk.send(smalltalk.send(self, "_receiver", []), "_valueForReceiver_", [anObject]);})()]);smalltalk.send($rec, "_selector_", [smalltalk.send(self, "_selector", [])]);smalltalk.send($rec, "_arguments_", [smalltalk.send(self, "_arguments", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.SendNode || SendNode), "_new", [])); -return self;}, -args: ["anObject"], -source: unescape('valueForReceiver%3A%20anObject%0A%09%5ESendNode%20new%0A%09%20%20%20%20receiver%3A%20%28self%20receiver%20%0A%09%09ifNil%3A%20%5BanObject%5D%0A%09%09ifNotNil%3A%20%5Bself%20receiver%20valueForReceiver%3A%20anObject%5D%29%3B%0A%09%20%20%20%20selector%3A%20self%20selector%3B%0A%09%20%20%20%20arguments%3A%20self%20arguments%3B%0A%09%20%20%20%20yourself'), -messageSends: ["receiver:", "ifNil:ifNotNil:", "receiver", "valueForReceiver:", "selector:", "selector", "arguments:", "arguments", "yourself", "new"], -referencedClasses: ["SendNode"] -}), -smalltalk.SendNode); + +smalltalk.addClass('ReturnNode', smalltalk.Node, [], 'Compiler'); smalltalk.addMethod( -unescape('_cascadeNodeWithMessages_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('cascadeNodeWithMessages%3A'), -category: 'accessing', -fn: function (aCollection){ +selector: unescape('accept%3A'), +category: 'visiting', +fn: function (aVisitor){ var self=this; -var first=nil; -(first=(function($rec){smalltalk.send($rec, "_selector_", [smalltalk.send(self, "_selector", [])]);smalltalk.send($rec, "_arguments_", [smalltalk.send(self, "_arguments", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.SendNode || SendNode), "_new", []))); -return (function($rec){smalltalk.send($rec, "_receiver_", [smalltalk.send(self, "_receiver", [])]);smalltalk.send($rec, "_nodes_", [smalltalk.send(smalltalk.send((smalltalk.Array || Array), "_with_", [first]), "__comma", [aCollection])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.CascadeNode || CascadeNode), "_new", [])); +smalltalk.send(aVisitor, "_visitReturnNode_", [self]); return self;}, -args: ["aCollection"], -source: unescape('cascadeNodeWithMessages%3A%20aCollection%0A%09%7C%20first%20%7C%0A%09first%20%3A%3D%20SendNode%20new%0A%09%20%20%20%20selector%3A%20self%20selector%3B%0A%09%20%20%20%20arguments%3A%20self%20arguments%3B%0A%09%20%20%20%20yourself.%0A%09%5ECascadeNode%20new%0A%09%20%20%20%20receiver%3A%20self%20receiver%3B%0A%09%20%20%20%20nodes%3A%20%28Array%20with%3A%20first%29%2C%20aCollection%3B%0A%09%20%20%20%20yourself'), -messageSends: ["selector:", "selector", "arguments:", "arguments", "yourself", "new", "receiver:", "receiver", "nodes:", unescape("%2C"), "with:"], -referencedClasses: ["SendNode", "Array", "CascadeNode"] +args: ["aVisitor"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitReturnNode%3A%20self'), +messageSends: ["visitReturnNode:"], +referencedClasses: [] }), -smalltalk.SendNode); +smalltalk.ReturnNode); + + +smalltalk.addClass('SendNode', smalltalk.Node, ['selector', 'arguments', 'receiver'], 'Compiler'); smalltalk.addMethod( unescape('_accept_'), smalltalk.method({ @@ -1175,144 +1045,139 @@ referencedClasses: [] }), smalltalk.SendNode); - - -smalltalk.addClass('JSStatementNode', smalltalk.Node, ['source'], 'Compiler'); smalltalk.addMethod( -unescape('_source'), +unescape('_arguments'), smalltalk.method({ -selector: unescape('source'), +selector: unescape('arguments'), category: 'accessing', fn: function (){ var self=this; -return (($receiver = self['@source']) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver; +return (($receiver = self['@arguments']) == nil || $receiver == undefined) ? (function(){return (self['@arguments']=[]);})() : $receiver; return self;}, args: [], -source: unescape('source%0A%09%5Esource%20ifNil%3A%20%5B%27%27%5D'), +source: unescape('arguments%0A%09%5Earguments%20ifNil%3A%20%5Barguments%20%3A%3D%20%23%28%29%5D'), messageSends: ["ifNil:"], referencedClasses: [] }), -smalltalk.JSStatementNode); +smalltalk.SendNode); smalltalk.addMethod( -unescape('_source_'), +unescape('_arguments_'), smalltalk.method({ -selector: unescape('source%3A'), +selector: unescape('arguments%3A'), category: 'accessing', -fn: function (aString){ +fn: function (aCollection){ var self=this; -(self['@source']=aString); +(self['@arguments']=aCollection); return self;}, -args: ["aString"], -source: unescape('source%3A%20aString%0A%09source%20%3A%3D%20aString'), +args: ["aCollection"], +source: unescape('arguments%3A%20aCollection%0A%09arguments%20%3A%3D%20aCollection'), messageSends: [], referencedClasses: [] }), -smalltalk.JSStatementNode); +smalltalk.SendNode); smalltalk.addMethod( -unescape('_accept_'), +unescape('_cascadeNodeWithMessages_'), smalltalk.method({ -selector: unescape('accept%3A'), -category: 'visiting', -fn: function (aVisitor){ +selector: unescape('cascadeNodeWithMessages%3A'), +category: 'accessing', +fn: function (aCollection){ var self=this; -smalltalk.send(aVisitor, "_visitJSStatementNode_", [self]); +var first=nil; +(first=(function($rec){smalltalk.send($rec, "_selector_", [smalltalk.send(self, "_selector", [])]);smalltalk.send($rec, "_arguments_", [smalltalk.send(self, "_arguments", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.SendNode || SendNode), "_new", []))); +return (function($rec){smalltalk.send($rec, "_receiver_", [smalltalk.send(self, "_receiver", [])]);smalltalk.send($rec, "_nodes_", [smalltalk.send(smalltalk.send((smalltalk.Array || Array), "_with_", [first]), "__comma", [aCollection])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.CascadeNode || CascadeNode), "_new", [])); return self;}, -args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitJSStatementNode%3A%20self'), -messageSends: ["visitJSStatementNode:"], -referencedClasses: [] +args: ["aCollection"], +source: unescape('cascadeNodeWithMessages%3A%20aCollection%0A%09%7C%20first%20%7C%0A%09first%20%3A%3D%20SendNode%20new%0A%09%20%20%20%20selector%3A%20self%20selector%3B%0A%09%20%20%20%20arguments%3A%20self%20arguments%3B%0A%09%20%20%20%20yourself.%0A%09%5ECascadeNode%20new%0A%09%20%20%20%20receiver%3A%20self%20receiver%3B%0A%09%20%20%20%20nodes%3A%20%28Array%20with%3A%20first%29%2C%20aCollection%3B%0A%09%20%20%20%20yourself'), +messageSends: ["selector:", "selector", "arguments:", "arguments", "yourself", "new", "receiver:", "receiver", "nodes:", unescape("%2C"), "with:"], +referencedClasses: ["SendNode", "Array", "CascadeNode"] }), -smalltalk.JSStatementNode); - - +smalltalk.SendNode); -smalltalk.addClass('AssignmentNode', smalltalk.Node, ['left', 'right'], 'Compiler'); smalltalk.addMethod( -unescape('_left'), +unescape('_receiver'), smalltalk.method({ -selector: unescape('left'), +selector: unescape('receiver'), category: 'accessing', fn: function (){ var self=this; -return self['@left']; +return self['@receiver']; return self;}, args: [], -source: unescape('left%0A%09%5Eleft'), +source: unescape('receiver%0A%09%5Ereceiver'), messageSends: [], referencedClasses: [] }), -smalltalk.AssignmentNode); +smalltalk.SendNode); smalltalk.addMethod( -unescape('_left_'), +unescape('_receiver_'), smalltalk.method({ -selector: unescape('left%3A'), +selector: unescape('receiver%3A'), category: 'accessing', fn: function (aNode){ var self=this; -(self['@left']=aNode); -smalltalk.send(self['@left'], "_assigned_", [true]); +(self['@receiver']=aNode); return self;}, args: ["aNode"], -source: unescape('left%3A%20aNode%0A%09left%20%3A%3D%20aNode.%0A%09left%20assigned%3A%20true'), -messageSends: ["assigned:"], +source: unescape('receiver%3A%20aNode%0A%09receiver%20%3A%3D%20aNode'), +messageSends: [], referencedClasses: [] }), -smalltalk.AssignmentNode); +smalltalk.SendNode); smalltalk.addMethod( -unescape('_right'), +unescape('_selector'), smalltalk.method({ -selector: unescape('right'), +selector: unescape('selector'), category: 'accessing', fn: function (){ var self=this; -return self['@right']; +return self['@selector']; return self;}, args: [], -source: unescape('right%0A%09%5Eright'), +source: unescape('selector%0A%09%5Eselector'), messageSends: [], referencedClasses: [] }), -smalltalk.AssignmentNode); +smalltalk.SendNode); smalltalk.addMethod( -unescape('_right_'), +unescape('_selector_'), smalltalk.method({ -selector: unescape('right%3A'), +selector: unescape('selector%3A'), category: 'accessing', -fn: function (aNode){ +fn: function (aString){ var self=this; -(self['@right']=aNode); +(self['@selector']=aString); return self;}, -args: ["aNode"], -source: unescape('right%3A%20aNode%0A%09right%20%3A%3D%20aNode'), +args: ["aString"], +source: unescape('selector%3A%20aString%0A%09selector%20%3A%3D%20aString'), messageSends: [], referencedClasses: [] }), -smalltalk.AssignmentNode); +smalltalk.SendNode); smalltalk.addMethod( -unescape('_accept_'), +unescape('_valueForReceiver_'), smalltalk.method({ -selector: unescape('accept%3A'), -category: 'visiting', -fn: function (aVisitor){ +selector: unescape('valueForReceiver%3A'), +category: 'accessing', +fn: function (anObject){ var self=this; -smalltalk.send(aVisitor, "_visitAssignmentNode_", [self]); +return (function($rec){smalltalk.send($rec, "_receiver_", [(($receiver = smalltalk.send(self, "_receiver", [])) == nil || $receiver == undefined) ? (function(){return anObject;})() : (function(){return smalltalk.send(smalltalk.send(self, "_receiver", []), "_valueForReceiver_", [anObject]);})()]);smalltalk.send($rec, "_selector_", [smalltalk.send(self, "_selector", [])]);smalltalk.send($rec, "_arguments_", [smalltalk.send(self, "_arguments", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.SendNode || SendNode), "_new", [])); return self;}, -args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitAssignmentNode%3A%20self'), -messageSends: ["visitAssignmentNode:"], -referencedClasses: [] +args: ["anObject"], +source: unescape('valueForReceiver%3A%20anObject%0A%09%5ESendNode%20new%0A%09%20%20%20%20receiver%3A%20%28self%20receiver%20%0A%09%09ifNil%3A%20%5BanObject%5D%0A%09%09ifNotNil%3A%20%5Bself%20receiver%20valueForReceiver%3A%20anObject%5D%29%3B%0A%09%20%20%20%20selector%3A%20self%20selector%3B%0A%09%20%20%20%20arguments%3A%20self%20arguments%3B%0A%09%20%20%20%20yourself'), +messageSends: ["receiver:", "ifNil:ifNotNil:", "receiver", "valueForReceiver:", "selector:", "selector", "arguments:", "arguments", "yourself", "new"], +referencedClasses: ["SendNode"] }), -smalltalk.AssignmentNode); +smalltalk.SendNode); -smalltalk.addClass('DynamicArrayNode', smalltalk.Node, [], 'Compiler'); +smalltalk.addClass('SequenceNode', smalltalk.Node, ['temps'], 'Compiler'); smalltalk.addMethod( unescape('_accept_'), smalltalk.method({ @@ -1320,213 +1185,238 @@ selector: unescape('accept%3A'), category: 'visiting', fn: function (aVisitor){ var self=this; -smalltalk.send(aVisitor, "_visitDynamicArrayNode_", [self]); +smalltalk.send(aVisitor, "_visitSequenceNode_", [self]); return self;}, args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitDynamicArrayNode%3A%20self'), -messageSends: ["visitDynamicArrayNode:"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitSequenceNode%3A%20self'), +messageSends: ["visitSequenceNode:"], referencedClasses: [] }), -smalltalk.DynamicArrayNode); - - +smalltalk.SequenceNode); -smalltalk.addClass('Compiler', smalltalk.NodeVisitor, ['stream', 'nestedBlocks', 'earlyReturn', 'currentClass', 'currentSelector', 'unknownVariables', 'tempVariables', 'messageSends', 'referencedClasses', 'classReferenced', 'source', 'argVariables'], 'Compiler'); smalltalk.addMethod( -unescape('_initialize'), +unescape('_asBlockSequenceNode'), smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', +selector: unescape('asBlockSequenceNode'), +category: 'testing', fn: function (){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.NodeVisitor); -(self['@stream']=smalltalk.send("", "_writeStream", [])); -(self['@unknownVariables']=[]); -(self['@tempVariables']=[]); -(self['@argVariables']=[]); -(self['@messageSends']=[]); -(self['@classReferenced']=[]); +return (function($rec){smalltalk.send($rec, "_nodes_", [smalltalk.send(self, "_nodes", [])]);smalltalk.send($rec, "_temps_", [smalltalk.send(self, "_temps", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.BlockSequenceNode || BlockSequenceNode), "_new", [])); return self;}, args: [], -source: unescape('initialize%0A%09super%20initialize.%0A%09stream%20%3A%3D%20%27%27%20writeStream.%20%0A%09unknownVariables%20%3A%3D%20%23%28%29.%0A%09tempVariables%20%3A%3D%20%23%28%29.%0A%09argVariables%20%3A%3D%20%23%28%29.%0A%09messageSends%20%3A%3D%20%23%28%29.%0A%09classReferenced%20%3A%3D%20%23%28%29'), -messageSends: ["initialize", "writeStream"], -referencedClasses: [] +source: unescape('asBlockSequenceNode%0A%09%5EBlockSequenceNode%20new%0A%09%20%20%20%20nodes%3A%20self%20nodes%3B%0A%09%20%20%20%20temps%3A%20self%20temps%3B%0A%09%20%20%20%20yourself'), +messageSends: ["nodes:", "nodes", "temps:", "temps", "yourself", "new"], +referencedClasses: ["BlockSequenceNode"] }), -smalltalk.Compiler); +smalltalk.SequenceNode); smalltalk.addMethod( -unescape('_parser'), +unescape('_temps'), smalltalk.method({ -selector: unescape('parser'), +selector: unescape('temps'), category: 'accessing', fn: function (){ var self=this; -return smalltalk.send((smalltalk.SmalltalkParser || SmalltalkParser), "_new", []); +return (($receiver = self['@temps']) == nil || $receiver == undefined) ? (function(){return [];})() : $receiver; return self;}, args: [], -source: unescape('parser%0A%09%5ESmalltalkParser%20new'), -messageSends: ["new"], -referencedClasses: ["SmalltalkParser"] +source: unescape('temps%0A%09%5Etemps%20ifNil%3A%20%5B%23%28%29%5D'), +messageSends: ["ifNil:"], +referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.SequenceNode); smalltalk.addMethod( -unescape('_currentClass'), +unescape('_temps_'), smalltalk.method({ -selector: unescape('currentClass'), +selector: unescape('temps%3A'), category: 'accessing', +fn: function (aCollection){ +var self=this; +(self['@temps']=aCollection); +return self;}, +args: ["aCollection"], +source: unescape('temps%3A%20aCollection%0A%09temps%20%3A%3D%20aCollection'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.SequenceNode); + + + +smalltalk.addClass('BlockSequenceNode', smalltalk.SequenceNode, [], 'Compiler'); +smalltalk.addMethod( +unescape('_accept_'), +smalltalk.method({ +selector: unescape('accept%3A'), +category: 'visiting', +fn: function (aVisitor){ +var self=this; +smalltalk.send(aVisitor, "_visitBlockSequenceNode_", [self]); +return self;}, +args: ["aVisitor"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitBlockSequenceNode%3A%20self'), +messageSends: ["visitBlockSequenceNode:"], +referencedClasses: [] +}), +smalltalk.BlockSequenceNode); + +smalltalk.addMethod( +unescape('_isBlockSequenceNode'), +smalltalk.method({ +selector: unescape('isBlockSequenceNode'), +category: 'testing', fn: function (){ var self=this; -return self['@currentClass']; +return true; return self;}, args: [], -source: unescape('currentClass%0A%09%5EcurrentClass'), +source: unescape('isBlockSequenceNode%0A%09%5Etrue'), messageSends: [], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.BlockSequenceNode); + + +smalltalk.addClass('ValueNode', smalltalk.Node, ['value'], 'Compiler'); smalltalk.addMethod( -unescape('_currentClass_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('currentClass%3A'), -category: 'accessing', -fn: function (aClass){ +selector: unescape('accept%3A'), +category: 'visiting', +fn: function (aVisitor){ var self=this; -(self['@currentClass']=aClass); +smalltalk.send(aVisitor, "_visitValueNode_", [self]); return self;}, -args: ["aClass"], -source: unescape('currentClass%3A%20aClass%0A%09currentClass%20%3A%3D%20aClass'), -messageSends: [], +args: ["aVisitor"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitValueNode%3A%20self'), +messageSends: ["visitValueNode:"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.ValueNode); smalltalk.addMethod( -unescape('_loadExpression_'), +unescape('_isValueNode'), smalltalk.method({ -selector: unescape('loadExpression%3A'), -category: 'compiling', -fn: function (aString){ +selector: unescape('isValueNode'), +category: 'testing', +fn: function (){ var self=this; -var result=nil; -smalltalk.send((smalltalk.DoIt || DoIt), "_addCompiledMethod_", [smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compileExpression_", [aString])])]); -(result=smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt), "_new", []), "_doIt", [])); -smalltalk.send((smalltalk.DoIt || DoIt), "_removeCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt), "_methodDictionary", []), "_at_", ["doIt"])]); -return result; +return true; return self;}, -args: ["aString"], -source: unescape('loadExpression%3A%20aString%0A%09%7C%20result%20%7C%0A%09DoIt%20addCompiledMethod%3A%20%28self%20eval%3A%20%28self%20compileExpression%3A%20aString%29%29.%0A%09result%20%3A%3D%20DoIt%20new%20doIt.%0A%09DoIt%20removeCompiledMethod%3A%20%28DoIt%20methodDictionary%20at%3A%20%27doIt%27%29.%0A%09%5Eresult'), -messageSends: ["addCompiledMethod:", "eval:", "compileExpression:", "doIt", "new", "removeCompiledMethod:", "at:", "methodDictionary"], -referencedClasses: ["DoIt"] +args: [], +source: unescape('isValueNode%0A%09%5Etrue'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.ValueNode); smalltalk.addMethod( -unescape('_load_forClass_'), +unescape('_value'), smalltalk.method({ -selector: unescape('load%3AforClass%3A'), -category: 'compiling', -fn: function (aString, aClass){ +selector: unescape('value'), +category: 'accessing', +fn: function (){ var self=this; -var compiled=nil; -(compiled=smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compile_forClass_", [aString, aClass])])); -smalltalk.send(self, "_setupClass_", [aClass]); -return compiled; +return self['@value']; return self;}, -args: ["aString", "aClass"], -source: unescape('load%3A%20aString%20forClass%3A%20aClass%0A%09%7C%20compiled%20%7C%0A%09compiled%20%3A%3D%20self%20eval%3A%20%28self%20compile%3A%20aString%20forClass%3A%20aClass%29.%0A%09self%20setupClass%3A%20aClass.%0A%09%5Ecompiled'), -messageSends: ["eval:", "compile:forClass:", "setupClass:"], +args: [], +source: unescape('value%0A%09%5Evalue'), +messageSends: [], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.ValueNode); smalltalk.addMethod( -unescape('_compile_forClass_'), +unescape('_value_'), smalltalk.method({ -selector: unescape('compile%3AforClass%3A'), -category: 'compiling', -fn: function (aString, aClass){ +selector: unescape('value%3A'), +category: 'accessing', +fn: function (anObject){ var self=this; -smalltalk.send(self, "_currentClass_", [aClass]); -smalltalk.send(self, "_source_", [aString]); -return smalltalk.send(self, "_compile_", [aString]); +(self['@value']=anObject); return self;}, -args: ["aString", "aClass"], -source: unescape('compile%3A%20aString%20forClass%3A%20aClass%0A%09self%20currentClass%3A%20aClass.%0A%09self%20source%3A%20aString.%0A%09%5Eself%20compile%3A%20aString'), -messageSends: ["currentClass:", "source:", "compile:"], +args: ["anObject"], +source: unescape('value%3A%20anObject%0A%09value%20%3A%3D%20anObject'), +messageSends: [], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.ValueNode); + + +smalltalk.addClass('VariableNode', smalltalk.ValueNode, ['assigned'], 'Compiler'); smalltalk.addMethod( -unescape('_compileExpression_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('compileExpression%3A'), -category: 'compiling', -fn: function (aString){ +selector: unescape('accept%3A'), +category: 'visiting', +fn: function (aVisitor){ var self=this; -smalltalk.send(self, "_currentClass_", [(smalltalk.DoIt || DoIt)]); -smalltalk.send(self, "_source_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")])]); -return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [smalltalk.send(self, "_source", [])])]); +smalltalk.send(aVisitor, "_visitVariableNode_", [self]); return self;}, -args: ["aString"], -source: unescape('compileExpression%3A%20aString%0A%09self%20currentClass%3A%20DoIt.%0A%09self%20source%3A%20%27doIt%20%5E%5B%27%2C%20aString%2C%20%27%5D%20value%27.%0A%09%5Eself%20compileNode%3A%20%28self%20parse%3A%20self%20source%29'), -messageSends: ["currentClass:", "source:", unescape("%2C"), "compileNode:", "parse:", "source"], -referencedClasses: ["DoIt"] +args: ["aVisitor"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitVariableNode%3A%20self'), +messageSends: ["visitVariableNode:"], +referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.VariableNode); smalltalk.addMethod( -unescape('_eval_'), +unescape('_assigned'), smalltalk.method({ -selector: unescape('eval%3A'), -category: 'compiling', -fn: function (aString){ +selector: unescape('assigned'), +category: 'accessing', +fn: function (){ var self=this; -return eval(aString); +return (($receiver = self['@assigned']) == nil || $receiver == undefined) ? (function(){return false;})() : $receiver; return self;}, -args: ["aString"], -source: unescape('eval%3A%20aString%0A%09%3Creturn%20eval%28aString%29%3E'), -messageSends: [], +args: [], +source: unescape('assigned%0A%09%5Eassigned%20ifNil%3A%20%5Bfalse%5D'), +messageSends: ["ifNil:"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.VariableNode); smalltalk.addMethod( -unescape('_compile_'), +unescape('_assigned_'), smalltalk.method({ -selector: unescape('compile%3A'), -category: 'compiling', -fn: function (aString){ +selector: unescape('assigned%3A'), +category: 'accessing', +fn: function (aBoolean){ var self=this; -return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [aString])]); +(self['@assigned']=aBoolean); return self;}, -args: ["aString"], -source: unescape('compile%3A%20aString%0A%09%5Eself%20compileNode%3A%20%28self%20parse%3A%20aString%29'), -messageSends: ["compileNode:", "parse:"], +args: ["aBoolean"], +source: unescape('assigned%3A%20aBoolean%0A%09assigned%20%3A%3D%20aBoolean'), +messageSends: [], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.VariableNode); + + +smalltalk.addClass('ClassReferenceNode', smalltalk.VariableNode, [], 'Compiler'); smalltalk.addMethod( -unescape('_compileNode_'), +unescape('_accept_'), smalltalk.method({ -selector: unescape('compileNode%3A'), -category: 'compiling', -fn: function (aNode){ +selector: unescape('accept%3A'), +category: 'visiting', +fn: function (aVisitor){ var self=this; -(self['@stream']=smalltalk.send("", "_writeStream", [])); -smalltalk.send(self, "_visit_", [aNode]); -return smalltalk.send(self['@stream'], "_contents", []); +smalltalk.send(aVisitor, "_visitClassReferenceNode_", [self]); return self;}, -args: ["aNode"], -source: unescape('compileNode%3A%20aNode%0A%09stream%20%3A%3D%20%27%27%20writeStream.%0A%09self%20visit%3A%20aNode.%0A%09%5Estream%20contents'), -messageSends: ["writeStream", "visit:", "contents"], +args: ["aVisitor"], +source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitClassReferenceNode%3A%20self'), +messageSends: ["visitClassReferenceNode:"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.ClassReferenceNode); + + +smalltalk.addClass('NodeVisitor', smalltalk.Object, [], 'Compiler'); smalltalk.addMethod( unescape('_visit_'), smalltalk.method({ @@ -1541,50 +1431,23 @@ source: unescape('visit%3A%20aNode%0A%09aNode%20accept%3A%20self'), messageSends: ["accept:"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitMethodNode_'), +unescape('_visitAssignmentNode_'), smalltalk.method({ -selector: unescape('visitMethodNode%3A'), +selector: unescape('visitAssignmentNode%3A'), category: 'visiting', fn: function (aNode){ var self=this; -var str=nil; -var currentSelector=nil; -(self['@currentSelector']=smalltalk.send(smalltalk.send(aNode, "_selector", []), "_asSelector", [])); -(self['@nestedBlocks']=(0)); -(self['@earlyReturn']=false); -(self['@messageSends']=[]); -(self['@referencedClasses']=[]); -(self['@unknownVariables']=[]); -(self['@tempVariables']=[]); -(self['@argVariables']=[]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20%22"), "__comma", [smalltalk.send(aNode, "_selector", [])]), "__comma", [unescape("%22%2C")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("source%3A%20unescape%28%22"), "__comma", [smalltalk.send(smalltalk.send(self, "_source", []), "_escaped", [])]), "__comma", [unescape("%22%29%2C")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("fn%3A%20function%28")]); -smalltalk.send(smalltalk.send(aNode, "_arguments", []), "_do_separatedBy_", [(function(each){smalltalk.send(self['@argVariables'], "_add_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%29%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("var%20self%3Dthis%3B")]);return smalltalk.send($rec, "_lf", []);})(self['@stream']); -(str=self['@stream']); -(self['@stream']=smalltalk.send("", "_writeStream", [])); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]); -((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(str, "_nextPutAll_", [unescape("try%7B")]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(str, "_nextPutAll_", [unescape("try%7B")]);})])); -smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self['@stream'], "_contents", [])]); -(self['@stream']=str); -(function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("return%20self%3B")]);})(self['@stream']); -((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%7D%20catch%28e%29%20%7Bif%28e.name%20%3D%3D%3D%20%27stReturn%27%20%26%26%20e.selector%20%3D%3D%3D%20"), "__comma", [smalltalk.send(self['@currentSelector'], "_printString", [])]), "__comma", [unescape("%29%7Breturn%20e.fn%28%29%7D%20throw%28e%29%7D")])]);})(self['@stream']);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%7D%20catch%28e%29%20%7Bif%28e.name%20%3D%3D%3D%20%27stReturn%27%20%26%26%20e.selector%20%3D%3D%3D%20"), "__comma", [smalltalk.send(self['@currentSelector'], "_printString", [])]), "__comma", [unescape("%29%7Breturn%20e.fn%28%29%7D%20throw%28e%29%7D")])]);})(self['@stream']);})])); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D")]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%2C"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", ["messageSends: "])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@messageSends'], "_asJavascript", []), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("args: ", "__comma", [smalltalk.send(self['@argVariables'], "_asJavascript", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("referencedClasses%3A%20%5B")]);})(self['@stream']); -smalltalk.send(self['@referencedClasses'], "_do_separatedBy_", [(function(each){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(each, "_printString", [])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D")]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29")]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;}, args: ["aNode"], -source: unescape('visitMethodNode%3A%20aNode%0A%09%7C%20str%20currentSelector%20%7C%20%0A%09currentSelector%20%3A%3D%20aNode%20selector%20asSelector.%0A%09nestedBlocks%20%3A%3D%200.%0A%09earlyReturn%20%3A%3D%20false.%0A%09messageSends%20%3A%3D%20%23%28%29.%0A%09referencedClasses%20%3A%3D%20%23%28%29.%0A%09unknownVariables%20%3A%3D%20%23%28%29.%0A%09tempVariables%20%3A%3D%20%23%28%29.%0A%09argVariables%20%3A%3D%20%23%28%29.%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.method%28%7B%27%3B%20lf%3B%0A%09%20%20%20%20nextPutAll%3A%20%27selector%3A%20%22%27%2C%20aNode%20selector%2C%20%27%22%2C%27%3B%20lf.%0A%09stream%20nextPutAll%3A%20%27source%3A%20unescape%28%22%27%2C%20self%20source%20escaped%2C%20%27%22%29%2C%27%3Blf.%0A%09stream%20nextPutAll%3A%20%27fn%3A%20function%28%27.%0A%09aNode%20arguments%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09argVariables%20add%3A%20each.%0A%09%09stream%20nextPutAll%3A%20each%5D%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20%27%29%7B%27%3B%20lf%3B%0A%09%20%20%20%20nextPutAll%3A%20%27var%20self%3Dthis%3B%27%3B%20lf.%0A%09str%20%3A%3D%20stream.%0A%09stream%20%3A%3D%20%27%27%20writeStream.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20visit%3A%20each%5D.%0A%09earlyReturn%20ifTrue%3A%20%5B%0A%09%20%20%20%20str%20nextPutAll%3A%20%27try%7B%27%5D.%0A%09str%20nextPutAll%3A%20stream%20contents.%0A%09stream%20%3A%3D%20str.%0A%09stream%20%0A%09%20%20%20%20lf%3B%20%0A%09%20%20%20%20nextPutAll%3A%20%27return%20self%3B%27.%0A%09earlyReturn%20ifTrue%3A%20%5B%0A%09%20%20%20%20stream%20lf%3B%20nextPutAll%3A%20%27%7D%20catch%28e%29%20%7Bif%28e.name%20%3D%3D%3D%20%27%27stReturn%27%27%20%26%26%20e.selector%20%3D%3D%3D%20%27%2C%20currentSelector%20printString%2C%20%27%29%7Breturn%20e.fn%28%29%7D%20throw%28e%29%7D%27%5D.%0A%09stream%20nextPutAll%3A%20%27%7D%27.%0A%09stream%20%0A%09%09nextPutAll%3A%20%27%2C%27%2C%20String%20lf%2C%20%27messageSends%3A%20%27%3B%0A%09%09nextPutAll%3A%20messageSends%20asJavascript%2C%20%27%2C%27%3B%20lf%3B%0A%20%20%20%20%20%20%20%20%20%20%09nextPutAll%3A%20%27args%3A%20%27%2C%20argVariables%20asJavascript%2C%20%27%2C%27%3B%20lf%3B%0A%09%09nextPutAll%3A%20%27referencedClasses%3A%20%5B%27.%0A%09referencedClasses%20%0A%09%09do%3A%20%5B%3Aeach%20%7C%20stream%20nextPutAll%3A%20each%20printString%5D%0A%09%09separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%27%5D.%0A%09stream%20nextPutAll%3A%20%27%5D%27.%0A%09stream%20nextPutAll%3A%20%27%7D%29%27'), -messageSends: ["asSelector", "selector", "nextPutAll:", "lf", unescape("%2C"), "escaped", "source", "do:separatedBy:", "arguments", "add:", "writeStream", "do:", "nodes", "visit:", "ifTrue:", "contents", "printString", "asJavascript"], -referencedClasses: ["String"] +source: unescape('visitAssignmentNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), +messageSends: ["visitNode:"], +referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( unescape('_visitBlockNode_'), @@ -1593,420 +1456,440 @@ selector: unescape('visitBlockNode%3A'), category: 'visiting', fn: function (aNode){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28function%28")]); -smalltalk.send(smalltalk.send(aNode, "_parameters", []), "_do_separatedBy_", [(function(each){smalltalk.send(self['@tempVariables'], "_add_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29%7B")]); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29")]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;}, args: ["aNode"], -source: unescape('visitBlockNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20%27%28function%28%27.%0A%09aNode%20parameters%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%0A%09%09tempVariables%20add%3A%20each.%0A%09%09stream%20nextPutAll%3A%20each%5D%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%09stream%20nextPutAll%3A%20%27%29%7B%27.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%20self%20visit%3A%20each%5D.%0A%09stream%20nextPutAll%3A%20%27%7D%29%27'), -messageSends: ["nextPutAll:", "do:separatedBy:", "parameters", "add:", "do:", "nodes", "visit:"], +source: unescape('visitBlockNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), +messageSends: ["visitNode:"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitSequenceNode_'), +unescape('_visitBlockSequenceNode_'), smalltalk.method({ -selector: unescape('visitSequenceNode%3A'), +selector: unescape('visitBlockSequenceNode%3A'), category: 'visiting', fn: function (aNode){ var self=this; -smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil; -(temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);}), (function(){return smalltalk.send(self['@stream'], "_lf", []);})]); +smalltalk.send(self, "_visitSequenceNode_", [aNode]); return self;}, args: ["aNode"], -source: unescape('visitSequenceNode%3A%20aNode%0A%09aNode%20temps%20do%3A%20%5B%3Aeach%20%7C%7C%20temp%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20temp%20%3A%3D%20self%20safeVariableNameFor%3A%20each.%0A%09%20%20%20%20tempVariables%20add%3A%20temp.%0A%09%20%20%20%20stream%20nextPutAll%3A%20%27var%20%27%2C%20temp%2C%20%27%3Dnil%3B%27%3B%20lf%5D.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20visit%3A%20each.%0A%09%20%20%20%20stream%20nextPutAll%3A%20%27%3B%27%5D%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20lf%5D'), -messageSends: ["do:", "temps", "safeVariableNameFor:", "add:", "nextPutAll:", unescape("%2C"), "lf", "do:separatedBy:", "nodes", "visit:"], +source: unescape('visitBlockSequenceNode%3A%20aNode%0A%09self%20visitSequenceNode%3A%20aNode'), +messageSends: ["visitSequenceNode:"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitBlockSequenceNode_'), +unescape('_visitCascadeNode_'), smalltalk.method({ -selector: unescape('visitBlockSequenceNode%3A'), +selector: unescape('visitCascadeNode%3A'), category: 'visiting', fn: function (aNode){ var self=this; -var index=nil; -(self['@nestedBlocks']=((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); -((($receiver = smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("return%20nil%3B")]);})() : (function(){smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil; -(temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]);(index=(0));return smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){(index=((($receiver = index).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));((($receiver = smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("return%20nil%3B")]);}), (function(){smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil; -(temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]);(index=(0));return smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){(index=((($receiver = index).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));((($receiver = smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]);})])); -(self['@nestedBlocks']=((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)]))); +smalltalk.send(self, "_visitNode_", [aNode]); return self;}, args: ["aNode"], -source: unescape('visitBlockSequenceNode%3A%20aNode%0A%09%7C%20index%20%7C%0A%09nestedBlocks%20%3A%3D%20nestedBlocks%20+%201.%0A%09aNode%20nodes%20isEmpty%0A%09%20%20%20%20ifTrue%3A%20%5B%0A%09%09stream%20nextPutAll%3A%20%27return%20nil%3B%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5B%0A%09%09aNode%20temps%20do%3A%20%5B%3Aeach%20%7C%20%7C%20temp%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20temp%20%3A%3D%20self%20safeVariableNameFor%3A%20each.%0A%09%09%20%20%20%20tempVariables%20add%3A%20temp.%0A%09%09%20%20%20%20stream%20nextPutAll%3A%20%27var%20%27%2C%20temp%2C%20%27%3Dnil%3B%27%3B%20lf%5D.%0A%09%09index%20%3A%3D%200.%0A%09%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%20%20%20%20index%20%3A%3D%20index%20+%201.%0A%09%09%20%20%20%20index%20%3D%20aNode%20nodes%20size%20ifTrue%3A%20%5B%0A%09%09%09stream%20nextPutAll%3A%20%27return%20%27%5D.%0A%09%09%20%20%20%20self%20visit%3A%20each.%0A%09%09%20%20%20%20stream%20nextPutAll%3A%20%27%3B%27%5D%5D.%0A%09nestedBlocks%20%3A%3D%20nestedBlocks%20-%201'), -messageSends: [unescape("+"), "ifTrue:ifFalse:", "isEmpty", "nodes", "nextPutAll:", "do:", "temps", "safeVariableNameFor:", "add:", unescape("%2C"), "lf", "ifTrue:", unescape("%3D"), "size", "visit:", unescape("-")], +source: unescape('visitCascadeNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), +messageSends: ["visitNode:"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitReturnNode_'), +unescape('_visitClassReferenceNode_'), smalltalk.method({ -selector: unescape('visitReturnNode%3A'), +selector: unescape('visitClassReferenceNode%3A'), category: 'visiting', fn: function (aNode){ var self=this; -((($receiver = ((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver >(0) : smalltalk.send($receiver, "__gt", [(0)]))).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (self['@earlyReturn']=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (self['@earlyReturn']=true);})])); -((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%28function%28%29%7Bthrow%28")]);smalltalk.send($rec, "_nextPutAll_", [unescape("%7Bname%3A%20%27stReturn%27%2C%20selector%3A%20")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@currentSelector'], "_printString", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20fn%3A%20function%28%29%7Breturn%20")]);})(self['@stream']);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%28function%28%29%7Bthrow%28")]);smalltalk.send($rec, "_nextPutAll_", [unescape("%7Bname%3A%20%27stReturn%27%2C%20selector%3A%20")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@currentSelector'], "_printString", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20fn%3A%20function%28%29%7Breturn%20")]);})(self['@stream']);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})])); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]); -((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%7D%29%7D%29%28%29")]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%7D%29%7D%29%28%29")]);})])); +(function($rec){smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(aNode, "_value", [])]);})(self); return self;}, args: ["aNode"], -source: unescape('visitReturnNode%3A%20aNode%0A%09nestedBlocks%20%3E%200%20ifTrue%3A%20%5B%0A%09%20%20%20%20earlyReturn%20%3A%3D%20true%5D.%0A%09earlyReturn%0A%09%20%20%20%20ifTrue%3A%20%5B%0A%09%09stream%0A%09%09%20%20%20%20nextPutAll%3A%20%27%28function%28%29%7Bthrow%28%27%3B%0A%09%09%20%20%20%20nextPutAll%3A%20%27%7Bname%3A%20%27%27stReturn%27%27%2C%20selector%3A%20%27%3B%0A%09%09%20%20%20%20nextPutAll%3A%20currentSelector%20printString%3B%0A%09%09%20%20%20%20nextPutAll%3A%20%27%2C%20fn%3A%20function%28%29%7Breturn%20%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5Bstream%20nextPutAll%3A%20%27return%20%27%5D.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20visit%3A%20each%5D.%0A%09earlyReturn%20ifTrue%3A%20%5B%0A%09%20%20%20%20stream%20nextPutAll%3A%20%27%7D%7D%29%7D%29%28%29%27%5D'), -messageSends: ["ifTrue:", unescape("%3E"), "ifTrue:ifFalse:", "nextPutAll:", "printString", "do:", "nodes", "visit:"], +source: unescape('visitClassReferenceNode%3A%20aNode%0A%09self%20%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.%27%3B%0A%09%20%20%20%20nextPutAll%3A%20aNode%20value'), +messageSends: ["nextPutAll:", "value"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitSendNode_'), +unescape('_visitDynamicArrayNode_'), smalltalk.method({ -selector: unescape('visitSendNode%3A'), +selector: unescape('visitDynamicArrayNode%3A'), category: 'visiting', fn: function (aNode){ var self=this; -var str=nil; -var receiver=nil; -var superSend=nil; -var inlined=nil; -(str=self['@stream']); -((($receiver = smalltalk.send(self['@messageSends'], "_includes_", [smalltalk.send(aNode, "_selector", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@messageSends'], "_add_", [smalltalk.send(aNode, "_selector", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@messageSends'], "_add_", [smalltalk.send(aNode, "_selector", [])]);})])); -(self['@stream']=smalltalk.send("", "_writeStream", [])); -smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]); -(superSend=smalltalk.send(smalltalk.send(self['@stream'], "_contents", []), "__eq", ["super"])); -(receiver=((($receiver = superSend).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "self";})() : (function(){return smalltalk.send(self['@stream'], "_contents", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "self";}), (function(){return smalltalk.send(self['@stream'], "_contents", []);})]))); -(self['@stream']=str); -((($receiver = smalltalk.send(self, "_performOptimizations", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inlineLiteral_receiverNode_argumentNodes_", [smalltalk.send(aNode, "_selector", []), smalltalk.send(aNode, "_receiver", []), smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})]));})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inlineLiteral_receiverNode_argumentNodes_", [smalltalk.send(aNode, "_selector", []), smalltalk.send(aNode, "_receiver", []), smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})]));}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})])); +smalltalk.send(self, "_visitNode_", [aNode]); return self;}, args: ["aNode"], -source: unescape('visitSendNode%3A%20aNode%0A%20%20%20%20%20%20%20%20%7C%20str%20receiver%20superSend%20inlined%20%7C%0A%20%20%20%20%20%20%20%20str%20%3A%3D%20stream.%0A%20%20%20%20%20%20%20%20%28messageSends%20includes%3A%20aNode%20selector%29%20ifFalse%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20messageSends%20add%3A%20aNode%20selector%5D.%0A%20%20%20%20%20%20%20%20stream%20%3A%3D%20%27%27%20writeStream.%0A%20%20%20%20%20%20%20%20self%20visit%3A%20aNode%20receiver.%0A%20%20%20%20%20%20%20%20superSend%20%3A%3D%20stream%20contents%20%3D%20%27super%27.%0A%20%20%20%20%20%20%20%20receiver%20%3A%3D%20superSend%20ifTrue%3A%20%5B%27self%27%5D%20ifFalse%3A%20%5Bstream%20contents%5D.%0A%20%20%20%20%20%20%20%20stream%20%3A%3D%20str.%0A%09%0A%09self%20performOptimizations%20%0A%09%09ifTrue%3A%20%5B%0A%09%09%09%28self%20inlineLiteral%3A%20aNode%20selector%20receiverNode%3A%20aNode%20receiver%20argumentNodes%3A%20aNode%20arguments%29%20ifFalse%3A%20%5B%0A%09%09%09%09%28self%20inline%3A%20aNode%20selector%20receiver%3A%20receiver%20argumentNodes%3A%20aNode%20arguments%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09ifTrue%3A%20%5Bstream%20nextPutAll%3A%20%27%20%3A%20%27%2C%20%28self%20send%3A%20aNode%20selector%20to%3A%20%27%24receiver%27%20arguments%3A%20aNode%20arguments%20superSend%3A%20superSend%29%2C%20%27%29%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09ifFalse%3A%20%5Bstream%20nextPutAll%3A%20%28self%20send%3A%20aNode%20selector%20to%3A%20receiver%20arguments%3A%20aNode%20arguments%20superSend%3A%20superSend%29%5D%5D%5D%0A%09%09ifFalse%3A%20%5Bstream%20nextPutAll%3A%20%28self%20send%3A%20aNode%20selector%20to%3A%20receiver%20arguments%3A%20aNode%20arguments%20superSend%3A%20superSend%29%5D'), -messageSends: ["ifFalse:", "includes:", "selector", "add:", "writeStream", "visit:", "receiver", unescape("%3D"), "contents", "ifTrue:ifFalse:", "performOptimizations", "inlineLiteral:receiverNode:argumentNodes:", "arguments", "inline:receiver:argumentNodes:", "nextPutAll:", unescape("%2C"), "send:to:arguments:superSend:"], +source: unescape('visitDynamicArrayNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), +messageSends: ["visitNode:"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitCascadeNode_'), +unescape('_visitDynamicDictionaryNode_'), smalltalk.method({ -selector: unescape('visitCascadeNode%3A'), +selector: unescape('visitDynamicDictionaryNode%3A'), category: 'visiting', fn: function (aNode){ var self=this; -var index=nil; -(index=(0)); -((($receiver = smalltalk.send(self['@tempVariables'], "_includes_", ["$rec"])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@tempVariables'], "_add_", ["$rec"]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@tempVariables'], "_add_", ["$rec"]);})])); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28function%28%24rec%29%7B")]); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){(index=((($receiver = index).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));((($receiver = smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));smalltalk.send(each, "_receiver_", [smalltalk.send(smalltalk.send((smalltalk.VariableNode || VariableNode), "_new", []), "_value_", ["$rec"])]);smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29%28")]); -smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29")]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;}, args: ["aNode"], -source: unescape('visitCascadeNode%3A%20aNode%0A%09%7C%20index%20%7C%0A%09index%20%3A%3D%200.%0A%09%28tempVariables%20includes%3A%20%27%24rec%27%29%20ifFalse%3A%20%5B%0A%09%09tempVariables%20add%3A%20%27%24rec%27%5D.%0A%09stream%20nextPutAll%3A%20%27%28function%28%24rec%29%7B%27.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20index%20%3A%3D%20index%20+%201.%0A%09%20%20%20%20index%20%3D%20aNode%20nodes%20size%20ifTrue%3A%20%5B%0A%09%09stream%20nextPutAll%3A%20%27return%20%27%5D.%0A%09%20%20%20%20each%20receiver%3A%20%28VariableNode%20new%20value%3A%20%27%24rec%27%29.%0A%09%20%20%20%20self%20visit%3A%20each.%0A%09%20%20%20%20stream%20nextPutAll%3A%20%27%3B%27%5D.%0A%09stream%20nextPutAll%3A%20%27%7D%29%28%27.%0A%09self%20visit%3A%20aNode%20receiver.%0A%09stream%20nextPutAll%3A%20%27%29%27'), -messageSends: ["ifFalse:", "includes:", "add:", "nextPutAll:", "do:", "nodes", unescape("+"), "ifTrue:", unescape("%3D"), "size", "receiver:", "value:", "new", "visit:", "receiver"], -referencedClasses: ["VariableNode"] +source: unescape('visitDynamicDictionaryNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), +messageSends: ["visitNode:"], +referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitValueNode_'), +unescape('_visitJSStatementNode_'), smalltalk.method({ -selector: unescape('visitValueNode%3A'), +selector: unescape('visitJSStatementNode%3A'), category: 'visiting', fn: function (aNode){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(aNode, "_value", []), "_asJavascript", [])]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("function%28%29%7B")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(aNode, "_source", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%28%29")]);})(self); return self;}, args: ["aNode"], -source: unescape('visitValueNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20aNode%20value%20asJavascript'), -messageSends: ["nextPutAll:", "asJavascript", "value"], +source: unescape('visitJSStatementNode%3A%20aNode%0A%09self%20%0A%09%20%20%20%20nextPutAll%3A%20%27function%28%29%7B%27%3B%0A%09%20%20%20%20nextPutAll%3A%20aNode%20source%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%7D%29%28%29%27'), +messageSends: ["nextPutAll:", "source"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitAssignmentNode_'), +unescape('_visitMethodNode_'), smalltalk.method({ -selector: unescape('visitAssignmentNode%3A'), +selector: unescape('visitMethodNode%3A'), category: 'visiting', fn: function (aNode){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28")]); -smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_left", [])]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3D")]); -smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_right", [])]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29")]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;}, args: ["aNode"], -source: unescape('visitAssignmentNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20%27%28%27.%0A%09self%20visit%3A%20aNode%20left.%0A%09stream%20nextPutAll%3A%20%27%3D%27.%0A%09self%20visit%3A%20aNode%20right.%0A%09stream%20nextPutAll%3A%20%27%29%27'), -messageSends: ["nextPutAll:", "visit:", "left", "right"], +source: unescape('visitMethodNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), +messageSends: ["visitNode:"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitClassReferenceNode_'), +unescape('_visitNode_'), smalltalk.method({ -selector: unescape('visitClassReferenceNode%3A'), +selector: unescape('visitNode%3A'), category: 'visiting', fn: function (aNode){ var self=this; -((($receiver = smalltalk.send(self['@referencedClasses'], "_includes_", [smalltalk.send(aNode, "_value", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@referencedClasses'], "_add_", [smalltalk.send(aNode, "_value", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@referencedClasses'], "_add_", [smalltalk.send(aNode, "_value", [])]);})])); -smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28smalltalk."), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%20%7C%7C%20")]), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%29")])]); + return self;}, args: ["aNode"], -source: unescape('visitClassReferenceNode%3A%20aNode%0A%09%28referencedClasses%20includes%3A%20aNode%20value%29%20ifFalse%3A%20%5B%0A%09%09referencedClasses%20add%3A%20aNode%20value%5D.%0A%09stream%20nextPutAll%3A%20%27%28smalltalk.%27%2C%20aNode%20value%2C%20%27%20%7C%7C%20%27%2C%20aNode%20value%2C%20%27%29%27'), -messageSends: ["ifFalse:", "includes:", "value", "add:", "nextPutAll:", unescape("%2C")], +source: unescape('visitNode%3A%20aNode'), +messageSends: [], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitVariableNode_'), +unescape('_visitReturnNode_'), smalltalk.method({ -selector: unescape('visitVariableNode%3A'), +selector: unescape('visitReturnNode%3A'), category: 'visiting', fn: function (aNode){ var self=this; -var varName=nil; -((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_currentClass", []), "_allInstanceVariableNames", []), "_includes_", [smalltalk.send(aNode, "_value", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("self%5B%27@"), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%27%5D")])]);})() : (function(){(varName=smalltalk.send(self, "_safeVariableNameFor_", [smalltalk.send(aNode, "_value", [])]));return ((($receiver = smalltalk.send(smalltalk.send(self, "_knownVariables", []), "_includes_", [varName])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("self%5B%27@"), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%27%5D")])]);}), (function(){(varName=smalltalk.send(self, "_safeVariableNameFor_", [smalltalk.send(aNode, "_value", [])]));return ((($receiver = smalltalk.send(smalltalk.send(self, "_knownVariables", []), "_includes_", [varName])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})]));})])); +smalltalk.send(self, "_visitNode_", [aNode]); return self;}, args: ["aNode"], -source: unescape('visitVariableNode%3A%20aNode%0A%09%7C%20varName%20%7C%0A%09%28self%20currentClass%20allInstanceVariableNames%20includes%3A%20aNode%20value%29%20%0A%09%09ifTrue%3A%20%5Bstream%20nextPutAll%3A%20%27self%5B%27%27@%27%2C%20aNode%20value%2C%20%27%27%27%5D%27%5D%0A%09%09ifFalse%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09varName%20%3A%3D%20self%20safeVariableNameFor%3A%20aNode%20value.%0A%09%09%09%28self%20knownVariables%20includes%3A%20varName%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09ifFalse%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09unknownVariables%20add%3A%20aNode%20value.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09aNode%20assigned%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09ifTrue%3A%20%5Bstream%20nextPutAll%3A%20varName%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09ifFalse%3A%20%5Bstream%20nextPutAll%3A%20%27%28typeof%20%27%2C%20varName%2C%20%27%20%3D%3D%20%27%27undefined%27%27%20%3F%20nil%20%3A%20%27%2C%20varName%2C%20%27%29%27%5D%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09aNode%20value%20%3D%20%27thisContext%27%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09ifTrue%3A%20%5Bstream%20nextPutAll%3A%20%27%28smalltalk.getThisContext%28%29%29%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09ifFalse%3A%20%5Bstream%20nextPutAll%3A%20varName%5D%5D%5D'), -messageSends: ["ifTrue:ifFalse:", "includes:", "allInstanceVariableNames", "currentClass", "value", "nextPutAll:", unescape("%2C"), "safeVariableNameFor:", "ifFalse:ifTrue:", "knownVariables", "add:", "assigned", unescape("%3D")], +source: unescape('visitReturnNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), +messageSends: ["visitNode:"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_visitJSStatementNode_'), +unescape('_visitSendNode_'), smalltalk.method({ -selector: unescape('visitJSStatementNode%3A'), +selector: unescape('visitSendNode%3A'), category: 'visiting', fn: function (aNode){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(aNode, "_source", []), "_replace_with_", [unescape("%3E%3E"), unescape("%3E")])]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;}, args: ["aNode"], -source: unescape('visitJSStatementNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20%28aNode%20source%20replace%3A%20%27%3E%3E%27%20with%3A%20%27%3E%27%29'), -messageSends: ["nextPutAll:", "replace:with:", "source"], +source: unescape('visitSendNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), +messageSends: ["visitNode:"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_parse_'), +unescape('_visitSequenceNode_'), smalltalk.method({ -selector: unescape('parse%3A'), -category: 'compiling', -fn: function (aString){ +selector: unescape('visitSequenceNode%3A'), +category: 'visiting', +fn: function (aNode){ var self=this; -return smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_parse_", [aString]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;}, -args: ["aString"], -source: unescape('parse%3A%20aString%0A%20%20%20%20%5ESmalltalk%20current%20parse%3A%20aString'), -messageSends: ["parse:", "current"], -referencedClasses: ["Smalltalk"] +args: ["aNode"], +source: unescape('visitSequenceNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), +messageSends: ["visitNode:"], +referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_parseExpression_'), +unescape('_visitValueNode_'), smalltalk.method({ -selector: unescape('parseExpression%3A'), -category: 'compiling', -fn: function (aString){ +selector: unescape('visitValueNode%3A'), +category: 'visiting', +fn: function (aNode){ var self=this; -return smalltalk.send(self, "_parse_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")])]); +smalltalk.send(self, "_visitNode_", [aNode]); return self;}, -args: ["aString"], -source: unescape('parseExpression%3A%20aString%0A%20%20%20%20%5Eself%20parse%3A%20%27doIt%20%5E%5B%27%2C%20aString%2C%20%27%5D%20value%27'), -messageSends: ["parse:", unescape("%2C")], +args: ["aNode"], +source: unescape('visitValueNode%3A%20aNode%0A%09self%20visitNode%3A%20aNode'), +messageSends: ["visitNode:"], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); smalltalk.addMethod( -unescape('_unknownVariables'), +unescape('_visitVariableNode_'), smalltalk.method({ -selector: unescape('unknownVariables'), -category: 'accessing', -fn: function (){ +selector: unescape('visitVariableNode%3A'), +category: 'visiting', +fn: function (aNode){ var self=this; -return smalltalk.send(self['@unknownVariables'], "_copy", []); + return self;}, -args: [], -source: unescape('unknownVariables%0A%09%5EunknownVariables%20copy'), -messageSends: ["copy"], +args: ["aNode"], +source: unescape('visitVariableNode%3A%20aNode'), +messageSends: [], referencedClasses: [] }), -smalltalk.Compiler); +smalltalk.NodeVisitor); + + +smalltalk.addClass('Compiler', smalltalk.NodeVisitor, ['stream', 'nestedBlocks', 'earlyReturn', 'currentClass', 'currentSelector', 'unknownVariables', 'tempVariables', 'messageSends', 'referencedClasses', 'classReferenced', 'source', 'argVariables'], 'Compiler'); smalltalk.addMethod( -unescape('_pseudoVariables'), +unescape('_argVariables'), smalltalk.method({ -selector: unescape('pseudoVariables'), +selector: unescape('argVariables'), category: 'accessing', fn: function (){ var self=this; -return ["self", "super", "true", "false", "nil", "thisContext"]; +return smalltalk.send(self['@argVariables'], "_copy", []); return self;}, args: [], -source: unescape('pseudoVariables%0A%09%5E%23%28%27self%27%20%27super%27%20%27true%27%20%27false%27%20%27nil%27%20%27thisContext%27%29'), -messageSends: [], +source: unescape('argVariables%0A%09%5EargVariables%20copy'), +messageSends: ["copy"], referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_tempVariables'), +unescape('_checkClass_for_'), smalltalk.method({ -selector: unescape('tempVariables'), -category: 'accessing', -fn: function (){ +selector: unescape('checkClass%3Afor%3A'), +category: 'optimizations', +fn: function (aClassName, receiver){ var self=this; -return smalltalk.send(self['@tempVariables'], "_copy", []); +smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28%28%28%24receiver%20%3D%20"), "__comma", [receiver]), "__comma", [unescape("%29.klass%20%3D%3D%3D%20smalltalk.")]), "__comma", [aClassName]), "__comma", [unescape("%29%20%3F%20")])]); return self;}, -args: [], -source: unescape('tempVariables%0A%09%5EtempVariables%20copy'), -messageSends: ["copy"], +args: ["aClassName", "receiver"], +source: unescape('checkClass%3A%20aClassName%20for%3A%20receiver%0A%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%28%28%28%24receiver%20%3D%20%27%2C%20receiver%2C%20%27%29.klass%20%3D%3D%3D%20smalltalk.%27%2C%20aClassName%2C%20%27%29%20%3F%20%27'), +messageSends: ["nextPutAll:", unescape("%2C")], referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_knownVariables'), +unescape('_classNameFor_'), smalltalk.method({ -selector: unescape('knownVariables'), +selector: unescape('classNameFor%3A'), category: 'accessing', -fn: function (){ +fn: function (aClass){ var self=this; -return (function($rec){smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_tempVariables", [])]);smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_argVariables", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_pseudoVariables", [])); +return ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);})() : (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);}), (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})])); return self;}, -args: [], -source: unescape('knownVariables%0A%09%5Eself%20pseudoVariables%20%0A%09%09addAll%3A%20self%20tempVariables%3B%0A%09%09addAll%3A%20self%20argVariables%3B%0A%09%09yourself'), -messageSends: ["addAll:", "tempVariables", "argVariables", "yourself", "pseudoVariables"], +args: ["aClass"], +source: unescape('classNameFor%3A%20aClass%0A%09%5EaClass%20isMetaclass%0A%09%20%20%20%20ifTrue%3A%20%5BaClass%20instanceClass%20name%2C%20%27.klass%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5B%0A%09%09aClass%20isNil%0A%09%09%20%20%20%20ifTrue%3A%20%5B%27nil%27%5D%0A%09%09%20%20%20%20ifFalse%3A%20%5BaClass%20name%5D%5D'), +messageSends: ["ifTrue:ifFalse:", "isMetaclass", unescape("%2C"), "name", "instanceClass", "isNil"], referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_recompile_'), +unescape('_compile_'), smalltalk.method({ -selector: unescape('recompile%3A'), +selector: unescape('compile%3A'), category: 'compiling', -fn: function (aClass){ +fn: function (aString){ var self=this; -smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_do_", [(function(each){var method=nil; -(method=smalltalk.send(self, "_load_forClass_", [smalltalk.send(each, "_source", []), aClass]));smalltalk.send(method, "_category_", [smalltalk.send(each, "_category", [])]);return smalltalk.send(aClass, "_addCompiledMethod_", [method]);})]); -((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})])); +return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [aString])]); return self;}, -args: ["aClass"], -source: unescape('recompile%3A%20aClass%0A%09aClass%20methodDictionary%20do%3A%20%5B%3Aeach%20%7C%7C%20method%20%7C%0A%09%09method%20%3A%3D%20self%20load%3A%20each%20source%20forClass%3A%20aClass.%0A%09%09method%20category%3A%20each%20category.%0A%09%09aClass%20addCompiledMethod%3A%20method%5D.%0A%09aClass%20isMetaclass%20ifFalse%3A%20%5Bself%20recompile%3A%20aClass%20class%5D'), -messageSends: ["do:", "methodDictionary", "load:forClass:", "source", "category:", "category", "addCompiledMethod:", "ifFalse:", "isMetaclass", "recompile:", "class"], +args: ["aString"], +source: unescape('compile%3A%20aString%0A%09%5Eself%20compileNode%3A%20%28self%20parse%3A%20aString%29'), +messageSends: ["compileNode:", "parse:"], referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_recompileAll'), +unescape('_compile_forClass_'), smalltalk.method({ -selector: unescape('recompileAll'), +selector: unescape('compile%3AforClass%3A'), category: 'compiling', -fn: function (){ +fn: function (aString, aClass){ var self=this; -smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){(function($rec){smalltalk.send($rec, "_show_", [each]);return smalltalk.send($rec, "_cr", []);})((smalltalk.Transcript || Transcript));return smalltalk.send((function(){return smalltalk.send(self, "_recompile_", [each]);}), "_valueWithTimeout_", [(100)]);})]); +smalltalk.send(self, "_currentClass_", [aClass]); +smalltalk.send(self, "_source_", [aString]); +return smalltalk.send(self, "_compile_", [aString]); return self;}, -args: [], -source: unescape('recompileAll%0A%09Smalltalk%20current%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09Transcript%20show%3A%20each%3B%20cr.%0A%09%09%5Bself%20recompile%3A%20each%5D%20valueWithTimeout%3A%20100%5D'), -messageSends: ["do:", "classes", "current", "show:", "cr", "valueWithTimeout:", "recompile:"], -referencedClasses: ["Smalltalk", "Transcript"] +args: ["aString", "aClass"], +source: unescape('compile%3A%20aString%20forClass%3A%20aClass%0A%09self%20currentClass%3A%20aClass.%0A%09self%20source%3A%20aString.%0A%09%5Eself%20compile%3A%20aString'), +messageSends: ["currentClass:", "source:", "compile:"], +referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_classNameFor_'), +unescape('_compileExpression_'), smalltalk.method({ -selector: unescape('classNameFor%3A'), -category: 'accessing', -fn: function (aClass){ +selector: unescape('compileExpression%3A'), +category: 'compiling', +fn: function (aString){ var self=this; -return ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);})() : (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);}), (function(){return ((($receiver = smalltalk.send(aClass, "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "nil";})() : (function(){return smalltalk.send(aClass, "_name", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]));})])); +smalltalk.send(self, "_currentClass_", [(smalltalk.DoIt || DoIt)]); +smalltalk.send(self, "_source_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")])]); +return smalltalk.send(self, "_compileNode_", [smalltalk.send(self, "_parse_", [smalltalk.send(self, "_source", [])])]); return self;}, -args: ["aClass"], -source: unescape('classNameFor%3A%20aClass%0A%09%5EaClass%20isMetaclass%0A%09%20%20%20%20ifTrue%3A%20%5BaClass%20instanceClass%20name%2C%20%27.klass%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5B%0A%09%09aClass%20isNil%0A%09%09%20%20%20%20ifTrue%3A%20%5B%27nil%27%5D%0A%09%09%20%20%20%20ifFalse%3A%20%5BaClass%20name%5D%5D'), -messageSends: ["ifTrue:ifFalse:", "isMetaclass", unescape("%2C"), "name", "instanceClass", "isNil"], +args: ["aString"], +source: unescape('compileExpression%3A%20aString%0A%09self%20currentClass%3A%20DoIt.%0A%09self%20source%3A%20%27doIt%20%5E%5B%27%2C%20aString%2C%20%27%5D%20value%27.%0A%09%5Eself%20compileNode%3A%20%28self%20parse%3A%20self%20source%29'), +messageSends: ["currentClass:", "source:", unescape("%2C"), "compileNode:", "parse:", "source"], +referencedClasses: ["DoIt"] +}), +smalltalk.Compiler); + +smalltalk.addMethod( +unescape('_compileNode_'), +smalltalk.method({ +selector: unescape('compileNode%3A'), +category: 'compiling', +fn: function (aNode){ +var self=this; +(self['@stream']=smalltalk.send("", "_writeStream", [])); +smalltalk.send(self, "_visit_", [aNode]); +return smalltalk.send(self['@stream'], "_contents", []); +return self;}, +args: ["aNode"], +source: unescape('compileNode%3A%20aNode%0A%09stream%20%3A%3D%20%27%27%20writeStream.%0A%09self%20visit%3A%20aNode.%0A%09%5Estream%20contents'), +messageSends: ["writeStream", "visit:", "contents"], referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_visitFailure_'), +unescape('_currentClass'), smalltalk.method({ -selector: unescape('visitFailure%3A'), -category: 'visiting', -fn: function (aFailure){ +selector: unescape('currentClass'), +category: 'accessing', +fn: function (){ var self=this; -smalltalk.send(self, "_error_", [smalltalk.send(aFailure, "_asString", [])]); +return self['@currentClass']; return self;}, -args: ["aFailure"], -source: unescape('visitFailure%3A%20aFailure%0A%09self%20error%3A%20aFailure%20asString'), -messageSends: ["error:", "asString"], +args: [], +source: unescape('currentClass%0A%09%5EcurrentClass'), +messageSends: [], referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_setupClass_'), +unescape('_currentClass_'), smalltalk.method({ -selector: unescape('setupClass%3A'), -category: 'compiling', +selector: unescape('currentClass%3A'), +category: 'accessing', fn: function (aClass){ var self=this; -smalltalk.init(aClass); +(self['@currentClass']=aClass); return self;}, args: ["aClass"], -source: unescape('setupClass%3A%20aClass%0A%09%3Csmalltalk.init%28aClass%29%3E'), +source: unescape('currentClass%3A%20aClass%0A%09currentClass%20%3A%3D%20aClass'), messageSends: [], referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_send_to_arguments_superSend_'), +unescape('_eval_'), smalltalk.method({ -selector: unescape('send%3Ato%3Aarguments%3AsuperSend%3A'), -category: 'visiting', -fn: function (aSelector, aReceiver, aCollection, aBoolean){ +selector: unescape('eval%3A'), +category: 'compiling', +fn: function (aString){ var self=this; -return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(str){var tmp=nil; -(tmp=self['@stream']);smalltalk.send(str, "_nextPutAll_", [unescape("smalltalk.send%28")]);smalltalk.send(str, "_nextPutAll_", [aReceiver]);smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%2C%20%22"), "__comma", [smalltalk.send(aSelector, "_asSelector", [])]), "__comma", [unescape("%22%2C%20%5B")])]);(self['@stream']=str);smalltalk.send(aCollection, "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]);(self['@stream']=tmp);smalltalk.send(str, "_nextPutAll_", [unescape("%5D")]);((($receiver = aBoolean).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(unescape("%2C%20smalltalk."), "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(smalltalk.send(self, "_currentClass", []), "_superclass", [])])])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(unescape("%2C%20smalltalk."), "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(smalltalk.send(self, "_currentClass", []), "_superclass", [])])])]);})]));return smalltalk.send(str, "_nextPutAll_", [unescape("%29")]);})]); +return eval(aString); return self;}, -args: ["aSelector", "aReceiver", "aCollection", "aBoolean"], -source: unescape('send%3A%20aSelector%20to%3A%20aReceiver%20arguments%3A%20aCollection%20superSend%3A%20aBoolean%0A%09%5EString%20streamContents%3A%20%5B%3Astr%20%7C%7C%20tmp%20%7C%0A%20%20%20%20%20%20%20%20%09tmp%20%3A%3D%20stream.%0A%09%09str%20nextPutAll%3A%20%27smalltalk.send%28%27.%0A%09%09str%20nextPutAll%3A%20aReceiver.%0A%09%09str%20nextPutAll%3A%20%27%2C%20%22%27%2C%20aSelector%20asSelector%2C%20%27%22%2C%20%5B%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20%3A%3D%20str.%0A%09%09aCollection%0A%09%20%20%20%20%09%09do%3A%20%5B%3Aeach%20%7C%20self%20visit%3A%20each%5D%0A%09%20%20%20%20%09%09separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20%3A%3D%20tmp.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20str%20nextPutAll%3A%20%27%5D%27.%0A%09%09aBoolean%20ifTrue%3A%20%5B%0A%09%09%09str%20nextPutAll%3A%20%27%2C%20smalltalk.%27%2C%20%28self%20classNameFor%3A%20self%20currentClass%20superclass%29%5D.%0A%09%09str%20nextPutAll%3A%20%27%29%27%5D'), -messageSends: ["streamContents:", "nextPutAll:", unescape("%2C"), "asSelector", "do:separatedBy:", "visit:", "ifTrue:", "classNameFor:", "superclass", "currentClass"], -referencedClasses: ["String"] +args: ["aString"], +source: unescape('eval%3A%20aString%0A%09%3Creturn%20eval%28aString%29%3E'), +messageSends: [], +referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_checkClass_for_'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('checkClass%3Afor%3A'), +selector: unescape('initialize'), +category: 'initialization', +fn: function (){ +var self=this; +smalltalk.send(self, "_initialize", [], smalltalk.NodeVisitor); +(self['@stream']=smalltalk.send("", "_writeStream", [])); +(self['@unknownVariables']=[]); +(self['@tempVariables']=[]); +(self['@argVariables']=[]); +(self['@messageSends']=[]); +(self['@classReferenced']=[]); +return self;}, +args: [], +source: unescape('initialize%0A%09super%20initialize.%0A%09stream%20%3A%3D%20%27%27%20writeStream.%20%0A%09unknownVariables%20%3A%3D%20%23%28%29.%0A%09tempVariables%20%3A%3D%20%23%28%29.%0A%09argVariables%20%3A%3D%20%23%28%29.%0A%09messageSends%20%3A%3D%20%23%28%29.%0A%09classReferenced%20%3A%3D%20%23%28%29'), +messageSends: ["initialize", "writeStream"], +referencedClasses: [] +}), +smalltalk.Compiler); + +smalltalk.addMethod( +unescape('_inline_receiver_argumentNodes_'), +smalltalk.method({ +selector: unescape('inline%3Areceiver%3AargumentNodes%3A'), category: 'optimizations', -fn: function (aClassName, receiver){ +fn: function (aSelector, receiver, aCollection){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28%28%28%24receiver%20%3D%20"), "__comma", [receiver]), "__comma", [unescape("%29.klass%20%3D%3D%3D%20smalltalk.")]), "__comma", [aClassName]), "__comma", [unescape("%29%20%3F%20")])]); +var inlined=nil; +(inlined=false); +((($receiver = smalltalk.send(aSelector, "__eq", ["ifFalse:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})])); +((($receiver = smalltalk.send(aSelector, "__eq", ["ifTrue:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})])); +((($receiver = smalltalk.send(aSelector, "__eq", ["ifTrue:ifFalse:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})])); +((($receiver = smalltalk.send(aSelector, "__eq", ["ifFalse:ifTrue:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3C")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3C%3D")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3E")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3E%3D")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("+")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20+")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20+")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("-")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20-")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20-")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("*")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20*")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20*")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +((($receiver = smalltalk.send(aSelector, "__eq", [unescape("/")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20/")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20/")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); +return inlined; return self;}, -args: ["aClassName", "receiver"], -source: unescape('checkClass%3A%20aClassName%20for%3A%20receiver%0A%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%28%28%28%24receiver%20%3D%20%27%2C%20receiver%2C%20%27%29.klass%20%3D%3D%3D%20smalltalk.%27%2C%20aClassName%2C%20%27%29%20%3F%20%27'), -messageSends: ["nextPutAll:", unescape("%2C")], +args: ["aSelector", "receiver", "aCollection"], +source: unescape('inline%3A%20aSelector%20receiver%3A%20receiver%20argumentNodes%3A%20aCollection%0A%20%20%20%20%20%20%20%20%7C%20inlined%20%7C%0A%20%20%20%20%20%20%20%20inlined%20%3A%3D%20false.%0A%0A%09%22--%20Booleans%20--%22%0A%0A%09%28aSelector%20%3D%20%27ifFalse%3A%27%29%20ifTrue%3A%20%5B%0A%09%09aCollection%20first%20isBlockNode%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20checkClass%3A%20%27Boolean%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09stream%20nextPutAll%3A%20%27%28%21%20%24receiver%20%3F%20%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%09%09stream%20nextPutAll%3A%20%27%28%29%20%3A%20nil%29%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09inlined%20%3A%3D%20true%5D%5D.%0A%0A%09%28aSelector%20%3D%20%27ifTrue%3A%27%29%20ifTrue%3A%20%5B%0A%09%09aCollection%20first%20isBlockNode%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20checkClass%3A%20%27Boolean%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09stream%20nextPutAll%3A%20%27%28%24receiver%20%3F%20%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%09%09stream%20nextPutAll%3A%20%27%28%29%20%3A%20nil%29%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09inlined%20%3A%3D%20true%5D%5D.%0A%0A%09%28aSelector%20%3D%20%27ifTrue%3AifFalse%3A%27%29%20ifTrue%3A%20%5B%0A%09%09%28aCollection%20first%20isBlockNode%20and%3A%20%5BaCollection%20second%20isBlockNode%5D%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20checkClass%3A%20%27Boolean%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09stream%20nextPutAll%3A%20%27%28%24receiver%20%3F%20%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%09%09stream%20nextPutAll%3A%20%27%28%29%20%3A%20%27.%0A%20%20%20%20%20%20%20%20%20%20%09%09self%20visit%3A%20aCollection%20second.%0A%20%20%20%20%20%20%20%20%20%20%09%09stream%20nextPutAll%3A%20%27%28%29%29%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09inlined%20%3A%3D%20true%5D%5D.%0A%0A%09%28aSelector%20%3D%20%27ifFalse%3AifTrue%3A%27%29%20ifTrue%3A%20%5B%0A%09%09%28aCollection%20first%20isBlockNode%20and%3A%20%5BaCollection%20second%20isBlockNode%5D%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20checkClass%3A%20%27Boolean%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09stream%20nextPutAll%3A%20%27%28%21%20%24receiver%20%3F%20%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%09%09stream%20nextPutAll%3A%20%27%28%29%20%3A%20%27.%0A%20%20%20%20%20%20%20%20%20%20%09%09self%20visit%3A%20aCollection%20second.%0A%20%20%20%20%20%20%20%20%20%20%09%09stream%20nextPutAll%3A%20%27%28%29%29%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09inlined%20%3A%3D%20true%5D%5D.%0A%0A%09%22--%20Numbers%20--%22%0A%0A%09%28aSelector%20%3D%20%27%3C%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20%3C%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%09%28aSelector%20%3D%20%27%3C%3D%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20%3C%3D%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%09%28aSelector%20%3D%20%27%3E%27%29%20ifTrue%3A%20%5B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20%3E%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%09%28aSelector%20%3D%20%27%3E%3D%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20%3E%3D%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%20%20%20%20%20%20%20%20%28aSelector%20%3D%20%27+%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20+%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%20%20%20%20%20%20%20%20%28aSelector%20%3D%20%27-%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20-%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%20%20%20%20%20%20%20%20%28aSelector%20%3D%20%27*%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20*%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%20%20%20%20%20%20%20%20%28aSelector%20%3D%20%27/%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20/%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%20%20%20%20%20%20%20%20%5Einlined'), +messageSends: ["ifTrue:", unescape("%3D"), "isBlockNode", "first", "checkClass:for:", "nextPutAll:", "visit:", "and:", "second"], referencedClasses: [] }), smalltalk.Compiler); @@ -2062,153 +1945,140 @@ referencedClasses: [] smalltalk.Compiler); smalltalk.addMethod( -unescape('_inline_receiver_argumentNodes_'), +unescape('_knownVariables'), smalltalk.method({ -selector: unescape('inline%3Areceiver%3AargumentNodes%3A'), -category: 'optimizations', -fn: function (aSelector, receiver, aCollection){ +selector: unescape('knownVariables'), +category: 'accessing', +fn: function (){ var self=this; -var inlined=nil; -(inlined=false); -((($receiver = smalltalk.send(aSelector, "__eq", ["ifFalse:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})])); -((($receiver = smalltalk.send(aSelector, "__eq", ["ifTrue:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20nil%29")]);return (inlined=true);})]));})])); -((($receiver = smalltalk.send(aSelector, "__eq", ["ifTrue:ifFalse:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})])); -((($receiver = smalltalk.send(aSelector, "__eq", ["ifFalse:ifTrue:"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(aCollection, "_first", []), "_isBlockNode", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(aCollection, "_second", []), "_isBlockNode", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Boolean", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%21%20%24receiver%20%3F%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%20%3A%20")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_second", [])]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28%29%29")]);return (inlined=true);})]));})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3C")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3C%3D")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3C%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3E")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("%3E%3D")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20%3E%3D")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("+")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20+")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20+")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("-")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20-")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20-")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("*")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20*")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20*")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -((($receiver = smalltalk.send(aSelector, "__eq", [unescape("/")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20/")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_checkClass_for_", ["Number", receiver]);smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%24receiver%20/")]);smalltalk.send(self, "_visit_", [smalltalk.send(aCollection, "_first", [])]);return (inlined=true);})])); -return inlined; +return (function($rec){smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_tempVariables", [])]);smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_argVariables", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_pseudoVariables", [])); return self;}, -args: ["aSelector", "receiver", "aCollection"], -source: unescape('inline%3A%20aSelector%20receiver%3A%20receiver%20argumentNodes%3A%20aCollection%0A%20%20%20%20%20%20%20%20%7C%20inlined%20%7C%0A%20%20%20%20%20%20%20%20inlined%20%3A%3D%20false.%0A%0A%09%22--%20Booleans%20--%22%0A%0A%09%28aSelector%20%3D%20%27ifFalse%3A%27%29%20ifTrue%3A%20%5B%0A%09%09aCollection%20first%20isBlockNode%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20checkClass%3A%20%27Boolean%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09stream%20nextPutAll%3A%20%27%28%21%20%24receiver%20%3F%20%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%09%09stream%20nextPutAll%3A%20%27%28%29%20%3A%20nil%29%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09inlined%20%3A%3D%20true%5D%5D.%0A%0A%09%28aSelector%20%3D%20%27ifTrue%3A%27%29%20ifTrue%3A%20%5B%0A%09%09aCollection%20first%20isBlockNode%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20checkClass%3A%20%27Boolean%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09stream%20nextPutAll%3A%20%27%28%24receiver%20%3F%20%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%09%09stream%20nextPutAll%3A%20%27%28%29%20%3A%20nil%29%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09inlined%20%3A%3D%20true%5D%5D.%0A%0A%09%28aSelector%20%3D%20%27ifTrue%3AifFalse%3A%27%29%20ifTrue%3A%20%5B%0A%09%09%28aCollection%20first%20isBlockNode%20and%3A%20%5BaCollection%20second%20isBlockNode%5D%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20checkClass%3A%20%27Boolean%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09stream%20nextPutAll%3A%20%27%28%24receiver%20%3F%20%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%09%09stream%20nextPutAll%3A%20%27%28%29%20%3A%20%27.%0A%20%20%20%20%20%20%20%20%20%20%09%09self%20visit%3A%20aCollection%20second.%0A%20%20%20%20%20%20%20%20%20%20%09%09stream%20nextPutAll%3A%20%27%28%29%29%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09inlined%20%3A%3D%20true%5D%5D.%0A%0A%09%28aSelector%20%3D%20%27ifFalse%3AifTrue%3A%27%29%20ifTrue%3A%20%5B%0A%09%09%28aCollection%20first%20isBlockNode%20and%3A%20%5BaCollection%20second%20isBlockNode%5D%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20checkClass%3A%20%27Boolean%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09stream%20nextPutAll%3A%20%27%28%21%20%24receiver%20%3F%20%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%09%09stream%20nextPutAll%3A%20%27%28%29%20%3A%20%27.%0A%20%20%20%20%20%20%20%20%20%20%09%09self%20visit%3A%20aCollection%20second.%0A%20%20%20%20%20%20%20%20%20%20%09%09stream%20nextPutAll%3A%20%27%28%29%29%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09inlined%20%3A%3D%20true%5D%5D.%0A%0A%09%22--%20Numbers%20--%22%0A%0A%09%28aSelector%20%3D%20%27%3C%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20%3C%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%09%28aSelector%20%3D%20%27%3C%3D%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20%3C%3D%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%09%28aSelector%20%3D%20%27%3E%27%29%20ifTrue%3A%20%5B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20%3E%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%09%28aSelector%20%3D%20%27%3E%3D%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20%3E%3D%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%20%20%20%20%20%20%20%20%28aSelector%20%3D%20%27+%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20+%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%20%20%20%20%20%20%20%20%28aSelector%20%3D%20%27-%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20-%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%20%20%20%20%20%20%20%20%28aSelector%20%3D%20%27*%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20*%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%20%20%20%20%20%20%20%20%28aSelector%20%3D%20%27/%27%29%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20checkClass%3A%20%27Number%27%20for%3A%20receiver.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20nextPutAll%3A%20%27%24receiver%20/%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20visit%3A%20aCollection%20first.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inlined%20%3A%3D%20true%5D.%0A%0A%20%20%20%20%20%20%20%20%5Einlined'), -messageSends: ["ifTrue:", unescape("%3D"), "isBlockNode", "first", "checkClass:for:", "nextPutAll:", "visit:", "and:", "second"], +args: [], +source: unescape('knownVariables%0A%09%5Eself%20pseudoVariables%20%0A%09%09addAll%3A%20self%20tempVariables%3B%0A%09%09addAll%3A%20self%20argVariables%3B%0A%09%09yourself'), +messageSends: ["addAll:", "tempVariables", "argVariables", "yourself", "pseudoVariables"], referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_performOptimizations'), +unescape('_load_forClass_'), smalltalk.method({ -selector: unescape('performOptimizations'), -category: 'testing', -fn: function (){ +selector: unescape('load%3AforClass%3A'), +category: 'compiling', +fn: function (aString, aClass){ var self=this; -return smalltalk.send(smalltalk.send(self, "_class", []), "_performOptimizations", []); +var compiled=nil; +(compiled=smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compile_forClass_", [aString, aClass])])); +smalltalk.send(self, "_setupClass_", [aClass]); +return compiled; return self;}, -args: [], -source: unescape('performOptimizations%0A%09%5Eself%20class%20performOptimizations'), -messageSends: ["performOptimizations", "class"], +args: ["aString", "aClass"], +source: unescape('load%3A%20aString%20forClass%3A%20aClass%0A%09%7C%20compiled%20%7C%0A%09compiled%20%3A%3D%20self%20eval%3A%20%28self%20compile%3A%20aString%20forClass%3A%20aClass%29.%0A%09self%20setupClass%3A%20aClass.%0A%09%5Ecompiled'), +messageSends: ["eval:", "compile:forClass:", "setupClass:"], referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_source'), +unescape('_loadExpression_'), smalltalk.method({ -selector: unescape('source'), -category: 'accessing', -fn: function (){ +selector: unescape('loadExpression%3A'), +category: 'compiling', +fn: function (aString){ var self=this; -return (($receiver = self['@source']) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver; +var result=nil; +smalltalk.send((smalltalk.DoIt || DoIt), "_addCompiledMethod_", [smalltalk.send(self, "_eval_", [smalltalk.send(self, "_compileExpression_", [aString])])]); +(result=smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt), "_new", []), "_doIt", [])); +smalltalk.send((smalltalk.DoIt || DoIt), "_removeCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.DoIt || DoIt), "_methodDictionary", []), "_at_", ["doIt"])]); +return result; return self;}, -args: [], -source: unescape('source%0A%09%5Esource%20ifNil%3A%20%5B%27%27%5D'), -messageSends: ["ifNil:"], -referencedClasses: [] +args: ["aString"], +source: unescape('loadExpression%3A%20aString%0A%09%7C%20result%20%7C%0A%09DoIt%20addCompiledMethod%3A%20%28self%20eval%3A%20%28self%20compileExpression%3A%20aString%29%29.%0A%09result%20%3A%3D%20DoIt%20new%20doIt.%0A%09DoIt%20removeCompiledMethod%3A%20%28DoIt%20methodDictionary%20at%3A%20%27doIt%27%29.%0A%09%5Eresult'), +messageSends: ["addCompiledMethod:", "eval:", "compileExpression:", "doIt", "new", "removeCompiledMethod:", "at:", "methodDictionary"], +referencedClasses: ["DoIt"] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_source_'), +unescape('_parse_'), smalltalk.method({ -selector: unescape('source%3A'), -category: 'accessing', +selector: unescape('parse%3A'), +category: 'compiling', fn: function (aString){ var self=this; -(self['@source']=aString); +return smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_parse_", [aString]); return self;}, args: ["aString"], -source: unescape('source%3A%20aString%0A%09source%20%3A%3D%20aString'), -messageSends: [], -referencedClasses: [] +source: unescape('parse%3A%20aString%0A%20%20%20%20%5ESmalltalk%20current%20parse%3A%20aString'), +messageSends: ["parse:", "current"], +referencedClasses: ["Smalltalk"] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_visitDynamicArrayNode_'), +unescape('_parseExpression_'), smalltalk.method({ -selector: unescape('visitDynamicArrayNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('parseExpression%3A'), +category: 'compiling', +fn: function (aString){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5B")]); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D")]); +return smalltalk.send(self, "_parse_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")])]); return self;}, -args: ["aNode"], -source: unescape('visitDynamicArrayNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20%27%5B%27.%0A%09aNode%20nodes%20%0A%09%09do%3A%20%5B%3Aeach%20%7C%20self%20visit%3A%20each%5D%0A%09%09separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%27%5D.%0A%09stream%20nextPutAll%3A%20%27%5D%27'), -messageSends: ["nextPutAll:", "do:separatedBy:", "nodes", "visit:"], +args: ["aString"], +source: unescape('parseExpression%3A%20aString%0A%20%20%20%20%5Eself%20parse%3A%20%27doIt%20%5E%5B%27%2C%20aString%2C%20%27%5D%20value%27'), +messageSends: ["parse:", unescape("%2C")], referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_visitDynamicDictionaryNode_'), +unescape('_parser'), smalltalk.method({ -selector: unescape('visitDynamicDictionaryNode%3A'), -category: 'visiting', -fn: function (aNode){ +selector: unescape('parser'), +category: 'accessing', +fn: function (){ var self=this; -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("smalltalk.HashedCollection._fromPairs_%28%5B")]); -smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]); -smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D%29")]); +return smalltalk.send((smalltalk.SmalltalkParser || SmalltalkParser), "_new", []); return self;}, -args: ["aNode"], -source: unescape('visitDynamicDictionaryNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20%27smalltalk.HashedCollection._fromPairs_%28%5B%27.%0A%09%09aNode%20nodes%20%0A%09%09%09do%3A%20%5B%3Aeach%20%7C%20self%20visit%3A%20each%5D%0A%09%09%09separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%27%5D.%0A%09%09stream%20nextPutAll%3A%20%27%5D%29%27'), -messageSends: ["nextPutAll:", "do:separatedBy:", "nodes", "visit:"], -referencedClasses: [] +args: [], +source: unescape('parser%0A%09%5ESmalltalkParser%20new'), +messageSends: ["new"], +referencedClasses: ["SmalltalkParser"] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_argVariables'), +unescape('_performOptimizations'), smalltalk.method({ -selector: unescape('argVariables'), -category: 'accessing', +selector: unescape('performOptimizations'), +category: 'testing', fn: function (){ var self=this; -return smalltalk.send(self['@argVariables'], "_copy", []); +return smalltalk.send(smalltalk.send(self, "_class", []), "_performOptimizations", []); return self;}, args: [], -source: unescape('argVariables%0A%09%5EargVariables%20copy'), -messageSends: ["copy"], +source: unescape('performOptimizations%0A%09%5Eself%20class%20performOptimizations'), +messageSends: ["performOptimizations", "class"], referencedClasses: [] }), smalltalk.Compiler); smalltalk.addMethod( -unescape('_safeVariableNameFor_'), +unescape('_pseudoVariables'), smalltalk.method({ -selector: unescape('safeVariableNameFor%3A'), +selector: unescape('pseudoVariables'), category: 'accessing', -fn: function (aString){ +fn: function (){ var self=this; -return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_reservedWords", []), "_includes_", [aString])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(aString, "__comma", ["_"]);})() : (function(){return aString;})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(aString, "__comma", ["_"]);}), (function(){return aString;})])); +return ["self", "super", "true", "false", "nil", "thisContext"]; return self;}, -args: ["aString"], -source: unescape('safeVariableNameFor%3A%20aString%0A%09%5E%28Smalltalk%20current%20reservedWords%20includes%3A%20aString%29%0A%09%09ifTrue%3A%20%5BaString%2C%20%27_%27%5D%0A%09%09ifFalse%3A%20%5BaString%5D'), -messageSends: ["ifTrue:ifFalse:", "includes:", "reservedWords", "current", unescape("%2C")], -referencedClasses: ["Smalltalk"] +args: [], +source: unescape('pseudoVariables%0A%09%5E%23%28%27self%27%20%27super%27%20%27true%27%20%27false%27%20%27nil%27%20%27thisContext%27%29'), +messageSends: [], +referencedClasses: [] }), smalltalk.Compiler); - -smalltalk.Compiler.klass.iVarNames = ['performOptimizations']; smalltalk.addMethod( unescape('_recompile_'), smalltalk.method({ @@ -2217,15 +2087,15 @@ category: 'compiling', fn: function (aClass){ var self=this; smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_do_", [(function(each){var method=nil; -(method=smalltalk.send(smalltalk.send(self, "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), aClass]));smalltalk.send(method, "_category_", [smalltalk.send(each, "_category", [])]);return smalltalk.send(aClass, "_addCompiledMethod_", [method]);})]); +(method=smalltalk.send(self, "_load_forClass_", [smalltalk.send(each, "_source", []), aClass]));smalltalk.send(method, "_category_", [smalltalk.send(each, "_category", [])]);return smalltalk.send(aClass, "_addCompiledMethod_", [method]);})]); ((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})])); return self;}, args: ["aClass"], -source: unescape('recompile%3A%20aClass%0A%09aClass%20methodDictionary%20do%3A%20%5B%3Aeach%20%7C%7C%20method%20%7C%0A%09%09method%20%3A%3D%20self%20new%20load%3A%20each%20source%20forClass%3A%20aClass.%0A%09%09method%20category%3A%20each%20category.%0A%09%09aClass%20addCompiledMethod%3A%20method%5D.%0A%09aClass%20isMetaclass%20ifFalse%3A%20%5Bself%20recompile%3A%20aClass%20class%5D'), -messageSends: ["do:", "methodDictionary", "load:forClass:", "new", "source", "category:", "category", "addCompiledMethod:", "ifFalse:", "isMetaclass", "recompile:", "class"], +source: unescape('recompile%3A%20aClass%0A%09aClass%20methodDictionary%20do%3A%20%5B%3Aeach%20%7C%7C%20method%20%7C%0A%09%09method%20%3A%3D%20self%20load%3A%20each%20source%20forClass%3A%20aClass.%0A%09%09method%20category%3A%20each%20category.%0A%09%09aClass%20addCompiledMethod%3A%20method%5D.%0A%09aClass%20isMetaclass%20ifFalse%3A%20%5Bself%20recompile%3A%20aClass%20class%5D'), +messageSends: ["do:", "methodDictionary", "load:forClass:", "source", "category:", "category", "addCompiledMethod:", "ifFalse:", "isMetaclass", "recompile:", "class"], referencedClasses: [] }), -smalltalk.Compiler.klass); +smalltalk.Compiler); smalltalk.addMethod( unescape('_recompileAll'), @@ -2234,383 +2104,519 @@ selector: unescape('recompileAll'), category: 'compiling', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){return smalltalk.send(self, "_recompile_", [each]);})]); -return self;}, -args: [], -source: unescape('recompileAll%0A%09Smalltalk%20current%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09self%20recompile%3A%20each%5D'), -messageSends: ["do:", "classes", "current", "recompile:"], -referencedClasses: ["Smalltalk"] -}), -smalltalk.Compiler.klass); - -smalltalk.addMethod( -unescape('_performOptimizations'), -smalltalk.method({ -selector: unescape('performOptimizations'), -category: 'accessing', -fn: function (){ -var self=this; -return (($receiver = self['@performOptimizations']) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver; +smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){(function($rec){smalltalk.send($rec, "_show_", [each]);return smalltalk.send($rec, "_cr", []);})((smalltalk.Transcript || Transcript));return smalltalk.send((function(){return smalltalk.send(self, "_recompile_", [each]);}), "_valueWithTimeout_", [(100)]);})]); return self;}, args: [], -source: unescape('performOptimizations%0A%09%5EperformOptimizations%20ifNil%3A%20%5Btrue%5D'), -messageSends: ["ifNil:"], -referencedClasses: [] +source: unescape('recompileAll%0A%09Smalltalk%20current%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09Transcript%20show%3A%20each%3B%20cr.%0A%09%09%5Bself%20recompile%3A%20each%5D%20valueWithTimeout%3A%20100%5D'), +messageSends: ["do:", "classes", "current", "show:", "cr", "valueWithTimeout:", "recompile:"], +referencedClasses: ["Smalltalk", "Transcript"] }), -smalltalk.Compiler.klass); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_performOptimizations_'), +unescape('_safeVariableNameFor_'), smalltalk.method({ -selector: unescape('performOptimizations%3A'), +selector: unescape('safeVariableNameFor%3A'), category: 'accessing', -fn: function (aBoolean){ +fn: function (aString){ var self=this; -(self['@performOptimizations']=aBoolean); +return ((($receiver = smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_reservedWords", []), "_includes_", [aString])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(aString, "__comma", ["_"]);})() : (function(){return aString;})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(aString, "__comma", ["_"]);}), (function(){return aString;})])); return self;}, -args: ["aBoolean"], -source: unescape('performOptimizations%3A%20aBoolean%0A%09performOptimizations%20%3A%3D%20aBoolean'), -messageSends: [], -referencedClasses: [] +args: ["aString"], +source: unescape('safeVariableNameFor%3A%20aString%0A%09%5E%28Smalltalk%20current%20reservedWords%20includes%3A%20aString%29%0A%09%09ifTrue%3A%20%5BaString%2C%20%27_%27%5D%0A%09%09ifFalse%3A%20%5BaString%5D'), +messageSends: ["ifTrue:ifFalse:", "includes:", "reservedWords", "current", unescape("%2C")], +referencedClasses: ["Smalltalk"] }), -smalltalk.Compiler.klass); - +smalltalk.Compiler); -smalltalk.addClass('BlockSequenceNode', smalltalk.SequenceNode, [], 'Compiler'); smalltalk.addMethod( -unescape('_accept_'), +unescape('_send_to_arguments_superSend_'), smalltalk.method({ -selector: unescape('accept%3A'), +selector: unescape('send%3Ato%3Aarguments%3AsuperSend%3A'), category: 'visiting', -fn: function (aVisitor){ +fn: function (aSelector, aReceiver, aCollection, aBoolean){ var self=this; -smalltalk.send(aVisitor, "_visitBlockSequenceNode_", [self]); +return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(str){var tmp=nil; +(tmp=self['@stream']);smalltalk.send(str, "_nextPutAll_", [unescape("smalltalk.send%28")]);smalltalk.send(str, "_nextPutAll_", [aReceiver]);smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%2C%20%22"), "__comma", [smalltalk.send(aSelector, "_asSelector", [])]), "__comma", [unescape("%22%2C%20%5B")])]);(self['@stream']=str);smalltalk.send(aCollection, "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]);(self['@stream']=tmp);smalltalk.send(str, "_nextPutAll_", [unescape("%5D")]);((($receiver = aBoolean).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(unescape("%2C%20smalltalk."), "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(smalltalk.send(self, "_currentClass", []), "_superclass", [])])])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(unescape("%2C%20smalltalk."), "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(smalltalk.send(self, "_currentClass", []), "_superclass", [])])])]);})]));return smalltalk.send(str, "_nextPutAll_", [unescape("%29")]);})]); return self;}, -args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitBlockSequenceNode%3A%20self'), -messageSends: ["visitBlockSequenceNode:"], -referencedClasses: [] +args: ["aSelector", "aReceiver", "aCollection", "aBoolean"], +source: unescape('send%3A%20aSelector%20to%3A%20aReceiver%20arguments%3A%20aCollection%20superSend%3A%20aBoolean%0A%09%5EString%20streamContents%3A%20%5B%3Astr%20%7C%7C%20tmp%20%7C%0A%20%20%20%20%20%20%20%20%09tmp%20%3A%3D%20stream.%0A%09%09str%20nextPutAll%3A%20%27smalltalk.send%28%27.%0A%09%09str%20nextPutAll%3A%20aReceiver.%0A%09%09str%20nextPutAll%3A%20%27%2C%20%22%27%2C%20aSelector%20asSelector%2C%20%27%22%2C%20%5B%27.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20%3A%3D%20str.%0A%09%09aCollection%0A%09%20%20%20%20%09%09do%3A%20%5B%3Aeach%20%7C%20self%20visit%3A%20each%5D%0A%09%20%20%20%20%09%09separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stream%20%3A%3D%20tmp.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20str%20nextPutAll%3A%20%27%5D%27.%0A%09%09aBoolean%20ifTrue%3A%20%5B%0A%09%09%09str%20nextPutAll%3A%20%27%2C%20smalltalk.%27%2C%20%28self%20classNameFor%3A%20self%20currentClass%20superclass%29%5D.%0A%09%09str%20nextPutAll%3A%20%27%29%27%5D'), +messageSends: ["streamContents:", "nextPutAll:", unescape("%2C"), "asSelector", "do:separatedBy:", "visit:", "ifTrue:", "classNameFor:", "superclass", "currentClass"], +referencedClasses: ["String"] }), -smalltalk.BlockSequenceNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_isBlockSequenceNode'), +unescape('_setupClass_'), smalltalk.method({ -selector: unescape('isBlockSequenceNode'), -category: 'testing', -fn: function (){ +selector: unescape('setupClass%3A'), +category: 'compiling', +fn: function (aClass){ var self=this; -return true; +smalltalk.init(aClass); return self;}, -args: [], -source: unescape('isBlockSequenceNode%0A%09%5Etrue'), +args: ["aClass"], +source: unescape('setupClass%3A%20aClass%0A%09%3Csmalltalk.init%28aClass%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.BlockSequenceNode); - - +smalltalk.Compiler); -smalltalk.addClass('BlockNode', smalltalk.Node, ['parameters', 'inlined'], 'Compiler'); smalltalk.addMethod( -unescape('_parameters'), +unescape('_source'), smalltalk.method({ -selector: unescape('parameters'), +selector: unescape('source'), category: 'accessing', fn: function (){ var self=this; -return (($receiver = self['@parameters']) == nil || $receiver == undefined) ? (function(){return (self['@parameters']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +return (($receiver = self['@source']) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver; return self;}, args: [], -source: unescape('parameters%0A%09%5Eparameters%20ifNil%3A%20%5Bparameters%20%3A%3D%20Array%20new%5D'), -messageSends: ["ifNil:", "new"], -referencedClasses: ["Array"] +source: unescape('source%0A%09%5Esource%20ifNil%3A%20%5B%27%27%5D'), +messageSends: ["ifNil:"], +referencedClasses: [] }), -smalltalk.BlockNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_parameters_'), +unescape('_source_'), smalltalk.method({ -selector: unescape('parameters%3A'), +selector: unescape('source%3A'), category: 'accessing', -fn: function (aCollection){ +fn: function (aString){ var self=this; -(self['@parameters']=aCollection); +(self['@source']=aString); return self;}, -args: ["aCollection"], -source: unescape('parameters%3A%20aCollection%0A%09parameters%20%3A%3D%20aCollection'), +args: ["aString"], +source: unescape('source%3A%20aString%0A%09source%20%3A%3D%20aString'), messageSends: [], referencedClasses: [] }), -smalltalk.BlockNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_accept_'), +unescape('_tempVariables'), smalltalk.method({ -selector: unescape('accept%3A'), -category: 'visiting', -fn: function (aVisitor){ +selector: unescape('tempVariables'), +category: 'accessing', +fn: function (){ var self=this; -smalltalk.send(aVisitor, "_visitBlockNode_", [self]); +return smalltalk.send(self['@tempVariables'], "_copy", []); return self;}, -args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitBlockNode%3A%20self'), -messageSends: ["visitBlockNode:"], +args: [], +source: unescape('tempVariables%0A%09%5EtempVariables%20copy'), +messageSends: ["copy"], referencedClasses: [] }), -smalltalk.BlockNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_isBlockNode'), +unescape('_unknownVariables'), smalltalk.method({ -selector: unescape('isBlockNode'), -category: 'testing', +selector: unescape('unknownVariables'), +category: 'accessing', fn: function (){ var self=this; -return true; +return smalltalk.send(self['@unknownVariables'], "_copy", []); return self;}, args: [], -source: unescape('isBlockNode%0A%09%5Etrue'), -messageSends: [], +source: unescape('unknownVariables%0A%09%5EunknownVariables%20copy'), +messageSends: ["copy"], referencedClasses: [] }), -smalltalk.BlockNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_inlined'), +unescape('_visit_'), smalltalk.method({ -selector: unescape('inlined'), -category: 'accessing', -fn: function (){ +selector: unescape('visit%3A'), +category: 'visiting', +fn: function (aNode){ var self=this; -return (($receiver = self['@inlined']) == nil || $receiver == undefined) ? (function(){return false;})() : $receiver; +smalltalk.send(aNode, "_accept_", [self]); return self;}, -args: [], -source: unescape('inlined%0A%09%5Einlined%20ifNil%3A%20%5Bfalse%5D'), -messageSends: ["ifNil:"], +args: ["aNode"], +source: unescape('visit%3A%20aNode%0A%09aNode%20accept%3A%20self'), +messageSends: ["accept:"], referencedClasses: [] }), -smalltalk.BlockNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_inlined_'), +unescape('_visitAssignmentNode_'), smalltalk.method({ -selector: unescape('inlined%3A'), -category: 'accessing', -fn: function (aBoolean){ +selector: unescape('visitAssignmentNode%3A'), +category: 'visiting', +fn: function (aNode){ var self=this; -(self['@inlined']=aBoolean); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28")]); +smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_left", [])]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3D")]); +smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_right", [])]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29")]); return self;}, -args: ["aBoolean"], -source: unescape('inlined%3A%20aBoolean%0A%09inlined%20%3A%3D%20aBoolean'), -messageSends: [], +args: ["aNode"], +source: unescape('visitAssignmentNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20%27%28%27.%0A%09self%20visit%3A%20aNode%20left.%0A%09stream%20nextPutAll%3A%20%27%3D%27.%0A%09self%20visit%3A%20aNode%20right.%0A%09stream%20nextPutAll%3A%20%27%29%27'), +messageSends: ["nextPutAll:", "visit:", "left", "right"], referencedClasses: [] }), -smalltalk.BlockNode); - - +smalltalk.Compiler); -smalltalk.addClass('CascadeNode', smalltalk.Node, ['receiver'], 'Compiler'); smalltalk.addMethod( -unescape('_receiver'), +unescape('_visitBlockNode_'), smalltalk.method({ -selector: unescape('receiver'), -category: 'accessing', -fn: function (){ +selector: unescape('visitBlockNode%3A'), +category: 'visiting', +fn: function (aNode){ var self=this; -return self['@receiver']; +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28function%28")]); +smalltalk.send(smalltalk.send(aNode, "_parameters", []), "_do_separatedBy_", [(function(each){smalltalk.send(self['@tempVariables'], "_add_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29%7B")]); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29")]); return self;}, -args: [], -source: unescape('receiver%0A%09%5Ereceiver'), -messageSends: [], +args: ["aNode"], +source: unescape('visitBlockNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20%27%28function%28%27.%0A%09aNode%20parameters%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%0A%09%09tempVariables%20add%3A%20each.%0A%09%09stream%20nextPutAll%3A%20each%5D%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%09stream%20nextPutAll%3A%20%27%29%7B%27.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%20self%20visit%3A%20each%5D.%0A%09stream%20nextPutAll%3A%20%27%7D%29%27'), +messageSends: ["nextPutAll:", "do:separatedBy:", "parameters", "add:", "do:", "nodes", "visit:"], referencedClasses: [] }), -smalltalk.CascadeNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_receiver_'), +unescape('_visitBlockSequenceNode_'), smalltalk.method({ -selector: unescape('receiver%3A'), -category: 'accessing', +selector: unescape('visitBlockSequenceNode%3A'), +category: 'visiting', fn: function (aNode){ var self=this; -(self['@receiver']=aNode); +var index=nil; +(self['@nestedBlocks']=((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); +((($receiver = smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("return%20nil%3B")]);})() : (function(){smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil; +(temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]);(index=(0));return smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){(index=((($receiver = index).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));((($receiver = smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("return%20nil%3B")]);}), (function(){smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil; +(temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]);(index=(0));return smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){(index=((($receiver = index).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));((($receiver = smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]);})])); +(self['@nestedBlocks']=((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)]))); return self;}, args: ["aNode"], -source: unescape('receiver%3A%20aNode%0A%09receiver%20%3A%3D%20aNode'), -messageSends: [], +source: unescape('visitBlockSequenceNode%3A%20aNode%0A%09%7C%20index%20%7C%0A%09nestedBlocks%20%3A%3D%20nestedBlocks%20+%201.%0A%09aNode%20nodes%20isEmpty%0A%09%20%20%20%20ifTrue%3A%20%5B%0A%09%09stream%20nextPutAll%3A%20%27return%20nil%3B%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5B%0A%09%09aNode%20temps%20do%3A%20%5B%3Aeach%20%7C%20%7C%20temp%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20temp%20%3A%3D%20self%20safeVariableNameFor%3A%20each.%0A%09%09%20%20%20%20tempVariables%20add%3A%20temp.%0A%09%09%20%20%20%20stream%20nextPutAll%3A%20%27var%20%27%2C%20temp%2C%20%27%3Dnil%3B%27%3B%20lf%5D.%0A%09%09index%20%3A%3D%200.%0A%09%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%20%20%20%20index%20%3A%3D%20index%20+%201.%0A%09%09%20%20%20%20index%20%3D%20aNode%20nodes%20size%20ifTrue%3A%20%5B%0A%09%09%09stream%20nextPutAll%3A%20%27return%20%27%5D.%0A%09%09%20%20%20%20self%20visit%3A%20each.%0A%09%09%20%20%20%20stream%20nextPutAll%3A%20%27%3B%27%5D%5D.%0A%09nestedBlocks%20%3A%3D%20nestedBlocks%20-%201'), +messageSends: [unescape("+"), "ifTrue:ifFalse:", "isEmpty", "nodes", "nextPutAll:", "do:", "temps", "safeVariableNameFor:", "add:", unescape("%2C"), "lf", "ifTrue:", unescape("%3D"), "size", "visit:", unescape("-")], referencedClasses: [] }), -smalltalk.CascadeNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_accept_'), +unescape('_visitCascadeNode_'), smalltalk.method({ -selector: unescape('accept%3A'), +selector: unescape('visitCascadeNode%3A'), category: 'visiting', -fn: function (aVisitor){ +fn: function (aNode){ var self=this; -smalltalk.send(aVisitor, "_visitCascadeNode_", [self]); +var index=nil; +(index=(0)); +((($receiver = smalltalk.send(self['@tempVariables'], "_includes_", ["$rec"])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@tempVariables'], "_add_", ["$rec"]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@tempVariables'], "_add_", ["$rec"]);})])); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28function%28%24rec%29%7B")]); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){(index=((($receiver = index).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));((($receiver = smalltalk.send(index, "__eq", [smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_size", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})]));smalltalk.send(each, "_receiver_", [smalltalk.send(smalltalk.send((smalltalk.VariableNode || VariableNode), "_new", []), "_value_", ["$rec"])]);smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);})]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29%28")]); +smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%29")]); return self;}, -args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitCascadeNode%3A%20self'), -messageSends: ["visitCascadeNode:"], +args: ["aNode"], +source: unescape('visitCascadeNode%3A%20aNode%0A%09%7C%20index%20%7C%0A%09index%20%3A%3D%200.%0A%09%28tempVariables%20includes%3A%20%27%24rec%27%29%20ifFalse%3A%20%5B%0A%09%09tempVariables%20add%3A%20%27%24rec%27%5D.%0A%09stream%20nextPutAll%3A%20%27%28function%28%24rec%29%7B%27.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20index%20%3A%3D%20index%20+%201.%0A%09%20%20%20%20index%20%3D%20aNode%20nodes%20size%20ifTrue%3A%20%5B%0A%09%09stream%20nextPutAll%3A%20%27return%20%27%5D.%0A%09%20%20%20%20each%20receiver%3A%20%28VariableNode%20new%20value%3A%20%27%24rec%27%29.%0A%09%20%20%20%20self%20visit%3A%20each.%0A%09%20%20%20%20stream%20nextPutAll%3A%20%27%3B%27%5D.%0A%09stream%20nextPutAll%3A%20%27%7D%29%28%27.%0A%09self%20visit%3A%20aNode%20receiver.%0A%09stream%20nextPutAll%3A%20%27%29%27'), +messageSends: ["ifFalse:", "includes:", "add:", "nextPutAll:", "do:", "nodes", unescape("+"), "ifTrue:", unescape("%3D"), "size", "receiver:", "value:", "new", "visit:", "receiver"], +referencedClasses: ["VariableNode"] +}), +smalltalk.Compiler); + +smalltalk.addMethod( +unescape('_visitClassReferenceNode_'), +smalltalk.method({ +selector: unescape('visitClassReferenceNode%3A'), +category: 'visiting', +fn: function (aNode){ +var self=this; +((($receiver = smalltalk.send(self['@referencedClasses'], "_includes_", [smalltalk.send(aNode, "_value", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@referencedClasses'], "_add_", [smalltalk.send(aNode, "_value", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@referencedClasses'], "_add_", [smalltalk.send(aNode, "_value", [])]);})])); +smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28smalltalk."), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%20%7C%7C%20")]), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%29")])]); +return self;}, +args: ["aNode"], +source: unescape('visitClassReferenceNode%3A%20aNode%0A%09%28referencedClasses%20includes%3A%20aNode%20value%29%20ifFalse%3A%20%5B%0A%09%09referencedClasses%20add%3A%20aNode%20value%5D.%0A%09stream%20nextPutAll%3A%20%27%28smalltalk.%27%2C%20aNode%20value%2C%20%27%20%7C%7C%20%27%2C%20aNode%20value%2C%20%27%29%27'), +messageSends: ["ifFalse:", "includes:", "value", "add:", "nextPutAll:", unescape("%2C")], referencedClasses: [] }), -smalltalk.CascadeNode); +smalltalk.Compiler); +smalltalk.addMethod( +unescape('_visitDynamicArrayNode_'), +smalltalk.method({ +selector: unescape('visitDynamicArrayNode%3A'), +category: 'visiting', +fn: function (aNode){ +var self=this; +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5B")]); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D")]); +return self;}, +args: ["aNode"], +source: unescape('visitDynamicArrayNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20%27%5B%27.%0A%09aNode%20nodes%20%0A%09%09do%3A%20%5B%3Aeach%20%7C%20self%20visit%3A%20each%5D%0A%09%09separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%27%5D.%0A%09stream%20nextPutAll%3A%20%27%5D%27'), +messageSends: ["nextPutAll:", "do:separatedBy:", "nodes", "visit:"], +referencedClasses: [] +}), +smalltalk.Compiler); +smalltalk.addMethod( +unescape('_visitDynamicDictionaryNode_'), +smalltalk.method({ +selector: unescape('visitDynamicDictionaryNode%3A'), +category: 'visiting', +fn: function (aNode){ +var self=this; +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("smalltalk.HashedCollection._fromPairs_%28%5B")]); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){return smalltalk.send(self, "_visit_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D%29")]); +return self;}, +args: ["aNode"], +source: unescape('visitDynamicDictionaryNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20%27smalltalk.HashedCollection._fromPairs_%28%5B%27.%0A%09%09aNode%20nodes%20%0A%09%09%09do%3A%20%5B%3Aeach%20%7C%20self%20visit%3A%20each%5D%0A%09%09%09separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%27%5D.%0A%09%09stream%20nextPutAll%3A%20%27%5D%29%27'), +messageSends: ["nextPutAll:", "do:separatedBy:", "nodes", "visit:"], +referencedClasses: [] +}), +smalltalk.Compiler); -smalltalk.addClass('MethodNode', smalltalk.Node, ['selector', 'arguments', 'source'], 'Compiler'); smalltalk.addMethod( -unescape('_selector'), +unescape('_visitFailure_'), smalltalk.method({ -selector: unescape('selector'), -category: 'accessing', -fn: function (){ +selector: unescape('visitFailure%3A'), +category: 'visiting', +fn: function (aFailure){ var self=this; -return self['@selector']; +smalltalk.send(self, "_error_", [smalltalk.send(aFailure, "_asString", [])]); return self;}, -args: [], -source: unescape('selector%0A%09%5Eselector'), -messageSends: [], +args: ["aFailure"], +source: unescape('visitFailure%3A%20aFailure%0A%09self%20error%3A%20aFailure%20asString'), +messageSends: ["error:", "asString"], referencedClasses: [] }), -smalltalk.MethodNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_selector_'), +unescape('_visitJSStatementNode_'), smalltalk.method({ -selector: unescape('selector%3A'), -category: 'accessing', -fn: function (aString){ +selector: unescape('visitJSStatementNode%3A'), +category: 'visiting', +fn: function (aNode){ var self=this; -(self['@selector']=aString); +smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(aNode, "_source", []), "_replace_with_", [unescape("%3E%3E"), unescape("%3E")])]); return self;}, -args: ["aString"], -source: unescape('selector%3A%20aString%0A%09selector%20%3A%3D%20aString'), -messageSends: [], +args: ["aNode"], +source: unescape('visitJSStatementNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20%28aNode%20source%20replace%3A%20%27%3E%3E%27%20with%3A%20%27%3E%27%29'), +messageSends: ["nextPutAll:", "replace:with:", "source"], referencedClasses: [] }), -smalltalk.MethodNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_arguments'), +unescape('_visitMethodNode_'), smalltalk.method({ -selector: unescape('arguments'), -category: 'accessing', -fn: function (){ +selector: unescape('visitMethodNode%3A'), +category: 'visiting', +fn: function (aNode){ var self=this; -return (($receiver = self['@arguments']) == nil || $receiver == undefined) ? (function(){return [];})() : $receiver; +var str=nil; +var currentSelector=nil; +(self['@currentSelector']=smalltalk.send(smalltalk.send(aNode, "_selector", []), "_asSelector", [])); +(self['@nestedBlocks']=(0)); +(self['@earlyReturn']=false); +(self['@messageSends']=[]); +(self['@referencedClasses']=[]); +(self['@unknownVariables']=[]); +(self['@tempVariables']=[]); +(self['@argVariables']=[]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20%22"), "__comma", [smalltalk.send(aNode, "_selector", [])]), "__comma", [unescape("%22%2C")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("source%3A%20unescape%28%22"), "__comma", [smalltalk.send(smalltalk.send(self, "_source", []), "_escaped", [])]), "__comma", [unescape("%22%29%2C")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("fn%3A%20function%28")]); +smalltalk.send(smalltalk.send(aNode, "_arguments", []), "_do_separatedBy_", [(function(each){smalltalk.send(self['@argVariables'], "_add_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [each]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C%20")]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%29%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("var%20self%3Dthis%3B")]);return smalltalk.send($rec, "_lf", []);})(self['@stream']); +(str=self['@stream']); +(self['@stream']=smalltalk.send("", "_writeStream", [])); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]); +((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(str, "_nextPutAll_", [unescape("try%7B")]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(str, "_nextPutAll_", [unescape("try%7B")]);})])); +smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self['@stream'], "_contents", [])]); +(self['@stream']=str); +(function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("return%20self%3B")]);})(self['@stream']); +((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%7D%20catch%28e%29%20%7Bif%28e.name%20%3D%3D%3D%20%27stReturn%27%20%26%26%20e.selector%20%3D%3D%3D%20"), "__comma", [smalltalk.send(self['@currentSelector'], "_printString", [])]), "__comma", [unescape("%29%7Breturn%20e.fn%28%29%7D%20throw%28e%29%7D")])]);})(self['@stream']);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%7D%20catch%28e%29%20%7Bif%28e.name%20%3D%3D%3D%20%27stReturn%27%20%26%26%20e.selector%20%3D%3D%3D%20"), "__comma", [smalltalk.send(self['@currentSelector'], "_printString", [])]), "__comma", [unescape("%29%7Breturn%20e.fn%28%29%7D%20throw%28e%29%7D")])]);})(self['@stream']);})])); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D")]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%2C"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", ["messageSends: "])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@messageSends'], "_asJavascript", []), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("args: ", "__comma", [smalltalk.send(self['@argVariables'], "_asJavascript", [])]), "__comma", [unescape("%2C")])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("referencedClasses%3A%20%5B")]);})(self['@stream']); +smalltalk.send(self['@referencedClasses'], "_do_separatedBy_", [(function(each){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(each, "_printString", [])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%2C")]);})]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%5D")]); +smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%29")]); return self;}, -args: [], -source: unescape('arguments%0A%09%5Earguments%20ifNil%3A%20%5B%23%28%29%5D'), -messageSends: ["ifNil:"], +args: ["aNode"], +source: unescape('visitMethodNode%3A%20aNode%0A%09%7C%20str%20currentSelector%20%7C%20%0A%09currentSelector%20%3A%3D%20aNode%20selector%20asSelector.%0A%09nestedBlocks%20%3A%3D%200.%0A%09earlyReturn%20%3A%3D%20false.%0A%09messageSends%20%3A%3D%20%23%28%29.%0A%09referencedClasses%20%3A%3D%20%23%28%29.%0A%09unknownVariables%20%3A%3D%20%23%28%29.%0A%09tempVariables%20%3A%3D%20%23%28%29.%0A%09argVariables%20%3A%3D%20%23%28%29.%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.method%28%7B%27%3B%20lf%3B%0A%09%20%20%20%20nextPutAll%3A%20%27selector%3A%20%22%27%2C%20aNode%20selector%2C%20%27%22%2C%27%3B%20lf.%0A%09stream%20nextPutAll%3A%20%27source%3A%20unescape%28%22%27%2C%20self%20source%20escaped%2C%20%27%22%29%2C%27%3Blf.%0A%09stream%20nextPutAll%3A%20%27fn%3A%20function%28%27.%0A%09aNode%20arguments%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09argVariables%20add%3A%20each.%0A%09%09stream%20nextPutAll%3A%20each%5D%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20%27%29%7B%27%3B%20lf%3B%0A%09%20%20%20%20nextPutAll%3A%20%27var%20self%3Dthis%3B%27%3B%20lf.%0A%09str%20%3A%3D%20stream.%0A%09stream%20%3A%3D%20%27%27%20writeStream.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20visit%3A%20each%5D.%0A%09earlyReturn%20ifTrue%3A%20%5B%0A%09%20%20%20%20str%20nextPutAll%3A%20%27try%7B%27%5D.%0A%09str%20nextPutAll%3A%20stream%20contents.%0A%09stream%20%3A%3D%20str.%0A%09stream%20%0A%09%20%20%20%20lf%3B%20%0A%09%20%20%20%20nextPutAll%3A%20%27return%20self%3B%27.%0A%09earlyReturn%20ifTrue%3A%20%5B%0A%09%20%20%20%20stream%20lf%3B%20nextPutAll%3A%20%27%7D%20catch%28e%29%20%7Bif%28e.name%20%3D%3D%3D%20%27%27stReturn%27%27%20%26%26%20e.selector%20%3D%3D%3D%20%27%2C%20currentSelector%20printString%2C%20%27%29%7Breturn%20e.fn%28%29%7D%20throw%28e%29%7D%27%5D.%0A%09stream%20nextPutAll%3A%20%27%7D%27.%0A%09stream%20%0A%09%09nextPutAll%3A%20%27%2C%27%2C%20String%20lf%2C%20%27messageSends%3A%20%27%3B%0A%09%09nextPutAll%3A%20messageSends%20asJavascript%2C%20%27%2C%27%3B%20lf%3B%0A%20%20%20%20%20%20%20%20%20%20%09nextPutAll%3A%20%27args%3A%20%27%2C%20argVariables%20asJavascript%2C%20%27%2C%27%3B%20lf%3B%0A%09%09nextPutAll%3A%20%27referencedClasses%3A%20%5B%27.%0A%09referencedClasses%20%0A%09%09do%3A%20%5B%3Aeach%20%7C%20stream%20nextPutAll%3A%20each%20printString%5D%0A%09%09separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%2C%27%5D.%0A%09stream%20nextPutAll%3A%20%27%5D%27.%0A%09stream%20nextPutAll%3A%20%27%7D%29%27'), +messageSends: ["asSelector", "selector", "nextPutAll:", "lf", unescape("%2C"), "escaped", "source", "do:separatedBy:", "arguments", "add:", "writeStream", "do:", "nodes", "visit:", "ifTrue:", "contents", "printString", "asJavascript"], +referencedClasses: ["String"] +}), +smalltalk.Compiler); + +smalltalk.addMethod( +unescape('_visitReturnNode_'), +smalltalk.method({ +selector: unescape('visitReturnNode%3A'), +category: 'visiting', +fn: function (aNode){ +var self=this; +((($receiver = ((($receiver = self['@nestedBlocks']).klass === smalltalk.Number) ? $receiver >(0) : smalltalk.send($receiver, "__gt", [(0)]))).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (self['@earlyReturn']=true);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (self['@earlyReturn']=true);})])); +((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%28function%28%29%7Bthrow%28")]);smalltalk.send($rec, "_nextPutAll_", [unescape("%7Bname%3A%20%27stReturn%27%2C%20selector%3A%20")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@currentSelector'], "_printString", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20fn%3A%20function%28%29%7Breturn%20")]);})(self['@stream']);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%28function%28%29%7Bthrow%28")]);smalltalk.send($rec, "_nextPutAll_", [unescape("%7Bname%3A%20%27stReturn%27%2C%20selector%3A%20")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@currentSelector'], "_printString", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20fn%3A%20function%28%29%7Breturn%20")]);})(self['@stream']);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);})])); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]); +((($receiver = self['@earlyReturn']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%7D%29%7D%29%28%29")]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%7D%7D%29%7D%29%28%29")]);})])); +return self;}, +args: ["aNode"], +source: unescape('visitReturnNode%3A%20aNode%0A%09nestedBlocks%20%3E%200%20ifTrue%3A%20%5B%0A%09%20%20%20%20earlyReturn%20%3A%3D%20true%5D.%0A%09earlyReturn%0A%09%20%20%20%20ifTrue%3A%20%5B%0A%09%09stream%0A%09%09%20%20%20%20nextPutAll%3A%20%27%28function%28%29%7Bthrow%28%27%3B%0A%09%09%20%20%20%20nextPutAll%3A%20%27%7Bname%3A%20%27%27stReturn%27%27%2C%20selector%3A%20%27%3B%0A%09%09%20%20%20%20nextPutAll%3A%20currentSelector%20printString%3B%0A%09%09%20%20%20%20nextPutAll%3A%20%27%2C%20fn%3A%20function%28%29%7Breturn%20%27%5D%0A%09%20%20%20%20ifFalse%3A%20%5Bstream%20nextPutAll%3A%20%27return%20%27%5D.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20visit%3A%20each%5D.%0A%09earlyReturn%20ifTrue%3A%20%5B%0A%09%20%20%20%20stream%20nextPutAll%3A%20%27%7D%7D%29%7D%29%28%29%27%5D'), +messageSends: ["ifTrue:", unescape("%3E"), "ifTrue:ifFalse:", "nextPutAll:", "printString", "do:", "nodes", "visit:"], referencedClasses: [] }), -smalltalk.MethodNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_arguments_'), +unescape('_visitSendNode_'), smalltalk.method({ -selector: unescape('arguments%3A'), -category: 'accessing', -fn: function (aCollection){ +selector: unescape('visitSendNode%3A'), +category: 'visiting', +fn: function (aNode){ var self=this; -(self['@arguments']=aCollection); +var str=nil; +var receiver=nil; +var superSend=nil; +var inlined=nil; +(str=self['@stream']); +((($receiver = smalltalk.send(self['@messageSends'], "_includes_", [smalltalk.send(aNode, "_selector", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@messageSends'], "_add_", [smalltalk.send(aNode, "_selector", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self['@messageSends'], "_add_", [smalltalk.send(aNode, "_selector", [])]);})])); +(self['@stream']=smalltalk.send("", "_writeStream", [])); +smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]); +(superSend=smalltalk.send(smalltalk.send(self['@stream'], "_contents", []), "__eq", ["super"])); +(receiver=((($receiver = superSend).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "self";})() : (function(){return smalltalk.send(self['@stream'], "_contents", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "self";}), (function(){return smalltalk.send(self['@stream'], "_contents", []);})]))); +(self['@stream']=str); +((($receiver = smalltalk.send(self, "_performOptimizations", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inlineLiteral_receiverNode_argumentNodes_", [smalltalk.send(aNode, "_selector", []), smalltalk.send(aNode, "_receiver", []), smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})]));})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inlineLiteral_receiverNode_argumentNodes_", [smalltalk.send(aNode, "_selector", []), smalltalk.send(aNode, "_receiver", []), smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return ((($receiver = smalltalk.send(self, "_inline_receiver_argumentNodes_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(" : ", "__comma", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), "$receiver", smalltalk.send(aNode, "_arguments", []), superSend])]), "__comma", [unescape("%29")])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})]));})]));}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(self, "_send_to_arguments_superSend_", [smalltalk.send(aNode, "_selector", []), receiver, smalltalk.send(aNode, "_arguments", []), superSend])]);})])); return self;}, -args: ["aCollection"], -source: unescape('arguments%3A%20aCollection%0A%09arguments%20%3A%3D%20aCollection'), -messageSends: [], +args: ["aNode"], +source: unescape('visitSendNode%3A%20aNode%0A%20%20%20%20%20%20%20%20%7C%20str%20receiver%20superSend%20inlined%20%7C%0A%20%20%20%20%20%20%20%20str%20%3A%3D%20stream.%0A%20%20%20%20%20%20%20%20%28messageSends%20includes%3A%20aNode%20selector%29%20ifFalse%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20messageSends%20add%3A%20aNode%20selector%5D.%0A%20%20%20%20%20%20%20%20stream%20%3A%3D%20%27%27%20writeStream.%0A%20%20%20%20%20%20%20%20self%20visit%3A%20aNode%20receiver.%0A%20%20%20%20%20%20%20%20superSend%20%3A%3D%20stream%20contents%20%3D%20%27super%27.%0A%20%20%20%20%20%20%20%20receiver%20%3A%3D%20superSend%20ifTrue%3A%20%5B%27self%27%5D%20ifFalse%3A%20%5Bstream%20contents%5D.%0A%20%20%20%20%20%20%20%20stream%20%3A%3D%20str.%0A%09%0A%09self%20performOptimizations%20%0A%09%09ifTrue%3A%20%5B%0A%09%09%09%28self%20inlineLiteral%3A%20aNode%20selector%20receiverNode%3A%20aNode%20receiver%20argumentNodes%3A%20aNode%20arguments%29%20ifFalse%3A%20%5B%0A%09%09%09%09%28self%20inline%3A%20aNode%20selector%20receiver%3A%20receiver%20argumentNodes%3A%20aNode%20arguments%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09ifTrue%3A%20%5Bstream%20nextPutAll%3A%20%27%20%3A%20%27%2C%20%28self%20send%3A%20aNode%20selector%20to%3A%20%27%24receiver%27%20arguments%3A%20aNode%20arguments%20superSend%3A%20superSend%29%2C%20%27%29%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09ifFalse%3A%20%5Bstream%20nextPutAll%3A%20%28self%20send%3A%20aNode%20selector%20to%3A%20receiver%20arguments%3A%20aNode%20arguments%20superSend%3A%20superSend%29%5D%5D%5D%0A%09%09ifFalse%3A%20%5Bstream%20nextPutAll%3A%20%28self%20send%3A%20aNode%20selector%20to%3A%20receiver%20arguments%3A%20aNode%20arguments%20superSend%3A%20superSend%29%5D'), +messageSends: ["ifFalse:", "includes:", "selector", "add:", "writeStream", "visit:", "receiver", unescape("%3D"), "contents", "ifTrue:ifFalse:", "performOptimizations", "inlineLiteral:receiverNode:argumentNodes:", "arguments", "inline:receiver:argumentNodes:", "nextPutAll:", unescape("%2C"), "send:to:arguments:superSend:"], referencedClasses: [] }), -smalltalk.MethodNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_source'), +unescape('_visitSequenceNode_'), smalltalk.method({ -selector: unescape('source'), -category: 'accessing', -fn: function (){ +selector: unescape('visitSequenceNode%3A'), +category: 'visiting', +fn: function (aNode){ var self=this; -return self['@source']; +smalltalk.send(smalltalk.send(aNode, "_temps", []), "_do_", [(function(each){var temp=nil; +(temp=smalltalk.send(self, "_safeVariableNameFor_", [each]));smalltalk.send(self['@tempVariables'], "_add_", [temp]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send("var ", "__comma", [temp]), "__comma", [unescape("%3Dnil%3B")])]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);})]); +smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_do_separatedBy_", [(function(each){smalltalk.send(self, "_visit_", [each]);return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%3B")]);}), (function(){return smalltalk.send(self['@stream'], "_lf", []);})]); return self;}, -args: [], -source: unescape('source%0A%09%5Esource'), -messageSends: [], +args: ["aNode"], +source: unescape('visitSequenceNode%3A%20aNode%0A%09aNode%20temps%20do%3A%20%5B%3Aeach%20%7C%7C%20temp%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20temp%20%3A%3D%20self%20safeVariableNameFor%3A%20each.%0A%09%20%20%20%20tempVariables%20add%3A%20temp.%0A%09%20%20%20%20stream%20nextPutAll%3A%20%27var%20%27%2C%20temp%2C%20%27%3Dnil%3B%27%3B%20lf%5D.%0A%09aNode%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20visit%3A%20each.%0A%09%20%20%20%20stream%20nextPutAll%3A%20%27%3B%27%5D%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20lf%5D'), +messageSends: ["do:", "temps", "safeVariableNameFor:", "add:", "nextPutAll:", unescape("%2C"), "lf", "do:separatedBy:", "nodes", "visit:"], referencedClasses: [] }), -smalltalk.MethodNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_source_'), +unescape('_visitValueNode_'), smalltalk.method({ -selector: unescape('source%3A'), -category: 'accessing', -fn: function (aString){ +selector: unescape('visitValueNode%3A'), +category: 'visiting', +fn: function (aNode){ var self=this; -(self['@source']=aString); +smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(aNode, "_value", []), "_asJavascript", [])]); return self;}, -args: ["aString"], -source: unescape('source%3A%20aString%0A%09source%20%3A%3D%20aString'), -messageSends: [], +args: ["aNode"], +source: unescape('visitValueNode%3A%20aNode%0A%09stream%20nextPutAll%3A%20aNode%20value%20asJavascript'), +messageSends: ["nextPutAll:", "asJavascript", "value"], referencedClasses: [] }), -smalltalk.MethodNode); +smalltalk.Compiler); smalltalk.addMethod( -unescape('_accept_'), +unescape('_visitVariableNode_'), smalltalk.method({ -selector: unescape('accept%3A'), +selector: unescape('visitVariableNode%3A'), category: 'visiting', -fn: function (aVisitor){ +fn: function (aNode){ var self=this; -smalltalk.send(aVisitor, "_visitMethodNode_", [self]); +var varName=nil; +((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_currentClass", []), "_allInstanceVariableNames", []), "_includes_", [smalltalk.send(aNode, "_value", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("self%5B%27@"), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%27%5D")])]);})() : (function(){(varName=smalltalk.send(self, "_safeVariableNameFor_", [smalltalk.send(aNode, "_value", [])]));return ((($receiver = smalltalk.send(smalltalk.send(self, "_knownVariables", []), "_includes_", [varName])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("self%5B%27@"), "__comma", [smalltalk.send(aNode, "_value", [])]), "__comma", [unescape("%27%5D")])]);}), (function(){(varName=smalltalk.send(self, "_safeVariableNameFor_", [smalltalk.send(aNode, "_value", [])]));return ((($receiver = smalltalk.send(smalltalk.send(self, "_knownVariables", []), "_includes_", [varName])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){smalltalk.send(self['@unknownVariables'], "_add_", [smalltalk.send(aNode, "_value", [])]);return ((($receiver = smalltalk.send(aNode, "_assigned", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%28typeof%20"), "__comma", [varName]), "__comma", [unescape("%20%3D%3D%20%27undefined%27%20%3F%20nil%20%3A%20")]), "__comma", [varName]), "__comma", [unescape("%29")])]);})]));}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(aNode, "_value", []), "__eq", ["thisContext"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);})() : (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [unescape("%28smalltalk.getThisContext%28%29%29")]);}), (function(){return smalltalk.send(self['@stream'], "_nextPutAll_", [varName]);})]));})]));})])); return self;}, -args: ["aVisitor"], -source: unescape('accept%3A%20aVisitor%0A%09aVisitor%20visitMethodNode%3A%20self'), -messageSends: ["visitMethodNode:"], +args: ["aNode"], +source: unescape('visitVariableNode%3A%20aNode%0A%09%7C%20varName%20%7C%0A%09%28self%20currentClass%20allInstanceVariableNames%20includes%3A%20aNode%20value%29%20%0A%09%09ifTrue%3A%20%5Bstream%20nextPutAll%3A%20%27self%5B%27%27@%27%2C%20aNode%20value%2C%20%27%27%27%5D%27%5D%0A%09%09ifFalse%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09varName%20%3A%3D%20self%20safeVariableNameFor%3A%20aNode%20value.%0A%09%09%09%28self%20knownVariables%20includes%3A%20varName%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09ifFalse%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09unknownVariables%20add%3A%20aNode%20value.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09aNode%20assigned%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09ifTrue%3A%20%5Bstream%20nextPutAll%3A%20varName%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09ifFalse%3A%20%5Bstream%20nextPutAll%3A%20%27%28typeof%20%27%2C%20varName%2C%20%27%20%3D%3D%20%27%27undefined%27%27%20%3F%20nil%20%3A%20%27%2C%20varName%2C%20%27%29%27%5D%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09aNode%20value%20%3D%20%27thisContext%27%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09ifTrue%3A%20%5Bstream%20nextPutAll%3A%20%27%28smalltalk.getThisContext%28%29%29%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09ifFalse%3A%20%5Bstream%20nextPutAll%3A%20varName%5D%5D%5D'), +messageSends: ["ifTrue:ifFalse:", "includes:", "allInstanceVariableNames", "currentClass", "value", "nextPutAll:", unescape("%2C"), "safeVariableNameFor:", "ifFalse:ifTrue:", "knownVariables", "add:", "assigned", unescape("%3D")], referencedClasses: [] }), -smalltalk.MethodNode); +smalltalk.Compiler); +smalltalk.Compiler.klass.iVarNames = ['performOptimizations']; +smalltalk.addMethod( +unescape('_performOptimizations'), +smalltalk.method({ +selector: unescape('performOptimizations'), +category: 'accessing', +fn: function (){ +var self=this; +return (($receiver = self['@performOptimizations']) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver; +return self;}, +args: [], +source: unescape('performOptimizations%0A%09%5EperformOptimizations%20ifNil%3A%20%5Btrue%5D'), +messageSends: ["ifNil:"], +referencedClasses: [] +}), +smalltalk.Compiler.klass); -smalltalk.addClass('StrippedExporter', smalltalk.Exporter, [], 'Compiler'); smalltalk.addMethod( -unescape('_exportDefinitionOf_on_'), +unescape('_performOptimizations_'), smalltalk.method({ -selector: unescape('exportDefinitionOf%3Aon%3A'), -category: 'private', -fn: function (aClass, aStream){ +selector: unescape('performOptimizations%3A'), +category: 'accessing', +fn: function (aBoolean){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addClass%28")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%27%2C%20")])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%2C%20%5B")]);})(aStream); -smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C%20")]);})]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%5D%2C%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(aClass, "_category", []), "__comma", [unescape("%27")])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);})(aStream); -smalltalk.send(aStream, "_lf", []); +(self['@performOptimizations']=aBoolean); return self;}, -args: ["aClass", "aStream"], -source: unescape('exportDefinitionOf%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.addClass%28%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27%2C%20%28self%20classNameFor%3A%20aClass%29%2C%20%27%27%27%2C%20%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%20superclass%29%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%2C%20%5B%27.%0A%09aClass%20instanceVariableNames%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20aStream%20nextPutAll%3A%20%27%27%27%27%2C%20each%2C%20%27%27%27%27%5D%0A%09%20%20%20%20separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%2C%20%27%5D.%0A%09aStream%09%0A%09%20%20%20%20nextPutAll%3A%20%27%5D%2C%20%27%27%27%3B%0A%09%20%20%20%20nextPutAll%3A%20aClass%20category%2C%20%27%27%27%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%29%3B%27.%0A%09aStream%20lf'), -messageSends: ["nextPutAll:", unescape("%2C"), "classNameFor:", "superclass", "do:separatedBy:", "instanceVariableNames", "category", "lf"], +args: ["aBoolean"], +source: unescape('performOptimizations%3A%20aBoolean%0A%09performOptimizations%20%3A%3D%20aBoolean'), +messageSends: [], referencedClasses: [] }), -smalltalk.StrippedExporter); +smalltalk.Compiler.klass); smalltalk.addMethod( -unescape('_exportMethod_of_on_'), +unescape('_recompile_'), smalltalk.method({ -selector: unescape('exportMethod%3Aof%3Aon%3A'), -category: 'private', -fn: function (aMethod, aClass, aStream){ +selector: unescape('recompile%3A'), +category: 'compiling', +fn: function (aClass){ var self=this; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_escaped", [])]), "__comma", [unescape("%27%29%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream); +smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_do_", [(function(each){var method=nil; +(method=smalltalk.send(smalltalk.send(self, "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), aClass]));smalltalk.send(method, "_category_", [smalltalk.send(each, "_category", [])]);return smalltalk.send(aClass, "_addCompiledMethod_", [method]);})]); +((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_recompile_", [smalltalk.send(aClass, "_class", [])]);})])); return self;}, -args: ["aMethod", "aClass", "aStream"], -source: unescape('exportMethod%3A%20aMethod%20of%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%09nextPutAll%3A%20%27smalltalk.addMethod%28%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27unescape%28%27%27%27%2C%20aMethod%20selector%20asSelector%20escaped%2C%20%27%27%27%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.method%28%7B%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27selector%3A%20unescape%28%27%27%27%2C%20aMethod%20selector%20escaped%2C%20%27%27%27%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27fn%3A%20%27%2C%20aMethod%20fn%20compiledSource%3Blf%3B%0A%09%09nextPutAll%3A%20%27%7D%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%0A%09%09nextPutAll%3A%20%27%29%3B%27%3Blf%3Blf'), -messageSends: ["nextPutAll:", "lf", unescape("%2C"), "escaped", "asSelector", "selector", "compiledSource", "fn", "classNameFor:"], +args: ["aClass"], +source: unescape('recompile%3A%20aClass%0A%09aClass%20methodDictionary%20do%3A%20%5B%3Aeach%20%7C%7C%20method%20%7C%0A%09%09method%20%3A%3D%20self%20new%20load%3A%20each%20source%20forClass%3A%20aClass.%0A%09%09method%20category%3A%20each%20category.%0A%09%09aClass%20addCompiledMethod%3A%20method%5D.%0A%09aClass%20isMetaclass%20ifFalse%3A%20%5Bself%20recompile%3A%20aClass%20class%5D'), +messageSends: ["do:", "methodDictionary", "load:forClass:", "new", "source", "category:", "category", "addCompiledMethod:", "ifFalse:", "isMetaclass", "recompile:", "class"], referencedClasses: [] }), -smalltalk.StrippedExporter); +smalltalk.Compiler.klass); +smalltalk.addMethod( +unescape('_recompileAll'), +smalltalk.method({ +selector: unescape('recompileAll'), +category: 'compiling', +fn: function (){ +var self=this; +smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){return smalltalk.send(self, "_recompile_", [each]);})]); +return self;}, +args: [], +source: unescape('recompileAll%0A%09Smalltalk%20current%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09self%20recompile%3A%20each%5D'), +messageSends: ["do:", "classes", "current", "recompile:"], +referencedClasses: ["Smalltalk"] +}), +smalltalk.Compiler.klass); diff --git a/amber/src/js/Examples.deploy.js b/amber/src/js/Examples.deploy.js index 0ff4d9517a3..4d74915c553 100644 --- a/amber/src/js/Examples.deploy.js +++ b/amber/src/js/Examples.deploy.js @@ -1,24 +1,24 @@ smalltalk.addPackage('Examples', {}); smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples'); smalltalk.addMethod( -unescape('_increase'), +unescape('_decrease'), smalltalk.method({ -selector: unescape('increase'), +selector: unescape('decrease'), fn: function (){ var self=this; -(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); +(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)]))); smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]); return self;} }), smalltalk.Counter); smalltalk.addMethod( -unescape('_decrease'), +unescape('_increase'), smalltalk.method({ -selector: unescape('decrease'), +selector: unescape('increase'), fn: function (){ var self=this; -(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)]))); +(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]); return self;} }), diff --git a/amber/src/js/Examples.js b/amber/src/js/Examples.js index 71195d05907..248b1ef7681 100755 --- a/amber/src/js/Examples.js +++ b/amber/src/js/Examples.js @@ -1,35 +1,35 @@ smalltalk.addPackage('Examples', {}); smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples'); smalltalk.addMethod( -unescape('_increase'), +unescape('_decrease'), smalltalk.method({ -selector: unescape('increase'), +selector: unescape('decrease'), category: 'actions', fn: function (){ var self=this; -(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); +(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)]))); smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]); return self;}, args: [], -source: unescape('increase%0A%20%20%20%20count%20%3A%3D%20count%20+%201.%0A%20%20%20%20header%20contents%3A%20%5B%3Ahtml%20%7C%20html%20with%3A%20count%20asString%5D'), -messageSends: [unescape("+"), "contents:", "with:", "asString"], +source: unescape('decrease%0A%20%20%20%20count%20%3A%3D%20count%20-%201.%0A%20%20%20%20header%20contents%3A%20%5B%3Ahtml%20%7C%20html%20with%3A%20count%20asString%5D'), +messageSends: [unescape("-"), "contents:", "with:", "asString"], referencedClasses: [] }), smalltalk.Counter); smalltalk.addMethod( -unescape('_decrease'), +unescape('_increase'), smalltalk.method({ -selector: unescape('decrease'), +selector: unescape('increase'), category: 'actions', fn: function (){ var self=this; -(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)]))); +(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]); return self;}, args: [], -source: unescape('decrease%0A%20%20%20%20count%20%3A%3D%20count%20-%201.%0A%20%20%20%20header%20contents%3A%20%5B%3Ahtml%20%7C%20html%20with%3A%20count%20asString%5D'), -messageSends: [unescape("-"), "contents:", "with:", "asString"], +source: unescape('increase%0A%20%20%20%20count%20%3A%3D%20count%20+%201.%0A%20%20%20%20header%20contents%3A%20%5B%3Ahtml%20%7C%20html%20with%3A%20count%20asString%5D'), +messageSends: [unescape("+"), "contents:", "with:", "asString"], referencedClasses: [] }), smalltalk.Counter); diff --git a/amber/src/js/IDE.deploy.js b/amber/src/js/IDE.deploy.js index 05b7844ab49..ae299c8545a 100644 --- a/amber/src/js/IDE.deploy.js +++ b/amber/src/js/IDE.deploy.js @@ -1,219 +1,201 @@ smalltalk.addPackage('IDE', {}); -smalltalk.addClass('TabManager', smalltalk.Widget, ['selectedTab', 'tabs', 'opened', 'ul', 'input'], 'IDE'); +smalltalk.addClass('ClassesList', smalltalk.Widget, ['browser', 'ul', 'nodes'], 'IDE'); smalltalk.addMethod( -unescape('_tabs'), +unescape('_browser'), smalltalk.method({ -selector: unescape('tabs'), +selector: unescape('browser'), fn: function (){ var self=this; -return (($receiver = self['@tabs']) == nil || $receiver == undefined) ? (function(){return (self['@tabs']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +return self['@browser']; return self;} }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_labelFor_'), +unescape('_browser_'), smalltalk.method({ -selector: unescape('labelFor%3A'), -fn: function (aWidget){ +selector: unescape('browser%3A'), +fn: function (aBrowser){ var self=this; -var label=nil; -var maxSize=nil; -(maxSize=(15)); -(label=smalltalk.send(smalltalk.send(aWidget, "_label", []), "_copyFrom_to_", [(0), smalltalk.send(smalltalk.send(smalltalk.send(aWidget, "_label", []), "_size", []), "_min_", [maxSize])])); -((($receiver = ((($receiver = smalltalk.send(smalltalk.send(aWidget, "_label", []), "_size", [])).klass === smalltalk.Number) ? $receiver >maxSize : smalltalk.send($receiver, "__gt", [maxSize]))).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (label=smalltalk.send(label, "__comma", ["..."]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (label=smalltalk.send(label, "__comma", ["..."]));})])); -return label; +(self['@browser']=aBrowser); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_updateBodyMargin'), +unescape('_category'), smalltalk.method({ -selector: unescape('updateBodyMargin'), +selector: unescape('category'), fn: function (){ var self=this; -smalltalk.send(self, "_setBodyMargin_", [smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_height", [])]); +return smalltalk.send(smalltalk.send(self, "_browser", []), "_selectedPackage", []); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_updatePosition'), +unescape('_getNodes'), smalltalk.method({ -selector: unescape('updatePosition'), +selector: unescape('getNodes'), fn: function (){ var self=this; -jQuery('#jtalk').css('top', '').css('bottom', '0px'); +var classes=nil; +var children=nil; +var others=nil; +(classes=smalltalk.send(smalltalk.send(self, "_browser", []), "_classes", [])); +(children=[]); +(others=[]); +smalltalk.send(classes, "_do_", [(function(each){return ((($receiver = smalltalk.send(classes, "_includes_", [smalltalk.send(each, "_superclass", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(children, "_add_", [each]);})() : (function(){return smalltalk.send(others, "_add_", [each]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(children, "_add_", [each]);}), (function(){return smalltalk.send(others, "_add_", [each]);})]));})]); +return smalltalk.send(children, "_collect_", [(function(each){return smalltalk.send((smalltalk.ClassesListNode || ClassesListNode), "_on_browser_classes_level_", [each, smalltalk.send(self, "_browser", []), others, (0)]);})]); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_removeBodyMargin'), +unescape('_nodes'), smalltalk.method({ -selector: unescape('removeBodyMargin'), +selector: unescape('nodes'), fn: function (){ var self=this; -smalltalk.send(self, "_setBodyMargin_", [(0)]); -return self;} -}), -smalltalk.TabManager); - -smalltalk.addMethod( -unescape('_setBodyMargin_'), -smalltalk.method({ -selector: unescape('setBodyMargin%3A'), -fn: function (anInteger){ -var self=this; -smalltalk.send(smalltalk.send(".jtalkBody", "_asJQuery", []), "_css_put_", [unescape("margin-bottom"), smalltalk.send(smalltalk.send(anInteger, "_asString", []), "__comma", ["px"])]); +(($receiver = self['@nodes']) == nil || $receiver == undefined) ? (function(){return (self['@nodes']=smalltalk.send(self, "_getNodes", []));})() : $receiver; +return self['@nodes']; return self;} }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_onResize_'), +unescape('_renderOn_'), smalltalk.method({ -selector: unescape('onResize%3A'), -fn: function (aBlock){ +selector: unescape('renderOn%3A'), +fn: function (html){ var self=this; -jQuery('#jtalk').resizable({ - handles: 'n', - resize: aBlock, - minHeight: 230 -}); +(self['@ul']=(function($rec){smalltalk.send($rec, "_class_", ["jt_column browser classes"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_ul", []))); +smalltalk.send(self, "_updateNodes", []); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_onWindowResize_'), +unescape('_resetNodes'), smalltalk.method({ -selector: unescape('onWindowResize%3A'), -fn: function (aBlock){ +selector: unescape('resetNodes'), +fn: function (){ var self=this; -jQuery(window).resize(aBlock); +(self['@nodes']=nil); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_open'), +unescape('_updateNodes'), smalltalk.method({ -selector: unescape('open'), +selector: unescape('updateNodes'), fn: function (){ var self=this; -((($receiver = self['@opened']).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["jtalkBody"]);smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_show", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_show", []);smalltalk.send(self, "_updateBodyMargin", []);smalltalk.send(self['@selectedTab'], "_show", []);return (self['@opened']=true);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["jtalkBody"]);smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_show", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_show", []);smalltalk.send(self, "_updateBodyMargin", []);smalltalk.send(self['@selectedTab'], "_show", []);return (self['@opened']=true);})])); +smalltalk.send(self['@ul'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(self, "_nodes", []), "_do_", [(function(each){return smalltalk.send(each, "_renderOn_", [html]);})]);})]); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesList); + smalltalk.addMethod( -unescape('_close'), +unescape('_on_'), smalltalk.method({ -selector: unescape('close'), -fn: function (){ +selector: unescape('on%3A'), +fn: function (aBrowser){ var self=this; -((($receiver = self['@opened']).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_hide", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_hide", []);smalltalk.send(self['@selectedTab'], "_hide", []);smalltalk.send(self, "_removeBodyMargin", []);smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_removeClass_", ["jtalkBody"]);return (self['@opened']=false);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_hide", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_hide", []);smalltalk.send(self['@selectedTab'], "_hide", []);smalltalk.send(self, "_removeBodyMargin", []);smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_removeClass_", ["jtalkBody"]);return (self['@opened']=false);})])); +return (function($rec){smalltalk.send($rec, "_browser_", [aBrowser]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesList.klass); + +smalltalk.addClass('ClassesListNode', smalltalk.Widget, ['browser', 'theClass', 'level', 'nodes'], 'IDE'); smalltalk.addMethod( -unescape('_newBrowserTab'), +unescape('_browser'), smalltalk.method({ -selector: unescape('newBrowserTab'), +selector: unescape('browser'), fn: function (){ var self=this; -smalltalk.send((smalltalk.Browser || Browser), "_open", []); +return self['@browser']; return self;} }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_selectTab_'), +unescape('_browser_'), smalltalk.method({ -selector: unescape('selectTab%3A'), -fn: function (aWidget){ +selector: unescape('browser%3A'), +fn: function (aBrowser){ var self=this; -smalltalk.send(self, "_open", []); -(self['@selectedTab']=aWidget); -smalltalk.send(smalltalk.send(self, "_tabs", []), "_do_", [(function(each){return smalltalk.send(each, "_hide", []);})]); -smalltalk.send(aWidget, "_show", []); -smalltalk.send(self, "_update", []); +(self['@browser']=aBrowser); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_closeTab_'), +unescape('_getNodesFrom_'), smalltalk.method({ -selector: unescape('closeTab%3A'), -fn: function (aWidget){ +selector: unescape('getNodesFrom%3A'), +fn: function (aCollection){ var self=this; -smalltalk.send(self, "_removeTab_", [aWidget]); -smalltalk.send(self, "_selectTab_", [smalltalk.send(smalltalk.send(self, "_tabs", []), "_last", [])]); -smalltalk.send(aWidget, "_remove", []); -smalltalk.send(self, "_update", []); +var children=nil; +var others=nil; +(children=[]); +(others=[]); +smalltalk.send(aCollection, "_do_", [(function(each){return ((($receiver = smalltalk.send(smalltalk.send(each, "_superclass", []), "__eq", [smalltalk.send(self, "_theClass", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(children, "_add_", [each]);})() : (function(){return smalltalk.send(others, "_add_", [each]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(children, "_add_", [each]);}), (function(){return smalltalk.send(others, "_add_", [each]);})]));})]); +(self['@nodes']=smalltalk.send(children, "_collect_", [(function(each){return smalltalk.send((smalltalk.ClassesListNode || ClassesListNode), "_on_browser_classes_level_", [each, smalltalk.send(self, "_browser", []), others, ((($receiver = smalltalk.send(self, "_level", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})])); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_search_'), +unescape('_label'), smalltalk.method({ -selector: unescape('search%3A'), -fn: function (aString){ +selector: unescape('label'), +fn: function (){ var self=this; -var searchedClass=nil; -(searchedClass=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [aString])); -((($receiver = smalltalk.send(searchedClass, "_isClass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send((smalltalk.Browser || Browser), "_openOn_", [searchedClass]);})() : (function(){return smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [aString]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send((smalltalk.Browser || Browser), "_openOn_", [searchedClass]);}), (function(){return smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [aString]);})])); +var str=nil; +(str=smalltalk.send(smalltalk.send((smalltalk.String || String), "_new", []), "_writeStream", [])); +smalltalk.send(smalltalk.send(self, "_level", []), "_timesRepeat_", [(function(){return smalltalk.send(str, "_nextPutAll_", [unescape("%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B")]);})]); +smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_theClass", []), "_name", [])]); +return smalltalk.send(str, "_contents", []); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_addTab_'), +unescape('_level'), smalltalk.method({ -selector: unescape('addTab%3A'), -fn: function (aWidget){ +selector: unescape('level'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_tabs", []), "_add_", [aWidget]); -smalltalk.send(aWidget, "_appendToJQuery_", [smalltalk.send(unescape("%23jtalk"), "_asJQuery", [])]); -smalltalk.send(aWidget, "_hide", []); +return self['@level']; return self;} }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_removeTab_'), +unescape('_level_'), smalltalk.method({ -selector: unescape('removeTab%3A'), -fn: function (aWidget){ +selector: unescape('level%3A'), +fn: function (anInteger){ var self=this; -smalltalk.send(smalltalk.send(self, "_tabs", []), "_remove_", [aWidget]); -smalltalk.send(self, "_update", []); +(self['@level']=anInteger); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_initialize'), +unescape('_nodes'), smalltalk.method({ -selector: unescape('initialize'), +selector: unescape('nodes'), fn: function (){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.Widget); -(self['@opened']=true); -smalltalk.send((function(html){return smalltalk.send(smalltalk.send(html, "_div", []), "_id_", ["jtalk"]);}), "_appendToJQuery_", [smalltalk.send("body", "_asJQuery", [])]); -smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["jtalkBody"]); -smalltalk.send(self, "_appendToJQuery_", [smalltalk.send(unescape("%23jtalk"), "_asJQuery", [])]); -(function($rec){smalltalk.send($rec, "_addTab_", [smalltalk.send((smalltalk.IDETranscript || IDETranscript), "_current", [])]);smalltalk.send($rec, "_addTab_", [smalltalk.send((smalltalk.Workspace || Workspace), "_new", [])]);return smalltalk.send($rec, "_addTab_", [smalltalk.send((smalltalk.TestRunner || TestRunner), "_new", [])]);})(self); -smalltalk.send(self, "_selectTab_", [smalltalk.send(smalltalk.send(self, "_tabs", []), "_last", [])]); -(function($rec){smalltalk.send($rec, "_onResize_", [(function(){return (function($rec){smalltalk.send($rec, "_updateBodyMargin", []);return smalltalk.send($rec, "_updatePosition", []);})(self);})]);return smalltalk.send($rec, "_onWindowResize_", [(function(){return smalltalk.send(self, "_updatePosition", []);})]);})(self); +return self['@nodes']; return self;} }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( unescape('_renderOn_'), @@ -221,264 +203,311 @@ smalltalk.method({ selector: unescape('renderOn%3A'), fn: function (html){ var self=this; -smalltalk.send(smalltalk.send(html, "_div", []), "_id_", ["logo"]); -smalltalk.send(self, "_renderToolbarOn_", [html]); -(self['@ul']=(function($rec){smalltalk.send($rec, "_id_", ["jtalkTabs"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_ul", []))); -smalltalk.send(self, "_renderTabs", []); +var li=nil; +var cssClass=nil; +(cssClass=""); +(li=smalltalk.send(smalltalk.send(html, "_li", []), "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_browser", []), "_selectClass_", [smalltalk.send(self, "_theClass", [])]);})])); +smalltalk.send(smalltalk.send(li, "_asJQuery", []), "_html_", [smalltalk.send(self, "_label", [])]); +((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_browser", []), "_selectedClass", []), "__eq", [smalltalk.send(self, "_theClass", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" selected"]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" selected"]));})])); +((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_theClass", []), "_comment", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" commented"]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" commented"]));})])); +smalltalk.send(li, "_class_", [cssClass]); +smalltalk.send(smalltalk.send(self, "_nodes", []), "_do_", [(function(each){return smalltalk.send(each, "_renderOn_", [html]);})]); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_renderTabFor_on_'), +unescape('_theClass'), smalltalk.method({ -selector: unescape('renderTabFor%3Aon%3A'), -fn: function (aWidget, html){ +selector: unescape('theClass'), +fn: function (){ var self=this; -var li=nil; -(li=smalltalk.send(html, "_li", [])); -((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [aWidget])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})])); -(function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", [(function(){((($receiver = smalltalk.send(aWidget, "_canBeClosed", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_class_", ["close"]);smalltalk.send($rec, "_with_", ["x"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_closeTab_", [aWidget]);})]);})(smalltalk.send(html, "_span", []));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_class_", ["close"]);smalltalk.send($rec, "_with_", ["x"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_closeTab_", [aWidget]);})]);})(smalltalk.send(html, "_span", []));})]));return smalltalk.send(smalltalk.send(html, "_span", []), "_with_", [smalltalk.send(self, "_labelFor_", [aWidget])]);})]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [aWidget]);})]);})(li); +return self['@theClass']; return self;} }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_renderTabs'), +unescape('_theClass_'), smalltalk.method({ -selector: unescape('renderTabs'), -fn: function (){ +selector: unescape('theClass%3A'), +fn: function (aClass){ var self=this; -smalltalk.send(self['@ul'], "_contents_", [(function(html){smalltalk.send(smalltalk.send(self, "_tabs", []), "_do_", [(function(each){return smalltalk.send(self, "_renderTabFor_on_", [each, html]);})]);return (function($rec){smalltalk.send($rec, "_class_", ["newtab"]);smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", [unescape("%20+%20")]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_newBrowserTab", []);})]);})(smalltalk.send(html, "_li", []));})]); +(self['@theClass']=aClass); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesListNode); + smalltalk.addMethod( -unescape('_renderToolbarOn_'), +unescape('_on_browser_classes_level_'), smalltalk.method({ -selector: unescape('renderToolbarOn%3A'), -fn: function (html){ +selector: unescape('on%3Abrowser%3Aclasses%3Alevel%3A'), +fn: function (aClass, aBrowser, aCollection, anInteger){ var self=this; -(function($rec){smalltalk.send($rec, "_id_", ["jt_toolbar"]);return smalltalk.send($rec, "_with_", [(function(){(self['@input']=(function($rec){smalltalk.send($rec, "_class_", ["implementors"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_input", [])));smalltalk.send(self['@input'], "_onKeyPress_", [(function(event){return ((($receiver = smalltalk.send(smalltalk.send(event, "_keyCode", []), "__eq", [(13)])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_search_", [smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val", [])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self, "_search_", [smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val", [])]);})]));})]);return (function($rec){smalltalk.send($rec, "_id_", ["jt_close"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_close", []);})]);})(smalltalk.send(html, "_div", []));})]);})(smalltalk.send(html, "_div", [])); +return (function($rec){smalltalk.send($rec, "_theClass_", [aClass]);smalltalk.send($rec, "_browser_", [aBrowser]);smalltalk.send($rec, "_level_", [anInteger]);smalltalk.send($rec, "_getNodesFrom_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;} }), -smalltalk.TabManager); +smalltalk.ClassesListNode.klass); + +smalltalk.addClass('DebugErrorHandler', smalltalk.ErrorHandler, [], 'IDE'); smalltalk.addMethod( -unescape('_update'), +unescape('_handleError_'), smalltalk.method({ -selector: unescape('update'), -fn: function (){ +selector: unescape('handleError%3A'), +fn: function (anError){ var self=this; -smalltalk.send(self, "_renderTabs", []); +smalltalk.send((function(){return (function($rec){smalltalk.send($rec, "_error_", [anError]);return smalltalk.send($rec, "_open", []);})(smalltalk.send((smalltalk.Debugger || Debugger), "_new", []));}), "_on_do_", [(smalltalk.Error || Error), (function(error){return smalltalk.send(smalltalk.send((smalltalk.ErrorHandler || ErrorHandler), "_new", []), "_handleError_", [error]);})]); return self;} }), -smalltalk.TabManager); +smalltalk.DebugErrorHandler); -smalltalk.TabManager.klass.iVarNames = ['current']; smalltalk.addMethod( -unescape('_current'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('current'), +selector: unescape('initialize'), fn: function (){ var self=this; -return (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return (self['@current']=smalltalk.send(self, "_new", [], smalltalk.Widget.klass));})() : $receiver; +smalltalk.send(self, "_register", []); return self;} }), -smalltalk.TabManager.klass); +smalltalk.DebugErrorHandler.klass); + +smalltalk.addClass('SourceArea', smalltalk.Widget, ['editor', 'div', 'receiver', 'onDoIt'], 'IDE'); smalltalk.addMethod( -unescape('_new'), +unescape('_clear'), smalltalk.method({ -selector: unescape('new'), +selector: unescape('clear'), fn: function (){ var self=this; -smalltalk.send(self, "_shouldNotImplement", []); +smalltalk.send(self, "_val_", [""]); return self;} }), -smalltalk.TabManager.klass); - +smalltalk.SourceArea); -smalltalk.addClass('TabWidget', smalltalk.Widget, ['div'], 'IDE'); smalltalk.addMethod( -unescape('_label'), +unescape('_currentLine'), smalltalk.method({ -selector: unescape('label'), +selector: unescape('currentLine'), fn: function (){ var self=this; -smalltalk.send(self, "_subclassResponsibility", []); +return smalltalk.send(self['@editor'], "_getLine_", [smalltalk.send(smalltalk.send(self['@editor'], "_getCursor", []), "_line", [])]); return self;} }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_open'), +unescape('_currentLineOrSelection'), smalltalk.method({ -selector: unescape('open'), +selector: unescape('currentLineOrSelection'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_addTab_", [self]); -smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_selectTab_", [self]); +return ((($receiver = smalltalk.send(self['@editor'], "_somethingSelected", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_currentLine", []);})() : (function(){return smalltalk.send(self, "_selection", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_currentLine", []);}), (function(){return smalltalk.send(self, "_selection", []);})])); return self;} }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_show'), +unescape('_doIt'), smalltalk.method({ -selector: unescape('show'), +selector: unescape('doIt'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@div'], "_asJQuery", []), "_show", []); +var result=nil; +(result=smalltalk.send(self, "_eval_", [smalltalk.send(self, "_currentLineOrSelection", [])])); +(($receiver = smalltalk.send(self, "_onDoIt", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(smalltalk.send(self, "_onDoIt", []), "_value", []);})() : nil; +return result; return self;} }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_hide'), +unescape('_editor'), smalltalk.method({ -selector: unescape('hide'), +selector: unescape('editor'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@div'], "_asJQuery", []), "_hide", []); +return self['@editor']; return self;} }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_remove'), +unescape('_eval_'), smalltalk.method({ -selector: unescape('remove'), -fn: function (){ +selector: unescape('eval%3A'), +fn: function (aString){ var self=this; -smalltalk.send(smalltalk.send(self['@div'], "_asJQuery", []), "_remove", []); -return self;} +try{var compiler=nil; +(compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])); +smalltalk.send((function(){return smalltalk.send(compiler, "_parseExpression_", [aString]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return (function(){throw({name: 'stReturn', selector: '_eval_', fn: function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send(ex, "_messageText", [])])}})})();})]); +(function(){throw({name: 'stReturn', selector: '_eval_', fn: function(){return smalltalk.send(smalltalk.send(smalltalk.send(compiler, "_load_forClass_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")]), (smalltalk.DoIt || DoIt)]), "_fn", []), "_applyTo_arguments_", [smalltalk.send(self, "_receiver", []), []])}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_eval_'){return e.fn()} throw(e)}} }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_close'), +unescape('_fileIn'), smalltalk.method({ -selector: unescape('close'), +selector: unescape('fileIn'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_closeTab_", [self]); +smalltalk.send(smalltalk.send((smalltalk.Importer || Importer), "_new", []), "_import_", [smalltalk.send(smalltalk.send(self, "_currentLineOrSelection", []), "_readStream", [])]); return self;} }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_renderOn_'), +unescape('_handleKeyDown_'), smalltalk.method({ -selector: unescape('renderOn%3A'), -fn: function (html){ +selector: unescape('handleKeyDown%3A'), +fn: function (anEvent){ var self=this; -(self['@div']=(function($rec){smalltalk.send($rec, "_class_", ["jtalkTool"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_div", []))); -smalltalk.send(self, "_renderTab", []); +if(anEvent.ctrlKey) { + if(anEvent.keyCode === 80) { //ctrl+p + self._printIt(); + anEvent.preventDefault(); + return false; + } + if(anEvent.keyCode === 68) { //ctrl+d + self._doIt(); + anEvent.preventDefault(); + return false; + } + if(anEvent.keyCode === 73) { //ctrl+i + self._inspectIt(); + anEvent.preventDefault(); + return false; + } + }; return self;} }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_renderBoxOn_'), +unescape('_inspectIt'), smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -fn: function (html){ +selector: unescape('inspectIt'), +fn: function (){ var self=this; - +smalltalk.send(smalltalk.send(self, "_doIt", []), "_inspect", []); return self;} }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_renderButtonsOn_'), +unescape('_onDoIt'), smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), -fn: function (html){ +selector: unescape('onDoIt'), +fn: function (){ var self=this; - +return self['@onDoIt']; return self;} }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_update'), +unescape('_onDoIt_'), smalltalk.method({ -selector: unescape('update'), -fn: function (){ +selector: unescape('onDoIt%3A'), +fn: function (aBlock){ var self=this; -smalltalk.send(self, "_renderTab", []); +(self['@onDoIt']=aBlock); return self;} }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_renderTab'), +unescape('_onKeyDown_'), smalltalk.method({ -selector: unescape('renderTab'), -fn: function (){ +selector: unescape('onKeyDown%3A'), +fn: function (aBlock){ var self=this; -smalltalk.send(self['@div'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["jt_box"]);return smalltalk.send($rec, "_with_", [(function(){return smalltalk.send(self, "_renderBoxOn_", [html]);})]);})(smalltalk.send(html, "_div", []));return (function($rec){smalltalk.send($rec, "_class_", ["jt_buttons"]);return smalltalk.send($rec, "_with_", [(function(){return smalltalk.send(self, "_renderButtonsOn_", [html]);})]);})(smalltalk.send(html, "_div", []));})]); +smalltalk.send(self['@div'], "_onKeyDown_", [aBlock]); return self;} }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_canBeClosed'), +unescape('_onKeyUp_'), smalltalk.method({ -selector: unescape('canBeClosed'), -fn: function (){ +selector: unescape('onKeyUp%3A'), +fn: function (aBlock){ var self=this; -return false; +smalltalk.send(self['@div'], "_onKeyUp_", [aBlock]); return self;} }), -smalltalk.TabWidget); +smalltalk.SourceArea); +smalltalk.addMethod( +unescape('_print_'), +smalltalk.method({ +selector: unescape('print%3A'), +fn: function (aString){ +var self=this; +var start=nil; +var stop=nil; +(start=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", [])); +(stop=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", [])); +smalltalk.send(start, "_at_put_", ["line", smalltalk.send(smalltalk.send(self['@editor'], "_getCursor_", [false]), "_line", [])]); +smalltalk.send(start, "_at_put_", ["ch", smalltalk.send(smalltalk.send(self['@editor'], "_getCursor_", [false]), "_ch", [])]); +smalltalk.send(stop, "_at_put_", ["line", smalltalk.send(start, "_at_", ["line"])]); +smalltalk.send(stop, "_at_put_", ["ch", ((($receiver = ((($receiver = smalltalk.send(start, "_at_", ["ch"])).klass === smalltalk.Number) ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])]))).klass === smalltalk.Number) ? $receiver +(2) : smalltalk.send($receiver, "__plus", [(2)]))]); +smalltalk.send(self['@editor'], "_replaceSelection_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self['@editor'], "_getSelection", []), "__comma", [" "]), "__comma", [aString]), "__comma", [" "])]); +smalltalk.send(self['@editor'], "_setCursor_", [smalltalk.send(self['@editor'], "_getCursor_", [true])]); +smalltalk.send(self['@editor'], "_setSelection_end_", [stop, start]); +return self;} +}), +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_open'), +unescape('_printIt'), smalltalk.method({ -selector: unescape('open'), +selector: unescape('printIt'), fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_new", []), "_open", []); +smalltalk.send(self, "_print_", [smalltalk.send(smalltalk.send(self, "_doIt", []), "_printString", [])]); return self;} }), -smalltalk.TabWidget.klass); - +smalltalk.SourceArea); -smalltalk.addClass('SourceArea', smalltalk.Widget, ['editor', 'div', 'receiver', 'onDoIt'], 'IDE'); smalltalk.addMethod( -unescape('_val'), +unescape('_receiver'), smalltalk.method({ -selector: unescape('val'), +selector: unescape('receiver'), fn: function (){ var self=this; -return smalltalk.send(self['@editor'], "_getValue", []); +return (($receiver = self['@receiver']) == nil || $receiver == undefined) ? (function(){return smalltalk.send((smalltalk.DoIt || DoIt), "_new", []);})() : $receiver; return self;} }), smalltalk.SourceArea); smalltalk.addMethod( -unescape('_val_'), +unescape('_receiver_'), smalltalk.method({ -selector: unescape('val%3A'), -fn: function (aString){ +selector: unescape('receiver%3A'), +fn: function (anObject){ var self=this; -smalltalk.send(self['@editor'], "_setValue_", [aString]); +(self['@receiver']=anObject); return self;} }), smalltalk.SourceArea); smalltalk.addMethod( -unescape('_currentLine'), +unescape('_renderOn_'), smalltalk.method({ -selector: unescape('currentLine'), -fn: function (){ +selector: unescape('renderOn%3A'), +fn: function (html){ var self=this; -return smalltalk.send(self['@editor'], "_getLine_", [smalltalk.send(smalltalk.send(self['@editor'], "_getCursor", []), "_line", [])]); +var textarea=nil; +(self['@div']=smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["source"])); +smalltalk.send(self['@div'], "_with_", [(function(){return (textarea=smalltalk.send(html, "_textarea", []));})]); +smalltalk.send(self, "_setEditorOn_", [smalltalk.send(textarea, "_element", [])]); +smalltalk.send(self['@div'], "_onKeyDown_", [(function(e){return smalltalk.send(self, "_handleKeyDown_", [e]);})]); return self;} }), smalltalk.SourceArea); @@ -506,34 +535,34 @@ return self;} smalltalk.SourceArea); smalltalk.addMethod( -unescape('_selectionStart'), +unescape('_selectionEnd_'), smalltalk.method({ -selector: unescape('selectionStart'), -fn: function (){ +selector: unescape('selectionEnd%3A'), +fn: function (anInteger){ var self=this; -return smalltalk.send(smalltalk.send((typeof textarea == 'undefined' ? nil : textarea), "_element", []), "_selectionStart", []); +smalltalk.send(smalltalk.send((typeof textarea == 'undefined' ? nil : textarea), "_element", []), "_selectionEnd_", [anInteger]); return self;} }), smalltalk.SourceArea); smalltalk.addMethod( -unescape('_selectionStart_'), +unescape('_selectionStart'), smalltalk.method({ -selector: unescape('selectionStart%3A'), -fn: function (anInteger){ +selector: unescape('selectionStart'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send((typeof textarea == 'undefined' ? nil : textarea), "_element", []), "_selectionStart_", [anInteger]); +return smalltalk.send(smalltalk.send((typeof textarea == 'undefined' ? nil : textarea), "_element", []), "_selectionStart", []); return self;} }), smalltalk.SourceArea); smalltalk.addMethod( -unescape('_selectionEnd_'), +unescape('_selectionStart_'), smalltalk.method({ -selector: unescape('selectionEnd%3A'), +selector: unescape('selectionStart%3A'), fn: function (anInteger){ var self=this; -smalltalk.send(smalltalk.send((typeof textarea == 'undefined' ? nil : textarea), "_element", []), "_selectionEnd_", [anInteger]); +smalltalk.send(smalltalk.send((typeof textarea == 'undefined' ? nil : textarea), "_element", []), "_selectionStart_", [anInteger]); return self;} }), smalltalk.SourceArea); @@ -556,731 +585,800 @@ return self;} smalltalk.SourceArea); smalltalk.addMethod( -unescape('_editor'), +unescape('_val'), smalltalk.method({ -selector: unescape('editor'), +selector: unescape('val'), fn: function (){ var self=this; -return self['@editor']; +return smalltalk.send(self['@editor'], "_getValue", []); return self;} }), smalltalk.SourceArea); smalltalk.addMethod( -unescape('_receiver'), +unescape('_val_'), smalltalk.method({ -selector: unescape('receiver'), -fn: function (){ +selector: unescape('val%3A'), +fn: function (aString){ var self=this; -return (($receiver = self['@receiver']) == nil || $receiver == undefined) ? (function(){return smalltalk.send((smalltalk.DoIt || DoIt), "_new", []);})() : $receiver; +smalltalk.send(self['@editor'], "_setValue_", [aString]); return self;} }), smalltalk.SourceArea); + + +smalltalk.addClass('TabManager', smalltalk.Widget, ['selectedTab', 'tabs', 'opened', 'ul', 'input'], 'IDE'); smalltalk.addMethod( -unescape('_receiver_'), +unescape('_addTab_'), smalltalk.method({ -selector: unescape('receiver%3A'), -fn: function (anObject){ +selector: unescape('addTab%3A'), +fn: function (aWidget){ var self=this; -(self['@receiver']=anObject); +smalltalk.send(smalltalk.send(self, "_tabs", []), "_add_", [aWidget]); +smalltalk.send(aWidget, "_appendToJQuery_", [smalltalk.send(unescape("%23jtalk"), "_asJQuery", [])]); +smalltalk.send(aWidget, "_hide", []); return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_onDoIt_'), +unescape('_close'), smalltalk.method({ -selector: unescape('onDoIt%3A'), -fn: function (aBlock){ +selector: unescape('close'), +fn: function (){ var self=this; -(self['@onDoIt']=aBlock); +((($receiver = self['@opened']).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_hide", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_hide", []);smalltalk.send(self['@selectedTab'], "_hide", []);smalltalk.send(self, "_removeBodyMargin", []);smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_removeClass_", ["jtalkBody"]);return (self['@opened']=false);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_hide", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_hide", []);smalltalk.send(self['@selectedTab'], "_hide", []);smalltalk.send(self, "_removeBodyMargin", []);smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_removeClass_", ["jtalkBody"]);return (self['@opened']=false);})])); return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_onDoIt'), +unescape('_closeTab_'), smalltalk.method({ -selector: unescape('onDoIt'), +selector: unescape('closeTab%3A'), +fn: function (aWidget){ +var self=this; +smalltalk.send(self, "_removeTab_", [aWidget]); +smalltalk.send(self, "_selectTab_", [smalltalk.send(smalltalk.send(self, "_tabs", []), "_last", [])]); +smalltalk.send(aWidget, "_remove", []); +smalltalk.send(self, "_update", []); +return self;} +}), +smalltalk.TabManager); + +smalltalk.addMethod( +unescape('_initialize'), +smalltalk.method({ +selector: unescape('initialize'), fn: function (){ var self=this; -return self['@onDoIt']; +smalltalk.send(self, "_initialize", [], smalltalk.Widget); +(self['@opened']=true); +smalltalk.send((function(html){return smalltalk.send(smalltalk.send(html, "_div", []), "_id_", ["jtalk"]);}), "_appendToJQuery_", [smalltalk.send("body", "_asJQuery", [])]); +smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["jtalkBody"]); +smalltalk.send(self, "_appendToJQuery_", [smalltalk.send(unescape("%23jtalk"), "_asJQuery", [])]); +(function($rec){smalltalk.send($rec, "_addTab_", [smalltalk.send((smalltalk.IDETranscript || IDETranscript), "_current", [])]);smalltalk.send($rec, "_addTab_", [smalltalk.send((smalltalk.Workspace || Workspace), "_new", [])]);return smalltalk.send($rec, "_addTab_", [smalltalk.send((smalltalk.TestRunner || TestRunner), "_new", [])]);})(self); +smalltalk.send(self, "_selectTab_", [smalltalk.send(smalltalk.send(self, "_tabs", []), "_last", [])]); +(function($rec){smalltalk.send($rec, "_onResize_", [(function(){return (function($rec){smalltalk.send($rec, "_updateBodyMargin", []);return smalltalk.send($rec, "_updatePosition", []);})(self);})]);return smalltalk.send($rec, "_onWindowResize_", [(function(){return smalltalk.send(self, "_updatePosition", []);})]);})(self); return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_currentLineOrSelection'), +unescape('_labelFor_'), smalltalk.method({ -selector: unescape('currentLineOrSelection'), +selector: unescape('labelFor%3A'), +fn: function (aWidget){ +var self=this; +var label=nil; +var maxSize=nil; +(maxSize=(15)); +(label=smalltalk.send(smalltalk.send(aWidget, "_label", []), "_copyFrom_to_", [(0), smalltalk.send(smalltalk.send(smalltalk.send(aWidget, "_label", []), "_size", []), "_min_", [maxSize])])); +((($receiver = ((($receiver = smalltalk.send(smalltalk.send(aWidget, "_label", []), "_size", [])).klass === smalltalk.Number) ? $receiver >maxSize : smalltalk.send($receiver, "__gt", [maxSize]))).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (label=smalltalk.send(label, "__comma", ["..."]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (label=smalltalk.send(label, "__comma", ["..."]));})])); +return label; +return self;} +}), +smalltalk.TabManager); + +smalltalk.addMethod( +unescape('_newBrowserTab'), +smalltalk.method({ +selector: unescape('newBrowserTab'), fn: function (){ var self=this; -return ((($receiver = smalltalk.send(self['@editor'], "_somethingSelected", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_currentLine", []);})() : (function(){return smalltalk.send(self, "_selection", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_currentLine", []);}), (function(){return smalltalk.send(self, "_selection", []);})])); +smalltalk.send((smalltalk.Browser || Browser), "_open", []); return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_clear'), +unescape('_onResize_'), smalltalk.method({ -selector: unescape('clear'), +selector: unescape('onResize%3A'), +fn: function (aBlock){ +var self=this; +jQuery('#jtalk').resizable({ + handles: 'n', + resize: aBlock, + minHeight: 230 +}); +return self;} +}), +smalltalk.TabManager); + +smalltalk.addMethod( +unescape('_onWindowResize_'), +smalltalk.method({ +selector: unescape('onWindowResize%3A'), +fn: function (aBlock){ +var self=this; +jQuery(window).resize(aBlock); +return self;} +}), +smalltalk.TabManager); + +smalltalk.addMethod( +unescape('_open'), +smalltalk.method({ +selector: unescape('open'), fn: function (){ var self=this; -smalltalk.send(self, "_val_", [""]); +((($receiver = self['@opened']).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["jtalkBody"]);smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_show", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_show", []);smalltalk.send(self, "_updateBodyMargin", []);smalltalk.send(self['@selectedTab'], "_show", []);return (self['@opened']=true);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["jtalkBody"]);smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_show", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_show", []);smalltalk.send(self, "_updateBodyMargin", []);smalltalk.send(self['@selectedTab'], "_show", []);return (self['@opened']=true);})])); return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_doIt'), +unescape('_removeBodyMargin'), smalltalk.method({ -selector: unescape('doIt'), +selector: unescape('removeBodyMargin'), fn: function (){ var self=this; -var result=nil; -(result=smalltalk.send(self, "_eval_", [smalltalk.send(self, "_currentLineOrSelection", [])])); -(($receiver = smalltalk.send(self, "_onDoIt", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(smalltalk.send(self, "_onDoIt", []), "_value", []);})() : nil; -return result; +smalltalk.send(self, "_setBodyMargin_", [(0)]); return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_eval_'), +unescape('_removeTab_'), smalltalk.method({ -selector: unescape('eval%3A'), -fn: function (aString){ +selector: unescape('removeTab%3A'), +fn: function (aWidget){ var self=this; -try{var compiler=nil; -(compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])); -smalltalk.send((function(){return smalltalk.send(compiler, "_parseExpression_", [aString]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return (function(){throw({name: 'stReturn', selector: '_eval_', fn: function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send(ex, "_messageText", [])])}})})();})]); -(function(){throw({name: 'stReturn', selector: '_eval_', fn: function(){return smalltalk.send(smalltalk.send(smalltalk.send(compiler, "_load_forClass_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")]), (smalltalk.DoIt || DoIt)]), "_fn", []), "_applyTo_arguments_", [smalltalk.send(self, "_receiver", []), []])}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_eval_'){return e.fn()} throw(e)}} +smalltalk.send(smalltalk.send(self, "_tabs", []), "_remove_", [aWidget]); +smalltalk.send(self, "_update", []); +return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_handleKeyDown_'), +unescape('_renderOn_'), smalltalk.method({ -selector: unescape('handleKeyDown%3A'), -fn: function (anEvent){ +selector: unescape('renderOn%3A'), +fn: function (html){ var self=this; -if(anEvent.ctrlKey) { - if(anEvent.keyCode === 80) { //ctrl+p - self._printIt(); - anEvent.preventDefault(); - return false; - } - if(anEvent.keyCode === 68) { //ctrl+d - self._doIt(); - anEvent.preventDefault(); - return false; - } - if(anEvent.keyCode === 73) { //ctrl+i - self._inspectIt(); - anEvent.preventDefault(); - return false; - } - }; +smalltalk.send(smalltalk.send(html, "_div", []), "_id_", ["logo"]); +smalltalk.send(self, "_renderToolbarOn_", [html]); +(self['@ul']=(function($rec){smalltalk.send($rec, "_id_", ["jtalkTabs"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_ul", []))); +smalltalk.send(self, "_renderTabs", []); +return self;} +}), +smalltalk.TabManager); + +smalltalk.addMethod( +unescape('_renderTabFor_on_'), +smalltalk.method({ +selector: unescape('renderTabFor%3Aon%3A'), +fn: function (aWidget, html){ +var self=this; +var li=nil; +(li=smalltalk.send(html, "_li", [])); +((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [aWidget])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})])); +(function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", [(function(){((($receiver = smalltalk.send(aWidget, "_canBeClosed", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_class_", ["close"]);smalltalk.send($rec, "_with_", ["x"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_closeTab_", [aWidget]);})]);})(smalltalk.send(html, "_span", []));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_class_", ["close"]);smalltalk.send($rec, "_with_", ["x"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_closeTab_", [aWidget]);})]);})(smalltalk.send(html, "_span", []));})]));return smalltalk.send(smalltalk.send(html, "_span", []), "_with_", [smalltalk.send(self, "_labelFor_", [aWidget])]);})]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [aWidget]);})]);})(li); +return self;} +}), +smalltalk.TabManager); + +smalltalk.addMethod( +unescape('_renderTabs'), +smalltalk.method({ +selector: unescape('renderTabs'), +fn: function (){ +var self=this; +smalltalk.send(self['@ul'], "_contents_", [(function(html){smalltalk.send(smalltalk.send(self, "_tabs", []), "_do_", [(function(each){return smalltalk.send(self, "_renderTabFor_on_", [each, html]);})]);return (function($rec){smalltalk.send($rec, "_class_", ["newtab"]);smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", [unescape("%20+%20")]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_newBrowserTab", []);})]);})(smalltalk.send(html, "_li", []));})]); return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_inspectIt'), +unescape('_renderToolbarOn_'), smalltalk.method({ -selector: unescape('inspectIt'), -fn: function (){ +selector: unescape('renderToolbarOn%3A'), +fn: function (html){ var self=this; -smalltalk.send(smalltalk.send(self, "_doIt", []), "_inspect", []); +(function($rec){smalltalk.send($rec, "_id_", ["jt_toolbar"]);return smalltalk.send($rec, "_with_", [(function(){(self['@input']=(function($rec){smalltalk.send($rec, "_class_", ["implementors"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_input", [])));smalltalk.send(self['@input'], "_onKeyPress_", [(function(event){return ((($receiver = smalltalk.send(smalltalk.send(event, "_keyCode", []), "__eq", [(13)])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_search_", [smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val", [])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self, "_search_", [smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val", [])]);})]));})]);return (function($rec){smalltalk.send($rec, "_id_", ["jt_close"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_close", []);})]);})(smalltalk.send(html, "_div", []));})]);})(smalltalk.send(html, "_div", [])); return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_print_'), +unescape('_search_'), smalltalk.method({ -selector: unescape('print%3A'), +selector: unescape('search%3A'), fn: function (aString){ var self=this; -var start=nil; -var stop=nil; -(start=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", [])); -(stop=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", [])); -smalltalk.send(start, "_at_put_", ["line", smalltalk.send(smalltalk.send(self['@editor'], "_getCursor_", [false]), "_line", [])]); -smalltalk.send(start, "_at_put_", ["ch", smalltalk.send(smalltalk.send(self['@editor'], "_getCursor_", [false]), "_ch", [])]); -smalltalk.send(stop, "_at_put_", ["line", smalltalk.send(start, "_at_", ["line"])]); -smalltalk.send(stop, "_at_put_", ["ch", ((($receiver = ((($receiver = smalltalk.send(start, "_at_", ["ch"])).klass === smalltalk.Number) ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])]))).klass === smalltalk.Number) ? $receiver +(2) : smalltalk.send($receiver, "__plus", [(2)]))]); -smalltalk.send(self['@editor'], "_replaceSelection_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self['@editor'], "_getSelection", []), "__comma", [" "]), "__comma", [aString]), "__comma", [" "])]); -smalltalk.send(self['@editor'], "_setCursor_", [smalltalk.send(self['@editor'], "_getCursor_", [true])]); -smalltalk.send(self['@editor'], "_setSelection_end_", [stop, start]); +var searchedClass=nil; +(searchedClass=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [aString])); +((($receiver = smalltalk.send(searchedClass, "_isClass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send((smalltalk.Browser || Browser), "_openOn_", [searchedClass]);})() : (function(){return smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [aString]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send((smalltalk.Browser || Browser), "_openOn_", [searchedClass]);}), (function(){return smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [aString]);})])); return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_printIt'), +unescape('_selectTab_'), smalltalk.method({ -selector: unescape('printIt'), -fn: function (){ +selector: unescape('selectTab%3A'), +fn: function (aWidget){ var self=this; -smalltalk.send(self, "_print_", [smalltalk.send(smalltalk.send(self, "_doIt", []), "_printString", [])]); +smalltalk.send(self, "_open", []); +(self['@selectedTab']=aWidget); +smalltalk.send(smalltalk.send(self, "_tabs", []), "_do_", [(function(each){return smalltalk.send(each, "_hide", []);})]); +smalltalk.send(aWidget, "_show", []); +smalltalk.send(self, "_update", []); return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_fileIn'), +unescape('_setBodyMargin_'), smalltalk.method({ -selector: unescape('fileIn'), -fn: function (){ +selector: unescape('setBodyMargin%3A'), +fn: function (anInteger){ var self=this; -smalltalk.send(smalltalk.send((smalltalk.Importer || Importer), "_new", []), "_import_", [smalltalk.send(smalltalk.send(self, "_currentLineOrSelection", []), "_readStream", [])]); +smalltalk.send(smalltalk.send(".jtalkBody", "_asJQuery", []), "_css_put_", [unescape("margin-bottom"), smalltalk.send(smalltalk.send(anInteger, "_asString", []), "__comma", ["px"])]); return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_onKeyUp_'), +unescape('_tabs'), smalltalk.method({ -selector: unescape('onKeyUp%3A'), -fn: function (aBlock){ +selector: unescape('tabs'), +fn: function (){ var self=this; -smalltalk.send(self['@div'], "_onKeyUp_", [aBlock]); +return (($receiver = self['@tabs']) == nil || $receiver == undefined) ? (function(){return (self['@tabs']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_onKeyDown_'), +unescape('_update'), smalltalk.method({ -selector: unescape('onKeyDown%3A'), -fn: function (aBlock){ +selector: unescape('update'), +fn: function (){ var self=this; -smalltalk.send(self['@div'], "_onKeyDown_", [aBlock]); +smalltalk.send(self, "_renderTabs", []); return self;} }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_renderOn_'), +unescape('_updateBodyMargin'), smalltalk.method({ -selector: unescape('renderOn%3A'), -fn: function (html){ +selector: unescape('updateBodyMargin'), +fn: function (){ var self=this; -var textarea=nil; -(self['@div']=smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["source"])); -smalltalk.send(self['@div'], "_with_", [(function(){return (textarea=smalltalk.send(html, "_textarea", []));})]); -smalltalk.send(self, "_setEditorOn_", [smalltalk.send(textarea, "_element", [])]); -smalltalk.send(self['@div'], "_onKeyDown_", [(function(e){return smalltalk.send(self, "_handleKeyDown_", [e]);})]); +smalltalk.send(self, "_setBodyMargin_", [smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_height", [])]); return self;} }), -smalltalk.SourceArea); - - +smalltalk.TabManager); -smalltalk.addClass('ClassesList', smalltalk.Widget, ['browser', 'ul', 'nodes'], 'IDE'); smalltalk.addMethod( -unescape('_category'), +unescape('_updatePosition'), smalltalk.method({ -selector: unescape('category'), +selector: unescape('updatePosition'), fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_browser", []), "_selectedPackage", []); +jQuery('#jtalk').css('top', '').css('bottom', '0px'); return self;} }), -smalltalk.ClassesList); +smalltalk.TabManager); + +smalltalk.TabManager.klass.iVarNames = ['current']; smalltalk.addMethod( -unescape('_nodes'), +unescape('_current'), smalltalk.method({ -selector: unescape('nodes'), +selector: unescape('current'), fn: function (){ var self=this; -(($receiver = self['@nodes']) == nil || $receiver == undefined) ? (function(){return (self['@nodes']=smalltalk.send(self, "_getNodes", []));})() : $receiver; -return self['@nodes']; +return (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return (self['@current']=smalltalk.send(self, "_new", [], smalltalk.Widget.klass));})() : $receiver; return self;} }), -smalltalk.ClassesList); +smalltalk.TabManager.klass); smalltalk.addMethod( -unescape('_browser'), +unescape('_new'), smalltalk.method({ -selector: unescape('browser'), +selector: unescape('new'), fn: function (){ var self=this; -return self['@browser']; +smalltalk.send(self, "_shouldNotImplement", []); return self;} }), -smalltalk.ClassesList); +smalltalk.TabManager.klass); + +smalltalk.addClass('TabWidget', smalltalk.Widget, ['div'], 'IDE'); smalltalk.addMethod( -unescape('_browser_'), +unescape('_canBeClosed'), smalltalk.method({ -selector: unescape('browser%3A'), -fn: function (aBrowser){ +selector: unescape('canBeClosed'), +fn: function (){ var self=this; -(self['@browser']=aBrowser); +return false; return self;} }), -smalltalk.ClassesList); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_getNodes'), +unescape('_close'), smalltalk.method({ -selector: unescape('getNodes'), +selector: unescape('close'), fn: function (){ var self=this; -var classes=nil; -var children=nil; -var others=nil; -(classes=smalltalk.send(smalltalk.send(self, "_browser", []), "_classes", [])); -(children=[]); -(others=[]); -smalltalk.send(classes, "_do_", [(function(each){return ((($receiver = smalltalk.send(classes, "_includes_", [smalltalk.send(each, "_superclass", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(children, "_add_", [each]);})() : (function(){return smalltalk.send(others, "_add_", [each]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(children, "_add_", [each]);}), (function(){return smalltalk.send(others, "_add_", [each]);})]));})]); -return smalltalk.send(children, "_collect_", [(function(each){return smalltalk.send((smalltalk.ClassesListNode || ClassesListNode), "_on_browser_classes_level_", [each, smalltalk.send(self, "_browser", []), others, (0)]);})]); +smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_closeTab_", [self]); return self;} }), -smalltalk.ClassesList); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_resetNodes'), +unescape('_hide'), smalltalk.method({ -selector: unescape('resetNodes'), +selector: unescape('hide'), fn: function (){ var self=this; -(self['@nodes']=nil); +smalltalk.send(smalltalk.send(self['@div'], "_asJQuery", []), "_hide", []); return self;} }), -smalltalk.ClassesList); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_renderOn_'), +unescape('_label'), smalltalk.method({ -selector: unescape('renderOn%3A'), -fn: function (html){ +selector: unescape('label'), +fn: function (){ var self=this; -(self['@ul']=(function($rec){smalltalk.send($rec, "_class_", ["jt_column browser classes"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_ul", []))); -smalltalk.send(self, "_updateNodes", []); +smalltalk.send(self, "_subclassResponsibility", []); return self;} }), -smalltalk.ClassesList); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_updateNodes'), +unescape('_open'), smalltalk.method({ -selector: unescape('updateNodes'), +selector: unescape('open'), fn: function (){ var self=this; -smalltalk.send(self['@ul'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(self, "_nodes", []), "_do_", [(function(each){return smalltalk.send(each, "_renderOn_", [html]);})]);})]); +smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_addTab_", [self]); +smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_selectTab_", [self]); return self;} }), -smalltalk.ClassesList); - +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_on_'), +unescape('_remove'), smalltalk.method({ -selector: unescape('on%3A'), -fn: function (aBrowser){ +selector: unescape('remove'), +fn: function (){ var self=this; -return (function($rec){smalltalk.send($rec, "_browser_", [aBrowser]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +smalltalk.send(smalltalk.send(self['@div'], "_asJQuery", []), "_remove", []); return self;} }), -smalltalk.ClassesList.klass); - +smalltalk.TabWidget); -smalltalk.addClass('ClassesListNode', smalltalk.Widget, ['browser', 'theClass', 'level', 'nodes'], 'IDE'); smalltalk.addMethod( -unescape('_renderOn_'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('renderOn%3A'), +selector: unescape('renderBoxOn%3A'), fn: function (html){ var self=this; -var li=nil; -var cssClass=nil; -(cssClass=""); -(li=smalltalk.send(smalltalk.send(html, "_li", []), "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_browser", []), "_selectClass_", [smalltalk.send(self, "_theClass", [])]);})])); -smalltalk.send(smalltalk.send(li, "_asJQuery", []), "_html_", [smalltalk.send(self, "_label", [])]); -((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_browser", []), "_selectedClass", []), "__eq", [smalltalk.send(self, "_theClass", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" selected"]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" selected"]));})])); -((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_theClass", []), "_comment", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" commented"]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" commented"]));})])); -smalltalk.send(li, "_class_", [cssClass]); -smalltalk.send(smalltalk.send(self, "_nodes", []), "_do_", [(function(each){return smalltalk.send(each, "_renderOn_", [html]);})]); + return self;} }), -smalltalk.ClassesListNode); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_nodes'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('nodes'), -fn: function (){ +selector: unescape('renderButtonsOn%3A'), +fn: function (html){ var self=this; -return self['@nodes']; + return self;} }), -smalltalk.ClassesListNode); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_theClass'), +unescape('_renderOn_'), smalltalk.method({ -selector: unescape('theClass'), -fn: function (){ +selector: unescape('renderOn%3A'), +fn: function (html){ var self=this; -return self['@theClass']; +(self['@div']=(function($rec){smalltalk.send($rec, "_class_", ["jtalkTool"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_div", []))); +smalltalk.send(self, "_renderTab", []); return self;} }), -smalltalk.ClassesListNode); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_theClass_'), +unescape('_renderTab'), smalltalk.method({ -selector: unescape('theClass%3A'), -fn: function (aClass){ +selector: unescape('renderTab'), +fn: function (){ var self=this; -(self['@theClass']=aClass); +smalltalk.send(self['@div'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["jt_box"]);return smalltalk.send($rec, "_with_", [(function(){return smalltalk.send(self, "_renderBoxOn_", [html]);})]);})(smalltalk.send(html, "_div", []));return (function($rec){smalltalk.send($rec, "_class_", ["jt_buttons"]);return smalltalk.send($rec, "_with_", [(function(){return smalltalk.send(self, "_renderButtonsOn_", [html]);})]);})(smalltalk.send(html, "_div", []));})]); return self;} }), -smalltalk.ClassesListNode); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_browser'), +unescape('_show'), smalltalk.method({ -selector: unescape('browser'), +selector: unescape('show'), fn: function (){ var self=this; -return self['@browser']; +smalltalk.send(smalltalk.send(self['@div'], "_asJQuery", []), "_show", []); return self;} }), -smalltalk.ClassesListNode); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_browser_'), +unescape('_update'), smalltalk.method({ -selector: unescape('browser%3A'), -fn: function (aBrowser){ +selector: unescape('update'), +fn: function (){ var self=this; -(self['@browser']=aBrowser); +smalltalk.send(self, "_renderTab", []); return self;} }), -smalltalk.ClassesListNode); +smalltalk.TabWidget); + smalltalk.addMethod( -unescape('_level'), +unescape('_open'), smalltalk.method({ -selector: unescape('level'), +selector: unescape('open'), fn: function (){ var self=this; -return self['@level']; +return smalltalk.send(smalltalk.send(self, "_new", []), "_open", []); return self;} }), -smalltalk.ClassesListNode); +smalltalk.TabWidget.klass); + +smalltalk.addClass('Browser', smalltalk.TabWidget, ['selectedPackage', 'selectedClass', 'selectedProtocol', 'selectedMethod', 'packagesList', 'classesList', 'protocolsList', 'methodsList', 'sourceArea', 'tabsList', 'selectedTab', 'saveButton', 'classButtons', 'methodButtons', 'unsavedChanges'], 'IDE'); smalltalk.addMethod( -unescape('_level_'), +unescape('_addInstanceVariableNamed_toClass_'), smalltalk.method({ -selector: unescape('level%3A'), -fn: function (anInteger){ +selector: unescape('addInstanceVariableNamed%3AtoClass%3A'), +fn: function (aString, aClass){ var self=this; -(self['@level']=anInteger); +smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), smalltalk.send(aClass, "_name", []), (function($rec){smalltalk.send($rec, "_add_", [aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_copy", [])), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])]); return self;} }), -smalltalk.ClassesListNode); +smalltalk.Browser); smalltalk.addMethod( -unescape('_label'), +unescape('_addNewClass'), smalltalk.method({ -selector: unescape('label'), +selector: unescape('addNewClass'), fn: function (){ var self=this; -var str=nil; -(str=smalltalk.send(smalltalk.send((smalltalk.String || String), "_new", []), "_writeStream", [])); -smalltalk.send(smalltalk.send(self, "_level", []), "_timesRepeat_", [(function(){return smalltalk.send(str, "_nextPutAll_", [unescape("%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B")]);})]); -smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_theClass", []), "_name", [])]); -return smalltalk.send(str, "_contents", []); +var className=nil; +(className=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", ["New class"])); +((($receiver = smalltalk.send(smalltalk.send(className, "_notNil", []), "_and_", [(function(){return smalltalk.send(className, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send((smalltalk.Object || Object), "_subclass_instanceVariableNames_package_", [className, "", smalltalk.send(self, "_selectedPackage", [])]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send((smalltalk.Object || Object), "_subclass_instanceVariableNames_package_", [className, "", smalltalk.send(self, "_selectedPackage", [])]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})])); return self;} }), -smalltalk.ClassesListNode); +smalltalk.Browser); smalltalk.addMethod( -unescape('_getNodesFrom_'), +unescape('_addNewProtocol'), smalltalk.method({ -selector: unescape('getNodesFrom%3A'), -fn: function (aCollection){ +selector: unescape('addNewProtocol'), +fn: function (){ var self=this; -var children=nil; -var others=nil; -(children=[]); -(others=[]); -smalltalk.send(aCollection, "_do_", [(function(each){return ((($receiver = smalltalk.send(smalltalk.send(each, "_superclass", []), "__eq", [smalltalk.send(self, "_theClass", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(children, "_add_", [each]);})() : (function(){return smalltalk.send(others, "_add_", [each]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(children, "_add_", [each]);}), (function(){return smalltalk.send(others, "_add_", [each]);})]));})]); -(self['@nodes']=smalltalk.send(children, "_collect_", [(function(each){return smalltalk.send((smalltalk.ClassesListNode || ClassesListNode), "_on_browser_classes_level_", [each, smalltalk.send(self, "_browser", []), others, ((($receiver = smalltalk.send(self, "_level", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})])); +var newProtocol=nil; +(newProtocol=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", ["New method protocol"])); +((($receiver = smalltalk.send(smalltalk.send(newProtocol, "_notNil", []), "_and_", [(function(){return smalltalk.send(newProtocol, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self['@selectedMethod'], "_category_", [newProtocol]);return smalltalk.send(self, "_setMethodProtocol_", [newProtocol]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self['@selectedMethod'], "_category_", [newProtocol]);return smalltalk.send(self, "_setMethodProtocol_", [newProtocol]);})])); return self;} }), -smalltalk.ClassesListNode); - +smalltalk.Browser); smalltalk.addMethod( -unescape('_on_browser_classes_level_'), +unescape('_ajaxPutAt_data_'), smalltalk.method({ -selector: unescape('on%3Abrowser%3Aclasses%3Alevel%3A'), -fn: function (aClass, aBrowser, aCollection, anInteger){ +selector: unescape('ajaxPutAt%3Adata%3A'), +fn: function (anURL, aString){ var self=this; -return (function($rec){smalltalk.send($rec, "_theClass_", [aClass]);smalltalk.send($rec, "_browser_", [aBrowser]);smalltalk.send($rec, "_level_", [anInteger]);smalltalk.send($rec, "_getNodesFrom_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_ajax_options_", [anURL, smalltalk.HashedCollection._fromPairs_([smalltalk.send("type", "__minus_gt", ["PUT"]),smalltalk.send("data", "__minus_gt", [aString]),smalltalk.send("contentType", "__minus_gt", [unescape("text/plain%3Bcharset%3DUTF-8")]),smalltalk.send("error", "__minus_gt", [(function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send("PUT request failed at: ", "__comma", [anURL])]);})])])]); return self;} }), -smalltalk.ClassesListNode.klass); - +smalltalk.Browser); -smalltalk.addClass('DebugErrorHandler', smalltalk.ErrorHandler, [], 'IDE'); smalltalk.addMethod( -unescape('_handleError_'), +unescape('_canBeClosed'), smalltalk.method({ -selector: unescape('handleError%3A'), -fn: function (anError){ +selector: unescape('canBeClosed'), +fn: function (){ var self=this; -smalltalk.send((function(){return (function($rec){smalltalk.send($rec, "_error_", [anError]);return smalltalk.send($rec, "_open", []);})(smalltalk.send((smalltalk.Debugger || Debugger), "_new", []));}), "_on_do_", [(smalltalk.Error || Error), (function(error){return smalltalk.send(smalltalk.send((smalltalk.ErrorHandler || ErrorHandler), "_new", []), "_handleError_", [error]);})]); +return true; return self;} }), -smalltalk.DebugErrorHandler); - +smalltalk.Browser); smalltalk.addMethod( -unescape('_initialize'), +unescape('_cancelChanges'), smalltalk.method({ -selector: unescape('initialize'), +selector: unescape('cancelChanges'), fn: function (){ var self=this; -smalltalk.send(self, "_register", []); +return ((($receiver = self['@unsavedChanges']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [unescape("Cancel%20changes%3F")]);})() : (function(){return true;})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [unescape("Cancel%20changes%3F")]);}), (function(){return true;})])); return self;} }), -smalltalk.DebugErrorHandler.klass); - +smalltalk.Browser); -smalltalk.addClass('Workspace', smalltalk.TabWidget, ['sourceArea'], 'IDE'); smalltalk.addMethod( -unescape('_label'), +unescape('_classCommentSource'), smalltalk.method({ -selector: unescape('label'), +selector: unescape('classCommentSource'), fn: function (){ var self=this; -return "Workspace"; +return smalltalk.send(self['@selectedClass'], "_comment", []); return self;} }), -smalltalk.Workspace); +smalltalk.Browser); smalltalk.addMethod( -unescape('_clearWorkspace'), +unescape('_classDeclarationSource'), smalltalk.method({ -selector: unescape('clearWorkspace'), +selector: unescape('classDeclarationSource'), fn: function (){ var self=this; -smalltalk.send(self['@sourceArea'], "_clear", []); -return self;} +try{var stream=nil; +(stream=smalltalk.send("", "_writeStream", [])); +(($receiver = self['@selectedClass']) == nil || $receiver == undefined) ? (function(){return (function(){throw({name: 'stReturn', selector: '_classDeclarationSource', fn: function(){return smalltalk.send(self, "_classDeclarationTemplate", [])}})})();})() : $receiver; +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@selectedClass'], "_superclass", []), "_asString", [])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%20subclass%3A%20%23")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@selectedClass'], "_name", [])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send((smalltalk.String || String), "_lf", []), "__comma", [smalltalk.send((smalltalk.String || String), "_tab", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("instanceVariableNames%3A%20%27")]);})(stream); +smalltalk.send(smalltalk.send(self['@selectedClass'], "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(stream, "_nextPutAll_", [" "]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", [smalltalk.send((smalltalk.String || String), "_tab", [])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("package%3A%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@selectedClass'], "_category", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%27")]);})(stream); +(function(){throw({name: 'stReturn', selector: '_classDeclarationSource', fn: function(){return smalltalk.send(stream, "_contents", [])}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_classDeclarationSource'){return e.fn()} throw(e)}} }), -smalltalk.Workspace); +smalltalk.Browser); smalltalk.addMethod( -unescape('_doIt'), +unescape('_classDeclarationTemplate'), smalltalk.method({ -selector: unescape('doIt'), +selector: unescape('classDeclarationTemplate'), fn: function (){ var self=this; -smalltalk.send(self['@sourceArea'], "_doIt", []); +return smalltalk.send(smalltalk.send(unescape("Object%20subclass%3A%20%23NameOfSubclass%0A%09instanceVariableNames%3A%20%27%27%0A%09package%3A%20%27"), "__comma", [smalltalk.send(self, "_selectedPackage", [])]), "__comma", [unescape("%27")]); return self;} }), -smalltalk.Workspace); +smalltalk.Browser); smalltalk.addMethod( -unescape('_printIt'), +unescape('_classes'), smalltalk.method({ -selector: unescape('printIt'), +selector: unescape('classes'), fn: function (){ var self=this; -smalltalk.send(self['@sourceArea'], "_printIt", []); +return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_select_", [(function(each){return smalltalk.send(smalltalk.send(each, "_category", []), "__eq", [self['@selectedPackage']]);})]), "_sort_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_name", [])).klass === smalltalk.Number) ? $receiver <smalltalk.send(b, "_name", []) : smalltalk.send($receiver, "__lt", [smalltalk.send(b, "_name", [])]));})]), "_asSet", []); return self;} }), -smalltalk.Workspace); +smalltalk.Browser); smalltalk.addMethod( -unescape('_inspectIt'), +unescape('_commitPackage'), smalltalk.method({ -selector: unescape('inspectIt'), +selector: unescape('commitPackage'), fn: function (){ var self=this; -smalltalk.send(self['@sourceArea'], "_inspectIt", []); +(($receiver = self['@selectedPackage']) != nil && $receiver != undefined) ? (function(){var package=nil; +(package=smalltalk.send((smalltalk.Package || Package), "_named_", [self['@selectedPackage']]));return smalltalk.send([smalltalk.send((smalltalk.Exporter || Exporter), "__minus_gt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(package, "_commitPathJs", []), "__comma", [unescape("/")]), "__comma", [self['@selectedPackage']]), "__comma", [".js"])]),smalltalk.send((smalltalk.StrippedExporter || StrippedExporter), "__minus_gt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(package, "_commitPathJs", []), "__comma", [unescape("/")]), "__comma", [self['@selectedPackage']]), "__comma", [".deploy.js"])]),smalltalk.send((smalltalk.ChunkExporter || ChunkExporter), "__minus_gt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(package, "_commitPathSt", []), "__comma", [unescape("/")]), "__comma", [self['@selectedPackage']]), "__comma", [".st"])])], "_do_", [(function(commitStrategy){var fileContents=nil; +(fileContents=smalltalk.send(smalltalk.send(smalltalk.send(commitStrategy, "_key", []), "_new", []), "_exportPackage_", [self['@selectedPackage']]));return smalltalk.send(self, "_ajaxPutAt_data_", [smalltalk.send(commitStrategy, "_value", []), fileContents]);})]);})() : nil; return self;} }), -smalltalk.Workspace); +smalltalk.Browser); smalltalk.addMethod( -unescape('_fileIn'), +unescape('_compile'), smalltalk.method({ -selector: unescape('fileIn'), +selector: unescape('compile'), fn: function (){ var self=this; -smalltalk.send(self['@sourceArea'], "_fileIn", []); +smalltalk.send(self, "_disableSaveButton", []); +((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_compileClassComment", []);})() : nil;})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_compileDefinition", []);})() : (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_compileDefinition", []);}), (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_compileClassComment", []);})() : nil;}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_compileDefinition", []);})() : (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_compileDefinition", []);}), (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})]));})])); return self;} }), -smalltalk.Workspace); +smalltalk.Browser); smalltalk.addMethod( -unescape('_renderBoxOn_'), +unescape('_compileClassComment'), smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -fn: function (html){ +selector: unescape('compileClassComment'), +fn: function (){ var self=this; -(self['@sourceArea']=smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", [])); -smalltalk.send(self['@sourceArea'], "_renderOn_", [html]); +smalltalk.send(self['@selectedClass'], "_comment_", [smalltalk.send(self['@sourceArea'], "_val", [])]); return self;} }), -smalltalk.Workspace); +smalltalk.Browser); smalltalk.addMethod( -unescape('_renderButtonsOn_'), +unescape('_compileDefinition'), smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), -fn: function (html){ +selector: unescape('compileDefinition'), +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);smalltalk.send($rec, "_title_", [unescape("ctrl+d")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_doIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);smalltalk.send($rec, "_title_", [unescape("ctrl+p")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_printIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);smalltalk.send($rec, "_title_", [unescape("ctrl+i")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_inspectIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["FileIn"]);smalltalk.send($rec, "_title_", [unescape("ctrl+f")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_fileIn", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["Clear workspace"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_clearWorkspace", []);})]);})(smalltalk.send(html, "_button", [])); +var newClass=nil; +(newClass=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_loadExpression_", [smalltalk.send(self['@sourceArea'], "_val", [])])); +(function($rec){smalltalk.send($rec, "_resetClassesList", []);smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); +smalltalk.send(self, "_selectClass_", [newClass]); return self;} }), -smalltalk.Workspace); - - +smalltalk.Browser); -smalltalk.addClass('Browser', smalltalk.TabWidget, ['selectedPackage', 'selectedClass', 'selectedProtocol', 'selectedMethod', 'packagesList', 'classesList', 'protocolsList', 'methodsList', 'sourceArea', 'tabsList', 'selectedTab', 'saveButton', 'classButtons', 'methodButtons', 'unsavedChanges'], 'IDE'); smalltalk.addMethod( -unescape('_label'), +unescape('_compileMethodDefinition'), smalltalk.method({ -selector: unescape('label'), +selector: unescape('compileMethodDefinition'), fn: function (){ var self=this; -return (($receiver = self['@selectedClass']) == nil || $receiver == undefined) ? (function(){return unescape("Browser%20%28nil%29");})() : (function(){return smalltalk.send("Browser: ", "__comma", [smalltalk.send(self['@selectedClass'], "_name", [])]);})(); +((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [self['@selectedClass']]);})() : (function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [smalltalk.send(self['@selectedClass'], "_class", [])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [self['@selectedClass']]);}), (function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [smalltalk.send(self['@selectedClass'], "_class", [])]);})])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_packages'), +unescape('_compileMethodDefinitionFor_'), smalltalk.method({ -selector: unescape('packages'), -fn: function (){ +selector: unescape('compileMethodDefinitionFor%3A'), +fn: function (aClass){ var self=this; -var packages=nil; -(packages=smalltalk.send((smalltalk.Array || Array), "_new", [])); -smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(packages, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]); -return smalltalk.send(packages, "_sort", []); -return self;} +try{var compiler=nil; +var method=nil; +var source=nil; +var node=nil; +(source=smalltalk.send(self['@sourceArea'], "_val", [])); +(($receiver = self['@selectedProtocol']) == nil || $receiver == undefined) ? (function(){return (self['@selectedProtocol']=smalltalk.send(self['@selectedMethod'], "_category", []));})() : $receiver; +(compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])); +smalltalk.send(compiler, "_source_", [source]); +(node=smalltalk.send(compiler, "_parse_", [source])); +((($receiver = smalltalk.send(node, "_isParseFailure", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send(smalltalk.send(smalltalk.send("PARSE ERROR: ", "__comma", [smalltalk.send(node, "_reason", [])]), "__comma", [unescape("%2C%20position%3A%20")]), "__comma", [smalltalk.send(smalltalk.send(node, "_position", []), "_asString", [])])])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send(smalltalk.send(smalltalk.send("PARSE ERROR: ", "__comma", [smalltalk.send(node, "_reason", [])]), "__comma", [unescape("%2C%20position%3A%20")]), "__comma", [smalltalk.send(smalltalk.send(node, "_position", []), "_asString", [])])])}})})();})])); +smalltalk.send(compiler, "_currentClass_", [aClass]); +(method=smalltalk.send(compiler, "_eval_", [smalltalk.send(compiler, "_compileNode_", [node])])); +smalltalk.send(method, "_category_", [self['@selectedProtocol']]); +smalltalk.send(smalltalk.send(compiler, "_unknownVariables", []), "_do_", [(function(each){return (($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_at_", [each])) == nil || $receiver == undefined) ? (function(){return ((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send(unescape("Declare%20%27"), "__comma", [each]), "__comma", [unescape("%27%20as%20instance%20variable%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_addInstanceVariableNamed_toClass_", [each, aClass]);return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [aClass])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_addInstanceVariableNamed_toClass_", [each, aClass]);return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [aClass])}})})();})]));})() : $receiver;})]); +smalltalk.send(aClass, "_addCompiledMethod_", [method]); +smalltalk.send(compiler, "_setupClass_", [aClass]); +smalltalk.send(self, "_updateMethodsList", []); +smalltalk.send(self, "_selectMethod_", [method]); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_compileMethodDefinitionFor_'){return e.fn()} throw(e)}} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_classes'), +unescape('_copyClass'), smalltalk.method({ -selector: unescape('classes'), +selector: unescape('copyClass'), fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_select_", [(function(each){return smalltalk.send(smalltalk.send(each, "_category", []), "__eq", [self['@selectedPackage']]);})]), "_sort_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_name", [])).klass === smalltalk.Number) ? $receiver <smalltalk.send(b, "_name", []) : smalltalk.send($receiver, "__lt", [smalltalk.send(b, "_name", [])]));})]), "_asSet", []); +var className=nil; +(className=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", ["Copy class"])); +((($receiver = smalltalk.send(smalltalk.send(className, "_notNil", []), "_and_", [(function(){return smalltalk.send(className, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_copyClass_named_", [smalltalk.send(self, "_selectedClass", []), className]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_copyClass_named_", [smalltalk.send(self, "_selectedClass", []), className]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_protocols'), +unescape('_declarationSource'), smalltalk.method({ -selector: unescape('protocols'), +selector: unescape('declarationSource'), fn: function (){ var self=this; -try{var klass=nil; -(($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return []}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return []}})})();})]));(klass=((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return self['@selectedClass'];})() : (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return self['@selectedClass'];}), (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})])));((($receiver = smalltalk.send(smalltalk.send(klass, "_methodDictionary", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send((smalltalk.Array || Array), "_with_", ["not yet classified"])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send((smalltalk.Array || Array), "_with_", ["not yet classified"])}})})();})]));return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send(klass, "_protocols", [])}})})();})() : nil; -(function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send((smalltalk.Array || Array), "_new", [])}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_protocols'){return e.fn()} throw(e)}} +return ((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_classDeclarationSource", []);})() : (function(){return smalltalk.send(self, "_metaclassDeclarationSource", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_classDeclarationSource", []);}), (function(){return smalltalk.send(self, "_metaclassDeclarationSource", []);})])); +return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_methods'), +unescape('_disableSaveButton'), smalltalk.method({ -selector: unescape('methods'), +selector: unescape('disableSaveButton'), fn: function (){ var self=this; -try{var klass=nil; -((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return []}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return []}})})();})])); -(($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){return (klass=((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return self['@selectedClass'];})() : (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return self['@selectedClass'];}), (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})])));})() : nil; -(function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return smalltalk.send((($receiver = self['@selectedProtocol']) == nil || $receiver == undefined) ? (function(){return (($receiver = klass) == nil || $receiver == undefined) ? (function(){return [];})() : (function(){return smalltalk.send(smalltalk.send(klass, "_methodDictionary", []), "_values", []);})();})() : (function(){return smalltalk.send(smalltalk.send(smalltalk.send(klass, "_methodDictionary", []), "_values", []), "_select_", [(function(each){return smalltalk.send(smalltalk.send(each, "_category", []), "__eq", [self['@selectedProtocol']]);})]);})(), "_sort_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_selector", [])).klass === smalltalk.Number) ? $receiver <smalltalk.send(b, "_selector", []) : smalltalk.send($receiver, "__lt", [smalltalk.send(b, "_selector", [])]));})])}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_methods'){return e.fn()} throw(e)}} +(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil; +(self['@unsavedChanges']=false); +return self;} +}), +smalltalk.Browser); + +smalltalk.addMethod( +unescape('_dummyMethodSource'), +smalltalk.method({ +selector: unescape('dummyMethodSource'), +fn: function (){ +var self=this; +return unescape("messageSelectorAndArgumentNames%0A%09%22comment%20stating%20purpose%20of%20message%22%0A%0A%09%7C%20temporary%20variable%20names%20%7C%0A%09statements"); +return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_source'), +unescape('_handleSourceAreaKeyDown_'), smalltalk.method({ -selector: unescape('source'), -fn: function (){ +selector: unescape('handleSourceAreaKeyDown%3A'), +fn: function (anEvent){ var self=this; -try{((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_source', fn: function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_declarationSource", []);})() : (function(){return smalltalk.send(self, "_methodSource", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_declarationSource", []);}), (function(){return smalltalk.send(self, "_methodSource", []);})]))}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '_source', fn: function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_declarationSource", []);})() : (function(){return smalltalk.send(self, "_methodSource", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_declarationSource", []);}), (function(){return smalltalk.send(self, "_methodSource", []);})]))}})})();})])); -(function(){throw({name: 'stReturn', selector: '_source', fn: function(){return (($receiver = self['@selectedClass']) == nil || $receiver == undefined) ? (function(){return "";})() : (function(){return smalltalk.send(self, "_classCommentSource", []);})()}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_source'){return e.fn()} throw(e)}} +if(anEvent.ctrlKey) { + if(anEvent.keyCode === 83) { //ctrl+s + self._compile(); + anEvent.preventDefault(); + return false; + } + } + ; +return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_methodSource'), +unescape('_hideClassButtons'), smalltalk.method({ -selector: unescape('methodSource'), +selector: unescape('hideClassButtons'), fn: function (){ var self=this; -return (($receiver = self['@selectedMethod']) == nil || $receiver == undefined) ? (function(){return smalltalk.send(self, "_dummyMethodSource", []);})() : (function(){return smalltalk.send(self['@selectedMethod'], "_source", []);})(); +smalltalk.send(smalltalk.send(self['@classButtons'], "_asJQuery", []), "_hide", []); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_dummyMethodSource'), +unescape('_hideMethodButtons'), smalltalk.method({ -selector: unescape('dummyMethodSource'), +selector: unescape('hideMethodButtons'), fn: function (){ var self=this; -return unescape("messageSelectorAndArgumentNames%0A%09%22comment%20stating%20purpose%20of%20message%22%0A%0A%09%7C%20temporary%20variable%20names%20%7C%0A%09statements"); +smalltalk.send(smalltalk.send(self['@methodButtons'], "_asJQuery", []), "_hide", []); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_declarationSource'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('declarationSource'), +selector: unescape('initialize'), fn: function (){ var self=this; -return ((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_classDeclarationSource", []);})() : (function(){return smalltalk.send(self, "_metaclassDeclarationSource", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_classDeclarationSource", []);}), (function(){return smalltalk.send(self, "_metaclassDeclarationSource", []);})])); +smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); +(self['@selectedTab']=smalltalk.symbolFor("instance")); +(self['@selectedPackage']=smalltalk.send(smalltalk.send(self, "_packages", []), "_first", [])); +(self['@unsavedChanges']=false); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_classDeclarationSource'), +unescape('_label'), smalltalk.method({ -selector: unescape('classDeclarationSource'), +selector: unescape('label'), fn: function (){ var self=this; -try{var stream=nil; -(stream=smalltalk.send("", "_writeStream", [])); -(($receiver = self['@selectedClass']) == nil || $receiver == undefined) ? (function(){return (function(){throw({name: 'stReturn', selector: '_classDeclarationSource', fn: function(){return smalltalk.send(self, "_classDeclarationTemplate", [])}})})();})() : $receiver; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@selectedClass'], "_superclass", []), "_asString", [])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%20subclass%3A%20%23")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@selectedClass'], "_name", [])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send((smalltalk.String || String), "_lf", []), "__comma", [smalltalk.send((smalltalk.String || String), "_tab", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("instanceVariableNames%3A%20%27")]);})(stream); -smalltalk.send(smalltalk.send(self['@selectedClass'], "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(stream, "_nextPutAll_", [" "]);})]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", [smalltalk.send((smalltalk.String || String), "_tab", [])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("package%3A%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@selectedClass'], "_category", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%27")]);})(stream); -(function(){throw({name: 'stReturn', selector: '_classDeclarationSource', fn: function(){return smalltalk.send(stream, "_contents", [])}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_classDeclarationSource'){return e.fn()} throw(e)}} +return (($receiver = self['@selectedClass']) == nil || $receiver == undefined) ? (function(){return unescape("Browser%20%28nil%29");})() : (function(){return smalltalk.send("Browser: ", "__comma", [smalltalk.send(self['@selectedClass'], "_name", [])]);})(); +return self;} }), smalltalk.Browser); @@ -1299,235 +1397,221 @@ return self;} smalltalk.Browser); smalltalk.addMethod( -unescape('_classCommentSource'), +unescape('_methodSource'), smalltalk.method({ -selector: unescape('classCommentSource'), +selector: unescape('methodSource'), fn: function (){ var self=this; -return smalltalk.send(self['@selectedClass'], "_comment", []); +return (($receiver = self['@selectedMethod']) == nil || $receiver == undefined) ? (function(){return smalltalk.send(self, "_dummyMethodSource", []);})() : (function(){return smalltalk.send(self['@selectedMethod'], "_source", []);})(); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_selectedClass'), +unescape('_methods'), smalltalk.method({ -selector: unescape('selectedClass'), +selector: unescape('methods'), fn: function (){ var self=this; -return self['@selectedClass']; -return self;} +try{var klass=nil; +((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return []}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return []}})})();})])); +(($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){return (klass=((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return self['@selectedClass'];})() : (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return self['@selectedClass'];}), (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})])));})() : nil; +(function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return smalltalk.send((($receiver = self['@selectedProtocol']) == nil || $receiver == undefined) ? (function(){return (($receiver = klass) == nil || $receiver == undefined) ? (function(){return [];})() : (function(){return smalltalk.send(smalltalk.send(klass, "_methodDictionary", []), "_values", []);})();})() : (function(){return smalltalk.send(smalltalk.send(smalltalk.send(klass, "_methodDictionary", []), "_values", []), "_select_", [(function(each){return smalltalk.send(smalltalk.send(each, "_category", []), "__eq", [self['@selectedProtocol']]);})]);})(), "_sort_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_selector", [])).klass === smalltalk.Number) ? $receiver <smalltalk.send(b, "_selector", []) : smalltalk.send($receiver, "__lt", [smalltalk.send(b, "_selector", [])]));})])}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_methods'){return e.fn()} throw(e)}} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_classDeclarationTemplate'), +unescape('_packages'), smalltalk.method({ -selector: unescape('classDeclarationTemplate'), +selector: unescape('packages'), fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(unescape("Object%20subclass%3A%20%23NameOfSubclass%0A%09instanceVariableNames%3A%20%27%27%0A%09package%3A%20%27"), "__comma", [smalltalk.send(self, "_selectedPackage", [])]), "__comma", [unescape("%27")]); +var packages=nil; +(packages=smalltalk.send((smalltalk.Array || Array), "_new", [])); +smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(packages, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]); +return smalltalk.send(packages, "_sort", []); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_selectedPackage'), +unescape('_protocols'), smalltalk.method({ -selector: unescape('selectedPackage'), +selector: unescape('protocols'), fn: function (){ var self=this; -return self['@selectedPackage']; -return self;} +try{var klass=nil; +(($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return []}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return []}})})();})]));(klass=((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return self['@selectedClass'];})() : (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return self['@selectedClass'];}), (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})])));((($receiver = smalltalk.send(smalltalk.send(klass, "_methodDictionary", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send((smalltalk.Array || Array), "_with_", ["not yet classified"])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send((smalltalk.Array || Array), "_with_", ["not yet classified"])}})})();})]));return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send(klass, "_protocols", [])}})})();})() : nil; +(function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send((smalltalk.Array || Array), "_new", [])}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_protocols'){return e.fn()} throw(e)}} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_disableSaveButton'), +unescape('_removeClass'), smalltalk.method({ -selector: unescape('disableSaveButton'), +selector: unescape('removeClass'), fn: function (){ var self=this; -(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil; -(self['@unsavedChanges']=false); +((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send("Do you really want to remove ", "__comma", [smalltalk.send(self['@selectedClass'], "_name", [])]), "__comma", [unescape("%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removeClass_", [self['@selectedClass']]);smalltalk.send(self, "_resetClassesList", []);return smalltalk.send(self, "_selectClass_", [nil]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removeClass_", [self['@selectedClass']]);smalltalk.send(self, "_resetClassesList", []);return smalltalk.send(self, "_selectClass_", [nil]);})])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_hideClassButtons'), +unescape('_removeMethod'), smalltalk.method({ -selector: unescape('hideClassButtons'), +selector: unescape('removeMethod'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@classButtons'], "_asJQuery", []), "_hide", []); +((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send(unescape("Do%20you%20really%20want%20to%20remove%20%23"), "__comma", [smalltalk.send(self['@selectedMethod'], "_selector", [])]), "__comma", [unescape("%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);})() : (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);}), (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})]));return smalltalk.send(self, "_selectMethod_", [nil]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);})() : (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);}), (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})]));return smalltalk.send(self, "_selectMethod_", [nil]);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send(unescape("Do%20you%20really%20want%20to%20remove%20%23"), "__comma", [smalltalk.send(self['@selectedMethod'], "_selector", [])]), "__comma", [unescape("%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);})() : (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);}), (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})]));return smalltalk.send(self, "_selectMethod_", [nil]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);})() : (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);}), (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})]));return smalltalk.send(self, "_selectMethod_", [nil]);})]));})])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_showClassButtons'), +unescape('_removePackage'), smalltalk.method({ -selector: unescape('showClassButtons'), +selector: unescape('removePackage'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@classButtons'], "_asJQuery", []), "_show", []); +((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send("Do you really want to remove the whole package ", "__comma", [self['@selectedPackage']]), "__comma", [unescape("%20with%20all%20its%20classes%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removePackage_", [self['@selectedPackage']]);return smalltalk.send(self, "_updateCategoriesList", []);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removePackage_", [self['@selectedPackage']]);return smalltalk.send(self, "_updateCategoriesList", []);})])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_hideMethodButtons'), +unescape('_renameClass'), smalltalk.method({ -selector: unescape('hideMethodButtons'), +selector: unescape('renameClass'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@methodButtons'], "_asJQuery", []), "_hide", []); +var newName=nil; +(newName=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", [smalltalk.send("Rename class ", "__comma", [smalltalk.send(self['@selectedClass'], "_name", [])])])); +((($receiver = smalltalk.send(smalltalk.send(newName, "_notNil", []), "_and_", [(function(){return smalltalk.send(newName, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self['@selectedClass'], "_rename_", [newName]);return (function($rec){smalltalk.send($rec, "_updateClassesList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self['@selectedClass'], "_rename_", [newName]);return (function($rec){smalltalk.send($rec, "_updateClassesList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_showMethodButtons'), +unescape('_renamePackage'), smalltalk.method({ -selector: unescape('showMethodButtons'), +selector: unescape('renamePackage'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@methodButtons'], "_asJQuery", []), "_show", []); +var newName=nil; +(newName=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", [smalltalk.send("Rename package ", "__comma", [self['@selectedPackage']])])); +(($receiver = newName) != nil && $receiver != undefined) ? (function(){return ((($receiver = smalltalk.send(newName, "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_renamePackage_to_", [self['@selectedPackage'], newName]);return smalltalk.send(self, "_updateCategoriesList", []);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_renamePackage_to_", [self['@selectedPackage'], newName]);return smalltalk.send(self, "_updateCategoriesList", []);})]));})() : nil; return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_compile'), +unescape('_renderBottomPanelOn_'), smalltalk.method({ -selector: unescape('compile'), -fn: function (){ +selector: unescape('renderBottomPanelOn%3A'), +fn: function (html){ var self=this; -smalltalk.send(self, "_disableSaveButton", []); -((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_compileClassComment", []);})() : nil;})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_compileDefinition", []);})() : (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_compileDefinition", []);}), (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_compileClassComment", []);})() : nil;}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_compileDefinition", []);})() : (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_compileDefinition", []);}), (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})]));})])); +(function($rec){smalltalk.send($rec, "_class_", ["jt_sourceCode"]);return smalltalk.send($rec, "_with_", [(function(){(self['@sourceArea']=smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", []));smalltalk.send(self['@sourceArea'], "_renderOn_", [html]);smalltalk.send(self['@sourceArea'], "_onKeyDown_", [(function(e){return smalltalk.send(self, "_handleSourceAreaKeyDown_", [e]);})]);return smalltalk.send(self['@sourceArea'], "_onKeyUp_", [(function(){return smalltalk.send(self, "_updateStatus", []);})]);})]);})(smalltalk.send(html, "_div", [])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_compileClassComment'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('compileClassComment'), -fn: function (){ +selector: unescape('renderBoxOn%3A'), +fn: function (html){ var self=this; -smalltalk.send(self['@selectedClass'], "_comment_", [smalltalk.send(self['@sourceArea'], "_val", [])]); +(function($rec){smalltalk.send($rec, "_renderTopPanelOn_", [html]);smalltalk.send($rec, "_renderTabsOn_", [html]);return smalltalk.send($rec, "_renderBottomPanelOn_", [html]);})(self); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_compileMethodDefinition'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('compileMethodDefinition'), -fn: function (){ +selector: unescape('renderButtonsOn%3A'), +fn: function (html){ var self=this; -((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [self['@selectedClass']]);})() : (function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [smalltalk.send(self['@selectedClass'], "_class", [])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [self['@selectedClass']]);}), (function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [smalltalk.send(self['@selectedClass'], "_class", [])]);})])); +(self['@saveButton']=smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["Save"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_compile", []);})]);})(self['@saveButton']); +(self['@methodButtons']=smalltalk.send(html, "_span", [])); +(self['@classButtons']=smalltalk.send(html, "_span", [])); +(function($rec){smalltalk.send($rec, "_class_", ["right"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_doIt", []);})]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_printIt", []);})]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_inspectIt", []);})]);})(smalltalk.send(html, "_button", []));})]);})(smalltalk.send(html, "_div", [])); +smalltalk.send(self, "_updateSourceAndButtons", []); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_compileMethodDefinitionFor_'), +unescape('_renderTabsOn_'), smalltalk.method({ -selector: unescape('compileMethodDefinitionFor%3A'), -fn: function (aClass){ +selector: unescape('renderTabsOn%3A'), +fn: function (html){ var self=this; -try{var compiler=nil; -var method=nil; -var source=nil; -var node=nil; -(source=smalltalk.send(self['@sourceArea'], "_val", [])); -(($receiver = self['@selectedProtocol']) == nil || $receiver == undefined) ? (function(){return (self['@selectedProtocol']=smalltalk.send(self['@selectedMethod'], "_category", []));})() : $receiver; -(compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])); -smalltalk.send(compiler, "_source_", [source]); -(node=smalltalk.send(compiler, "_parse_", [source])); -((($receiver = smalltalk.send(node, "_isParseFailure", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send(smalltalk.send(smalltalk.send("PARSE ERROR: ", "__comma", [smalltalk.send(node, "_reason", [])]), "__comma", [unescape("%2C%20position%3A%20")]), "__comma", [smalltalk.send(smalltalk.send(node, "_position", []), "_asString", [])])])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send(smalltalk.send(smalltalk.send("PARSE ERROR: ", "__comma", [smalltalk.send(node, "_reason", [])]), "__comma", [unescape("%2C%20position%3A%20")]), "__comma", [smalltalk.send(smalltalk.send(node, "_position", []), "_asString", [])])])}})})();})])); -smalltalk.send(compiler, "_currentClass_", [aClass]); -(method=smalltalk.send(compiler, "_eval_", [smalltalk.send(compiler, "_compileNode_", [node])])); -smalltalk.send(method, "_category_", [self['@selectedProtocol']]); -smalltalk.send(smalltalk.send(compiler, "_unknownVariables", []), "_do_", [(function(each){return (($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_at_", [each])) == nil || $receiver == undefined) ? (function(){return ((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send(unescape("Declare%20%27"), "__comma", [each]), "__comma", [unescape("%27%20as%20instance%20variable%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_addInstanceVariableNamed_toClass_", [each, aClass]);return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [aClass])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_addInstanceVariableNamed_toClass_", [each, aClass]);return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [aClass])}})})();})]));})() : $receiver;})]); -smalltalk.send(aClass, "_addCompiledMethod_", [method]); -smalltalk.send(compiler, "_setupClass_", [aClass]); -smalltalk.send(self, "_updateMethodsList", []); -smalltalk.send(self, "_selectMethod_", [method]); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_compileMethodDefinitionFor_'){return e.fn()} throw(e)}} +(self['@tabsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_tabs jt_browser"])); +smalltalk.send(self, "_updateTabsList", []); +return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_compileDefinition'), +unescape('_renderTopPanelOn_'), smalltalk.method({ -selector: unescape('compileDefinition'), -fn: function (){ +selector: unescape('renderTopPanelOn%3A'), +fn: function (html){ var self=this; -var newClass=nil; -(newClass=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_loadExpression_", [smalltalk.send(self['@sourceArea'], "_val", [])])); -(function($rec){smalltalk.send($rec, "_resetClassesList", []);smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); -smalltalk.send(self, "_selectClass_", [newClass]); +(function($rec){smalltalk.send($rec, "_class_", ["top"]);return smalltalk.send($rec, "_with_", [(function(){(self['@packagesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column browser packages"]));(function($rec){smalltalk.send($rec, "_class_", ["jt_packagesButtons"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_title_", ["Commit classes in this package to disk"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_commitPackage", []);})]);return smalltalk.send($rec, "_with_", ["Commit"]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_title_", ["Rename package"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_renamePackage", []);})]);return smalltalk.send($rec, "_with_", ["Rename"]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_title_", ["Remove this package from the system"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_removePackage", []);})]);return smalltalk.send($rec, "_with_", ["Remove"]);})(smalltalk.send(html, "_button", []));})]);})(smalltalk.send(html, "_div", []));(self['@classesList']=smalltalk.send((smalltalk.ClassesList || ClassesList), "_on_", [self]));smalltalk.send(self['@classesList'], "_renderOn_", [html]);(self['@protocolsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column browser protocols"]));(self['@methodsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column browser methods"]));(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);return smalltalk.send($rec, "_updateMethodsList", []);})(self);return smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["jt_clear"]);})]);})(smalltalk.send(html, "_div", [])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_cancelChanges'), +unescape('_resetClassesList'), smalltalk.method({ -selector: unescape('cancelChanges'), +selector: unescape('resetClassesList'), fn: function (){ var self=this; -return ((($receiver = self['@unsavedChanges']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [unescape("Cancel%20changes%3F")]);})() : (function(){return true;})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [unescape("Cancel%20changes%3F")]);}), (function(){return true;})])); +smalltalk.send(self['@classesList'], "_resetNodes", []); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_removeClass'), +unescape('_search_'), smalltalk.method({ -selector: unescape('removeClass'), -fn: function (){ +selector: unescape('search%3A'), +fn: function (aString){ var self=this; -((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send("Do you really want to remove ", "__comma", [smalltalk.send(self['@selectedClass'], "_name", [])]), "__comma", [unescape("%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removeClass_", [self['@selectedClass']]);smalltalk.send(self, "_resetClassesList", []);return smalltalk.send(self, "_selectClass_", [nil]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removeClass_", [self['@selectedClass']]);smalltalk.send(self, "_resetClassesList", []);return smalltalk.send(self, "_selectClass_", [nil]);})])); +((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){var searchedClass=nil; +(searchedClass=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [aString]));return ((($receiver = smalltalk.send(searchedClass, "_isClass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_class", []), "_openOn_", [searchedClass]);})() : (function(){return smalltalk.send(self, "_searchReferencesOf_", [aString]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_class", []), "_openOn_", [searchedClass]);}), (function(){return smalltalk.send(self, "_searchReferencesOf_", [aString]);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){var searchedClass=nil; +(searchedClass=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [aString]));return ((($receiver = smalltalk.send(searchedClass, "_isClass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_class", []), "_openOn_", [searchedClass]);})() : (function(){return smalltalk.send(self, "_searchReferencesOf_", [aString]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_class", []), "_openOn_", [searchedClass]);}), (function(){return smalltalk.send(self, "_searchReferencesOf_", [aString]);})]));})])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_removeMethod'), +unescape('_searchClassReferences'), smalltalk.method({ -selector: unescape('removeMethod'), +selector: unescape('searchClassReferences'), fn: function (){ var self=this; -((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send(unescape("Do%20you%20really%20want%20to%20remove%20%23"), "__comma", [smalltalk.send(self['@selectedMethod'], "_selector", [])]), "__comma", [unescape("%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);})() : (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);}), (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})]));return smalltalk.send(self, "_selectMethod_", [nil]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);})() : (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);}), (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})]));return smalltalk.send(self, "_selectMethod_", [nil]);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send(unescape("Do%20you%20really%20want%20to%20remove%20%23"), "__comma", [smalltalk.send(self['@selectedMethod'], "_selector", [])]), "__comma", [unescape("%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);})() : (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);}), (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})]));return smalltalk.send(self, "_selectMethod_", [nil]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);})() : (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@selectedClass'], "_removeCompiledMethod_", [self['@selectedMethod']]);}), (function(){return smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_removeCompiledMethod_", [self['@selectedMethod']]);})]));return smalltalk.send(self, "_selectMethod_", [nil]);})]));})])); +smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [smalltalk.send(self['@selectedClass'], "_name", [])]); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_setMethodProtocol_'), +unescape('_searchReferencesOf_'), smalltalk.method({ -selector: unescape('setMethodProtocol%3A'), +selector: unescape('searchReferencesOf%3A'), fn: function (aString){ var self=this; -((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_protocols", []), "_includes_", [aString])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_addNewProtocol", []);})() : (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_addNewProtocol", []);}), (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_protocols", []), "_includes_", [aString])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_addNewProtocol", []);})() : (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_addNewProtocol", []);}), (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})]));})])); -return self;} -}), -smalltalk.Browser); - -smalltalk.addMethod( -unescape('_addNewProtocol'), -smalltalk.method({ -selector: unescape('addNewProtocol'), -fn: function (){ -var self=this; -var newProtocol=nil; -(newProtocol=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", ["New method protocol"])); -((($receiver = smalltalk.send(smalltalk.send(newProtocol, "_notNil", []), "_and_", [(function(){return smalltalk.send(newProtocol, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self['@selectedMethod'], "_category_", [newProtocol]);return smalltalk.send(self, "_setMethodProtocol_", [newProtocol]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self['@selectedMethod'], "_category_", [newProtocol]);return smalltalk.send(self, "_setMethodProtocol_", [newProtocol]);})])); +smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [aString]); return self;} }), smalltalk.Browser); @@ -1547,20 +1631,9 @@ smalltalk.addMethod( unescape('_selectClass_'), smalltalk.method({ selector: unescape('selectClass%3A'), -fn: function (aClass){ -var self=this; -((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedClass']=aClass);(self['@selectedProtocol']=(self['@selectedMethod']=nil));return (function($rec){smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedClass']=aClass);(self['@selectedProtocol']=(self['@selectedMethod']=nil));return (function($rec){smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); -return self;} -}), -smalltalk.Browser); - -smalltalk.addMethod( -unescape('_selectProtocol_'), -smalltalk.method({ -selector: unescape('selectProtocol%3A'), -fn: function (aString){ +fn: function (aClass){ var self=this; -((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedProtocol']=aString);(self['@selectedMethod']=nil);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedProtocol']=aString);(self['@selectedMethod']=nil);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); +((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedClass']=aClass);(self['@selectedProtocol']=(self['@selectedMethod']=nil));return (function($rec){smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedClass']=aClass);(self['@selectedProtocol']=(self['@selectedMethod']=nil));return (function($rec){smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); return self;} }), smalltalk.Browser); @@ -1577,1607 +1650,1565 @@ return self;} smalltalk.Browser); smalltalk.addMethod( -unescape('_selectTab_'), +unescape('_selectProtocol_'), smalltalk.method({ -selector: unescape('selectTab%3A'), +selector: unescape('selectProtocol%3A'), fn: function (aString){ var self=this; -((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedTab']=aString);smalltalk.send(self, "_selectProtocol_", [nil]);return smalltalk.send(self, "_updateTabsList", []);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedTab']=aString);smalltalk.send(self, "_selectProtocol_", [nil]);return smalltalk.send(self, "_updateTabsList", []);})])); -return self;} -}), -smalltalk.Browser); - -smalltalk.addMethod( -unescape('_renameClass'), -smalltalk.method({ -selector: unescape('renameClass'), -fn: function (){ -var self=this; -var newName=nil; -(newName=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", [smalltalk.send("Rename class ", "__comma", [smalltalk.send(self['@selectedClass'], "_name", [])])])); -((($receiver = smalltalk.send(smalltalk.send(newName, "_notNil", []), "_and_", [(function(){return smalltalk.send(newName, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self['@selectedClass'], "_rename_", [newName]);return (function($rec){smalltalk.send($rec, "_updateClassesList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self['@selectedClass'], "_rename_", [newName]);return (function($rec){smalltalk.send($rec, "_updateClassesList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); +((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedProtocol']=aString);(self['@selectedMethod']=nil);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedProtocol']=aString);(self['@selectedMethod']=nil);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_addInstanceVariableNamed_toClass_'), +unescape('_selectTab_'), smalltalk.method({ -selector: unescape('addInstanceVariableNamed%3AtoClass%3A'), -fn: function (aString, aClass){ +selector: unescape('selectTab%3A'), +fn: function (aString){ var self=this; -smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), smalltalk.send(aClass, "_name", []), (function($rec){smalltalk.send($rec, "_add_", [aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_copy", [])), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])]); +((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedTab']=aString);smalltalk.send(self, "_selectProtocol_", [nil]);return smalltalk.send(self, "_updateTabsList", []);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedTab']=aString);smalltalk.send(self, "_selectProtocol_", [nil]);return smalltalk.send(self, "_updateTabsList", []);})])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_searchReferencesOf_'), +unescape('_selectedClass'), smalltalk.method({ -selector: unescape('searchReferencesOf%3A'), -fn: function (aString){ +selector: unescape('selectedClass'), +fn: function (){ var self=this; -smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [aString]); +return self['@selectedClass']; return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_searchClassReferences'), +unescape('_selectedPackage'), smalltalk.method({ -selector: unescape('searchClassReferences'), +selector: unescape('selectedPackage'), fn: function (){ var self=this; -smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [smalltalk.send(self['@selectedClass'], "_name", [])]); +return self['@selectedPackage']; return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_search_'), +unescape('_setMethodProtocol_'), smalltalk.method({ -selector: unescape('search%3A'), +selector: unescape('setMethodProtocol%3A'), fn: function (aString){ var self=this; -((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){var searchedClass=nil; -(searchedClass=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [aString]));return ((($receiver = smalltalk.send(searchedClass, "_isClass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_class", []), "_openOn_", [searchedClass]);})() : (function(){return smalltalk.send(self, "_searchReferencesOf_", [aString]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_class", []), "_openOn_", [searchedClass]);}), (function(){return smalltalk.send(self, "_searchReferencesOf_", [aString]);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){var searchedClass=nil; -(searchedClass=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [aString]));return ((($receiver = smalltalk.send(searchedClass, "_isClass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_class", []), "_openOn_", [searchedClass]);})() : (function(){return smalltalk.send(self, "_searchReferencesOf_", [aString]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_class", []), "_openOn_", [searchedClass]);}), (function(){return smalltalk.send(self, "_searchReferencesOf_", [aString]);})]));})])); +((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_protocols", []), "_includes_", [aString])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_addNewProtocol", []);})() : (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_addNewProtocol", []);}), (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_protocols", []), "_includes_", [aString])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_addNewProtocol", []);})() : (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_addNewProtocol", []);}), (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})]));})])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_handleSourceAreaKeyDown_'), +unescape('_showClassButtons'), smalltalk.method({ -selector: unescape('handleSourceAreaKeyDown%3A'), -fn: function (anEvent){ +selector: unescape('showClassButtons'), +fn: function (){ var self=this; -if(anEvent.ctrlKey) { - if(anEvent.keyCode === 83) { //ctrl+s - self._compile(); - anEvent.preventDefault(); - return false; - } - } - ; +smalltalk.send(smalltalk.send(self['@classButtons'], "_asJQuery", []), "_show", []); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_commitPackage'), +unescape('_showMethodButtons'), smalltalk.method({ -selector: unescape('commitPackage'), +selector: unescape('showMethodButtons'), fn: function (){ var self=this; -(($receiver = self['@selectedPackage']) != nil && $receiver != undefined) ? (function(){var package=nil; -(package=smalltalk.send((smalltalk.Package || Package), "_named_", [self['@selectedPackage']]));return smalltalk.send([smalltalk.send((smalltalk.Exporter || Exporter), "__minus_gt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(package, "_commitPathJs", []), "__comma", [unescape("/")]), "__comma", [self['@selectedPackage']]), "__comma", [".js"])]),smalltalk.send((smalltalk.StrippedExporter || StrippedExporter), "__minus_gt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(package, "_commitPathJs", []), "__comma", [unescape("/")]), "__comma", [self['@selectedPackage']]), "__comma", [".deploy.js"])]),smalltalk.send((smalltalk.ChunkExporter || ChunkExporter), "__minus_gt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(package, "_commitPathSt", []), "__comma", [unescape("/")]), "__comma", [self['@selectedPackage']]), "__comma", [".st"])])], "_do_", [(function(commitStrategy){var fileContents=nil; -(fileContents=smalltalk.send(smalltalk.send(smalltalk.send(commitStrategy, "_key", []), "_new", []), "_exportPackage_", [self['@selectedPackage']]));return smalltalk.send(self, "_ajaxPutAt_data_", [smalltalk.send(commitStrategy, "_value", []), fileContents]);})]);})() : nil; +smalltalk.send(smalltalk.send(self['@methodButtons'], "_asJQuery", []), "_show", []); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_renamePackage'), +unescape('_source'), smalltalk.method({ -selector: unescape('renamePackage'), +selector: unescape('source'), fn: function (){ var self=this; -var newName=nil; -(newName=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", [smalltalk.send("Rename package ", "__comma", [self['@selectedPackage']])])); -(($receiver = newName) != nil && $receiver != undefined) ? (function(){return ((($receiver = smalltalk.send(newName, "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_renamePackage_to_", [self['@selectedPackage'], newName]);return smalltalk.send(self, "_updateCategoriesList", []);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_renamePackage_to_", [self['@selectedPackage'], newName]);return smalltalk.send(self, "_updateCategoriesList", []);})]));})() : nil; -return self;} +try{((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_source', fn: function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_declarationSource", []);})() : (function(){return smalltalk.send(self, "_methodSource", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_declarationSource", []);}), (function(){return smalltalk.send(self, "_methodSource", []);})]))}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '_source', fn: function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_declarationSource", []);})() : (function(){return smalltalk.send(self, "_methodSource", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_declarationSource", []);}), (function(){return smalltalk.send(self, "_methodSource", []);})]))}})})();})])); +(function(){throw({name: 'stReturn', selector: '_source', fn: function(){return (($receiver = self['@selectedClass']) == nil || $receiver == undefined) ? (function(){return "";})() : (function(){return smalltalk.send(self, "_classCommentSource", []);})()}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_source'){return e.fn()} throw(e)}} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_removePackage'), +unescape('_updateCategoriesList'), smalltalk.method({ -selector: unescape('removePackage'), +selector: unescape('updateCategoriesList'), fn: function (){ var self=this; -((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send("Do you really want to remove the whole package ", "__comma", [self['@selectedPackage']]), "__comma", [unescape("%20with%20all%20its%20classes%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removePackage_", [self['@selectedPackage']]);return smalltalk.send(self, "_updateCategoriesList", []);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removePackage_", [self['@selectedPackage']]);return smalltalk.send(self, "_updateCategoriesList", []);})])); +smalltalk.send(self['@packagesList'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(self, "_packages", []), "_do_", [(function(each){var li=nil; +var label=nil; +((($receiver = smalltalk.send(each, "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (label="Unclassified");})() : (function(){return (label=each);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (label="Unclassified");}), (function(){return (label=each);})]));(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedPackage'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));return (function($rec){smalltalk.send($rec, "_with_", [label]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectCategory_", [each]);})]);})(li);})]);})]); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_addNewClass'), +unescape('_updateClassesList'), smalltalk.method({ -selector: unescape('addNewClass'), +selector: unescape('updateClassesList'), fn: function (){ var self=this; -var className=nil; -(className=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", ["New class"])); -((($receiver = smalltalk.send(smalltalk.send(className, "_notNil", []), "_and_", [(function(){return smalltalk.send(className, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send((smalltalk.Object || Object), "_subclass_instanceVariableNames_package_", [className, "", smalltalk.send(self, "_selectedPackage", [])]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send((smalltalk.Object || Object), "_subclass_instanceVariableNames_package_", [className, "", smalltalk.send(self, "_selectedPackage", [])]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})])); +smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_update", []); +smalltalk.send(self['@classesList'], "_updateNodes", []); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_copyClass'), +unescape('_updateMethodsList'), smalltalk.method({ -selector: unescape('copyClass'), +selector: unescape('updateMethodsList'), fn: function (){ var self=this; -var className=nil; -(className=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", ["Copy class"])); -((($receiver = smalltalk.send(smalltalk.send(className, "_notNil", []), "_and_", [(function(){return smalltalk.send(className, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_copyClass_named_", [smalltalk.send(self, "_selectedClass", []), className]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_copyClass_named_", [smalltalk.send(self, "_selectedClass", []), className]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})])); +smalltalk.send(self['@methodsList'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(self, "_methods", []), "_do_", [(function(each){var li=nil; +(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedMethod'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));return (function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(each, "_selector", [])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectMethod_", [each]);})]);})(li);})]);})]); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_initialize'), +unescape('_updateProtocolsList'), smalltalk.method({ -selector: unescape('initialize'), +selector: unescape('updateProtocolsList'), fn: function (){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); -(self['@selectedTab']=smalltalk.symbolFor("instance")); -(self['@selectedPackage']=smalltalk.send(smalltalk.send(self, "_packages", []), "_first", [])); -(self['@unsavedChanges']=false); +smalltalk.send(self['@protocolsList'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(self, "_protocols", []), "_do_", [(function(each){var li=nil; +(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedProtocol'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));return (function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectProtocol_", [each]);})]);})(li);})]);})]); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_ajaxPutAt_data_'), +unescape('_updateSourceAndButtons'), smalltalk.method({ -selector: unescape('ajaxPutAt%3Adata%3A'), -fn: function (anURL, aString){ +selector: unescape('updateSourceAndButtons'), +fn: function (){ var self=this; -smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_ajax_options_", [anURL, smalltalk.HashedCollection._fromPairs_([smalltalk.send("type", "__minus_gt", ["PUT"]),smalltalk.send("data", "__minus_gt", [aString]),smalltalk.send("contentType", "__minus_gt", [unescape("text/plain%3Bcharset%3DUTF-8")]),smalltalk.send("error", "__minus_gt", [(function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send("PUT request failed at: ", "__comma", [anURL])]);})])])]); +smalltalk.send(self, "_disableSaveButton", []); +smalltalk.send(self['@classButtons'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_title_", ["Create a new class"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_addNewClass", []);})]);return smalltalk.send($rec, "_with_", ["New class"]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_with_", ["Rename class"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_renameClass", []);})]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_with_", ["Copy class"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_copyClass", []);})]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_with_", ["Remove class"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_removeClass", []);})]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_with_", ["References"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_searchClassReferences", []);})]);})(smalltalk.send(html, "_button", []));})]); +smalltalk.send(self['@methodButtons'], "_contents_", [(function(html){var protocolSelect=nil; +var referencesSelect=nil; +(function($rec){smalltalk.send($rec, "_with_", ["Remove method"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_removeMethod", []);})]);})(smalltalk.send(html, "_button", []));(protocolSelect=smalltalk.send(html, "_select", []));(function($rec){smalltalk.send($rec, "_onChange_", [(function(){return smalltalk.send(self, "_setMethodProtocol_", [smalltalk.send(smalltalk.send(protocolSelect, "_asJQuery", []), "_val", [])]);})]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_with_", ["Method protocol"]);return smalltalk.send($rec, "_at_put_", ["disabled", "disabled"]);})(smalltalk.send(html, "_option", []));(function($rec){smalltalk.send($rec, "_class_", ["important"]);return smalltalk.send($rec, "_with_", ["New..."]);})(smalltalk.send(html, "_option", []));return smalltalk.send(smalltalk.send(self, "_protocols", []), "_do_", [(function(each){(option=smalltalk.send(smalltalk.send(html, "_option", []), "_with_", [each]));return ((($receiver = smalltalk.send(self['@selectedProtocol'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send((typeof option == 'undefined' ? nil : option), "_at_put_", ["selected", "selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send((typeof option == 'undefined' ? nil : option), "_at_put_", ["selected", "selected"]);})]));})]);})]);})(protocolSelect);return ((($receiver = smalltalk.send(self['@selectedMethod'], "_isNil", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){(referencesSelect=smalltalk.send(html, "_select", []));return (function($rec){smalltalk.send($rec, "_onChange_", [(function(){return smalltalk.send(self, "_searchReferencesOf_", [smalltalk.send(smalltalk.send(referencesSelect, "_asJQuery", []), "_val", [])]);})]);return smalltalk.send($rec, "_with_", [(function(){var option=nil; +(function($rec){smalltalk.send($rec, "_with_", ["References"]);return smalltalk.send($rec, "_at_put_", ["disabled", "disabled"]);})(smalltalk.send(html, "_option", []));(function($rec){smalltalk.send($rec, "_class_", ["important"]);return smalltalk.send($rec, "_with_", [smalltalk.send(self['@selectedMethod'], "_selector", [])]);})(smalltalk.send(html, "_option", []));return smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedMethod'], "_messageSends", []), "_sorted", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(html, "_option", []), "_with_", [each]);})]);})]);})(referencesSelect);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){(referencesSelect=smalltalk.send(html, "_select", []));return (function($rec){smalltalk.send($rec, "_onChange_", [(function(){return smalltalk.send(self, "_searchReferencesOf_", [smalltalk.send(smalltalk.send(referencesSelect, "_asJQuery", []), "_val", [])]);})]);return smalltalk.send($rec, "_with_", [(function(){var option=nil; +(function($rec){smalltalk.send($rec, "_with_", ["References"]);return smalltalk.send($rec, "_at_put_", ["disabled", "disabled"]);})(smalltalk.send(html, "_option", []));(function($rec){smalltalk.send($rec, "_class_", ["important"]);return smalltalk.send($rec, "_with_", [smalltalk.send(self['@selectedMethod'], "_selector", [])]);})(smalltalk.send(html, "_option", []));return smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedMethod'], "_messageSends", []), "_sorted", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(html, "_option", []), "_with_", [each]);})]);})]);})(referencesSelect);})]));})]); +((($receiver = smalltalk.send(self['@selectedMethod'], "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_hideMethodButtons", []);return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedClass'], "_isNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedProtocol'], "_notNil", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_hideClassButtons", []);})() : (function(){return smalltalk.send(self, "_showClassButtons", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_hideClassButtons", []);}), (function(){return smalltalk.send(self, "_showClassButtons", []);})]));})() : (function(){smalltalk.send(self, "_hideClassButtons", []);return smalltalk.send(self, "_showMethodButtons", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(self, "_hideMethodButtons", []);return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedClass'], "_isNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedProtocol'], "_notNil", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_hideClassButtons", []);})() : (function(){return smalltalk.send(self, "_showClassButtons", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_hideClassButtons", []);}), (function(){return smalltalk.send(self, "_showClassButtons", []);})]));}), (function(){smalltalk.send(self, "_hideClassButtons", []);return smalltalk.send(self, "_showMethodButtons", []);})])); +smalltalk.send(self['@sourceArea'], "_val_", [smalltalk.send(self, "_source", [])]); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_renderBoxOn_'), +unescape('_updateStatus'), smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -fn: function (html){ +selector: unescape('updateStatus'), +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_renderTopPanelOn_", [html]);smalltalk.send($rec, "_renderTabsOn_", [html]);return smalltalk.send($rec, "_renderBottomPanelOn_", [html]);})(self); +((($receiver = smalltalk.send(smalltalk.send(self['@sourceArea'], "_val", []), "__eq", [smalltalk.send(self, "_source", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil;return (self['@unsavedChanges']=false);})() : (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_removeAt_", ["disabled"]);})() : nil;return (self['@unsavedChanges']=true);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil;return (self['@unsavedChanges']=false);}), (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_removeAt_", ["disabled"]);})() : nil;return (self['@unsavedChanges']=true);})])); return self;} }), smalltalk.Browser); smalltalk.addMethod( -unescape('_renderTopPanelOn_'), +unescape('_updateTabsList'), smalltalk.method({ -selector: unescape('renderTopPanelOn%3A'), -fn: function (html){ +selector: unescape('updateTabsList'), +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_class_", ["top"]);return smalltalk.send($rec, "_with_", [(function(){(self['@packagesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column browser packages"]));(function($rec){smalltalk.send($rec, "_class_", ["jt_packagesButtons"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_title_", ["Commit classes in this package to disk"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_commitPackage", []);})]);return smalltalk.send($rec, "_with_", ["Commit"]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_title_", ["Rename package"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_renamePackage", []);})]);return smalltalk.send($rec, "_with_", ["Rename"]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_title_", ["Remove this package from the system"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_removePackage", []);})]);return smalltalk.send($rec, "_with_", ["Remove"]);})(smalltalk.send(html, "_button", []));})]);})(smalltalk.send(html, "_div", []));(self['@classesList']=smalltalk.send((smalltalk.ClassesList || ClassesList), "_on_", [self]));smalltalk.send(self['@classesList'], "_renderOn_", [html]);(self['@protocolsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column browser protocols"]));(self['@methodsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column browser methods"]));(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);return smalltalk.send($rec, "_updateMethodsList", []);})(self);return smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["jt_clear"]);})]);})(smalltalk.send(html, "_div", [])); +smalltalk.send(self['@tabsList'], "_contents_", [(function(html){var li=nil; +(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));(function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", ["Instance"]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [smalltalk.symbolFor("instance")]);})]);})(li);(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("class")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));(function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", ["Class"]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [smalltalk.symbolFor("class")]);})]);})(li);(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));return (function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", ["Comment"]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [smalltalk.symbolFor("comment")]);})]);})(li);})]); return self;} }), smalltalk.Browser); + smalltalk.addMethod( -unescape('_renderTabsOn_'), +unescape('_commitPathJs'), smalltalk.method({ -selector: unescape('renderTabsOn%3A'), -fn: function (html){ +selector: unescape('commitPathJs'), +fn: function (){ var self=this; -(self['@tabsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_tabs jt_browser"])); -smalltalk.send(self, "_updateTabsList", []); +return "js"; return self;} }), -smalltalk.Browser); +smalltalk.Browser.klass); smalltalk.addMethod( -unescape('_renderBottomPanelOn_'), +unescape('_commitPathSt'), smalltalk.method({ -selector: unescape('renderBottomPanelOn%3A'), -fn: function (html){ +selector: unescape('commitPathSt'), +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_class_", ["jt_sourceCode"]);return smalltalk.send($rec, "_with_", [(function(){(self['@sourceArea']=smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", []));smalltalk.send(self['@sourceArea'], "_renderOn_", [html]);smalltalk.send(self['@sourceArea'], "_onKeyDown_", [(function(e){return smalltalk.send(self, "_handleSourceAreaKeyDown_", [e]);})]);return smalltalk.send(self['@sourceArea'], "_onKeyUp_", [(function(){return smalltalk.send(self, "_updateStatus", []);})]);})]);})(smalltalk.send(html, "_div", [])); +return "st"; return self;} }), -smalltalk.Browser); +smalltalk.Browser.klass); smalltalk.addMethod( -unescape('_renderButtonsOn_'), +unescape('_open'), smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), -fn: function (html){ +selector: unescape('open'), +fn: function (){ var self=this; -(self['@saveButton']=smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["Save"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_compile", []);})]);})(self['@saveButton']); -(self['@methodButtons']=smalltalk.send(html, "_span", [])); -(self['@classButtons']=smalltalk.send(html, "_span", [])); -(function($rec){smalltalk.send($rec, "_class_", ["right"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_doIt", []);})]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_printIt", []);})]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_inspectIt", []);})]);})(smalltalk.send(html, "_button", []));})]);})(smalltalk.send(html, "_div", [])); -smalltalk.send(self, "_updateSourceAndButtons", []); +smalltalk.send(smalltalk.send(self, "_new", []), "_open", []); return self;} }), -smalltalk.Browser); +smalltalk.Browser.klass); smalltalk.addMethod( -unescape('_canBeClosed'), +unescape('_openOn_'), smalltalk.method({ -selector: unescape('canBeClosed'), -fn: function (){ +selector: unescape('openOn%3A'), +fn: function (aClass){ var self=this; -return true; +return (function($rec){smalltalk.send($rec, "_open", []);smalltalk.send($rec, "_selectCategory_", [smalltalk.send(aClass, "_category", [])]);return smalltalk.send($rec, "_selectClass_", [aClass]);})(smalltalk.send(self, "_new", [])); return self;} }), -smalltalk.Browser); +smalltalk.Browser.klass); + +smalltalk.addClass('Debugger', smalltalk.TabWidget, ['error', 'selectedContext', 'sourceArea', 'ul', 'ul2', 'inspector', 'saveButton', 'unsavedChanges', 'selectedVariable', 'selectedVariableName', 'inspectButton'], 'IDE'); smalltalk.addMethod( -unescape('_updateCategoriesList'), +unescape('_arguments'), smalltalk.method({ -selector: unescape('updateCategoriesList'), +selector: unescape('arguments'), fn: function (){ var self=this; -smalltalk.send(self['@packagesList'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(self, "_packages", []), "_do_", [(function(each){var li=nil; -var label=nil; -((($receiver = smalltalk.send(each, "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (label="Unclassified");})() : (function(){return (label=each);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (label="Unclassified");}), (function(){return (label=each);})]));(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedPackage'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));return (function($rec){smalltalk.send($rec, "_with_", [label]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectCategory_", [each]);})]);})(li);})]);})]); +return (($receiver = smalltalk.send(self, "_method", [])) == nil || $receiver == undefined) ? (function(){return smalltalk.send(smalltalk.send(self['@selectedContext'], "_temps", []), "_collect_", [(function(each){return nil;})]);})() : (function(){return smalltalk.send(smalltalk.send(self, "_method", []), "_arguments", []);})(); return self;} }), -smalltalk.Browser); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_updateClassesList'), +unescape('_canBeClosed'), smalltalk.method({ -selector: unescape('updateClassesList'), +selector: unescape('canBeClosed'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_update", []); -smalltalk.send(self['@classesList'], "_updateNodes", []); +return true; return self;} }), -smalltalk.Browser); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_updateProtocolsList'), +unescape('_error'), smalltalk.method({ -selector: unescape('updateProtocolsList'), +selector: unescape('error'), fn: function (){ var self=this; -smalltalk.send(self['@protocolsList'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(self, "_protocols", []), "_do_", [(function(each){var li=nil; -(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedProtocol'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));return (function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectProtocol_", [each]);})]);})(li);})]);})]); +return self['@error']; return self;} }), -smalltalk.Browser); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_updateMethodsList'), +unescape('_error_'), smalltalk.method({ -selector: unescape('updateMethodsList'), -fn: function (){ +selector: unescape('error%3A'), +fn: function (anError){ var self=this; -smalltalk.send(self['@methodsList'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(self, "_methods", []), "_do_", [(function(each){var li=nil; -(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedMethod'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));return (function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(each, "_selector", [])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectMethod_", [each]);})]);})(li);})]);})]); +(self['@error']=anError); return self;} }), -smalltalk.Browser); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_updateTabsList'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('updateTabsList'), +selector: unescape('initialize'), fn: function (){ var self=this; -smalltalk.send(self['@tabsList'], "_contents_", [(function(html){var li=nil; -(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));(function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", ["Instance"]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [smalltalk.symbolFor("instance")]);})]);})(li);(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("class")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));(function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", ["Class"]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [smalltalk.symbolFor("class")]);})]);})(li);(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));return (function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", ["Comment"]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [smalltalk.symbolFor("comment")]);})]);})(li);})]); +smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); +smalltalk.send(self['@unsavedChanges'], "__eq", [false]); return self;} }), -smalltalk.Browser); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_updateSourceAndButtons'), +unescape('_inspectSelectedVariable'), smalltalk.method({ -selector: unescape('updateSourceAndButtons'), +selector: unescape('inspectSelectedVariable'), fn: function (){ var self=this; -smalltalk.send(self, "_disableSaveButton", []); -smalltalk.send(self['@classButtons'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_title_", ["Create a new class"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_addNewClass", []);})]);return smalltalk.send($rec, "_with_", ["New class"]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_with_", ["Rename class"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_renameClass", []);})]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_with_", ["Copy class"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_copyClass", []);})]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_with_", ["Remove class"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_removeClass", []);})]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_with_", ["References"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_searchClassReferences", []);})]);})(smalltalk.send(html, "_button", []));})]); -smalltalk.send(self['@methodButtons'], "_contents_", [(function(html){var protocolSelect=nil; -var referencesSelect=nil; -(function($rec){smalltalk.send($rec, "_with_", ["Remove method"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_removeMethod", []);})]);})(smalltalk.send(html, "_button", []));(protocolSelect=smalltalk.send(html, "_select", []));(function($rec){smalltalk.send($rec, "_onChange_", [(function(){return smalltalk.send(self, "_setMethodProtocol_", [smalltalk.send(smalltalk.send(protocolSelect, "_asJQuery", []), "_val", [])]);})]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_with_", ["Method protocol"]);return smalltalk.send($rec, "_at_put_", ["disabled", "disabled"]);})(smalltalk.send(html, "_option", []));(function($rec){smalltalk.send($rec, "_class_", ["important"]);return smalltalk.send($rec, "_with_", ["New..."]);})(smalltalk.send(html, "_option", []));return smalltalk.send(smalltalk.send(self, "_protocols", []), "_do_", [(function(each){(option=smalltalk.send(smalltalk.send(html, "_option", []), "_with_", [each]));return ((($receiver = smalltalk.send(self['@selectedProtocol'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send((typeof option == 'undefined' ? nil : option), "_at_put_", ["selected", "selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send((typeof option == 'undefined' ? nil : option), "_at_put_", ["selected", "selected"]);})]));})]);})]);})(protocolSelect);return ((($receiver = smalltalk.send(self['@selectedMethod'], "_isNil", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){(referencesSelect=smalltalk.send(html, "_select", []));return (function($rec){smalltalk.send($rec, "_onChange_", [(function(){return smalltalk.send(self, "_searchReferencesOf_", [smalltalk.send(smalltalk.send(referencesSelect, "_asJQuery", []), "_val", [])]);})]);return smalltalk.send($rec, "_with_", [(function(){var option=nil; -(function($rec){smalltalk.send($rec, "_with_", ["References"]);return smalltalk.send($rec, "_at_put_", ["disabled", "disabled"]);})(smalltalk.send(html, "_option", []));(function($rec){smalltalk.send($rec, "_class_", ["important"]);return smalltalk.send($rec, "_with_", [smalltalk.send(self['@selectedMethod'], "_selector", [])]);})(smalltalk.send(html, "_option", []));return smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedMethod'], "_messageSends", []), "_sorted", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(html, "_option", []), "_with_", [each]);})]);})]);})(referencesSelect);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){(referencesSelect=smalltalk.send(html, "_select", []));return (function($rec){smalltalk.send($rec, "_onChange_", [(function(){return smalltalk.send(self, "_searchReferencesOf_", [smalltalk.send(smalltalk.send(referencesSelect, "_asJQuery", []), "_val", [])]);})]);return smalltalk.send($rec, "_with_", [(function(){var option=nil; -(function($rec){smalltalk.send($rec, "_with_", ["References"]);return smalltalk.send($rec, "_at_put_", ["disabled", "disabled"]);})(smalltalk.send(html, "_option", []));(function($rec){smalltalk.send($rec, "_class_", ["important"]);return smalltalk.send($rec, "_with_", [smalltalk.send(self['@selectedMethod'], "_selector", [])]);})(smalltalk.send(html, "_option", []));return smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedMethod'], "_messageSends", []), "_sorted", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(html, "_option", []), "_with_", [each]);})]);})]);})(referencesSelect);})]));})]); -((($receiver = smalltalk.send(self['@selectedMethod'], "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_hideMethodButtons", []);return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedClass'], "_isNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedProtocol'], "_notNil", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_hideClassButtons", []);})() : (function(){return smalltalk.send(self, "_showClassButtons", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_hideClassButtons", []);}), (function(){return smalltalk.send(self, "_showClassButtons", []);})]));})() : (function(){smalltalk.send(self, "_hideClassButtons", []);return smalltalk.send(self, "_showMethodButtons", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(self, "_hideMethodButtons", []);return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedClass'], "_isNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedProtocol'], "_notNil", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_hideClassButtons", []);})() : (function(){return smalltalk.send(self, "_showClassButtons", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_hideClassButtons", []);}), (function(){return smalltalk.send(self, "_showClassButtons", []);})]));}), (function(){smalltalk.send(self, "_hideClassButtons", []);return smalltalk.send(self, "_showMethodButtons", []);})])); -smalltalk.send(self['@sourceArea'], "_val_", [smalltalk.send(self, "_source", [])]); +smalltalk.send(self['@selectedVariable'], "_inspect", []); return self;} }), -smalltalk.Browser); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_updateStatus'), +unescape('_label'), smalltalk.method({ -selector: unescape('updateStatus'), +selector: unescape('label'), fn: function (){ var self=this; -((($receiver = smalltalk.send(smalltalk.send(self['@sourceArea'], "_val", []), "__eq", [smalltalk.send(self, "_source", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil;return (self['@unsavedChanges']=false);})() : (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_removeAt_", ["disabled"]);})() : nil;return (self['@unsavedChanges']=true);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil;return (self['@unsavedChanges']=false);}), (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_removeAt_", ["disabled"]);})() : nil;return (self['@unsavedChanges']=true);})])); +return unescape("%5BDebugger%5D"); return self;} }), -smalltalk.Browser); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_resetClassesList'), +unescape('_method'), smalltalk.method({ -selector: unescape('resetClassesList'), +selector: unescape('method'), fn: function (){ var self=this; -smalltalk.send(self['@classesList'], "_resetNodes", []); +return smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_class", []), "_methodAt_", [smalltalk.send(self['@selectedContext'], "_selector", [])]); return self;} }), -smalltalk.Browser); - +smalltalk.Debugger); smalltalk.addMethod( -unescape('_commitPathJs'), +unescape('_proceed'), smalltalk.method({ -selector: unescape('commitPathJs'), +selector: unescape('proceed'), fn: function (){ var self=this; -return "js"; +smalltalk.send(self, "_close", []); +smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_perform_withArguments_", [smalltalk.send(self['@selectedContext'], "_selector", []), smalltalk.send(self['@selectedContext'], "_temps", [])]); return self;} }), -smalltalk.Browser.klass); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_commitPathSt'), +unescape('_receiver'), smalltalk.method({ -selector: unescape('commitPathSt'), +selector: unescape('receiver'), fn: function (){ var self=this; -return "st"; +return smalltalk.send(self['@selectedContext'], "_receiver", []); return self;} }), -smalltalk.Browser.klass); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_openOn_'), +unescape('_renderBottomPanelOn_'), smalltalk.method({ -selector: unescape('openOn%3A'), -fn: function (aClass){ +selector: unescape('renderBottomPanelOn%3A'), +fn: function (html){ var self=this; -return (function($rec){smalltalk.send($rec, "_open", []);smalltalk.send($rec, "_selectCategory_", [smalltalk.send(aClass, "_category", [])]);return smalltalk.send($rec, "_selectClass_", [aClass]);})(smalltalk.send(self, "_new", [])); +(function($rec){smalltalk.send($rec, "_class_", ["jt_sourceCode debugger"]);return smalltalk.send($rec, "_with_", [(function(){(self['@sourceArea']=smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", []));return smalltalk.send(self['@sourceArea'], "_renderOn_", [html]);})]);})(smalltalk.send(html, "_div", [])); +(self['@ul2']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column debugger variables"])); +(self['@inspector']=smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["jt_column debugger inspector"])); +smalltalk.send(self['@sourceArea'], "_onKeyUp_", [(function(){return smalltalk.send(self, "_updateStatus", []);})]); return self;} }), -smalltalk.Browser.klass); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_open'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('open'), -fn: function (){ +selector: unescape('renderBoxOn%3A'), +fn: function (html){ var self=this; -smalltalk.send(smalltalk.send(self, "_new", []), "_open", []); +(function($rec){smalltalk.send($rec, "_renderTopPanelOn_", [html]);return smalltalk.send($rec, "_renderBottomPanelOn_", [html]);})(self); return self;} }), -smalltalk.Browser.klass); - +smalltalk.Debugger); -smalltalk.addClass('Inspector', smalltalk.TabWidget, ['label', 'variables', 'object', 'selectedVariable', 'variablesList', 'valueTextarea', 'diveButton', 'sourceArea'], 'IDE'); smalltalk.addMethod( -unescape('_label'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('label'), -fn: function (){ +selector: unescape('renderButtonsOn%3A'), +fn: function (html){ var self=this; -return (($receiver = self['@label']) == nil || $receiver == undefined) ? (function(){return unescape("Inspector%20%28nil%29");})() : $receiver; +(self['@saveButton']=(function($rec){smalltalk.send($rec, "_with_", ["Save"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_save", []);})]);})(smalltalk.send(html, "_button", []))); +(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_doIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_printIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_inspectIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["Proceed"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_proceed", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["Abandon"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_close", []);})]);})(smalltalk.send(html, "_button", [])); +(self['@inspectButton']=(function($rec){smalltalk.send($rec, "_class_", ["jt_button debugger inspect"]);smalltalk.send($rec, "_with_", ["Inspect"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_inspectSelectedVariable", []);})]);})(smalltalk.send(html, "_button", []))); +(function($rec){smalltalk.send($rec, "_updateSourceArea", []);smalltalk.send($rec, "_updateStatus", []);smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateInspector", []);})(self); return self;} }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_variables'), +unescape('_renderContext_on_'), smalltalk.method({ -selector: unescape('variables'), -fn: function (){ +selector: unescape('renderContext%3Aon%3A'), +fn: function (aContext, html){ var self=this; -return self['@variables']; +var li=nil; +(li=smalltalk.send(html, "_li", [])); +((($receiver = smalltalk.send(self['@selectedContext'], "__eq", [aContext])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})])); +(function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(aContext, "_asString", [])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectContext_", [aContext]);})]);})(li); +(($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_renderContext_on_", [smalltalk.send(aContext, "_home", []), html]);})() : nil; return self;} }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_setVariables_'), +unescape('_renderTopPanelOn_'), smalltalk.method({ -selector: unescape('setVariables%3A'), -fn: function (aCollection){ +selector: unescape('renderTopPanelOn%3A'), +fn: function (html){ var self=this; -(self['@variables']=aCollection); +(self['@selectedContext']=smalltalk.send(smalltalk.send(self, "_error", []), "_context", [])); +(function($rec){smalltalk.send($rec, "_class_", ["top"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_class_", ["label"]);return smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(self, "_error", []), "_messageText", [])]);})(smalltalk.send(html, "_div", []));return (self['@ul']=(function($rec){smalltalk.send($rec, "_class_", ["jt_column debugger contexts"]);return smalltalk.send($rec, "_with_", [(function(){return smalltalk.send(self, "_renderContext_on_", [smalltalk.send(smalltalk.send(self, "_error", []), "_context", []), html]);})]);})(smalltalk.send(html, "_ul", [])));})]);})(smalltalk.send(html, "_div", [])); return self;} }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_setLabel_'), +unescape('_save'), smalltalk.method({ -selector: unescape('setLabel%3A'), -fn: function (aString){ +selector: unescape('save'), +fn: function (){ var self=this; -(self['@label']=aString); +var protocol=nil; +(protocol=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(self['@selectedContext'], "_selector", [])]), "_category", [])); +smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_class", []), "_compile_category_", [smalltalk.send(self['@sourceArea'], "_val", []), protocol]); +smalltalk.send(self, "_updateStatus", []); return self;} }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_selectedVariable'), +unescape('_selectContext_'), smalltalk.method({ -selector: unescape('selectedVariable'), -fn: function (){ +selector: unescape('selectContext%3A'), +fn: function (aContext){ var self=this; -return self['@selectedVariable']; +(self['@selectedContext']=aContext); +(self['@selectedVariable']=nil); +(self['@selectedVariableName']=nil); +(function($rec){smalltalk.send($rec, "_updateContextsList", []);smalltalk.send($rec, "_updateSourceArea", []);smalltalk.send($rec, "_updateInspector", []);smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateStatus", []);})(self); return self;} }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_selectedVariable_'), +unescape('_selectVariable_named_'), smalltalk.method({ -selector: unescape('selectedVariable%3A'), -fn: function (aString){ +selector: unescape('selectVariable%3Anamed%3A'), +fn: function (anObject, aString){ var self=this; -(self['@selectedVariable']=aString); +(self['@selectedVariable']=anObject); +(self['@selectedVariableName']=aString); +smalltalk.send(self['@inspector'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(anObject, "_printString", [])]);})]); +smalltalk.send(self, "_updateVariablesList", []); return self;} }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_sourceArea'), +unescape('_source'), smalltalk.method({ -selector: unescape('sourceArea'), +selector: unescape('source'), fn: function (){ var self=this; -return self['@sourceArea']; +return (($receiver = smalltalk.send(self, "_method", [])) == nil || $receiver == undefined) ? (function(){return unescape("Method%20doesn%27t%20exist%21");})() : (function(){return smalltalk.send(smalltalk.send(self, "_method", []), "_source", []);})(); return self;} }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_inspect_'), +unescape('_updateContextsList'), smalltalk.method({ -selector: unescape('inspect%3A'), -fn: function (anObject){ +selector: unescape('updateContextsList'), +fn: function (){ var self=this; -(self['@object']=anObject); -(self['@variables']=[]); -smalltalk.send(self['@object'], "_inspectOn_", [self]); +smalltalk.send(self['@ul'], "_contents_", [(function(html){return smalltalk.send(self, "_renderContext_on_", [smalltalk.send(smalltalk.send(self, "_error", []), "_context", []), html]);})]); return self;} }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_dive'), +unescape('_updateInspector'), smalltalk.method({ -selector: unescape('dive'), +selector: unescape('updateInspector'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_inspect", []); +smalltalk.send(self['@inspector'], "_contents_", [(function(html){return nil;})]); return self;} }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_refresh'), +unescape('_updateSourceArea'), smalltalk.method({ -selector: unescape('refresh'), +selector: unescape('updateSourceArea'), fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_inspect_", [self['@object']]);smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateValueTextarea", []);})(self); +smalltalk.send(self['@sourceArea'], "_val_", [smalltalk.send(self, "_source", [])]); return self;} }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_renderBoxOn_'), +unescape('_updateStatus'), smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -fn: function (html){ +selector: unescape('updateStatus'), +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_renderTopPanelOn_", [html]);return smalltalk.send($rec, "_renderBottomPanelOn_", [html]);})(self); +((($receiver = smalltalk.send(smalltalk.send(self['@sourceArea'], "_val", []), "__eq", [smalltalk.send(self, "_source", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil;return (self['@unsavedChanges']=false);})() : (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_removeAt_", ["disabled"]);})() : nil;return (self['@unsavedChanges']=true);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil;return (self['@unsavedChanges']=false);}), (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_removeAt_", ["disabled"]);})() : nil;return (self['@unsavedChanges']=true);})])); return self;} }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_renderTopPanelOn_'), +unescape('_updateVariablesList'), smalltalk.method({ -selector: unescape('renderTopPanelOn%3A'), -fn: function (html){ +selector: unescape('updateVariablesList'), +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_class_", ["top"]);return smalltalk.send($rec, "_with_", [(function(){(self['@variablesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column variables"]));(self['@valueTextarea']=(function($rec){smalltalk.send($rec, "_class_", ["jt_column value"]);return smalltalk.send($rec, "_at_put_", ["readonly", "readonly"]);})(smalltalk.send(html, "_textarea", [])));(function($rec){smalltalk.send($rec, "_class_", ["jt_tabs inspector"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_class_", ["jt_button inspector refresh"]);smalltalk.send($rec, "_with_", ["Refresh"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_refresh", []);})]);})(smalltalk.send(html, "_button", []));return (self['@diveButton']=(function($rec){smalltalk.send($rec, "_class_", ["jt_button inspector dive"]);smalltalk.send($rec, "_with_", ["Dive"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_dive", []);})]);})(smalltalk.send(html, "_button", [])));})]);})(smalltalk.send(html, "_div", []));return smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["jt_clear"]);})]);})(smalltalk.send(html, "_div", [])); -(function($rec){smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateValueTextarea", []);})(self); +smalltalk.send(self['@ul2'], "_contents_", [(function(html){var li=nil; +(li=(function($rec){smalltalk.send($rec, "_with_", ["self"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_named_", [smalltalk.send(self, "_receiver", []), "self"]);})]);})(smalltalk.send(html, "_li", [])));((($receiver = smalltalk.send(self['@selectedVariableName'], "__eq", ["self"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));smalltalk.send(smalltalk.send(self, "_arguments", []), "_withIndexDo_", [(function(each, index){var param=nil; +(param=smalltalk.send(smalltalk.send(self['@selectedContext'], "_temps", []), "_at_", [index]));(li=(function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_named_", [param, each]);})]);})(smalltalk.send(html, "_li", [])));return ((($receiver = smalltalk.send(self['@selectedVariableName'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));})]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_allInstanceVariableNames", []), "_do_", [(function(each){var ivar=nil; +(ivar=smalltalk.send(smalltalk.send(self, "_receiver", []), "_instVarAt_", [each]));(li=(function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_named_", [ivar, each]);})]);})(smalltalk.send(html, "_li", [])));return ((($receiver = smalltalk.send(self['@selectedVariableName'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));})]);})]); +(($receiver = self['@selectedVariable']) == nil || $receiver == undefined) ? (function(){return smalltalk.send(self['@inspectButton'], "_at_put_", ["disabled", true]);})() : (function(){return smalltalk.send(self['@inspectButton'], "_removeAt_", ["disabled"]);})(); return self;} }), -smalltalk.Inspector); +smalltalk.Debugger); + + +smalltalk.addClass('IDETranscript', smalltalk.TabWidget, ['textarea'], 'IDE'); smalltalk.addMethod( -unescape('_renderBottomPanelOn_'), +unescape('_clear'), smalltalk.method({ -selector: unescape('renderBottomPanelOn%3A'), -fn: function (html){ +selector: unescape('clear'), +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_class_", ["jt_sourceCode"]);return smalltalk.send($rec, "_with_", [(function(){(self['@sourceArea']=(function($rec){smalltalk.send($rec, "_receiver_", [self['@object']]);smalltalk.send($rec, "_onDoIt_", [(function(){return smalltalk.send(self, "_refresh", []);})]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", [])));return smalltalk.send(self['@sourceArea'], "_renderOn_", [html]);})]);})(smalltalk.send(html, "_div", [])); +smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val_", [""]); return self;} }), -smalltalk.Inspector); +smalltalk.IDETranscript); smalltalk.addMethod( -unescape('_renderButtonsOn_'), +unescape('_cr'), smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), -fn: function (html){ +selector: unescape('cr'), +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_sourceArea", []), "_doIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_sourceArea", []), "_printIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_sourceArea", []), "_inspectIt", []);})]);})(smalltalk.send(html, "_button", [])); -smalltalk.send(self, "_updateButtons", []); +smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val_", [smalltalk.send(smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val", []), "__comma", [smalltalk.send((smalltalk.String || String), "_cr", [])])]); return self;} }), -smalltalk.Inspector); +smalltalk.IDETranscript); smalltalk.addMethod( -unescape('_canBeClosed'), +unescape('_label'), smalltalk.method({ -selector: unescape('canBeClosed'), +selector: unescape('label'), fn: function (){ var self=this; -return true; +return "Transcript"; return self;} }), -smalltalk.Inspector); +smalltalk.IDETranscript); smalltalk.addMethod( -unescape('_updateVariablesList'), +unescape('_open'), smalltalk.method({ -selector: unescape('updateVariablesList'), +selector: unescape('open'), fn: function (){ -var self=this; -smalltalk.send(self['@variablesList'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_keys", []), "_do_", [(function(each){var li=nil; -(li=smalltalk.send(html, "_li", []));(function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_", [each]);})]);})(li);return ((($receiver = smalltalk.send(smalltalk.send(self, "_selectedVariable", []), "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));})]);})]); +var self=this; +(function($rec){smalltalk.send($rec, "_open", []);return smalltalk.send($rec, "_selectTab_", [self]);})(smalltalk.send((smalltalk.TabManager || TabManager), "_current", [])); return self;} }), -smalltalk.Inspector); +smalltalk.IDETranscript); smalltalk.addMethod( -unescape('_selectVariable_'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('selectVariable%3A'), -fn: function (aString){ +selector: unescape('renderBoxOn%3A'), +fn: function (html){ var self=this; -smalltalk.send(self, "_selectedVariable_", [aString]); -(function($rec){smalltalk.send($rec, "_updateVariablesList", []);smalltalk.send($rec, "_updateValueTextarea", []);return smalltalk.send($rec, "_updateButtons", []);})(self); +(self['@textarea']=smalltalk.send(html, "_textarea", [])); +(function($rec){smalltalk.send($rec, "_class_", ["jt_transcript"]);return smalltalk.send($rec, "_at_put_", ["spellcheck", "false"]);})(self['@textarea']); return self;} }), -smalltalk.Inspector); +smalltalk.IDETranscript); smalltalk.addMethod( -unescape('_updateValueTextarea'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('updateValueTextarea'), -fn: function (){ +selector: unescape('renderButtonsOn%3A'), +fn: function (html){ var self=this; -smalltalk.send(smalltalk.send(self['@valueTextarea'], "_asJQuery", []), "_val_", [((($receiver = smalltalk.send(smalltalk.send(self, "_selectedVariable", []), "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "";})() : (function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_printString", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "";}), (function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_printString", []);})]))]); +(function($rec){smalltalk.send($rec, "_with_", ["Clear transcript"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_clear", []);})]);})(smalltalk.send(html, "_button", [])); return self;} }), -smalltalk.Inspector); +smalltalk.IDETranscript); smalltalk.addMethod( -unescape('_updateButtons'), +unescape('_show_'), smalltalk.method({ -selector: unescape('updateButtons'), -fn: function (){ +selector: unescape('show%3A'), +fn: function (anObject){ var self=this; -((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedVariable", []), "_notNil", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@diveButton'], "_at_put_", ["disabled", true]);})() : (function(){return smalltalk.send(self['@diveButton'], "_removeAt_", ["disabled"]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@diveButton'], "_at_put_", ["disabled", true]);}), (function(){return smalltalk.send(self['@diveButton'], "_removeAt_", ["disabled"]);})])); +(($receiver = self['@textarea']) == nil || $receiver == undefined) ? (function(){return smalltalk.send(self, "_open", []);})() : $receiver; +smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val_", [smalltalk.send(smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val", []), "__comma", [smalltalk.send(anObject, "_asString", [])])]); return self;} }), -smalltalk.Inspector); +smalltalk.IDETranscript); +smalltalk.IDETranscript.klass.iVarNames = ['current']; smalltalk.addMethod( -unescape('_on_'), +unescape('_current'), smalltalk.method({ -selector: unescape('on%3A'), -fn: function (anObject){ +selector: unescape('current'), +fn: function (){ var self=this; -return (function($rec){smalltalk.send($rec, "_inspect_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return (self['@current']=smalltalk.send(self, "_new", [], smalltalk.TabWidget.klass));})() : $receiver; return self;} }), -smalltalk.Inspector.klass); - +smalltalk.IDETranscript.klass); -smalltalk.addClass('ReferencesBrowser', smalltalk.TabWidget, ['implementors', 'senders', 'implementorsList', 'input', 'timer', 'selector', 'sendersList', 'referencedClasses', 'referencedClassesList'], 'IDE'); smalltalk.addMethod( -unescape('_implementors'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('implementors'), +selector: unescape('initialize'), fn: function (){ var self=this; -return (($receiver = self['@implementors']) == nil || $receiver == undefined) ? (function(){return (self['@implementors']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_current", [])]); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript.klass); smalltalk.addMethod( -unescape('_label'), +unescape('_new'), smalltalk.method({ -selector: unescape('label'), +selector: unescape('new'), fn: function (){ var self=this; -return unescape("%5BReferences%5D"); +smalltalk.send(self, "_shouldNotImplement", []); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript.klass); smalltalk.addMethod( -unescape('_selector'), +unescape('_open'), smalltalk.method({ -selector: unescape('selector'), +selector: unescape('open'), fn: function (){ var self=this; -return self['@selector']; +(function($rec){smalltalk.send($rec, "_open", []);return smalltalk.send($rec, "_selectTab_", [smalltalk.send(self, "_current", [])]);})(smalltalk.send((smalltalk.TabManager || TabManager), "_current", [])); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript.klass); + +smalltalk.addClass('Inspector', smalltalk.TabWidget, ['label', 'variables', 'object', 'selectedVariable', 'variablesList', 'valueTextarea', 'diveButton', 'sourceArea'], 'IDE'); smalltalk.addMethod( -unescape('_senders'), +unescape('_canBeClosed'), smalltalk.method({ -selector: unescape('senders'), +selector: unescape('canBeClosed'), fn: function (){ var self=this; -return (($receiver = self['@senders']) == nil || $receiver == undefined) ? (function(){return (self['@senders']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +return true; return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_classesAndMetaclasses'), +unescape('_dive'), smalltalk.method({ -selector: unescape('classesAndMetaclasses'), +selector: unescape('dive'), fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_collect_", [(function(each){return smalltalk.send(each, "_class", []);})])]); +smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_inspect", []); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_referencedClasses'), +unescape('_inspect_'), smalltalk.method({ -selector: unescape('referencedClasses'), -fn: function (){ +selector: unescape('inspect%3A'), +fn: function (anObject){ var self=this; -return (($receiver = self['@referencedClasses']) == nil || $receiver == undefined) ? (function(){return (self['@referencedClasses']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +(self['@object']=anObject); +(self['@variables']=[]); +smalltalk.send(self['@object'], "_inspectOn_", [self]); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_openBrowserOn_'), +unescape('_label'), smalltalk.method({ -selector: unescape('openBrowserOn%3A'), -fn: function (aMethod){ +selector: unescape('label'), +fn: function (){ var self=this; -var browser=nil; -(browser=smalltalk.send((smalltalk.Browser || Browser), "_openOn_", [((($receiver = smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_instanceClass", []);})() : (function(){return smalltalk.send(aMethod, "_methodClass", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_instanceClass", []);}), (function(){return smalltalk.send(aMethod, "_methodClass", []);})]))])); -((($receiver = smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(browser, "_selectTab_", [smalltalk.symbolFor("class")]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(browser, "_selectTab_", [smalltalk.symbolFor("class")]);})])); -(function($rec){smalltalk.send($rec, "_selectProtocol_", [smalltalk.send(aMethod, "_category", [])]);return smalltalk.send($rec, "_selectMethod_", [aMethod]);})(browser); +return (($receiver = self['@label']) == nil || $receiver == undefined) ? (function(){return unescape("Inspector%20%28nil%29");})() : $receiver; return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_searchReferencesFor_'), +unescape('_refresh'), smalltalk.method({ -selector: unescape('searchReferencesFor%3A'), -fn: function (aString){ +selector: unescape('refresh'), +fn: function (){ var self=this; -(self['@selector']=aString); -(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']]);})])); +(function($rec){smalltalk.send($rec, "_inspect_", [self['@object']]);smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateValueTextarea", []);})(self); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_search_'), +unescape('_renderBottomPanelOn_'), smalltalk.method({ -selector: unescape('search%3A'), -fn: function (aString){ +selector: unescape('renderBottomPanelOn%3A'), +fn: function (html){ 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, "_class_", ["jt_sourceCode"]);return smalltalk.send($rec, "_with_", [(function(){(self['@sourceArea']=(function($rec){smalltalk.send($rec, "_receiver_", [self['@object']]);smalltalk.send($rec, "_onDoIt_", [(function(){return smalltalk.send(self, "_refresh", []);})]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", [])));return smalltalk.send(self['@sourceArea'], "_renderOn_", [html]);})]);})(smalltalk.send(html, "_div", [])); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_searchReferencedClassesFor_'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('searchReferencedClassesFor%3A'), -fn: function (aString){ +selector: unescape('renderBoxOn%3A'), +fn: function (html){ 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]);})]));})]);})]); +(function($rec){smalltalk.send($rec, "_renderTopPanelOn_", [html]);return smalltalk.send($rec, "_renderBottomPanelOn_", [html]);})(self); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_searchSelectorReferencesFor_'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('searchSelectorReferencesFor%3A'), -fn: function (aString){ +selector: unescape('renderButtonsOn%3A'), +fn: function (html){ 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]);})]));})]);})]); +(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_sourceArea", []), "_doIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_sourceArea", []), "_printIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_sourceArea", []), "_inspectIt", []);})]);})(smalltalk.send(html, "_button", [])); +smalltalk.send(self, "_updateButtons", []); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_initialize'), +unescape('_renderTopPanelOn_'), smalltalk.method({ -selector: unescape('initialize'), -fn: function (){ +selector: unescape('renderTopPanelOn%3A'), +fn: function (html){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); -(self['@selector']=""); +(function($rec){smalltalk.send($rec, "_class_", ["top"]);return smalltalk.send($rec, "_with_", [(function(){(self['@variablesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column variables"]));(self['@valueTextarea']=(function($rec){smalltalk.send($rec, "_class_", ["jt_column value"]);return smalltalk.send($rec, "_at_put_", ["readonly", "readonly"]);})(smalltalk.send(html, "_textarea", [])));(function($rec){smalltalk.send($rec, "_class_", ["jt_tabs inspector"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_class_", ["jt_button inspector refresh"]);smalltalk.send($rec, "_with_", ["Refresh"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_refresh", []);})]);})(smalltalk.send(html, "_button", []));return (self['@diveButton']=(function($rec){smalltalk.send($rec, "_class_", ["jt_button inspector dive"]);smalltalk.send($rec, "_with_", ["Dive"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_dive", []);})]);})(smalltalk.send(html, "_button", [])));})]);})(smalltalk.send(html, "_div", []));return smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["jt_clear"]);})]);})(smalltalk.send(html, "_div", [])); +(function($rec){smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateValueTextarea", []);})(self); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_setInputEvents'), +unescape('_selectVariable_'), smalltalk.method({ -selector: unescape('setInputEvents'), -fn: function (){ +selector: unescape('selectVariable%3A'), +fn: function (aString){ var self=this; -(function($rec){smalltalk.send($rec, "_onKeyUp_", [(function(){return (self['@timer']=smalltalk.send((function(){return smalltalk.send(self, "_search_", [smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val", [])]);}), "_valueWithTimeout_", [(100)]));})]);return smalltalk.send($rec, "_onKeyDown_", [(function(){return (($receiver = self['@timer']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@timer'], "_clearTimeout", []);})() : nil;})]);})(self['@input']); +smalltalk.send(self, "_selectedVariable_", [aString]); +(function($rec){smalltalk.send($rec, "_updateVariablesList", []);smalltalk.send($rec, "_updateValueTextarea", []);return smalltalk.send($rec, "_updateButtons", []);})(self); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_renderBoxOn_'), +unescape('_selectedVariable'), smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -fn: function (html){ +selector: unescape('selectedVariable'), +fn: function (){ 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); +return self['@selectedVariable']; return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_renderInputOn_'), +unescape('_selectedVariable_'), smalltalk.method({ -selector: unescape('renderInputOn%3A'), -fn: function (html){ +selector: unescape('selectedVariable%3A'), +fn: function (aString){ var self=this; -(self['@input']=(function($rec){smalltalk.send($rec, "_class_", ["implementors"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_input", []))); -smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val_", [self['@selector']]); -smalltalk.send(self, "_setInputEvents", []); +(self['@selectedVariable']=aString); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_renderImplementorsOn_'), +unescape('_setLabel_'), smalltalk.method({ -selector: unescape('renderImplementorsOn%3A'), -fn: function (html){ +selector: unescape('setLabel%3A'), +fn: function (aString){ var self=this; -(self['@implementorsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column implementors"])); -smalltalk.send(self, "_updateImplementorsList", []); +(self['@label']=aString); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_renderSendersOn_'), +unescape('_setVariables_'), smalltalk.method({ -selector: unescape('renderSendersOn%3A'), -fn: function (html){ +selector: unescape('setVariables%3A'), +fn: function (aCollection){ var self=this; -(self['@sendersList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column senders"])); -smalltalk.send(self, "_updateSendersList", []); +(self['@variables']=aCollection); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_renderReferencedClassesOn_'), +unescape('_sourceArea'), smalltalk.method({ -selector: unescape('renderReferencedClassesOn%3A'), -fn: function (html){ +selector: unescape('sourceArea'), +fn: function (){ var self=this; -(self['@referencedClassesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column referenced_classes"])); -smalltalk.send(self, "_updateReferencedClassesList", []); +return self['@sourceArea']; return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_canBeClosed'), +unescape('_updateButtons'), smalltalk.method({ -selector: unescape('canBeClosed'), +selector: unescape('updateButtons'), fn: function (){ var self=this; -return true; +((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedVariable", []), "_notNil", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@diveButton'], "_at_put_", ["disabled", true]);})() : (function(){return smalltalk.send(self['@diveButton'], "_removeAt_", ["disabled"]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@diveButton'], "_at_put_", ["disabled", true]);}), (function(){return smalltalk.send(self['@diveButton'], "_removeAt_", ["disabled"]);})])); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_updateImplementorsList'), +unescape('_updateValueTextarea'), smalltalk.method({ -selector: unescape('updateImplementorsList'), +selector: unescape('updateValueTextarea'), fn: function (){ var self=this; -smalltalk.send(self['@implementorsList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Implementors%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_implementors", []), "_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, "_implementors", []), "_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(self, "_selector", [])])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_openBrowserOn_", [each]);})]);})(li);})]);})]); +smalltalk.send(smalltalk.send(self['@valueTextarea'], "_asJQuery", []), "_val_", [((($receiver = smalltalk.send(smalltalk.send(self, "_selectedVariable", []), "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "";})() : (function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_printString", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "";}), (function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_printString", []);})]))]); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_updateSendersList'), +unescape('_updateVariablesList'), smalltalk.method({ -selector: unescape('updateSendersList'), +selector: unescape('updateVariablesList'), fn: function (){ var self=this; -smalltalk.send(self['@sendersList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Senders%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_senders", []), "_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, "_senders", []), "_do_", [(function(each){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]);})]);})(smalltalk.send(html, "_li", []));})]);})]); +smalltalk.send(self['@variablesList'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_keys", []), "_do_", [(function(each){var li=nil; +(li=smalltalk.send(html, "_li", []));(function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_", [each]);})]);})(li);return ((($receiver = smalltalk.send(smalltalk.send(self, "_selectedVariable", []), "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));})]);})]); return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_updateReferencedClassesList'), +unescape('_variables'), smalltalk.method({ -selector: unescape('updateReferencedClassesList'), +selector: unescape('variables'), fn: function (){ var self=this; -smalltalk.send(self['@referencedClassesList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Class%20references%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_referencedClasses", []), "_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, "_referencedClasses", []), "_do_", [(function(each){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]);})]);})(smalltalk.send(html, "_li", []));})]);})]); +return self['@variables']; return self;} }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_search_'), +unescape('_on_'), smalltalk.method({ -selector: unescape('search%3A'), -fn: function (aString){ +selector: unescape('on%3A'), +fn: function (anObject){ var self=this; -return (function($rec){smalltalk.send($rec, "_searchReferencesFor_", [aString]);return smalltalk.send($rec, "_open", []);})(smalltalk.send(self, "_new", [])); +return (function($rec){smalltalk.send($rec, "_inspect_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;} }), -smalltalk.ReferencesBrowser.klass); +smalltalk.Inspector.klass); -smalltalk.addClass('Debugger', smalltalk.TabWidget, ['error', 'selectedContext', 'sourceArea', 'ul', 'ul2', 'inspector', 'saveButton', 'unsavedChanges', 'selectedVariable', 'selectedVariableName', 'inspectButton'], 'IDE'); +smalltalk.addClass('ProgressBar', smalltalk.TabWidget, ['percent', 'progressDiv', 'div'], 'IDE'); smalltalk.addMethod( -unescape('_error'), +unescape('_percent'), smalltalk.method({ -selector: unescape('error'), +selector: unescape('percent'), fn: function (){ var self=this; -return self['@error']; +return (($receiver = self['@percent']) == nil || $receiver == undefined) ? (function(){return (0);})() : $receiver; return self;} }), -smalltalk.Debugger); +smalltalk.ProgressBar); smalltalk.addMethod( -unescape('_error_'), +unescape('_percent_'), smalltalk.method({ -selector: unescape('error%3A'), -fn: function (anError){ +selector: unescape('percent%3A'), +fn: function (aNumber){ var self=this; -(self['@error']=anError); +(self['@percent']=aNumber); return self;} }), -smalltalk.Debugger); +smalltalk.ProgressBar); smalltalk.addMethod( -unescape('_label'), +unescape('_renderOn_'), smalltalk.method({ -selector: unescape('label'), -fn: function (){ +selector: unescape('renderOn%3A'), +fn: function (html){ var self=this; -return unescape("%5BDebugger%5D"); +(self['@div']=(function($rec){smalltalk.send($rec, "_class_", ["progress_bar"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_div", []))); +smalltalk.send(self, "_renderProgressBar", []); return self;} }), -smalltalk.Debugger); +smalltalk.ProgressBar); smalltalk.addMethod( -unescape('_source'), +unescape('_renderProgressBar'), smalltalk.method({ -selector: unescape('source'), +selector: unescape('renderProgressBar'), fn: function (){ var self=this; -return (($receiver = smalltalk.send(self, "_method", [])) == nil || $receiver == undefined) ? (function(){return unescape("Method%20doesn%27t%20exist%21");})() : (function(){return smalltalk.send(smalltalk.send(self, "_method", []), "_source", []);})(); +smalltalk.send(self['@div'], "_contents_", [(function(html){return (function($rec){smalltalk.send($rec, "_class_", ["progress"]);return smalltalk.send($rec, "_style_", [smalltalk.send(smalltalk.send("width:", "__comma", [smalltalk.send(smalltalk.send(self, "_percent", []), "_asString", [])]), "__comma", [unescape("%25")])]);})(smalltalk.send(html, "_div", []));})]); return self;} }), -smalltalk.Debugger); +smalltalk.ProgressBar); smalltalk.addMethod( -unescape('_method'), +unescape('_updatePercent_'), smalltalk.method({ -selector: unescape('method'), -fn: function (){ +selector: unescape('updatePercent%3A'), +fn: function (aNumber){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_class", []), "_methodAt_", [smalltalk.send(self['@selectedContext'], "_selector", [])]); +smalltalk.send(self, "_percent_", [aNumber]); +smalltalk.send(self, "_renderProgressBar", []); return self;} }), -smalltalk.Debugger); +smalltalk.ProgressBar); -smalltalk.addMethod( -unescape('_arguments'), -smalltalk.method({ -selector: unescape('arguments'), -fn: function (){ -var self=this; -return (($receiver = smalltalk.send(self, "_method", [])) == nil || $receiver == undefined) ? (function(){return smalltalk.send(smalltalk.send(self['@selectedContext'], "_temps", []), "_collect_", [(function(each){return nil;})]);})() : (function(){return smalltalk.send(smalltalk.send(self, "_method", []), "_arguments", []);})(); -return self;} -}), -smalltalk.Debugger); + +smalltalk.addClass('ReferencesBrowser', smalltalk.TabWidget, ['implementors', 'senders', 'implementorsList', 'input', 'timer', 'selector', 'sendersList', 'referencedClasses', 'referencedClassesList'], 'IDE'); smalltalk.addMethod( -unescape('_receiver'), +unescape('_canBeClosed'), smalltalk.method({ -selector: unescape('receiver'), +selector: unescape('canBeClosed'), fn: function (){ var self=this; -return smalltalk.send(self['@selectedContext'], "_receiver", []); +return true; return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_selectContext_'), +unescape('_classesAndMetaclasses'), smalltalk.method({ -selector: unescape('selectContext%3A'), -fn: function (aContext){ +selector: unescape('classesAndMetaclasses'), +fn: function (){ var self=this; -(self['@selectedContext']=aContext); -(self['@selectedVariable']=nil); -(self['@selectedVariableName']=nil); -(function($rec){smalltalk.send($rec, "_updateContextsList", []);smalltalk.send($rec, "_updateSourceArea", []);smalltalk.send($rec, "_updateInspector", []);smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateStatus", []);})(self); +return smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_collect_", [(function(each){return smalltalk.send(each, "_class", []);})])]); return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_proceed'), +unescape('_implementors'), smalltalk.method({ -selector: unescape('proceed'), +selector: unescape('implementors'), fn: function (){ var self=this; -smalltalk.send(self, "_close", []); -smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_perform_withArguments_", [smalltalk.send(self['@selectedContext'], "_selector", []), smalltalk.send(self['@selectedContext'], "_temps", [])]); +return (($receiver = self['@implementors']) == nil || $receiver == undefined) ? (function(){return (self['@implementors']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_save'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('save'), +selector: unescape('initialize'), fn: function (){ var self=this; -var protocol=nil; -(protocol=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(self['@selectedContext'], "_selector", [])]), "_category", [])); -smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_class", []), "_compile_category_", [smalltalk.send(self['@sourceArea'], "_val", []), protocol]); -smalltalk.send(self, "_updateStatus", []); +smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); +(self['@selector']=""); return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_selectVariable_named_'), +unescape('_label'), smalltalk.method({ -selector: unescape('selectVariable%3Anamed%3A'), -fn: function (anObject, aString){ +selector: unescape('label'), +fn: function (){ var self=this; -(self['@selectedVariable']=anObject); -(self['@selectedVariableName']=aString); -smalltalk.send(self['@inspector'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(anObject, "_printString", [])]);})]); -smalltalk.send(self, "_updateVariablesList", []); +return unescape("%5BReferences%5D"); return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_inspectSelectedVariable'), +unescape('_openBrowserOn_'), smalltalk.method({ -selector: unescape('inspectSelectedVariable'), -fn: function (){ +selector: unescape('openBrowserOn%3A'), +fn: function (aMethod){ var self=this; -smalltalk.send(self['@selectedVariable'], "_inspect", []); +var browser=nil; +(browser=smalltalk.send((smalltalk.Browser || Browser), "_openOn_", [((($receiver = smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_instanceClass", []);})() : (function(){return smalltalk.send(aMethod, "_methodClass", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_instanceClass", []);}), (function(){return smalltalk.send(aMethod, "_methodClass", []);})]))])); +((($receiver = smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(browser, "_selectTab_", [smalltalk.symbolFor("class")]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(browser, "_selectTab_", [smalltalk.symbolFor("class")]);})])); +(function($rec){smalltalk.send($rec, "_selectProtocol_", [smalltalk.send(aMethod, "_category", [])]);return smalltalk.send($rec, "_selectMethod_", [aMethod]);})(browser); return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_initialize'), +unescape('_referencedClasses'), smalltalk.method({ -selector: unescape('initialize'), +selector: unescape('referencedClasses'), fn: function (){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); -smalltalk.send(self['@unsavedChanges'], "__eq", [false]); +return (($receiver = self['@referencedClasses']) == nil || $receiver == undefined) ? (function(){return (self['@referencedClasses']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_renderTopPanelOn_'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('renderTopPanelOn%3A'), +selector: unescape('renderBoxOn%3A'), fn: function (html){ var self=this; -(self['@selectedContext']=smalltalk.send(smalltalk.send(self, "_error", []), "_context", [])); -(function($rec){smalltalk.send($rec, "_class_", ["top"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_class_", ["label"]);return smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(self, "_error", []), "_messageText", [])]);})(smalltalk.send(html, "_div", []));return (self['@ul']=(function($rec){smalltalk.send($rec, "_class_", ["jt_column debugger contexts"]);return smalltalk.send($rec, "_with_", [(function(){return smalltalk.send(self, "_renderContext_on_", [smalltalk.send(smalltalk.send(self, "_error", []), "_context", []), html]);})]);})(smalltalk.send(html, "_ul", [])));})]);})(smalltalk.send(html, "_div", [])); +(function($rec){smalltalk.send($rec, "_renderInputOn_", [html]);smalltalk.send($rec, "_renderImplementorsOn_", [html]);smalltalk.send($rec, "_renderSendersOn_", [html]);return smalltalk.send($rec, "_renderReferencedClassesOn_", [html]);})(self); return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_renderContext_on_'), +unescape('_renderImplementorsOn_'), smalltalk.method({ -selector: unescape('renderContext%3Aon%3A'), -fn: function (aContext, html){ +selector: unescape('renderImplementorsOn%3A'), +fn: function (html){ var self=this; -var li=nil; -(li=smalltalk.send(html, "_li", [])); -((($receiver = smalltalk.send(self['@selectedContext'], "__eq", [aContext])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})])); -(function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(aContext, "_asString", [])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectContext_", [aContext]);})]);})(li); -(($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_renderContext_on_", [smalltalk.send(aContext, "_home", []), html]);})() : nil; +(self['@implementorsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column implementors"])); +smalltalk.send(self, "_updateImplementorsList", []); return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_renderBottomPanelOn_'), +unescape('_renderInputOn_'), smalltalk.method({ -selector: unescape('renderBottomPanelOn%3A'), +selector: unescape('renderInputOn%3A'), fn: function (html){ var self=this; -(function($rec){smalltalk.send($rec, "_class_", ["jt_sourceCode debugger"]);return smalltalk.send($rec, "_with_", [(function(){(self['@sourceArea']=smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", []));return smalltalk.send(self['@sourceArea'], "_renderOn_", [html]);})]);})(smalltalk.send(html, "_div", [])); -(self['@ul2']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column debugger variables"])); -(self['@inspector']=smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["jt_column debugger inspector"])); -smalltalk.send(self['@sourceArea'], "_onKeyUp_", [(function(){return smalltalk.send(self, "_updateStatus", []);})]); +(self['@input']=(function($rec){smalltalk.send($rec, "_class_", ["implementors"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_input", []))); +smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val_", [self['@selector']]); +smalltalk.send(self, "_setInputEvents", []); return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_renderButtonsOn_'), +unescape('_renderReferencedClassesOn_'), smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), +selector: unescape('renderReferencedClassesOn%3A'), fn: function (html){ var self=this; -(self['@saveButton']=(function($rec){smalltalk.send($rec, "_with_", ["Save"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_save", []);})]);})(smalltalk.send(html, "_button", []))); -(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_doIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_printIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_inspectIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["Proceed"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_proceed", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["Abandon"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_close", []);})]);})(smalltalk.send(html, "_button", [])); -(self['@inspectButton']=(function($rec){smalltalk.send($rec, "_class_", ["jt_button debugger inspect"]);smalltalk.send($rec, "_with_", ["Inspect"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_inspectSelectedVariable", []);})]);})(smalltalk.send(html, "_button", []))); -(function($rec){smalltalk.send($rec, "_updateSourceArea", []);smalltalk.send($rec, "_updateStatus", []);smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateInspector", []);})(self); +(self['@referencedClassesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column referenced_classes"])); +smalltalk.send(self, "_updateReferencedClassesList", []); return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_renderBoxOn_'), +unescape('_renderSendersOn_'), smalltalk.method({ -selector: unescape('renderBoxOn%3A'), +selector: unescape('renderSendersOn%3A'), fn: function (html){ var self=this; -(function($rec){smalltalk.send($rec, "_renderTopPanelOn_", [html]);return smalltalk.send($rec, "_renderBottomPanelOn_", [html]);})(self); +(self['@sendersList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column senders"])); +smalltalk.send(self, "_updateSendersList", []); return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_canBeClosed'), +unescape('_search_'), smalltalk.method({ -selector: unescape('canBeClosed'), -fn: function (){ +selector: unescape('search%3A'), +fn: function (aString){ var self=this; -return true; +(function($rec){smalltalk.send($rec, "_searchReferencesFor_", [aString]);smalltalk.send($rec, "_updateImplementorsList", []);smalltalk.send($rec, "_updateSendersList", []);return smalltalk.send($rec, "_updateReferencedClassesList", []);})(self); return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_updateContextsList'), +unescape('_searchReferencedClassesFor_'), smalltalk.method({ -selector: unescape('updateContextsList'), -fn: function (){ +selector: unescape('searchReferencedClassesFor%3A'), +fn: function (aString){ var self=this; -smalltalk.send(self['@ul'], "_contents_", [(function(html){return smalltalk.send(self, "_renderContext_on_", [smalltalk.send(smalltalk.send(self, "_error", []), "_context", []), html]);})]); +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;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_updateSourceArea'), +unescape('_searchReferencesFor_'), smalltalk.method({ -selector: unescape('updateSourceArea'), -fn: function (){ +selector: unescape('searchReferencesFor%3A'), +fn: function (aString){ var self=this; -smalltalk.send(self['@sourceArea'], "_val_", [smalltalk.send(self, "_source", [])]); +(self['@selector']=aString); +(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']]);})])); return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_updateStatus'), +unescape('_searchSelectorReferencesFor_'), smalltalk.method({ -selector: unescape('updateStatus'), -fn: function (){ +selector: unescape('searchSelectorReferencesFor%3A'), +fn: function (aString){ var self=this; -((($receiver = smalltalk.send(smalltalk.send(self['@sourceArea'], "_val", []), "__eq", [smalltalk.send(self, "_source", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil;return (self['@unsavedChanges']=false);})() : (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_removeAt_", ["disabled"]);})() : nil;return (self['@unsavedChanges']=true);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil;return (self['@unsavedChanges']=false);}), (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_removeAt_", ["disabled"]);})() : nil;return (self['@unsavedChanges']=true);})])); +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;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_updateInspector'), +unescape('_selector'), smalltalk.method({ -selector: unescape('updateInspector'), +selector: unescape('selector'), fn: function (){ var self=this; -smalltalk.send(self['@inspector'], "_contents_", [(function(html){return nil;})]); +return self['@selector']; return self;} }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_updateVariablesList'), +unescape('_senders'), smalltalk.method({ -selector: unescape('updateVariablesList'), +selector: unescape('senders'), fn: function (){ var self=this; -smalltalk.send(self['@ul2'], "_contents_", [(function(html){var li=nil; -(li=(function($rec){smalltalk.send($rec, "_with_", ["self"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_named_", [smalltalk.send(self, "_receiver", []), "self"]);})]);})(smalltalk.send(html, "_li", [])));((($receiver = smalltalk.send(self['@selectedVariableName'], "__eq", ["self"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));smalltalk.send(smalltalk.send(self, "_arguments", []), "_withIndexDo_", [(function(each, index){var param=nil; -(param=smalltalk.send(smalltalk.send(self['@selectedContext'], "_temps", []), "_at_", [index]));(li=(function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_named_", [param, each]);})]);})(smalltalk.send(html, "_li", [])));return ((($receiver = smalltalk.send(self['@selectedVariableName'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));})]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_allInstanceVariableNames", []), "_do_", [(function(each){var ivar=nil; -(ivar=smalltalk.send(smalltalk.send(self, "_receiver", []), "_instVarAt_", [each]));(li=(function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_named_", [ivar, each]);})]);})(smalltalk.send(html, "_li", [])));return ((($receiver = smalltalk.send(self['@selectedVariableName'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));})]);})]); -(($receiver = self['@selectedVariable']) == nil || $receiver == undefined) ? (function(){return smalltalk.send(self['@inspectButton'], "_at_put_", ["disabled", true]);})() : (function(){return smalltalk.send(self['@inspectButton'], "_removeAt_", ["disabled"]);})(); +return (($receiver = self['@senders']) == nil || $receiver == undefined) ? (function(){return (self['@senders']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;} }), -smalltalk.Debugger); - - +smalltalk.ReferencesBrowser); -smalltalk.addClass('ProgressBar', smalltalk.TabWidget, ['percent', 'progressDiv', 'div'], 'IDE'); smalltalk.addMethod( -unescape('_percent'), +unescape('_setInputEvents'), smalltalk.method({ -selector: unescape('percent'), +selector: unescape('setInputEvents'), fn: function (){ var self=this; -return (($receiver = self['@percent']) == nil || $receiver == undefined) ? (function(){return (0);})() : $receiver; +(function($rec){smalltalk.send($rec, "_onKeyUp_", [(function(){return (self['@timer']=smalltalk.send((function(){return smalltalk.send(self, "_search_", [smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val", [])]);}), "_valueWithTimeout_", [(100)]));})]);return smalltalk.send($rec, "_onKeyDown_", [(function(){return (($receiver = self['@timer']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@timer'], "_clearTimeout", []);})() : nil;})]);})(self['@input']); return self;} }), -smalltalk.ProgressBar); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_percent_'), +unescape('_updateImplementorsList'), smalltalk.method({ -selector: unescape('percent%3A'), -fn: function (aNumber){ +selector: unescape('updateImplementorsList'), +fn: function (){ var self=this; -(self['@percent']=aNumber); +smalltalk.send(self['@implementorsList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Implementors%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_implementors", []), "_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, "_implementors", []), "_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(self, "_selector", [])])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_openBrowserOn_", [each]);})]);})(li);})]);})]); return self;} }), -smalltalk.ProgressBar); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_renderOn_'), +unescape('_updateReferencedClassesList'), smalltalk.method({ -selector: unescape('renderOn%3A'), -fn: function (html){ +selector: unescape('updateReferencedClassesList'), +fn: function (){ var self=this; -(self['@div']=(function($rec){smalltalk.send($rec, "_class_", ["progress_bar"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_div", []))); -smalltalk.send(self, "_renderProgressBar", []); +smalltalk.send(self['@referencedClassesList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Class%20references%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_referencedClasses", []), "_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, "_referencedClasses", []), "_do_", [(function(each){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]);})]);})(smalltalk.send(html, "_li", []));})]);})]); return self;} }), -smalltalk.ProgressBar); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_renderProgressBar'), +unescape('_updateSendersList'), smalltalk.method({ -selector: unescape('renderProgressBar'), +selector: unescape('updateSendersList'), fn: function (){ var self=this; -smalltalk.send(self['@div'], "_contents_", [(function(html){return (function($rec){smalltalk.send($rec, "_class_", ["progress"]);return smalltalk.send($rec, "_style_", [smalltalk.send(smalltalk.send("width:", "__comma", [smalltalk.send(smalltalk.send(self, "_percent", []), "_asString", [])]), "__comma", [unescape("%25")])]);})(smalltalk.send(html, "_div", []));})]); +smalltalk.send(self['@sendersList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Senders%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_senders", []), "_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, "_senders", []), "_do_", [(function(each){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]);})]);})(smalltalk.send(html, "_li", []));})]);})]); return self;} }), -smalltalk.ProgressBar); +smalltalk.ReferencesBrowser); + smalltalk.addMethod( -unescape('_updatePercent_'), +unescape('_search_'), smalltalk.method({ -selector: unescape('updatePercent%3A'), -fn: function (aNumber){ +selector: unescape('search%3A'), +fn: function (aString){ var self=this; -smalltalk.send(self, "_percent_", [aNumber]); -smalltalk.send(self, "_renderProgressBar", []); +return (function($rec){smalltalk.send($rec, "_searchReferencesFor_", [aString]);return smalltalk.send($rec, "_open", []);})(smalltalk.send(self, "_new", [])); return self;} }), -smalltalk.ProgressBar); - +smalltalk.ReferencesBrowser.klass); smalltalk.addClass('TestRunner', smalltalk.TabWidget, ['selectedCategories', 'packagesList', 'selectedClasses', 'classesList', 'selectedMethods', 'progressBar', 'methodsList', 'result', 'statusDiv'], 'IDE'); smalltalk.addMethod( -unescape('_label'), +unescape('_allClasses'), smalltalk.method({ -selector: unescape('label'), +selector: unescape('allClasses'), fn: function (){ var self=this; -return "SUnit"; +return smalltalk.send((smalltalk.TestCase || TestCase), "_allSubclasses", []); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_packages'), +unescape('_classes'), smalltalk.method({ -selector: unescape('packages'), +selector: unescape('classes'), fn: function (){ var self=this; -var packages=nil; -(packages=smalltalk.send((smalltalk.Array || Array), "_new", [])); -smalltalk.send(smalltalk.send(self, "_allClasses", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(packages, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]); -return smalltalk.send(packages, "_sort", []); +return smalltalk.send(smalltalk.send(smalltalk.send(self, "_allClasses", []), "_select_", [(function(each){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [smalltalk.send(each, "_category", [])]);})]), "_sort_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_name", [])).klass === smalltalk.Number) ? $receiver >smalltalk.send(b, "_name", []) : smalltalk.send($receiver, "__gt", [smalltalk.send(b, "_name", [])]));})]); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_classes'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('classes'), +selector: unescape('initialize'), fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(self, "_allClasses", []), "_select_", [(function(each){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [smalltalk.send(each, "_category", [])]);})]), "_sort_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_name", [])).klass === smalltalk.Number) ? $receiver >smalltalk.send(b, "_name", []) : smalltalk.send($receiver, "__gt", [smalltalk.send(b, "_name", [])]));})]); +smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); +(self['@result']=smalltalk.send((smalltalk.TestResult || TestResult), "_new", [])); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_selectedCategories'), +unescape('_isSelectedCategory_'), smalltalk.method({ -selector: unescape('selectedCategories'), -fn: function (){ +selector: unescape('isSelectedCategory%3A'), +fn: function (aCategory){ var self=this; -return (($receiver = self['@selectedCategories']) == nil || $receiver == undefined) ? (function(){return (self['@selectedCategories']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [aCategory]); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_allClasses'), +unescape('_isSelectedClass_'), smalltalk.method({ -selector: unescape('allClasses'), -fn: function (){ +selector: unescape('isSelectedClass%3A'), +fn: function (aClass){ var self=this; -return smalltalk.send((smalltalk.TestCase || TestCase), "_allSubclasses", []); +return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_includes_", [aClass]); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_selectedClasses'), +unescape('_label'), smalltalk.method({ -selector: unescape('selectedClasses'), +selector: unescape('label'), fn: function (){ var self=this; -return (($receiver = self['@selectedClasses']) == nil || $receiver == undefined) ? (function(){return (self['@selectedClasses']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +return "SUnit"; return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_progressBar'), +unescape('_packages'), smalltalk.method({ -selector: unescape('progressBar'), +selector: unescape('packages'), fn: function (){ var self=this; -return (($receiver = self['@progressBar']) == nil || $receiver == undefined) ? (function(){return (self['@progressBar']=smalltalk.send((smalltalk.ProgressBar || ProgressBar), "_new", []));})() : $receiver; +var packages=nil; +(packages=smalltalk.send((smalltalk.Array || Array), "_new", [])); +smalltalk.send(smalltalk.send(self, "_allClasses", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(packages, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]); +return smalltalk.send(packages, "_sort", []); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_statusInfo'), +unescape('_performFailure_'), smalltalk.method({ -selector: unescape('statusInfo'), -fn: function (){ +selector: unescape('performFailure%3A'), +fn: function (aTestCase){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printTotal", []), "__comma", [smalltalk.send(self, "_printPasses", [])]), "__comma", [smalltalk.send(self, "_printErrors", [])]), "__comma", [smalltalk.send(self, "_printFailures", [])]); +smalltalk.send(aTestCase, "_perform_", [smalltalk.send(aTestCase, "_selector", [])]); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_result'), +unescape('_printErrors'), smalltalk.method({ -selector: unescape('result'), +selector: unescape('printErrors'), fn: function (){ var self=this; -return self['@result']; +return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_errors", []), "_size", []), "_asString", []), "__comma", [unescape("%20errors%2C%20")]); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_testCases'), +unescape('_printFailures'), smalltalk.method({ -selector: unescape('testCases'), +selector: unescape('printFailures'), fn: function (){ var self=this; -var testCases=nil; -(testCases=[]); -smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_do_", [(function(each){return smalltalk.send(testCases, "_addAll_", [smalltalk.send(each, "_buildSuite", [])]);})]); -return testCases; +return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_size", []), "_asString", []), "__comma", [" failures"]); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_selectAllCategories'), +unescape('_printPasses'), smalltalk.method({ -selector: unescape('selectAllCategories'), +selector: unescape('printPasses'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_packages", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(self['@selectedCategories'], "_includes_", [each])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_add_", [each]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_add_", [each]);})]));})]); -(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); +return smalltalk.send(smalltalk.send(((($receiver = ((($receiver = smalltalk.send(smalltalk.send(self, "_result", []), "_total", [])).klass === smalltalk.Number) ? $receiver -smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_errors", []), "_size", []) : smalltalk.send($receiver, "__minus", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_errors", []), "_size", [])]))).klass === smalltalk.Number) ? $receiver -smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_size", []) : smalltalk.send($receiver, "__minus", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_size", [])])), "_asString", []), "__comma", [unescape("%20passes%2C%20")]); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_toggleCategory_'), +unescape('_printTotal'), smalltalk.method({ -selector: unescape('toggleCategory%3A'), -fn: function (aCategory){ +selector: unescape('printTotal'), +fn: function (){ var self=this; -((($receiver = smalltalk.send(self, "_isSelectedCategory_", [aCategory])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@selectedCategories'], "_add_", [aCategory]);})() : (function(){return smalltalk.send(self['@selectedCategories'], "_remove_", [aCategory]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedCategories'], "_add_", [aCategory]);}), (function(){return smalltalk.send(self['@selectedCategories'], "_remove_", [aCategory]);})])); -(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); +return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_total", []), "_asString", []), "__comma", [unescape("%20runs%2C%20")]); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_toggleClass_'), +unescape('_progressBar'), smalltalk.method({ -selector: unescape('toggleClass%3A'), -fn: function (aClass){ +selector: unescape('progressBar'), +fn: function (){ var self=this; -((($receiver = smalltalk.send(self, "_isSelectedClass_", [aClass])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@selectedClasses'], "_add_", [aClass]);})() : (function(){return smalltalk.send(self['@selectedClasses'], "_remove_", [aClass]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedClasses'], "_add_", [aClass]);}), (function(){return smalltalk.send(self['@selectedClasses'], "_remove_", [aClass]);})])); -smalltalk.send(self, "_updateClassesList", []); +return (($receiver = self['@progressBar']) == nil || $receiver == undefined) ? (function(){return (self['@progressBar']=smalltalk.send((smalltalk.ProgressBar || ProgressBar), "_new", []));})() : $receiver; return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_selectAllClasses'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('selectAllClasses'), -fn: function (){ +selector: unescape('renderBoxOn%3A'), +fn: function (html){ var self=this; -smalltalk.send(smalltalk.send(self, "_classes", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(self['@selectedClasses'], "_includes_", [each])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_add_", [each]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_add_", [each]);})]));})]); -(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); +(function($rec){smalltalk.send($rec, "_renderCategoriesOn_", [html]);smalltalk.send($rec, "_renderClassesOn_", [html]);return smalltalk.send($rec, "_renderResultsOn_", [html]);})(self); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_run_'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('run%3A'), -fn: function (aCollection){ +selector: unescape('renderButtonsOn%3A'), +fn: function (html){ var self=this; -(self['@result']=smalltalk.send((smalltalk.TestResult || TestResult), "_new", [])); -(function($rec){smalltalk.send($rec, "_updateStatusDiv", []);return smalltalk.send($rec, "_updateMethodsList", []);})(self); -smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [(0)]); -smalltalk.send(self['@result'], "_total_", [smalltalk.send(aCollection, "_size", [])]); -smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send((function(){smalltalk.send(each, "_runCaseFor_", [self['@result']]);smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [((($receiver = ((($receiver = smalltalk.send(self['@result'], "_runs", [])).klass === smalltalk.Number) ? $receiver /smalltalk.send(self['@result'], "_total", []) : smalltalk.send($receiver, "__slash", [smalltalk.send(self['@result'], "_total", [])]))).klass === smalltalk.Number) ? $receiver *(100) : smalltalk.send($receiver, "__star", [(100)]))]);smalltalk.send(self, "_updateStatusDiv", []);return smalltalk.send(self, "_updateMethodsList", []);}), "_valueWithTimeout_", [(100)]);})]); +(function($rec){smalltalk.send($rec, "_with_", ["Run selected"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_run_", [smalltalk.send(self, "_testCases", [])]);})]);})(smalltalk.send(html, "_button", [])); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_performFailure_'), +unescape('_renderCategoriesOn_'), smalltalk.method({ -selector: unescape('performFailure%3A'), -fn: function (aTestCase){ +selector: unescape('renderCategoriesOn%3A'), +fn: function (html){ var self=this; -smalltalk.send(aTestCase, "_perform_", [smalltalk.send(aTestCase, "_selector", [])]); +(self['@packagesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit packages"])); +smalltalk.send(self, "_updateCategoriesList", []); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_initialize'), +unescape('_renderClassesOn_'), smalltalk.method({ -selector: unescape('initialize'), -fn: function (){ +selector: unescape('renderClassesOn%3A'), +fn: function (html){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); -(self['@result']=smalltalk.send((smalltalk.TestResult || TestResult), "_new", [])); +(self['@classesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit classes"])); +smalltalk.send(self, "_updateClassesList", []); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_printErrors'), +unescape('_renderErrorsOn_'), smalltalk.method({ -selector: unescape('printErrors'), -fn: function (){ +selector: unescape('renderErrorsOn%3A'), +fn: function (html){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_errors", []), "_size", []), "_asString", []), "__comma", [unescape("%20errors%2C%20")]); +smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_errors", []), "_do_", [(function(each){return (function($rec){smalltalk.send($rec, "_class_", ["errors"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(each, "_class", []), "_name", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(each, "_selector", [])])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_performFailure_", [each]);})]);})(smalltalk.send(html, "_li", []));})]); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_printFailures'), +unescape('_renderFailuresOn_'), smalltalk.method({ -selector: unescape('printFailures'), -fn: function (){ +selector: unescape('renderFailuresOn%3A'), +fn: function (html){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_size", []), "_asString", []), "__comma", [" failures"]); +smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_do_", [(function(each){return (function($rec){smalltalk.send($rec, "_class_", ["failures"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(each, "_class", []), "_name", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(each, "_selector", [])])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_performFailure_", [each]);})]);})(smalltalk.send(html, "_li", []));})]); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_printPasses'), +unescape('_renderResultsOn_'), smalltalk.method({ -selector: unescape('printPasses'), -fn: function (){ +selector: unescape('renderResultsOn%3A'), +fn: function (html){ var self=this; -return smalltalk.send(smalltalk.send(((($receiver = ((($receiver = smalltalk.send(smalltalk.send(self, "_result", []), "_total", [])).klass === smalltalk.Number) ? $receiver -smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_errors", []), "_size", []) : smalltalk.send($receiver, "__minus", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_errors", []), "_size", [])]))).klass === smalltalk.Number) ? $receiver -smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_size", []) : smalltalk.send($receiver, "__minus", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_size", [])])), "_asString", []), "__comma", [unescape("%20passes%2C%20")]); +(self['@statusDiv']=smalltalk.send(html, "_div", [])); +smalltalk.send(html, "_with_", [smalltalk.send(self, "_progressBar", [])]); +(self['@methodsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit results"])); +smalltalk.send(self, "_updateMethodsList", []); +smalltalk.send(self, "_updateStatusDiv", []); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_printTotal'), +unescape('_result'), smalltalk.method({ -selector: unescape('printTotal'), +selector: unescape('result'), fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_total", []), "_asString", []), "__comma", [unescape("%20runs%2C%20")]); +return self['@result']; return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_renderBoxOn_'), +unescape('_run_'), smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -fn: function (html){ +selector: unescape('run%3A'), +fn: function (aCollection){ var self=this; -(function($rec){smalltalk.send($rec, "_renderCategoriesOn_", [html]);smalltalk.send($rec, "_renderClassesOn_", [html]);return smalltalk.send($rec, "_renderResultsOn_", [html]);})(self); +(self['@result']=smalltalk.send((smalltalk.TestResult || TestResult), "_new", [])); +(function($rec){smalltalk.send($rec, "_updateStatusDiv", []);return smalltalk.send($rec, "_updateMethodsList", []);})(self); +smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [(0)]); +smalltalk.send(self['@result'], "_total_", [smalltalk.send(aCollection, "_size", [])]); +smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send((function(){smalltalk.send(each, "_runCaseFor_", [self['@result']]);smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [((($receiver = ((($receiver = smalltalk.send(self['@result'], "_runs", [])).klass === smalltalk.Number) ? $receiver /smalltalk.send(self['@result'], "_total", []) : smalltalk.send($receiver, "__slash", [smalltalk.send(self['@result'], "_total", [])]))).klass === smalltalk.Number) ? $receiver *(100) : smalltalk.send($receiver, "__star", [(100)]))]);smalltalk.send(self, "_updateStatusDiv", []);return smalltalk.send(self, "_updateMethodsList", []);}), "_valueWithTimeout_", [(100)]);})]); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_renderButtonsOn_'), +unescape('_selectAllCategories'), smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), -fn: function (html){ +selector: unescape('selectAllCategories'), +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_with_", ["Run selected"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_run_", [smalltalk.send(self, "_testCases", [])]);})]);})(smalltalk.send(html, "_button", [])); +smalltalk.send(smalltalk.send(self, "_packages", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(self['@selectedCategories'], "_includes_", [each])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_add_", [each]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_add_", [each]);})]));})]); +(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_renderCategoriesOn_'), +unescape('_selectAllClasses'), smalltalk.method({ -selector: unescape('renderCategoriesOn%3A'), -fn: function (html){ +selector: unescape('selectAllClasses'), +fn: function (){ var self=this; -(self['@packagesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit packages"])); -smalltalk.send(self, "_updateCategoriesList", []); +smalltalk.send(smalltalk.send(self, "_classes", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(self['@selectedClasses'], "_includes_", [each])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_add_", [each]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_add_", [each]);})]));})]); +(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_renderClassesOn_'), +unescape('_selectedCategories'), smalltalk.method({ -selector: unescape('renderClassesOn%3A'), -fn: function (html){ +selector: unescape('selectedCategories'), +fn: function (){ var self=this; -(self['@classesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit classes"])); -smalltalk.send(self, "_updateClassesList", []); +return (($receiver = self['@selectedCategories']) == nil || $receiver == undefined) ? (function(){return (self['@selectedCategories']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_renderResultsOn_'), +unescape('_selectedClasses'), smalltalk.method({ -selector: unescape('renderResultsOn%3A'), -fn: function (html){ +selector: unescape('selectedClasses'), +fn: function (){ var self=this; -(self['@statusDiv']=smalltalk.send(html, "_div", [])); -smalltalk.send(html, "_with_", [smalltalk.send(self, "_progressBar", [])]); -(self['@methodsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit results"])); -smalltalk.send(self, "_updateMethodsList", []); -smalltalk.send(self, "_updateStatusDiv", []); +return (($receiver = self['@selectedClasses']) == nil || $receiver == undefined) ? (function(){return (self['@selectedClasses']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_renderFailuresOn_'), +unescape('_statusInfo'), smalltalk.method({ -selector: unescape('renderFailuresOn%3A'), -fn: function (html){ +selector: unescape('statusInfo'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_do_", [(function(each){return (function($rec){smalltalk.send($rec, "_class_", ["failures"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(each, "_class", []), "_name", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(each, "_selector", [])])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_performFailure_", [each]);})]);})(smalltalk.send(html, "_li", []));})]); +return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printTotal", []), "__comma", [smalltalk.send(self, "_printPasses", [])]), "__comma", [smalltalk.send(self, "_printErrors", [])]), "__comma", [smalltalk.send(self, "_printFailures", [])]); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_renderErrorsOn_'), +unescape('_testCases'), smalltalk.method({ -selector: unescape('renderErrorsOn%3A'), -fn: function (html){ +selector: unescape('testCases'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_errors", []), "_do_", [(function(each){return (function($rec){smalltalk.send($rec, "_class_", ["errors"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(each, "_class", []), "_name", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(each, "_selector", [])])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_performFailure_", [each]);})]);})(smalltalk.send(html, "_li", []));})]); +var testCases=nil; +(testCases=[]); +smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_do_", [(function(each){return smalltalk.send(testCases, "_addAll_", [smalltalk.send(each, "_buildSuite", [])]);})]); +return testCases; return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_isSelectedClass_'), +unescape('_toggleCategory_'), smalltalk.method({ -selector: unescape('isSelectedClass%3A'), -fn: function (aClass){ +selector: unescape('toggleCategory%3A'), +fn: function (aCategory){ var self=this; -return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_includes_", [aClass]); +((($receiver = smalltalk.send(self, "_isSelectedCategory_", [aCategory])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@selectedCategories'], "_add_", [aCategory]);})() : (function(){return smalltalk.send(self['@selectedCategories'], "_remove_", [aCategory]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedCategories'], "_add_", [aCategory]);}), (function(){return smalltalk.send(self['@selectedCategories'], "_remove_", [aCategory]);})])); +(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); return self;} }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_isSelectedCategory_'), +unescape('_toggleClass_'), smalltalk.method({ -selector: unescape('isSelectedCategory%3A'), -fn: function (aCategory){ +selector: unescape('toggleClass%3A'), +fn: function (aClass){ var self=this; -return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [aCategory]); +((($receiver = smalltalk.send(self, "_isSelectedClass_", [aClass])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@selectedClasses'], "_add_", [aClass]);})() : (function(){return smalltalk.send(self['@selectedClasses'], "_remove_", [aClass]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedClasses'], "_add_", [aClass]);}), (function(){return smalltalk.send(self['@selectedClasses'], "_remove_", [aClass]);})])); +smalltalk.send(self, "_updateClassesList", []); return self;} }), smalltalk.TestRunner); @@ -3231,131 +3262,100 @@ smalltalk.TestRunner); -smalltalk.addClass('IDETranscript', smalltalk.TabWidget, ['textarea'], 'IDE'); +smalltalk.addClass('Workspace', smalltalk.TabWidget, ['sourceArea'], 'IDE'); smalltalk.addMethod( -unescape('_label'), +unescape('_clearWorkspace'), smalltalk.method({ -selector: unescape('label'), +selector: unescape('clearWorkspace'), fn: function (){ var self=this; -return "Transcript"; +smalltalk.send(self['@sourceArea'], "_clear", []); return self;} }), -smalltalk.IDETranscript); +smalltalk.Workspace); smalltalk.addMethod( -unescape('_clear'), +unescape('_doIt'), smalltalk.method({ -selector: unescape('clear'), +selector: unescape('doIt'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val_", [""]); +smalltalk.send(self['@sourceArea'], "_doIt", []); return self;} }), -smalltalk.IDETranscript); +smalltalk.Workspace); smalltalk.addMethod( -unescape('_cr'), +unescape('_fileIn'), smalltalk.method({ -selector: unescape('cr'), +selector: unescape('fileIn'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val_", [smalltalk.send(smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val", []), "__comma", [smalltalk.send((smalltalk.String || String), "_cr", [])])]); -return self;} -}), -smalltalk.IDETranscript); - -smalltalk.addMethod( -unescape('_show_'), -smalltalk.method({ -selector: unescape('show%3A'), -fn: function (anObject){ -var self=this; -(($receiver = self['@textarea']) == nil || $receiver == undefined) ? (function(){return smalltalk.send(self, "_open", []);})() : $receiver; -smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val_", [smalltalk.send(smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val", []), "__comma", [smalltalk.send(anObject, "_asString", [])])]); +smalltalk.send(self['@sourceArea'], "_fileIn", []); return self;} }), -smalltalk.IDETranscript); +smalltalk.Workspace); smalltalk.addMethod( -unescape('_open'), +unescape('_inspectIt'), smalltalk.method({ -selector: unescape('open'), +selector: unescape('inspectIt'), fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_open", []);return smalltalk.send($rec, "_selectTab_", [self]);})(smalltalk.send((smalltalk.TabManager || TabManager), "_current", [])); -return self;} -}), -smalltalk.IDETranscript); - -smalltalk.addMethod( -unescape('_renderBoxOn_'), -smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -fn: function (html){ -var self=this; -(self['@textarea']=smalltalk.send(html, "_textarea", [])); -(function($rec){smalltalk.send($rec, "_class_", ["jt_transcript"]);return smalltalk.send($rec, "_at_put_", ["spellcheck", "false"]);})(self['@textarea']); -return self;} -}), -smalltalk.IDETranscript); - -smalltalk.addMethod( -unescape('_renderButtonsOn_'), -smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), -fn: function (html){ -var self=this; -(function($rec){smalltalk.send($rec, "_with_", ["Clear transcript"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_clear", []);})]);})(smalltalk.send(html, "_button", [])); +smalltalk.send(self['@sourceArea'], "_inspectIt", []); return self;} }), -smalltalk.IDETranscript); - +smalltalk.Workspace); -smalltalk.IDETranscript.klass.iVarNames = ['current']; smalltalk.addMethod( -unescape('_initialize'), +unescape('_label'), smalltalk.method({ -selector: unescape('initialize'), +selector: unescape('label'), fn: function (){ var self=this; -smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_current", [])]); +return "Workspace"; return self;} }), -smalltalk.IDETranscript.klass); +smalltalk.Workspace); smalltalk.addMethod( -unescape('_new'), +unescape('_printIt'), smalltalk.method({ -selector: unescape('new'), +selector: unescape('printIt'), fn: function (){ var self=this; -smalltalk.send(self, "_shouldNotImplement", []); +smalltalk.send(self['@sourceArea'], "_printIt", []); return self;} }), -smalltalk.IDETranscript.klass); +smalltalk.Workspace); smalltalk.addMethod( -unescape('_open'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('open'), -fn: function (){ +selector: unescape('renderBoxOn%3A'), +fn: function (html){ var self=this; -(function($rec){smalltalk.send($rec, "_open", []);return smalltalk.send($rec, "_selectTab_", [smalltalk.send(self, "_current", [])]);})(smalltalk.send((smalltalk.TabManager || TabManager), "_current", [])); +(self['@sourceArea']=smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", [])); +smalltalk.send(self['@sourceArea'], "_renderOn_", [html]); return self;} }), -smalltalk.IDETranscript.klass); +smalltalk.Workspace); smalltalk.addMethod( -unescape('_current'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('current'), -fn: function (){ +selector: unescape('renderButtonsOn%3A'), +fn: function (html){ var self=this; -return (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return (self['@current']=smalltalk.send(self, "_new", [], smalltalk.TabWidget.klass));})() : $receiver; +(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);smalltalk.send($rec, "_title_", [unescape("ctrl+d")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_doIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);smalltalk.send($rec, "_title_", [unescape("ctrl+p")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_printIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);smalltalk.send($rec, "_title_", [unescape("ctrl+i")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_inspectIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["FileIn"]);smalltalk.send($rec, "_title_", [unescape("ctrl+f")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_fileIn", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["Clear workspace"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_clearWorkspace", []);})]);})(smalltalk.send(html, "_button", [])); return self;} }), -smalltalk.IDETranscript.klass); +smalltalk.Workspace); + smalltalk.addMethod( @@ -3393,17 +3393,11 @@ var self=this; var variables=nil; (variables=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); smalltalk.send(variables, "_at_put_", [unescape("%23self"), self]); -smalltalk.send(variables, "_at_put_", [unescape("%23year"), smalltalk.send(self, "_year", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23month"), smalltalk.send(self, "_month", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23day"), smalltalk.send(self, "_day", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23hours"), smalltalk.send(self, "_hours", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23minutes"), smalltalk.send(self, "_minutes", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23seconds"), smalltalk.send(self, "_seconds", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23milliseconds"), smalltalk.send(self, "_milliseconds", [])]); +smalltalk.send(self, "_withIndexDo_", [(function(each, i){return smalltalk.send(variables, "_at_put_", [i, each]);})]); (function($rec){smalltalk.send($rec, "_setLabel_", [smalltalk.send(self, "_printString", [])]);return smalltalk.send($rec, "_setVariables_", [variables]);})(anInspector); return self;} }), -smalltalk.Date); +smalltalk.Collection); smalltalk.addMethod( unescape('_inspectOn_'), @@ -3414,11 +3408,12 @@ var self=this; var variables=nil; (variables=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); smalltalk.send(variables, "_at_put_", [unescape("%23self"), self]); -smalltalk.send(self, "_withIndexDo_", [(function(each, i){return smalltalk.send(variables, "_at_put_", [i, each]);})]); +smalltalk.send(variables, "_at_put_", [unescape("%23keys"), smalltalk.send(self, "_keys", [])]); +smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(variables, "_at_put_", [key, value]);})]); (function($rec){smalltalk.send($rec, "_setLabel_", [smalltalk.send(self, "_printString", [])]);return smalltalk.send($rec, "_setVariables_", [variables]);})(anInspector); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( unescape('_inspectOn_'), @@ -3443,15 +3438,11 @@ var self=this; var variables=nil; (variables=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); smalltalk.send(variables, "_at_put_", [unescape("%23self"), self]); -smalltalk.send(variables, "_at_put_", [unescape("%23home"), smalltalk.send(self, "_home", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23receiver"), smalltalk.send(self, "_receiver", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23selector"), smalltalk.send(self, "_selector", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23temps"), smalltalk.send(self, "_temps", [])]); -smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_instanceVariableNames", []), "_do_", [(function(each){return smalltalk.send(variables, "_at_put_", [each, smalltalk.send(self, "_instVarAt_", [each])]);})]); +smalltalk.send(self['@elements'], "_withIndexDo_", [(function(each, i){return smalltalk.send(variables, "_at_put_", [i, each]);})]); (function($rec){smalltalk.send($rec, "_setLabel_", [smalltalk.send(self, "_printString", [])]);return smalltalk.send($rec, "_setVariables_", [variables]);})(anInspector); return self;} }), -smalltalk.MethodContext); +smalltalk.Set); smalltalk.addMethod( unescape('_inspectOn_'), @@ -3483,11 +3474,17 @@ var self=this; var variables=nil; (variables=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); smalltalk.send(variables, "_at_put_", [unescape("%23self"), self]); -smalltalk.send(self['@elements'], "_withIndexDo_", [(function(each, i){return smalltalk.send(variables, "_at_put_", [i, each]);})]); +smalltalk.send(variables, "_at_put_", [unescape("%23year"), smalltalk.send(self, "_year", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23month"), smalltalk.send(self, "_month", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23day"), smalltalk.send(self, "_day", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23hours"), smalltalk.send(self, "_hours", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23minutes"), smalltalk.send(self, "_minutes", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23seconds"), smalltalk.send(self, "_seconds", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23milliseconds"), smalltalk.send(self, "_milliseconds", [])]); (function($rec){smalltalk.send($rec, "_setLabel_", [smalltalk.send(self, "_printString", [])]);return smalltalk.send($rec, "_setVariables_", [variables]);})(anInspector); return self;} }), -smalltalk.Set); +smalltalk.Date); smalltalk.addMethod( unescape('_inspectOn_'), @@ -3498,10 +3495,13 @@ var self=this; var variables=nil; (variables=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); smalltalk.send(variables, "_at_put_", [unescape("%23self"), self]); -smalltalk.send(variables, "_at_put_", [unescape("%23keys"), smalltalk.send(self, "_keys", [])]); -smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(variables, "_at_put_", [key, value]);})]); +smalltalk.send(variables, "_at_put_", [unescape("%23home"), smalltalk.send(self, "_home", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23receiver"), smalltalk.send(self, "_receiver", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23selector"), smalltalk.send(self, "_selector", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23temps"), smalltalk.send(self, "_temps", [])]); +smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_instanceVariableNames", []), "_do_", [(function(each){return smalltalk.send(variables, "_at_put_", [each, smalltalk.send(self, "_instVarAt_", [each])]);})]); (function($rec){smalltalk.send($rec, "_setLabel_", [smalltalk.send(self, "_printString", [])]);return smalltalk.send($rec, "_setVariables_", [variables]);})(anInspector); return self;} }), -smalltalk.HashedCollection); +smalltalk.MethodContext); diff --git a/amber/src/js/IDE.js b/amber/src/js/IDE.js index 6f5ea044eff..6043ca4e7f5 100755 --- a/amber/src/js/IDE.js +++ b/amber/src/js/IDE.js @@ -1,748 +1,745 @@ smalltalk.addPackage('IDE', {}); -smalltalk.addClass('TabManager', smalltalk.Widget, ['selectedTab', 'tabs', 'opened', 'ul', 'input'], 'IDE'); +smalltalk.addClass('ClassesList', smalltalk.Widget, ['browser', 'ul', 'nodes'], 'IDE'); smalltalk.addMethod( -unescape('_tabs'), +unescape('_browser'), smalltalk.method({ -selector: unescape('tabs'), +selector: unescape('browser'), category: 'accessing', fn: function (){ var self=this; -return (($receiver = self['@tabs']) == nil || $receiver == undefined) ? (function(){return (self['@tabs']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +return self['@browser']; return self;}, args: [], -source: unescape('tabs%0A%20%20%20%20%5Etabs%20ifNil%3A%20%5Btabs%20%3A%3D%20Array%20new%5D'), -messageSends: ["ifNil:", "new"], -referencedClasses: ["Array"] +source: unescape('browser%0A%09%5Ebrowser'), +messageSends: [], +referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_labelFor_'), +unescape('_browser_'), smalltalk.method({ -selector: unescape('labelFor%3A'), +selector: unescape('browser%3A'), category: 'accessing', -fn: function (aWidget){ +fn: function (aBrowser){ var self=this; -var label=nil; -var maxSize=nil; -(maxSize=(15)); -(label=smalltalk.send(smalltalk.send(aWidget, "_label", []), "_copyFrom_to_", [(0), smalltalk.send(smalltalk.send(smalltalk.send(aWidget, "_label", []), "_size", []), "_min_", [maxSize])])); -((($receiver = ((($receiver = smalltalk.send(smalltalk.send(aWidget, "_label", []), "_size", [])).klass === smalltalk.Number) ? $receiver >maxSize : smalltalk.send($receiver, "__gt", [maxSize]))).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (label=smalltalk.send(label, "__comma", ["..."]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (label=smalltalk.send(label, "__comma", ["..."]));})])); -return label; +(self['@browser']=aBrowser); return self;}, -args: ["aWidget"], -source: unescape('labelFor%3A%20aWidget%0A%09%7C%20label%20maxSize%20%7C%0A%09maxSize%20%3A%3D%2015.%0A%09label%20%3A%3D%20aWidget%20label%20copyFrom%3A%200%20to%3A%20%28aWidget%20label%20size%20min%3A%20maxSize%29.%0A%09aWidget%20label%20size%20%3E%20maxSize%20ifTrue%3A%20%5B%0A%09%09label%20%3A%3D%20label%2C%20%27...%27%5D.%0A%09%5Elabel'), -messageSends: ["copyFrom:to:", "label", "min:", "size", "ifTrue:", unescape("%3E"), unescape("%2C")], +args: ["aBrowser"], +source: unescape('browser%3A%20aBrowser%0A%09browser%20%3A%3D%20aBrowser'), +messageSends: [], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_updateBodyMargin'), +unescape('_category'), smalltalk.method({ -selector: unescape('updateBodyMargin'), -category: 'actions', +selector: unescape('category'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self, "_setBodyMargin_", [smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_height", [])]); +return smalltalk.send(smalltalk.send(self, "_browser", []), "_selectedPackage", []); return self;}, args: [], -source: unescape('updateBodyMargin%0A%20%20%20%20self%20setBodyMargin%3A%20%27%23jtalk%27%20asJQuery%20height'), -messageSends: ["setBodyMargin:", "height", "asJQuery"], +source: unescape('category%0A%09%5Eself%20browser%20selectedPackage'), +messageSends: ["selectedPackage", "browser"], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_updatePosition'), +unescape('_getNodes'), smalltalk.method({ -selector: unescape('updatePosition'), -category: 'actions', +selector: unescape('getNodes'), +category: 'accessing', fn: function (){ var self=this; -jQuery('#jtalk').css('top', '').css('bottom', '0px'); +var classes=nil; +var children=nil; +var others=nil; +(classes=smalltalk.send(smalltalk.send(self, "_browser", []), "_classes", [])); +(children=[]); +(others=[]); +smalltalk.send(classes, "_do_", [(function(each){return ((($receiver = smalltalk.send(classes, "_includes_", [smalltalk.send(each, "_superclass", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(children, "_add_", [each]);})() : (function(){return smalltalk.send(others, "_add_", [each]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(children, "_add_", [each]);}), (function(){return smalltalk.send(others, "_add_", [each]);})]));})]); +return smalltalk.send(children, "_collect_", [(function(each){return smalltalk.send((smalltalk.ClassesListNode || ClassesListNode), "_on_browser_classes_level_", [each, smalltalk.send(self, "_browser", []), others, (0)]);})]); return self;}, args: [], -source: unescape('updatePosition%0A%20%20%20%20%3CjQuery%28%27%23jtalk%27%29.css%28%27top%27%2C%20%27%27%29.css%28%27bottom%27%2C%20%270px%27%29%3E'), -messageSends: [], -referencedClasses: [] +source: unescape('getNodes%0A%09%7C%20classes%20children%20others%20%7C%0A%09classes%20%3A%3D%20self%20browser%20classes.%0A%09children%20%3A%3D%20%23%28%29.%0A%09others%20%3A%3D%20%23%28%29.%0A%09classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%28classes%20includes%3A%20each%20superclass%29%0A%09%09%09ifFalse%3A%20%5Bchildren%20add%3A%20each%5D%0A%09%09%09ifTrue%3A%20%5Bothers%20add%3A%20each%5D%5D.%0A%09%5Echildren%20collect%3A%20%5B%3Aeach%20%7C%0A%09%09ClassesListNode%20on%3A%20each%20browser%3A%20self%20browser%20classes%3A%20others%20level%3A%200%5D'), +messageSends: ["classes", "browser", "do:", "ifFalse:ifTrue:", "includes:", "superclass", "add:", "collect:", "on:browser:classes:level:"], +referencedClasses: ["ClassesListNode"] }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_removeBodyMargin'), +unescape('_nodes'), smalltalk.method({ -selector: unescape('removeBodyMargin'), -category: 'actions', +selector: unescape('nodes'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self, "_setBodyMargin_", [(0)]); +(($receiver = self['@nodes']) == nil || $receiver == undefined) ? (function(){return (self['@nodes']=smalltalk.send(self, "_getNodes", []));})() : $receiver; +return self['@nodes']; return self;}, args: [], -source: unescape('removeBodyMargin%0A%20%20%20%20self%20setBodyMargin%3A%200'), -messageSends: ["setBodyMargin:"], -referencedClasses: [] -}), -smalltalk.TabManager); - -smalltalk.addMethod( -unescape('_setBodyMargin_'), -smalltalk.method({ -selector: unescape('setBodyMargin%3A'), -category: 'actions', -fn: function (anInteger){ -var self=this; -smalltalk.send(smalltalk.send(".jtalkBody", "_asJQuery", []), "_css_put_", [unescape("margin-bottom"), smalltalk.send(smalltalk.send(anInteger, "_asString", []), "__comma", ["px"])]); -return self;}, -args: ["anInteger"], -source: unescape('setBodyMargin%3A%20anInteger%0A%20%20%20%20%27.jtalkBody%27%20asJQuery%20css%3A%20%27margin-bottom%27%20put%3A%20anInteger%20asString%2C%20%27px%27'), -messageSends: ["css:put:", "asJQuery", unescape("%2C"), "asString"], +source: unescape('nodes%0A%09nodes%20ifNil%3A%20%5Bnodes%20%3A%3D%20self%20getNodes%5D.%0A%09%5Enodes'), +messageSends: ["ifNil:", "getNodes"], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_onResize_'), +unescape('_renderOn_'), smalltalk.method({ -selector: unescape('onResize%3A'), -category: 'actions', -fn: function (aBlock){ +selector: unescape('renderOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -jQuery('#jtalk').resizable({ - handles: 'n', - resize: aBlock, - minHeight: 230 -}); +(self['@ul']=(function($rec){smalltalk.send($rec, "_class_", ["jt_column browser classes"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_ul", []))); +smalltalk.send(self, "_updateNodes", []); return self;}, -args: ["aBlock"], -source: unescape('onResize%3A%20aBlock%0A%20%20%20%20%3CjQuery%28%27%23jtalk%27%29.resizable%28%7B%0A%09handles%3A%20%27n%27%2C%20%0A%09resize%3A%20aBlock%2C%0A%09minHeight%3A%20230%0A%7D%29%3E'), -messageSends: [], +args: ["html"], +source: unescape('renderOn%3A%20html%0A%09ul%20%3A%3D%20html%20ul%0A%09%09class%3A%20%27jt_column%20browser%20classes%27%3B%0A%09%09yourself.%0A%09self%20updateNodes'), +messageSends: ["class:", "yourself", "ul", "updateNodes"], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_onWindowResize_'), +unescape('_resetNodes'), smalltalk.method({ -selector: unescape('onWindowResize%3A'), -category: 'actions', -fn: function (aBlock){ +selector: unescape('resetNodes'), +category: 'accessing', +fn: function (){ var self=this; -jQuery(window).resize(aBlock); +(self['@nodes']=nil); return self;}, -args: ["aBlock"], -source: unescape('onWindowResize%3A%20aBlock%0A%20%20%20%20%3CjQuery%28window%29.resize%28aBlock%29%3E'), +args: [], +source: unescape('resetNodes%0A%09nodes%20%3A%3D%20nil'), messageSends: [], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesList); smalltalk.addMethod( -unescape('_open'), +unescape('_updateNodes'), smalltalk.method({ -selector: unescape('open'), -category: 'actions', +selector: unescape('updateNodes'), +category: 'rendering', fn: function (){ var self=this; -((($receiver = self['@opened']).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["jtalkBody"]);smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_show", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_show", []);smalltalk.send(self, "_updateBodyMargin", []);smalltalk.send(self['@selectedTab'], "_show", []);return (self['@opened']=true);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["jtalkBody"]);smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_show", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_show", []);smalltalk.send(self, "_updateBodyMargin", []);smalltalk.send(self['@selectedTab'], "_show", []);return (self['@opened']=true);})])); +smalltalk.send(self['@ul'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(self, "_nodes", []), "_do_", [(function(each){return smalltalk.send(each, "_renderOn_", [html]);})]);})]); return self;}, args: [], -source: unescape('open%0A%20%20%20%20opened%20ifFalse%3A%20%5B%0A%09%27body%27%20asJQuery%20addClass%3A%20%27jtalkBody%27.%0A%09%27%23jtalk%27%20asJQuery%20show.%0A%09ul%20asJQuery%20show.%0A%09self%20updateBodyMargin.%0A%09selectedTab%20show.%0A%09opened%20%3A%3D%20true%5D'), -messageSends: ["ifFalse:", "addClass:", "asJQuery", "show", "updateBodyMargin"], +source: unescape('updateNodes%0A%09ul%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09self%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%09each%20renderOn%3A%20html%5D%5D'), +messageSends: ["contents:", "do:", "nodes", "renderOn:"], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesList); + smalltalk.addMethod( -unescape('_close'), +unescape('_on_'), smalltalk.method({ -selector: unescape('close'), -category: 'actions', -fn: function (){ +selector: unescape('on%3A'), +category: 'instance creation', +fn: function (aBrowser){ var self=this; -((($receiver = self['@opened']).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_hide", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_hide", []);smalltalk.send(self['@selectedTab'], "_hide", []);smalltalk.send(self, "_removeBodyMargin", []);smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_removeClass_", ["jtalkBody"]);return (self['@opened']=false);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_hide", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_hide", []);smalltalk.send(self['@selectedTab'], "_hide", []);smalltalk.send(self, "_removeBodyMargin", []);smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_removeClass_", ["jtalkBody"]);return (self['@opened']=false);})])); +return (function($rec){smalltalk.send($rec, "_browser_", [aBrowser]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, -args: [], -source: unescape('close%0A%20%20%20%20opened%20ifTrue%3A%20%5B%0A%09%27%23jtalk%27%20asJQuery%20hide.%0A%09ul%20asJQuery%20hide.%0A%09selectedTab%20hide.%0A%09self%20removeBodyMargin.%0A%09%27body%27%20asJQuery%20removeClass%3A%20%27jtalkBody%27.%0A%09opened%20%3A%3D%20false%5D'), -messageSends: ["ifTrue:", "hide", "asJQuery", "removeBodyMargin", "removeClass:"], +args: ["aBrowser"], +source: unescape('on%3A%20aBrowser%0A%09%5Eself%20new%20%0A%09%09browser%3A%20aBrowser%3B%20%0A%09%09yourself'), +messageSends: ["browser:", "yourself", "new"], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesList.klass); + +smalltalk.addClass('ClassesListNode', smalltalk.Widget, ['browser', 'theClass', 'level', 'nodes'], 'IDE'); smalltalk.addMethod( -unescape('_newBrowserTab'), +unescape('_browser'), smalltalk.method({ -selector: unescape('newBrowserTab'), -category: 'actions', +selector: unescape('browser'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send((smalltalk.Browser || Browser), "_open", []); +return self['@browser']; return self;}, args: [], -source: unescape('newBrowserTab%0A%20%20%20%20Browser%20open'), -messageSends: ["open"], -referencedClasses: ["Browser"] +source: unescape('browser%0A%09%5Ebrowser'), +messageSends: [], +referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_selectTab_'), +unescape('_browser_'), smalltalk.method({ -selector: unescape('selectTab%3A'), -category: 'actions', -fn: function (aWidget){ +selector: unescape('browser%3A'), +category: 'accessing', +fn: function (aBrowser){ var self=this; -smalltalk.send(self, "_open", []); -(self['@selectedTab']=aWidget); -smalltalk.send(smalltalk.send(self, "_tabs", []), "_do_", [(function(each){return smalltalk.send(each, "_hide", []);})]); -smalltalk.send(aWidget, "_show", []); -smalltalk.send(self, "_update", []); +(self['@browser']=aBrowser); return self;}, -args: ["aWidget"], -source: unescape('selectTab%3A%20aWidget%0A%20%20%20%20self%20open.%0A%20%20%20%20selectedTab%20%3A%3D%20aWidget.%0A%20%20%20%20self%20tabs%20do%3A%20%5B%3Aeach%20%7C%0A%09each%20hide%5D.%0A%20%20%20%20aWidget%20show.%0A%09%0A%20%20%20%20self%20update'), -messageSends: ["open", "do:", "tabs", "hide", "show", "update"], +args: ["aBrowser"], +source: unescape('browser%3A%20aBrowser%0A%09browser%20%3A%3D%20aBrowser'), +messageSends: [], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_closeTab_'), +unescape('_getNodesFrom_'), smalltalk.method({ -selector: unescape('closeTab%3A'), -category: 'actions', -fn: function (aWidget){ +selector: unescape('getNodesFrom%3A'), +category: 'accessing', +fn: function (aCollection){ var self=this; -smalltalk.send(self, "_removeTab_", [aWidget]); -smalltalk.send(self, "_selectTab_", [smalltalk.send(smalltalk.send(self, "_tabs", []), "_last", [])]); -smalltalk.send(aWidget, "_remove", []); -smalltalk.send(self, "_update", []); +var children=nil; +var others=nil; +(children=[]); +(others=[]); +smalltalk.send(aCollection, "_do_", [(function(each){return ((($receiver = smalltalk.send(smalltalk.send(each, "_superclass", []), "__eq", [smalltalk.send(self, "_theClass", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(children, "_add_", [each]);})() : (function(){return smalltalk.send(others, "_add_", [each]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(children, "_add_", [each]);}), (function(){return smalltalk.send(others, "_add_", [each]);})]));})]); +(self['@nodes']=smalltalk.send(children, "_collect_", [(function(each){return smalltalk.send((smalltalk.ClassesListNode || ClassesListNode), "_on_browser_classes_level_", [each, smalltalk.send(self, "_browser", []), others, ((($receiver = smalltalk.send(self, "_level", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})])); return self;}, -args: ["aWidget"], -source: unescape('closeTab%3A%20aWidget%0A%20%20%20%20self%20removeTab%3A%20aWidget.%0A%20%20%20%20self%20selectTab%3A%20self%20tabs%20last.%0A%20%20%20%20aWidget%20remove.%0A%20%20%20%20self%20update'), -messageSends: ["removeTab:", "selectTab:", "last", "tabs", "remove", "update"], -referencedClasses: [] +args: ["aCollection"], +source: unescape('getNodesFrom%3A%20aCollection%0A%09%7C%20children%20others%20%7C%0A%09children%20%3A%3D%20%23%28%29.%0A%09others%20%3A%3D%20%23%28%29.%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%28each%20superclass%20%3D%20self%20theClass%29%0A%09%09%09ifTrue%3A%20%5Bchildren%20add%3A%20each%5D%0A%09%09%09ifFalse%3A%20%5Bothers%20add%3A%20each%5D%5D.%0A%09nodes%3A%3D%20children%20collect%3A%20%5B%3Aeach%20%7C%0A%09%09ClassesListNode%20on%3A%20each%20browser%3A%20self%20browser%20classes%3A%20others%20level%3A%20self%20level%20+%201%5D'), +messageSends: ["do:", "ifTrue:ifFalse:", unescape("%3D"), "superclass", "theClass", "add:", "collect:", "on:browser:classes:level:", "browser", unescape("+"), "level"], +referencedClasses: ["ClassesListNode"] }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_search_'), +unescape('_label'), smalltalk.method({ -selector: unescape('search%3A'), -category: 'actions', -fn: function (aString){ +selector: unescape('label'), +category: 'accessing', +fn: function (){ var self=this; -var searchedClass=nil; -(searchedClass=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [aString])); -((($receiver = smalltalk.send(searchedClass, "_isClass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send((smalltalk.Browser || Browser), "_openOn_", [searchedClass]);})() : (function(){return smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [aString]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send((smalltalk.Browser || Browser), "_openOn_", [searchedClass]);}), (function(){return smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [aString]);})])); +var str=nil; +(str=smalltalk.send(smalltalk.send((smalltalk.String || String), "_new", []), "_writeStream", [])); +smalltalk.send(smalltalk.send(self, "_level", []), "_timesRepeat_", [(function(){return smalltalk.send(str, "_nextPutAll_", [unescape("%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B")]);})]); +smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_theClass", []), "_name", [])]); +return smalltalk.send(str, "_contents", []); return self;}, -args: ["aString"], -source: unescape('search%3A%20aString%0A%09%7C%20searchedClass%20%7C%0A%09searchedClass%20%3A%3D%20Smalltalk%20current%20at%3A%20aString.%0A%09%09searchedClass%20isClass%0A%09%09%09ifTrue%3A%20%5BBrowser%20openOn%3A%20searchedClass%5D%0A%09%09%09ifFalse%3A%20%5BReferencesBrowser%20search%3A%20aString%5D'), -messageSends: ["at:", "current", "ifTrue:ifFalse:", "isClass", "openOn:", "search:"], -referencedClasses: ["Smalltalk", "Browser", "ReferencesBrowser"] +args: [], +source: unescape('label%0A%09%7C%20str%20%7C%0A%09str%20%3A%3D%20String%20new%20writeStream.%0A%09self%20level%20timesRepeat%3A%20%5B%0A%09%09str%20nextPutAll%3A%20%27%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%27%5D.%0A%09str%20nextPutAll%3A%20self%20theClass%20name.%0A%09%5Estr%20contents'), +messageSends: ["writeStream", "new", "timesRepeat:", "level", "nextPutAll:", "name", "theClass", "contents"], +referencedClasses: ["String"] }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_addTab_'), +unescape('_level'), smalltalk.method({ -selector: unescape('addTab%3A'), -category: 'adding/Removing', -fn: function (aWidget){ +selector: unescape('level'), +category: 'accessing', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_tabs", []), "_add_", [aWidget]); -smalltalk.send(aWidget, "_appendToJQuery_", [smalltalk.send(unescape("%23jtalk"), "_asJQuery", [])]); -smalltalk.send(aWidget, "_hide", []); +return self['@level']; return self;}, -args: ["aWidget"], -source: unescape('addTab%3A%20aWidget%0A%20%20%20%20self%20tabs%20add%3A%20aWidget.%0A%20%20%20%20aWidget%20appendToJQuery%3A%20%27%23jtalk%27%20asJQuery.%0A%20%20%20%20aWidget%20hide'), -messageSends: ["add:", "tabs", "appendToJQuery:", "asJQuery", "hide"], +args: [], +source: unescape('level%0A%09%5Elevel'), +messageSends: [], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_removeTab_'), +unescape('_level_'), smalltalk.method({ -selector: unescape('removeTab%3A'), -category: 'adding/Removing', -fn: function (aWidget){ +selector: unescape('level%3A'), +category: 'accessing', +fn: function (anInteger){ var self=this; -smalltalk.send(smalltalk.send(self, "_tabs", []), "_remove_", [aWidget]); -smalltalk.send(self, "_update", []); +(self['@level']=anInteger); return self;}, -args: ["aWidget"], -source: unescape('removeTab%3A%20aWidget%0A%20%20%20%20self%20tabs%20remove%3A%20aWidget.%0A%20%20%20%20self%20update'), -messageSends: ["remove:", "tabs", "update"], +args: ["anInteger"], +source: unescape('level%3A%20anInteger%0A%09level%20%3A%3D%20anInteger'), +messageSends: [], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_initialize'), +unescape('_nodes'), smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', +selector: unescape('nodes'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.Widget); -(self['@opened']=true); -smalltalk.send((function(html){return smalltalk.send(smalltalk.send(html, "_div", []), "_id_", ["jtalk"]);}), "_appendToJQuery_", [smalltalk.send("body", "_asJQuery", [])]); -smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["jtalkBody"]); -smalltalk.send(self, "_appendToJQuery_", [smalltalk.send(unescape("%23jtalk"), "_asJQuery", [])]); -(function($rec){smalltalk.send($rec, "_addTab_", [smalltalk.send((smalltalk.IDETranscript || IDETranscript), "_current", [])]);smalltalk.send($rec, "_addTab_", [smalltalk.send((smalltalk.Workspace || Workspace), "_new", [])]);return smalltalk.send($rec, "_addTab_", [smalltalk.send((smalltalk.TestRunner || TestRunner), "_new", [])]);})(self); -smalltalk.send(self, "_selectTab_", [smalltalk.send(smalltalk.send(self, "_tabs", []), "_last", [])]); -(function($rec){smalltalk.send($rec, "_onResize_", [(function(){return (function($rec){smalltalk.send($rec, "_updateBodyMargin", []);return smalltalk.send($rec, "_updatePosition", []);})(self);})]);return smalltalk.send($rec, "_onWindowResize_", [(function(){return smalltalk.send(self, "_updatePosition", []);})]);})(self); +return self['@nodes']; return self;}, args: [], -source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20opened%20%3A%3D%20true.%0A%20%20%20%20%5B%3Ahtml%20%7C%20html%20div%20id%3A%20%27jtalk%27%5D%20appendToJQuery%3A%20%27body%27%20asJQuery.%0A%20%20%20%20%27body%27%20asJQuery%20%0A%09addClass%3A%20%27jtalkBody%27.%0A%20%20%20%20self%20appendToJQuery%3A%20%27%23jtalk%27%20asJQuery.%0A%20%20%20%20self%20%0A%09addTab%3A%20IDETranscript%20current%3B%0A%09addTab%3A%20Workspace%20new%3B%0A%09addTab%3A%20TestRunner%20new.%0A%20%20%20%20self%20selectTab%3A%20self%20tabs%20last.%0A%20%20%20%20self%20%0A%09onResize%3A%20%5Bself%20updateBodyMargin%3B%20updatePosition%5D%3B%0A%09onWindowResize%3A%20%5Bself%20updatePosition%5D'), -messageSends: ["initialize", "appendToJQuery:", "id:", "div", "asJQuery", "addClass:", "addTab:", "current", "new", "selectTab:", "last", "tabs", "onResize:", "updateBodyMargin", "updatePosition", "onWindowResize:"], -referencedClasses: ["IDETranscript", "Workspace", "TestRunner"] +source: unescape('nodes%0A%09%5Enodes'), +messageSends: [], +referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( unescape('_renderOn_'), smalltalk.method({ selector: unescape('renderOn%3A'), -category: 'rendering', +category: '', fn: function (html){ var self=this; -smalltalk.send(smalltalk.send(html, "_div", []), "_id_", ["logo"]); -smalltalk.send(self, "_renderToolbarOn_", [html]); -(self['@ul']=(function($rec){smalltalk.send($rec, "_id_", ["jtalkTabs"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_ul", []))); -smalltalk.send(self, "_renderTabs", []); +var li=nil; +var cssClass=nil; +(cssClass=""); +(li=smalltalk.send(smalltalk.send(html, "_li", []), "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_browser", []), "_selectClass_", [smalltalk.send(self, "_theClass", [])]);})])); +smalltalk.send(smalltalk.send(li, "_asJQuery", []), "_html_", [smalltalk.send(self, "_label", [])]); +((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_browser", []), "_selectedClass", []), "__eq", [smalltalk.send(self, "_theClass", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" selected"]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" selected"]));})])); +((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_theClass", []), "_comment", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" commented"]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" commented"]));})])); +smalltalk.send(li, "_class_", [cssClass]); +smalltalk.send(smalltalk.send(self, "_nodes", []), "_do_", [(function(each){return smalltalk.send(each, "_renderOn_", [html]);})]); return self;}, args: ["html"], -source: unescape('renderOn%3A%20html%0A%09html%20div%20id%3A%20%27logo%27.%0A%09self%20renderToolbarOn%3A%20html.%0A%09ul%20%3A%3D%20html%20ul%0A%09%09id%3A%20%27jtalkTabs%27%3B%0A%09%09yourself.%0A%09self%20renderTabs'), -messageSends: ["id:", "div", "renderToolbarOn:", "yourself", "ul", "renderTabs"], +source: unescape('renderOn%3A%20html%0A%09%7C%20li%20cssClass%20%7C%0A%09cssClass%20%3A%3D%20%27%27.%0A%09li%20%3A%3D%20html%20li%20%0A%09%09onClick%3A%20%5Bself%20browser%20selectClass%3A%20self%20theClass%5D.%20%0A%09li%20asJQuery%20html%3A%20self%20label.%0A%0A%09self%20browser%20selectedClass%20%3D%20self%20theClass%20ifTrue%3A%20%20%5B%0A%09%09cssClass%20%3A%3D%20cssClass%2C%20%27%20selected%27%5D.%0A%0A%09self%20theClass%20comment%20isEmpty%20ifFalse%3A%20%5B%0A%09%09cssClass%20%3A%3D%20cssClass%2C%20%27%20commented%27%5D.%0A%0A%09li%20class%3A%20cssClass.%0A%0A%09self%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09each%20renderOn%3A%20html%5D'), +messageSends: ["onClick:", "li", "selectClass:", "browser", "theClass", "html:", "asJQuery", "label", "ifTrue:", unescape("%3D"), "selectedClass", unescape("%2C"), "ifFalse:", "isEmpty", "comment", "class:", "do:", "nodes", "renderOn:"], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_renderTabFor_on_'), +unescape('_theClass'), smalltalk.method({ -selector: unescape('renderTabFor%3Aon%3A'), -category: 'rendering', -fn: function (aWidget, html){ +selector: unescape('theClass'), +category: 'accessing', +fn: function (){ var self=this; -var li=nil; -(li=smalltalk.send(html, "_li", [])); -((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [aWidget])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})])); -(function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", [(function(){((($receiver = smalltalk.send(aWidget, "_canBeClosed", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_class_", ["close"]);smalltalk.send($rec, "_with_", ["x"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_closeTab_", [aWidget]);})]);})(smalltalk.send(html, "_span", []));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_class_", ["close"]);smalltalk.send($rec, "_with_", ["x"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_closeTab_", [aWidget]);})]);})(smalltalk.send(html, "_span", []));})]));return smalltalk.send(smalltalk.send(html, "_span", []), "_with_", [smalltalk.send(self, "_labelFor_", [aWidget])]);})]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [aWidget]);})]);})(li); +return self['@theClass']; return self;}, -args: ["aWidget", "html"], -source: unescape('renderTabFor%3A%20aWidget%20on%3A%20html%0A%09%7C%20li%20%7C%0A%09li%20%3A%3D%20html%20li.%0A%09selectedTab%20%3D%20aWidget%20ifTrue%3A%20%5B%0A%09li%20class%3A%20%27selected%27%5D.%0A%09li%20with%3A%20%5B%0A%09%09html%20span%20class%3A%20%27ltab%27.%0A%09%09html%20span%0A%09%09%09class%3A%20%27mtab%27%3B%0A%09%09%09with%3A%20%5B%0A%09%09%09%09aWidget%20canBeClosed%20ifTrue%3A%20%5B%0A%09%09%09%09%09html%20span%20%0A%09%09%09%09%09%09class%3A%20%27close%27%3B%0A%09%09%09%09%09%09with%3A%20%27x%27%3B%0A%09%09%09%09%09onClick%3A%20%5Bself%20closeTab%3A%20aWidget%5D%5D.%0A%09%09%09html%20span%20with%3A%20%28self%20labelFor%3A%20aWidget%29%5D.%0A%09%09html%20span%20class%3A%20%27rtab%27%5D%3B%0A%09onClick%3A%20%5Bself%20selectTab%3A%20aWidget%5D'), -messageSends: ["li", "ifTrue:", unescape("%3D"), "class:", "with:", "span", "canBeClosed", "onClick:", "closeTab:", "labelFor:", "selectTab:"], +args: [], +source: unescape('theClass%0A%09%5EtheClass'), +messageSends: [], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesListNode); smalltalk.addMethod( -unescape('_renderTabs'), +unescape('_theClass_'), smalltalk.method({ -selector: unescape('renderTabs'), -category: 'rendering', -fn: function (){ +selector: unescape('theClass%3A'), +category: 'accessing', +fn: function (aClass){ var self=this; -smalltalk.send(self['@ul'], "_contents_", [(function(html){smalltalk.send(smalltalk.send(self, "_tabs", []), "_do_", [(function(each){return smalltalk.send(self, "_renderTabFor_on_", [each, html]);})]);return (function($rec){smalltalk.send($rec, "_class_", ["newtab"]);smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", [unescape("%20+%20")]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_newBrowserTab", []);})]);})(smalltalk.send(html, "_li", []));})]); +(self['@theClass']=aClass); return self;}, -args: [], -source: unescape('renderTabs%0A%09ul%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%20%20%20%20self%20tabs%20do%3A%20%5B%3Aeach%20%7C%0A%09%09self%20renderTabFor%3A%20each%20on%3A%20html%5D.%0A%09%20%20%20%20html%20li%0A%09%09class%3A%20%27newtab%27%3B%0A%09%09with%3A%20%5B%0A%09%09%09html%20span%20class%3A%20%27ltab%27.%0A%09%09%09html%20span%20class%3A%20%27mtab%27%3B%20with%3A%20%27%20+%20%27.%0A%09%09%09html%20span%20class%3A%20%27rtab%27%5D%3B%0A%09%09onClick%3A%20%5Bself%20newBrowserTab%5D%5D'), -messageSends: ["contents:", "do:", "tabs", "renderTabFor:on:", "class:", "with:", "span", "onClick:", "newBrowserTab", "li"], +args: ["aClass"], +source: unescape('theClass%3A%20aClass%0A%09theClass%20%3A%3D%20aClass'), +messageSends: [], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesListNode); + smalltalk.addMethod( -unescape('_renderToolbarOn_'), +unescape('_on_browser_classes_level_'), smalltalk.method({ -selector: unescape('renderToolbarOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('on%3Abrowser%3Aclasses%3Alevel%3A'), +category: 'instance creation', +fn: function (aClass, aBrowser, aCollection, anInteger){ var self=this; -(function($rec){smalltalk.send($rec, "_id_", ["jt_toolbar"]);return smalltalk.send($rec, "_with_", [(function(){(self['@input']=(function($rec){smalltalk.send($rec, "_class_", ["implementors"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_input", [])));smalltalk.send(self['@input'], "_onKeyPress_", [(function(event){return ((($receiver = smalltalk.send(smalltalk.send(event, "_keyCode", []), "__eq", [(13)])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_search_", [smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val", [])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self, "_search_", [smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val", [])]);})]));})]);return (function($rec){smalltalk.send($rec, "_id_", ["jt_close"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_close", []);})]);})(smalltalk.send(html, "_div", []));})]);})(smalltalk.send(html, "_div", [])); +return (function($rec){smalltalk.send($rec, "_theClass_", [aClass]);smalltalk.send($rec, "_browser_", [aBrowser]);smalltalk.send($rec, "_level_", [anInteger]);smalltalk.send($rec, "_getNodesFrom_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, -args: ["html"], -source: unescape('renderToolbarOn%3A%20html%0A%09html%20div%20%0A%09%09id%3A%20%27jt_toolbar%27%3B%0A%09%09with%3A%20%5B%0A%09%09%09input%20%3A%3D%20html%20input%20%0A%09%09%09%09class%3A%20%27implementors%27%3B%0A%09%09%09%09yourself.%0A%09%09%09input%20onKeyPress%3A%20%5B%3Aevent%20%7C%0A%09%09%09%09event%20keyCode%20%3D%2013%20ifTrue%3A%20%5B%0A%09%09%09%09self%20search%3A%20input%20asJQuery%20val%5D%5D.%0A%09%09%09html%20div%20id%3A%20%27jt_close%27%3B%20onClick%3A%20%5Bself%20close%5D%5D'), -messageSends: ["id:", "with:", "class:", "yourself", "input", "onKeyPress:", "ifTrue:", unescape("%3D"), "keyCode", "search:", "val", "asJQuery", "onClick:", "close", "div"], +args: ["aClass", "aBrowser", "aCollection", "anInteger"], +source: unescape('on%3A%20aClass%20browser%3A%20aBrowser%20classes%3A%20aCollection%20level%3A%20anInteger%0A%09%5Eself%20new%0A%09%09theClass%3A%20aClass%3B%0A%09%09browser%3A%20aBrowser%3B%0A%09%09level%3A%20anInteger%3B%0A%09%09getNodesFrom%3A%20aCollection%3B%0A%09%09yourself'), +messageSends: ["theClass:", "browser:", "level:", "getNodesFrom:", "yourself", "new"], referencedClasses: [] }), -smalltalk.TabManager); +smalltalk.ClassesListNode.klass); + +smalltalk.addClass('DebugErrorHandler', smalltalk.ErrorHandler, [], 'IDE'); smalltalk.addMethod( -unescape('_update'), +unescape('_handleError_'), smalltalk.method({ -selector: unescape('update'), -category: 'updating', -fn: function (){ +selector: unescape('handleError%3A'), +category: 'error handling', +fn: function (anError){ var self=this; -smalltalk.send(self, "_renderTabs", []); +smalltalk.send((function(){return (function($rec){smalltalk.send($rec, "_error_", [anError]);return smalltalk.send($rec, "_open", []);})(smalltalk.send((smalltalk.Debugger || Debugger), "_new", []));}), "_on_do_", [(smalltalk.Error || Error), (function(error){return smalltalk.send(smalltalk.send((smalltalk.ErrorHandler || ErrorHandler), "_new", []), "_handleError_", [error]);})]); return self;}, -args: [], -source: unescape('update%0A%09self%20renderTabs'), -messageSends: ["renderTabs"], -referencedClasses: [] +args: ["anError"], +source: unescape('handleError%3A%20anError%0A%09%5BDebugger%20new%0A%09%09error%3A%20anError%3B%0A%09%09open%5D%20on%3A%20Error%20do%3A%20%5B%3Aerror%20%7C%0A%09%09%09ErrorHandler%20new%20handleError%3A%20error%5D'), +messageSends: ["on:do:", "error:", "open", "new", "handleError:"], +referencedClasses: ["Debugger", "Error", "ErrorHandler"] }), -smalltalk.TabManager); +smalltalk.DebugErrorHandler); -smalltalk.TabManager.klass.iVarNames = ['current']; smalltalk.addMethod( -unescape('_current'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('current'), -category: 'instance creation', +selector: unescape('initialize'), +category: 'initialization', fn: function (){ var self=this; -return (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return (self['@current']=smalltalk.send(self, "_new", [], smalltalk.Widget.klass));})() : $receiver; +smalltalk.send(self, "_register", []); return self;}, args: [], -source: unescape('current%0A%20%20%20%20%5Ecurrent%20ifNil%3A%20%5Bcurrent%20%3A%3D%20super%20new%5D'), -messageSends: ["ifNil:", "new"], +source: unescape('initialize%0A%09self%20register'), +messageSends: ["register"], referencedClasses: [] }), -smalltalk.TabManager.klass); +smalltalk.DebugErrorHandler.klass); + +smalltalk.addClass('SourceArea', smalltalk.Widget, ['editor', 'div', 'receiver', 'onDoIt'], 'IDE'); smalltalk.addMethod( -unescape('_new'), +unescape('_clear'), smalltalk.method({ -selector: unescape('new'), -category: 'instance creation', +selector: unescape('clear'), +category: 'actions', fn: function (){ var self=this; -smalltalk.send(self, "_shouldNotImplement", []); +smalltalk.send(self, "_val_", [""]); return self;}, args: [], -source: unescape('new%0A%20%20%20%20self%20shouldNotImplement'), -messageSends: ["shouldNotImplement"], +source: unescape('clear%0A%20%20%20%20%20%20self%20val%3A%20%27%27'), +messageSends: ["val:"], referencedClasses: [] }), -smalltalk.TabManager.klass); - +smalltalk.SourceArea); -smalltalk.addClass('TabWidget', smalltalk.Widget, ['div'], 'IDE'); smalltalk.addMethod( -unescape('_label'), +unescape('_currentLine'), smalltalk.method({ -selector: unescape('label'), +selector: unescape('currentLine'), category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self, "_subclassResponsibility", []); +return smalltalk.send(self['@editor'], "_getLine_", [smalltalk.send(smalltalk.send(self['@editor'], "_getCursor", []), "_line", [])]); return self;}, args: [], -source: unescape('label%0A%20%20%20%20self%20subclassResponsibility'), -messageSends: ["subclassResponsibility"], +source: unescape('currentLine%0A%20%20%20%20%5Eeditor%20getLine%3A%20%28editor%20getCursor%20line%29'), +messageSends: ["getLine:", "line", "getCursor"], referencedClasses: [] }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_open'), +unescape('_currentLineOrSelection'), smalltalk.method({ -selector: unescape('open'), -category: 'actions', +selector: unescape('currentLineOrSelection'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_addTab_", [self]); -smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_selectTab_", [self]); +return ((($receiver = smalltalk.send(self['@editor'], "_somethingSelected", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_currentLine", []);})() : (function(){return smalltalk.send(self, "_selection", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_currentLine", []);}), (function(){return smalltalk.send(self, "_selection", []);})])); return self;}, args: [], -source: unescape('open%0A%20%20%20%20TabManager%20current%20addTab%3A%20self.%0A%20%20%20%20TabManager%20current%20selectTab%3A%20self'), -messageSends: ["addTab:", "current", "selectTab:"], -referencedClasses: ["TabManager"] +source: unescape('currentLineOrSelection%0A%20%20%20%20%5Eeditor%20somethingSelected%0A%09ifFalse%3A%20%5Bself%20currentLine%5D%0A%09ifTrue%3A%20%5Bself%20selection%5D'), +messageSends: ["ifFalse:ifTrue:", "somethingSelected", "currentLine", "selection"], +referencedClasses: [] }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_show'), +unescape('_doIt'), smalltalk.method({ -selector: unescape('show'), +selector: unescape('doIt'), category: 'actions', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@div'], "_asJQuery", []), "_show", []); +var result=nil; +(result=smalltalk.send(self, "_eval_", [smalltalk.send(self, "_currentLineOrSelection", [])])); +(($receiver = smalltalk.send(self, "_onDoIt", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(smalltalk.send(self, "_onDoIt", []), "_value", []);})() : nil; +return result; return self;}, args: [], -source: unescape('show%0A%09div%20asJQuery%20show'), -messageSends: ["show", "asJQuery"], +source: unescape('doIt%0A%20%20%20%20%7C%20result%20%7C%0A%20%20%20%20result%20%3A%3D%20self%20eval%3A%20self%20currentLineOrSelection.%0A%20%20%20%20self%20onDoIt%20ifNotNil%3A%20%5Bself%20onDoIt%20value%5D.%0A%20%20%20%20%5Eresult'), +messageSends: ["eval:", "currentLineOrSelection", "ifNotNil:", "onDoIt", "value"], referencedClasses: [] }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_hide'), +unescape('_editor'), smalltalk.method({ -selector: unescape('hide'), -category: 'actions', +selector: unescape('editor'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@div'], "_asJQuery", []), "_hide", []); +return self['@editor']; return self;}, args: [], -source: unescape('hide%0A%09div%20asJQuery%20hide'), -messageSends: ["hide", "asJQuery"], +source: unescape('editor%0A%09%5Eeditor'), +messageSends: [], referencedClasses: [] }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_remove'), +unescape('_eval_'), smalltalk.method({ -selector: unescape('remove'), +selector: unescape('eval%3A'), category: 'actions', -fn: function (){ +fn: function (aString){ var self=this; -smalltalk.send(smalltalk.send(self['@div'], "_asJQuery", []), "_remove", []); -return self;}, -args: [], -source: unescape('remove%0A%09div%20asJQuery%20remove'), -messageSends: ["remove", "asJQuery"], -referencedClasses: [] +try{var compiler=nil; +(compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])); +smalltalk.send((function(){return smalltalk.send(compiler, "_parseExpression_", [aString]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return (function(){throw({name: 'stReturn', selector: '_eval_', fn: function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send(ex, "_messageText", [])])}})})();})]); +(function(){throw({name: 'stReturn', selector: '_eval_', fn: function(){return smalltalk.send(smalltalk.send(smalltalk.send(compiler, "_load_forClass_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")]), (smalltalk.DoIt || DoIt)]), "_fn", []), "_applyTo_arguments_", [smalltalk.send(self, "_receiver", []), []])}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_eval_'){return e.fn()} throw(e)}}, +args: ["aString"], +source: unescape('eval%3A%20aString%0A%09%7C%20compiler%20%20%7C%0A%09compiler%20%3A%3D%20Compiler%20new.%0A%09%5Bcompiler%20parseExpression%3A%20aString%5D%20on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%0A%09%09%5Ewindow%20alert%3A%20ex%20messageText%5D.%0A%09%5E%28compiler%20load%3A%20%27doIt%20%5E%5B%27%2C%20aString%2C%20%27%5D%20value%27%20forClass%3A%20DoIt%29%20fn%20applyTo%3A%20self%20receiver%20arguments%3A%20%23%28%29'), +messageSends: ["new", "on:do:", "parseExpression:", "alert:", "messageText", "applyTo:arguments:", "fn", "load:forClass:", unescape("%2C"), "receiver"], +referencedClasses: ["Compiler", "Error", "DoIt"] }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_close'), +unescape('_fileIn'), smalltalk.method({ -selector: unescape('close'), +selector: unescape('fileIn'), category: 'actions', fn: function (){ var self=this; -smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_closeTab_", [self]); +smalltalk.send(smalltalk.send((smalltalk.Importer || Importer), "_new", []), "_import_", [smalltalk.send(smalltalk.send(self, "_currentLineOrSelection", []), "_readStream", [])]); return self;}, args: [], -source: unescape('close%0A%20%20%20%20TabManager%20current%20closeTab%3A%20self'), -messageSends: ["closeTab:", "current"], -referencedClasses: ["TabManager"] -}), -smalltalk.TabWidget); - -smalltalk.addMethod( -unescape('_renderOn_'), -smalltalk.method({ -selector: unescape('renderOn%3A'), -category: 'rendering', -fn: function (html){ -var self=this; -(self['@div']=(function($rec){smalltalk.send($rec, "_class_", ["jtalkTool"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_div", []))); -smalltalk.send(self, "_renderTab", []); -return self;}, -args: ["html"], -source: unescape('renderOn%3A%20html%0A%09div%20%3A%3D%20html%20div%0A%09%09class%3A%20%27jtalkTool%27%3B%0A%09%09yourself.%0A%09self%20renderTab'), -messageSends: ["class:", "yourself", "div", "renderTab"], -referencedClasses: [] -}), -smalltalk.TabWidget); - -smalltalk.addMethod( -unescape('_renderBoxOn_'), -smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -category: 'rendering', -fn: function (html){ -var self=this; - -return self;}, -args: ["html"], -source: unescape('renderBoxOn%3A%20html'), -messageSends: [], -referencedClasses: [] +source: unescape('fileIn%0A%20%20%20%20Importer%20new%20import%3A%20self%20currentLineOrSelection%20readStream'), +messageSends: ["import:", "new", "readStream", "currentLineOrSelection"], +referencedClasses: ["Importer"] }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_renderButtonsOn_'), +unescape('_handleKeyDown_'), smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('handleKeyDown%3A'), +category: 'actions', +fn: function (anEvent){ var self=this; - +if(anEvent.ctrlKey) { + if(anEvent.keyCode === 80) { //ctrl+p + self._printIt(); + anEvent.preventDefault(); + return false; + } + if(anEvent.keyCode === 68) { //ctrl+d + self._doIt(); + anEvent.preventDefault(); + return false; + } + if(anEvent.keyCode === 73) { //ctrl+i + self._inspectIt(); + anEvent.preventDefault(); + return false; + } + }; return self;}, -args: ["html"], -source: unescape('renderButtonsOn%3A%20html'), +args: ["anEvent"], +source: unescape('handleKeyDown%3A%20anEvent%0A%20%20%20%20%3Cif%28anEvent.ctrlKey%29%20%7B%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2080%29%20%7B%20//ctrl+p%0A%09%09%09self._printIt%28%29%3B%0A%09%09%09anEvent.preventDefault%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2068%29%20%7B%20//ctrl+d%0A%09%09%09self._doIt%28%29%3B%0A%09%09%09anEvent.preventDefault%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2073%29%20%7B%20//ctrl+i%0A%09%09%09self._inspectIt%28%29%3B%0A%09%09%09anEvent.preventDefault%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%7D%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_update'), +unescape('_inspectIt'), smalltalk.method({ -selector: unescape('update'), -category: 'rendering', +selector: unescape('inspectIt'), +category: 'actions', fn: function (){ var self=this; -smalltalk.send(self, "_renderTab", []); +smalltalk.send(smalltalk.send(self, "_doIt", []), "_inspect", []); return self;}, args: [], -source: unescape('update%0A%09self%20renderTab'), -messageSends: ["renderTab"], +source: unescape('inspectIt%0A%20%20%20%20self%20doIt%20inspect'), +messageSends: ["inspect", "doIt"], referencedClasses: [] }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_renderTab'), +unescape('_onDoIt'), smalltalk.method({ -selector: unescape('renderTab'), -category: 'rendering', +selector: unescape('onDoIt'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self['@div'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["jt_box"]);return smalltalk.send($rec, "_with_", [(function(){return smalltalk.send(self, "_renderBoxOn_", [html]);})]);})(smalltalk.send(html, "_div", []));return (function($rec){smalltalk.send($rec, "_class_", ["jt_buttons"]);return smalltalk.send($rec, "_with_", [(function(){return smalltalk.send(self, "_renderButtonsOn_", [html]);})]);})(smalltalk.send(html, "_div", []));})]); +return self['@onDoIt']; return self;}, args: [], -source: unescape('renderTab%0A%09div%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%20%20%20%20html%20div%0A%09%09class%3A%20%27jt_box%27%3B%0A%09%09with%3A%20%5Bself%20renderBoxOn%3A%20html%5D.%0A%09%20%20%20%20html%20div%0A%09%09class%3A%20%27jt_buttons%27%3B%0A%09%09with%3A%20%5Bself%20renderButtonsOn%3A%20html%5D%5D'), -messageSends: ["contents:", "class:", "with:", "renderBoxOn:", "div", "renderButtonsOn:"], +source: unescape('onDoIt%0A%09%5EonDoIt'), +messageSends: [], referencedClasses: [] }), -smalltalk.TabWidget); +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_canBeClosed'), +unescape('_onDoIt_'), smalltalk.method({ -selector: unescape('canBeClosed'), -category: 'testing', -fn: function (){ +selector: unescape('onDoIt%3A'), +category: 'accessing', +fn: function (aBlock){ var self=this; -return false; +(self['@onDoIt']=aBlock); return self;}, -args: [], -source: unescape('canBeClosed%0A%20%20%20%20%5Efalse'), +args: ["aBlock"], +source: unescape('onDoIt%3A%20aBlock%0A%09onDoIt%20%3A%3D%20aBlock'), messageSends: [], referencedClasses: [] }), -smalltalk.TabWidget); - +smalltalk.SourceArea); smalltalk.addMethod( -unescape('_open'), +unescape('_onKeyDown_'), smalltalk.method({ -selector: unescape('open'), -category: 'instance creation', -fn: function (){ +selector: unescape('onKeyDown%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(smalltalk.send(self, "_new", []), "_open", []); +smalltalk.send(self['@div'], "_onKeyDown_", [aBlock]); return self;}, -args: [], -source: unescape('open%0A%20%20%20%20%5Eself%20new%20open'), -messageSends: ["open", "new"], +args: ["aBlock"], +source: unescape('onKeyDown%3A%20aBlock%0A%09div%20onKeyDown%3A%20aBlock'), +messageSends: ["onKeyDown:"], referencedClasses: [] }), -smalltalk.TabWidget.klass); - +smalltalk.SourceArea); -smalltalk.addClass('SourceArea', smalltalk.Widget, ['editor', 'div', 'receiver', 'onDoIt'], 'IDE'); smalltalk.addMethod( -unescape('_val'), +unescape('_onKeyUp_'), smalltalk.method({ -selector: unescape('val'), -category: 'accessing', -fn: function (){ +selector: unescape('onKeyUp%3A'), +category: 'events', +fn: function (aBlock){ var self=this; -return smalltalk.send(self['@editor'], "_getValue", []); +smalltalk.send(self['@div'], "_onKeyUp_", [aBlock]); return self;}, -args: [], -source: unescape('val%0A%20%20%20%20%5Eeditor%20getValue'), -messageSends: ["getValue"], +args: ["aBlock"], +source: unescape('onKeyUp%3A%20aBlock%0A%09div%20onKeyUp%3A%20aBlock'), +messageSends: ["onKeyUp:"], referencedClasses: [] }), smalltalk.SourceArea); smalltalk.addMethod( -unescape('_val_'), +unescape('_print_'), smalltalk.method({ -selector: unescape('val%3A'), -category: 'accessing', +selector: unescape('print%3A'), +category: 'actions', fn: function (aString){ var self=this; -smalltalk.send(self['@editor'], "_setValue_", [aString]); +var start=nil; +var stop=nil; +(start=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", [])); +(stop=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", [])); +smalltalk.send(start, "_at_put_", ["line", smalltalk.send(smalltalk.send(self['@editor'], "_getCursor_", [false]), "_line", [])]); +smalltalk.send(start, "_at_put_", ["ch", smalltalk.send(smalltalk.send(self['@editor'], "_getCursor_", [false]), "_ch", [])]); +smalltalk.send(stop, "_at_put_", ["line", smalltalk.send(start, "_at_", ["line"])]); +smalltalk.send(stop, "_at_put_", ["ch", ((($receiver = ((($receiver = smalltalk.send(start, "_at_", ["ch"])).klass === smalltalk.Number) ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])]))).klass === smalltalk.Number) ? $receiver +(2) : smalltalk.send($receiver, "__plus", [(2)]))]); +smalltalk.send(self['@editor'], "_replaceSelection_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self['@editor'], "_getSelection", []), "__comma", [" "]), "__comma", [aString]), "__comma", [" "])]); +smalltalk.send(self['@editor'], "_setCursor_", [smalltalk.send(self['@editor'], "_getCursor_", [true])]); +smalltalk.send(self['@editor'], "_setSelection_end_", [stop, start]); return self;}, args: ["aString"], -source: unescape('val%3A%20aString%0A%20%20%20%20editor%20setValue%3A%20aString'), -messageSends: ["setValue:"], -referencedClasses: [] +source: unescape('print%3A%20aString%0A%09%7C%20start%20stop%20%7C%0A%09start%20%3A%3D%20HashedCollection%20new.%0A%09stop%20%3A%3D%20HashedCollection%20new.%0A%09start%20at%3A%20%27line%27%20put%3A%20%28editor%20getCursor%3A%20false%29%20line.%0A%09start%20at%3A%20%27ch%27%20put%3A%20%28editor%20getCursor%3A%20false%29%20ch.%0A%09stop%20at%3A%20%27line%27%20put%3A%20%28start%20at%3A%20%27line%27%29.%0A%09stop%20at%3A%20%27ch%27%20put%3A%20%28%28start%20at%3A%20%27ch%27%29%20+%20aString%20size%20+%202%29.%0A%09editor%20replaceSelection%3A%20%28editor%20getSelection%2C%20%27%20%27%2C%20aString%2C%20%27%20%27%29.%0A%09editor%20setCursor%3A%20%28editor%20getCursor%3A%20true%29.%0A%09editor%20setSelection%3A%20stop%20end%3A%20start'), +messageSends: ["new", "at:put:", "line", "getCursor:", "ch", "at:", unescape("+"), "size", "replaceSelection:", unescape("%2C"), "getSelection", "setCursor:", "setSelection:end:"], +referencedClasses: ["HashedCollection"] }), smalltalk.SourceArea); smalltalk.addMethod( -unescape('_currentLine'), +unescape('_printIt'), smalltalk.method({ -selector: unescape('currentLine'), -category: 'accessing', +selector: unescape('printIt'), +category: 'actions', fn: function (){ var self=this; -return smalltalk.send(self['@editor'], "_getLine_", [smalltalk.send(smalltalk.send(self['@editor'], "_getCursor", []), "_line", [])]); +smalltalk.send(self, "_print_", [smalltalk.send(smalltalk.send(self, "_doIt", []), "_printString", [])]); return self;}, args: [], -source: unescape('currentLine%0A%20%20%20%20%5Eeditor%20getLine%3A%20%28editor%20getCursor%20line%29'), -messageSends: ["getLine:", "line", "getCursor"], +source: unescape('printIt%0A%20%20%20%20self%20print%3A%20self%20doIt%20printString'), +messageSends: ["print:", "printString", "doIt"], referencedClasses: [] }), smalltalk.SourceArea); smalltalk.addMethod( -unescape('_selection'), +unescape('_receiver'), smalltalk.method({ -selector: unescape('selection'), +selector: unescape('receiver'), category: 'accessing', fn: function (){ var self=this; -return smalltalk.send(self['@editor'], "_getSelection", []); +return (($receiver = self['@receiver']) == nil || $receiver == undefined) ? (function(){return smalltalk.send((smalltalk.DoIt || DoIt), "_new", []);})() : $receiver; return self;}, args: [], -source: unescape('selection%0A%09%5Eeditor%20getSelection'), -messageSends: ["getSelection"], -referencedClasses: [] +source: unescape('receiver%0A%09%5Ereceiver%20ifNil%3A%20%5BDoIt%20new%5D'), +messageSends: ["ifNil:", "new"], +referencedClasses: ["DoIt"] }), smalltalk.SourceArea); smalltalk.addMethod( -unescape('_selectionEnd'), +unescape('_receiver_'), smalltalk.method({ -selector: unescape('selectionEnd'), +selector: unescape('receiver%3A'), category: 'accessing', -fn: function (){ +fn: function (anObject){ var self=this; -return smalltalk.send(smalltalk.send((typeof textarea == 'undefined' ? nil : textarea), "_element", []), "_selectionEnd", []); +(self['@receiver']=anObject); return self;}, -args: [], -source: unescape('selectionEnd%0A%20%20%20%5Etextarea%20element%20selectionEnd'), -messageSends: ["selectionEnd", "element"], +args: ["anObject"], +source: unescape('receiver%3A%20anObject%0A%09receiver%20%3A%3D%20anObject'), +messageSends: [], referencedClasses: [] }), smalltalk.SourceArea); smalltalk.addMethod( -unescape('_selectionStart'), +unescape('_renderOn_'), smalltalk.method({ -selector: unescape('selectionStart'), +selector: unescape('renderOn%3A'), +category: 'rendering', +fn: function (html){ +var self=this; +var textarea=nil; +(self['@div']=smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["source"])); +smalltalk.send(self['@div'], "_with_", [(function(){return (textarea=smalltalk.send(html, "_textarea", []));})]); +smalltalk.send(self, "_setEditorOn_", [smalltalk.send(textarea, "_element", [])]); +smalltalk.send(self['@div'], "_onKeyDown_", [(function(e){return smalltalk.send(self, "_handleKeyDown_", [e]);})]); +return self;}, +args: ["html"], +source: unescape('renderOn%3A%20html%0A%20%20%20%20%7C%20textarea%20%7C%0A%20%20%20%20div%20%3A%3D%20html%20div%20class%3A%20%27source%27.%0A%20%20%20%20div%20with%3A%20%5Btextarea%20%3A%3D%20html%20textarea%5D.%0A%20%20%20%20self%20setEditorOn%3A%20textarea%20element.%0A%20%20%20%20div%20onKeyDown%3A%20%5B%3Ae%20%7C%20self%20handleKeyDown%3A%20e%5D'), +messageSends: ["class:", "div", "with:", "textarea", "setEditorOn:", "element", "onKeyDown:", "handleKeyDown:"], +referencedClasses: [] +}), +smalltalk.SourceArea); + +smalltalk.addMethod( +unescape('_selection'), +smalltalk.method({ +selector: unescape('selection'), category: 'accessing', fn: function (){ var self=this; -return smalltalk.send(smalltalk.send((typeof textarea == 'undefined' ? nil : textarea), "_element", []), "_selectionStart", []); +return smalltalk.send(self['@editor'], "_getSelection", []); return self;}, args: [], -source: unescape('selectionStart%0A%20%20%20%5Etextarea%20element%20selectionStart'), -messageSends: ["selectionStart", "element"], +source: unescape('selection%0A%09%5Eeditor%20getSelection'), +messageSends: ["getSelection"], referencedClasses: [] }), smalltalk.SourceArea); smalltalk.addMethod( -unescape('_selectionStart_'), +unescape('_selectionEnd'), smalltalk.method({ -selector: unescape('selectionStart%3A'), +selector: unescape('selectionEnd'), category: 'accessing', -fn: function (anInteger){ +fn: function (){ var self=this; -smalltalk.send(smalltalk.send((typeof textarea == 'undefined' ? nil : textarea), "_element", []), "_selectionStart_", [anInteger]); +return smalltalk.send(smalltalk.send((typeof textarea == 'undefined' ? nil : textarea), "_element", []), "_selectionEnd", []); return self;}, -args: ["anInteger"], -source: unescape('selectionStart%3A%20anInteger%0A%20%20%20textarea%20element%20selectionStart%3A%20anInteger'), -messageSends: ["selectionStart:", "element"], +args: [], +source: unescape('selectionEnd%0A%20%20%20%5Etextarea%20element%20selectionEnd'), +messageSends: ["selectionEnd", "element"], referencedClasses: [] }), smalltalk.SourceArea); @@ -763,6 +760,38 @@ referencedClasses: [] }), smalltalk.SourceArea); +smalltalk.addMethod( +unescape('_selectionStart'), +smalltalk.method({ +selector: unescape('selectionStart'), +category: 'accessing', +fn: function (){ +var self=this; +return smalltalk.send(smalltalk.send((typeof textarea == 'undefined' ? nil : textarea), "_element", []), "_selectionStart", []); +return self;}, +args: [], +source: unescape('selectionStart%0A%20%20%20%5Etextarea%20element%20selectionStart'), +messageSends: ["selectionStart", "element"], +referencedClasses: [] +}), +smalltalk.SourceArea); + +smalltalk.addMethod( +unescape('_selectionStart_'), +smalltalk.method({ +selector: unescape('selectionStart%3A'), +category: 'accessing', +fn: function (anInteger){ +var self=this; +smalltalk.send(smalltalk.send((typeof textarea == 'undefined' ? nil : textarea), "_element", []), "_selectionStart_", [anInteger]); +return self;}, +args: ["anInteger"], +source: unescape('selectionStart%3A%20anInteger%0A%20%20%20textarea%20element%20selectionStart%3A%20anInteger'), +messageSends: ["selectionStart:", "element"], +referencedClasses: [] +}), +smalltalk.SourceArea); + smalltalk.addMethod( unescape('_setEditorOn_'), smalltalk.method({ @@ -786,293 +815,237 @@ referencedClasses: [] smalltalk.SourceArea); smalltalk.addMethod( -unescape('_editor'), +unescape('_val'), smalltalk.method({ -selector: unescape('editor'), +selector: unescape('val'), category: 'accessing', fn: function (){ var self=this; -return self['@editor']; +return smalltalk.send(self['@editor'], "_getValue", []); return self;}, args: [], -source: unescape('editor%0A%09%5Eeditor'), -messageSends: [], +source: unescape('val%0A%20%20%20%20%5Eeditor%20getValue'), +messageSends: ["getValue"], referencedClasses: [] }), smalltalk.SourceArea); smalltalk.addMethod( -unescape('_receiver'), +unescape('_val_'), smalltalk.method({ -selector: unescape('receiver'), +selector: unescape('val%3A'), category: 'accessing', -fn: function (){ +fn: function (aString){ var self=this; -return (($receiver = self['@receiver']) == nil || $receiver == undefined) ? (function(){return smalltalk.send((smalltalk.DoIt || DoIt), "_new", []);})() : $receiver; +smalltalk.send(self['@editor'], "_setValue_", [aString]); return self;}, -args: [], -source: unescape('receiver%0A%09%5Ereceiver%20ifNil%3A%20%5BDoIt%20new%5D'), -messageSends: ["ifNil:", "new"], -referencedClasses: ["DoIt"] +args: ["aString"], +source: unescape('val%3A%20aString%0A%20%20%20%20editor%20setValue%3A%20aString'), +messageSends: ["setValue:"], +referencedClasses: [] }), smalltalk.SourceArea); + + +smalltalk.addClass('TabManager', smalltalk.Widget, ['selectedTab', 'tabs', 'opened', 'ul', 'input'], 'IDE'); smalltalk.addMethod( -unescape('_receiver_'), +unescape('_addTab_'), smalltalk.method({ -selector: unescape('receiver%3A'), -category: 'accessing', -fn: function (anObject){ +selector: unescape('addTab%3A'), +category: 'adding/Removing', +fn: function (aWidget){ var self=this; -(self['@receiver']=anObject); +smalltalk.send(smalltalk.send(self, "_tabs", []), "_add_", [aWidget]); +smalltalk.send(aWidget, "_appendToJQuery_", [smalltalk.send(unescape("%23jtalk"), "_asJQuery", [])]); +smalltalk.send(aWidget, "_hide", []); return self;}, -args: ["anObject"], -source: unescape('receiver%3A%20anObject%0A%09receiver%20%3A%3D%20anObject'), -messageSends: [], +args: ["aWidget"], +source: unescape('addTab%3A%20aWidget%0A%20%20%20%20self%20tabs%20add%3A%20aWidget.%0A%20%20%20%20aWidget%20appendToJQuery%3A%20%27%23jtalk%27%20asJQuery.%0A%20%20%20%20aWidget%20hide'), +messageSends: ["add:", "tabs", "appendToJQuery:", "asJQuery", "hide"], referencedClasses: [] }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_onDoIt_'), +unescape('_close'), smalltalk.method({ -selector: unescape('onDoIt%3A'), -category: 'accessing', -fn: function (aBlock){ +selector: unescape('close'), +category: 'actions', +fn: function (){ var self=this; -(self['@onDoIt']=aBlock); +((($receiver = self['@opened']).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_hide", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_hide", []);smalltalk.send(self['@selectedTab'], "_hide", []);smalltalk.send(self, "_removeBodyMargin", []);smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_removeClass_", ["jtalkBody"]);return (self['@opened']=false);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_hide", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_hide", []);smalltalk.send(self['@selectedTab'], "_hide", []);smalltalk.send(self, "_removeBodyMargin", []);smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_removeClass_", ["jtalkBody"]);return (self['@opened']=false);})])); return self;}, -args: ["aBlock"], -source: unescape('onDoIt%3A%20aBlock%0A%09onDoIt%20%3A%3D%20aBlock'), -messageSends: [], +args: [], +source: unescape('close%0A%20%20%20%20opened%20ifTrue%3A%20%5B%0A%09%27%23jtalk%27%20asJQuery%20hide.%0A%09ul%20asJQuery%20hide.%0A%09selectedTab%20hide.%0A%09self%20removeBodyMargin.%0A%09%27body%27%20asJQuery%20removeClass%3A%20%27jtalkBody%27.%0A%09opened%20%3A%3D%20false%5D'), +messageSends: ["ifTrue:", "hide", "asJQuery", "removeBodyMargin", "removeClass:"], referencedClasses: [] }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_onDoIt'), +unescape('_closeTab_'), smalltalk.method({ -selector: unescape('onDoIt'), -category: 'accessing', -fn: function (){ +selector: unescape('closeTab%3A'), +category: 'actions', +fn: function (aWidget){ var self=this; -return self['@onDoIt']; +smalltalk.send(self, "_removeTab_", [aWidget]); +smalltalk.send(self, "_selectTab_", [smalltalk.send(smalltalk.send(self, "_tabs", []), "_last", [])]); +smalltalk.send(aWidget, "_remove", []); +smalltalk.send(self, "_update", []); return self;}, -args: [], -source: unescape('onDoIt%0A%09%5EonDoIt'), -messageSends: [], +args: ["aWidget"], +source: unescape('closeTab%3A%20aWidget%0A%20%20%20%20self%20removeTab%3A%20aWidget.%0A%20%20%20%20self%20selectTab%3A%20self%20tabs%20last.%0A%20%20%20%20aWidget%20remove.%0A%20%20%20%20self%20update'), +messageSends: ["removeTab:", "selectTab:", "last", "tabs", "remove", "update"], referencedClasses: [] }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_currentLineOrSelection'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('currentLineOrSelection'), -category: 'accessing', +selector: unescape('initialize'), +category: 'initialization', fn: function (){ var self=this; -return ((($receiver = smalltalk.send(self['@editor'], "_somethingSelected", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_currentLine", []);})() : (function(){return smalltalk.send(self, "_selection", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_currentLine", []);}), (function(){return smalltalk.send(self, "_selection", []);})])); +smalltalk.send(self, "_initialize", [], smalltalk.Widget); +(self['@opened']=true); +smalltalk.send((function(html){return smalltalk.send(smalltalk.send(html, "_div", []), "_id_", ["jtalk"]);}), "_appendToJQuery_", [smalltalk.send("body", "_asJQuery", [])]); +smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["jtalkBody"]); +smalltalk.send(self, "_appendToJQuery_", [smalltalk.send(unescape("%23jtalk"), "_asJQuery", [])]); +(function($rec){smalltalk.send($rec, "_addTab_", [smalltalk.send((smalltalk.IDETranscript || IDETranscript), "_current", [])]);smalltalk.send($rec, "_addTab_", [smalltalk.send((smalltalk.Workspace || Workspace), "_new", [])]);return smalltalk.send($rec, "_addTab_", [smalltalk.send((smalltalk.TestRunner || TestRunner), "_new", [])]);})(self); +smalltalk.send(self, "_selectTab_", [smalltalk.send(smalltalk.send(self, "_tabs", []), "_last", [])]); +(function($rec){smalltalk.send($rec, "_onResize_", [(function(){return (function($rec){smalltalk.send($rec, "_updateBodyMargin", []);return smalltalk.send($rec, "_updatePosition", []);})(self);})]);return smalltalk.send($rec, "_onWindowResize_", [(function(){return smalltalk.send(self, "_updatePosition", []);})]);})(self); return self;}, args: [], -source: unescape('currentLineOrSelection%0A%20%20%20%20%5Eeditor%20somethingSelected%0A%09ifFalse%3A%20%5Bself%20currentLine%5D%0A%09ifTrue%3A%20%5Bself%20selection%5D'), -messageSends: ["ifFalse:ifTrue:", "somethingSelected", "currentLine", "selection"], +source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20opened%20%3A%3D%20true.%0A%20%20%20%20%5B%3Ahtml%20%7C%20html%20div%20id%3A%20%27jtalk%27%5D%20appendToJQuery%3A%20%27body%27%20asJQuery.%0A%20%20%20%20%27body%27%20asJQuery%20%0A%09addClass%3A%20%27jtalkBody%27.%0A%20%20%20%20self%20appendToJQuery%3A%20%27%23jtalk%27%20asJQuery.%0A%20%20%20%20self%20%0A%09addTab%3A%20IDETranscript%20current%3B%0A%09addTab%3A%20Workspace%20new%3B%0A%09addTab%3A%20TestRunner%20new.%0A%20%20%20%20self%20selectTab%3A%20self%20tabs%20last.%0A%20%20%20%20self%20%0A%09onResize%3A%20%5Bself%20updateBodyMargin%3B%20updatePosition%5D%3B%0A%09onWindowResize%3A%20%5Bself%20updatePosition%5D'), +messageSends: ["initialize", "appendToJQuery:", "id:", "div", "asJQuery", "addClass:", "addTab:", "current", "new", "selectTab:", "last", "tabs", "onResize:", "updateBodyMargin", "updatePosition", "onWindowResize:"], +referencedClasses: ["IDETranscript", "Workspace", "TestRunner"] +}), +smalltalk.TabManager); + +smalltalk.addMethod( +unescape('_labelFor_'), +smalltalk.method({ +selector: unescape('labelFor%3A'), +category: 'accessing', +fn: function (aWidget){ +var self=this; +var label=nil; +var maxSize=nil; +(maxSize=(15)); +(label=smalltalk.send(smalltalk.send(aWidget, "_label", []), "_copyFrom_to_", [(0), smalltalk.send(smalltalk.send(smalltalk.send(aWidget, "_label", []), "_size", []), "_min_", [maxSize])])); +((($receiver = ((($receiver = smalltalk.send(smalltalk.send(aWidget, "_label", []), "_size", [])).klass === smalltalk.Number) ? $receiver >maxSize : smalltalk.send($receiver, "__gt", [maxSize]))).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (label=smalltalk.send(label, "__comma", ["..."]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (label=smalltalk.send(label, "__comma", ["..."]));})])); +return label; +return self;}, +args: ["aWidget"], +source: unescape('labelFor%3A%20aWidget%0A%09%7C%20label%20maxSize%20%7C%0A%09maxSize%20%3A%3D%2015.%0A%09label%20%3A%3D%20aWidget%20label%20copyFrom%3A%200%20to%3A%20%28aWidget%20label%20size%20min%3A%20maxSize%29.%0A%09aWidget%20label%20size%20%3E%20maxSize%20ifTrue%3A%20%5B%0A%09%09label%20%3A%3D%20label%2C%20%27...%27%5D.%0A%09%5Elabel'), +messageSends: ["copyFrom:to:", "label", "min:", "size", "ifTrue:", unescape("%3E"), unescape("%2C")], referencedClasses: [] }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_clear'), +unescape('_newBrowserTab'), smalltalk.method({ -selector: unescape('clear'), +selector: unescape('newBrowserTab'), category: 'actions', fn: function (){ var self=this; -smalltalk.send(self, "_val_", [""]); +smalltalk.send((smalltalk.Browser || Browser), "_open", []); return self;}, args: [], -source: unescape('clear%0A%20%20%20%20%20%20self%20val%3A%20%27%27'), -messageSends: ["val:"], -referencedClasses: [] +source: unescape('newBrowserTab%0A%20%20%20%20Browser%20open'), +messageSends: ["open"], +referencedClasses: ["Browser"] }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_doIt'), +unescape('_onResize_'), smalltalk.method({ -selector: unescape('doIt'), +selector: unescape('onResize%3A'), category: 'actions', -fn: function (){ +fn: function (aBlock){ var self=this; -var result=nil; -(result=smalltalk.send(self, "_eval_", [smalltalk.send(self, "_currentLineOrSelection", [])])); -(($receiver = smalltalk.send(self, "_onDoIt", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(smalltalk.send(self, "_onDoIt", []), "_value", []);})() : nil; -return result; +jQuery('#jtalk').resizable({ + handles: 'n', + resize: aBlock, + minHeight: 230 +}); return self;}, -args: [], -source: unescape('doIt%0A%20%20%20%20%7C%20result%20%7C%0A%20%20%20%20result%20%3A%3D%20self%20eval%3A%20self%20currentLineOrSelection.%0A%20%20%20%20self%20onDoIt%20ifNotNil%3A%20%5Bself%20onDoIt%20value%5D.%0A%20%20%20%20%5Eresult'), -messageSends: ["eval:", "currentLineOrSelection", "ifNotNil:", "onDoIt", "value"], +args: ["aBlock"], +source: unescape('onResize%3A%20aBlock%0A%20%20%20%20%3CjQuery%28%27%23jtalk%27%29.resizable%28%7B%0A%09handles%3A%20%27n%27%2C%20%0A%09resize%3A%20aBlock%2C%0A%09minHeight%3A%20230%0A%7D%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_eval_'), +unescape('_onWindowResize_'), smalltalk.method({ -selector: unescape('eval%3A'), +selector: unescape('onWindowResize%3A'), category: 'actions', -fn: function (aString){ +fn: function (aBlock){ var self=this; -try{var compiler=nil; -(compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])); -smalltalk.send((function(){return smalltalk.send(compiler, "_parseExpression_", [aString]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return (function(){throw({name: 'stReturn', selector: '_eval_', fn: function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send(ex, "_messageText", [])])}})})();})]); -(function(){throw({name: 'stReturn', selector: '_eval_', fn: function(){return smalltalk.send(smalltalk.send(smalltalk.send(compiler, "_load_forClass_", [smalltalk.send(smalltalk.send(unescape("doIt%20%5E%5B"), "__comma", [aString]), "__comma", [unescape("%5D%20value")]), (smalltalk.DoIt || DoIt)]), "_fn", []), "_applyTo_arguments_", [smalltalk.send(self, "_receiver", []), []])}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_eval_'){return e.fn()} throw(e)}}, -args: ["aString"], -source: unescape('eval%3A%20aString%0A%09%7C%20compiler%20%20%7C%0A%09compiler%20%3A%3D%20Compiler%20new.%0A%09%5Bcompiler%20parseExpression%3A%20aString%5D%20on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%0A%09%09%5Ewindow%20alert%3A%20ex%20messageText%5D.%0A%09%5E%28compiler%20load%3A%20%27doIt%20%5E%5B%27%2C%20aString%2C%20%27%5D%20value%27%20forClass%3A%20DoIt%29%20fn%20applyTo%3A%20self%20receiver%20arguments%3A%20%23%28%29'), -messageSends: ["new", "on:do:", "parseExpression:", "alert:", "messageText", "applyTo:arguments:", "fn", "load:forClass:", unescape("%2C"), "receiver"], -referencedClasses: ["Compiler", "Error", "DoIt"] -}), -smalltalk.SourceArea); - -smalltalk.addMethod( -unescape('_handleKeyDown_'), -smalltalk.method({ -selector: unescape('handleKeyDown%3A'), -category: 'actions', -fn: function (anEvent){ -var self=this; -if(anEvent.ctrlKey) { - if(anEvent.keyCode === 80) { //ctrl+p - self._printIt(); - anEvent.preventDefault(); - return false; - } - if(anEvent.keyCode === 68) { //ctrl+d - self._doIt(); - anEvent.preventDefault(); - return false; - } - if(anEvent.keyCode === 73) { //ctrl+i - self._inspectIt(); - anEvent.preventDefault(); - return false; - } - }; +jQuery(window).resize(aBlock); return self;}, -args: ["anEvent"], -source: unescape('handleKeyDown%3A%20anEvent%0A%20%20%20%20%3Cif%28anEvent.ctrlKey%29%20%7B%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2080%29%20%7B%20//ctrl+p%0A%09%09%09self._printIt%28%29%3B%0A%09%09%09anEvent.preventDefault%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2068%29%20%7B%20//ctrl+d%0A%09%09%09self._doIt%28%29%3B%0A%09%09%09anEvent.preventDefault%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2073%29%20%7B%20//ctrl+i%0A%09%09%09self._inspectIt%28%29%3B%0A%09%09%09anEvent.preventDefault%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%7D%3E'), +args: ["aBlock"], +source: unescape('onWindowResize%3A%20aBlock%0A%20%20%20%20%3CjQuery%28window%29.resize%28aBlock%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.SourceArea); - -smalltalk.addMethod( -unescape('_inspectIt'), -smalltalk.method({ -selector: unescape('inspectIt'), -category: 'actions', -fn: function (){ -var self=this; -smalltalk.send(smalltalk.send(self, "_doIt", []), "_inspect", []); -return self;}, -args: [], -source: unescape('inspectIt%0A%20%20%20%20self%20doIt%20inspect'), -messageSends: ["inspect", "doIt"], -referencedClasses: [] -}), -smalltalk.SourceArea); - -smalltalk.addMethod( -unescape('_print_'), -smalltalk.method({ -selector: unescape('print%3A'), -category: 'actions', -fn: function (aString){ -var self=this; -var start=nil; -var stop=nil; -(start=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", [])); -(stop=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", [])); -smalltalk.send(start, "_at_put_", ["line", smalltalk.send(smalltalk.send(self['@editor'], "_getCursor_", [false]), "_line", [])]); -smalltalk.send(start, "_at_put_", ["ch", smalltalk.send(smalltalk.send(self['@editor'], "_getCursor_", [false]), "_ch", [])]); -smalltalk.send(stop, "_at_put_", ["line", smalltalk.send(start, "_at_", ["line"])]); -smalltalk.send(stop, "_at_put_", ["ch", ((($receiver = ((($receiver = smalltalk.send(start, "_at_", ["ch"])).klass === smalltalk.Number) ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])]))).klass === smalltalk.Number) ? $receiver +(2) : smalltalk.send($receiver, "__plus", [(2)]))]); -smalltalk.send(self['@editor'], "_replaceSelection_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self['@editor'], "_getSelection", []), "__comma", [" "]), "__comma", [aString]), "__comma", [" "])]); -smalltalk.send(self['@editor'], "_setCursor_", [smalltalk.send(self['@editor'], "_getCursor_", [true])]); -smalltalk.send(self['@editor'], "_setSelection_end_", [stop, start]); -return self;}, -args: ["aString"], -source: unescape('print%3A%20aString%0A%09%7C%20start%20stop%20%7C%0A%09start%20%3A%3D%20HashedCollection%20new.%0A%09stop%20%3A%3D%20HashedCollection%20new.%0A%09start%20at%3A%20%27line%27%20put%3A%20%28editor%20getCursor%3A%20false%29%20line.%0A%09start%20at%3A%20%27ch%27%20put%3A%20%28editor%20getCursor%3A%20false%29%20ch.%0A%09stop%20at%3A%20%27line%27%20put%3A%20%28start%20at%3A%20%27line%27%29.%0A%09stop%20at%3A%20%27ch%27%20put%3A%20%28%28start%20at%3A%20%27ch%27%29%20+%20aString%20size%20+%202%29.%0A%09editor%20replaceSelection%3A%20%28editor%20getSelection%2C%20%27%20%27%2C%20aString%2C%20%27%20%27%29.%0A%09editor%20setCursor%3A%20%28editor%20getCursor%3A%20true%29.%0A%09editor%20setSelection%3A%20stop%20end%3A%20start'), -messageSends: ["new", "at:put:", "line", "getCursor:", "ch", "at:", unescape("+"), "size", "replaceSelection:", unescape("%2C"), "getSelection", "setCursor:", "setSelection:end:"], -referencedClasses: ["HashedCollection"] -}), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_printIt'), +unescape('_open'), smalltalk.method({ -selector: unescape('printIt'), +selector: unescape('open'), category: 'actions', fn: function (){ var self=this; -smalltalk.send(self, "_print_", [smalltalk.send(smalltalk.send(self, "_doIt", []), "_printString", [])]); +((($receiver = self['@opened']).klass === smalltalk.Boolean) ? (! $receiver ? (function(){smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["jtalkBody"]);smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_show", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_show", []);smalltalk.send(self, "_updateBodyMargin", []);smalltalk.send(self['@selectedTab'], "_show", []);return (self['@opened']=true);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["jtalkBody"]);smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_show", []);smalltalk.send(smalltalk.send(self['@ul'], "_asJQuery", []), "_show", []);smalltalk.send(self, "_updateBodyMargin", []);smalltalk.send(self['@selectedTab'], "_show", []);return (self['@opened']=true);})])); return self;}, args: [], -source: unescape('printIt%0A%20%20%20%20self%20print%3A%20self%20doIt%20printString'), -messageSends: ["print:", "printString", "doIt"], +source: unescape('open%0A%20%20%20%20opened%20ifFalse%3A%20%5B%0A%09%27body%27%20asJQuery%20addClass%3A%20%27jtalkBody%27.%0A%09%27%23jtalk%27%20asJQuery%20show.%0A%09ul%20asJQuery%20show.%0A%09self%20updateBodyMargin.%0A%09selectedTab%20show.%0A%09opened%20%3A%3D%20true%5D'), +messageSends: ["ifFalse:", "addClass:", "asJQuery", "show", "updateBodyMargin"], referencedClasses: [] }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_fileIn'), +unescape('_removeBodyMargin'), smalltalk.method({ -selector: unescape('fileIn'), +selector: unescape('removeBodyMargin'), category: 'actions', fn: function (){ var self=this; -smalltalk.send(smalltalk.send((smalltalk.Importer || Importer), "_new", []), "_import_", [smalltalk.send(smalltalk.send(self, "_currentLineOrSelection", []), "_readStream", [])]); +smalltalk.send(self, "_setBodyMargin_", [(0)]); return self;}, args: [], -source: unescape('fileIn%0A%20%20%20%20Importer%20new%20import%3A%20self%20currentLineOrSelection%20readStream'), -messageSends: ["import:", "new", "readStream", "currentLineOrSelection"], -referencedClasses: ["Importer"] -}), -smalltalk.SourceArea); - -smalltalk.addMethod( -unescape('_onKeyUp_'), -smalltalk.method({ -selector: unescape('onKeyUp%3A'), -category: 'events', -fn: function (aBlock){ -var self=this; -smalltalk.send(self['@div'], "_onKeyUp_", [aBlock]); -return self;}, -args: ["aBlock"], -source: unescape('onKeyUp%3A%20aBlock%0A%09div%20onKeyUp%3A%20aBlock'), -messageSends: ["onKeyUp:"], +source: unescape('removeBodyMargin%0A%20%20%20%20self%20setBodyMargin%3A%200'), +messageSends: ["setBodyMargin:"], referencedClasses: [] }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_onKeyDown_'), +unescape('_removeTab_'), smalltalk.method({ -selector: unescape('onKeyDown%3A'), -category: 'events', -fn: function (aBlock){ +selector: unescape('removeTab%3A'), +category: 'adding/Removing', +fn: function (aWidget){ var self=this; -smalltalk.send(self['@div'], "_onKeyDown_", [aBlock]); +smalltalk.send(smalltalk.send(self, "_tabs", []), "_remove_", [aWidget]); +smalltalk.send(self, "_update", []); return self;}, -args: ["aBlock"], -source: unescape('onKeyDown%3A%20aBlock%0A%09div%20onKeyDown%3A%20aBlock'), -messageSends: ["onKeyDown:"], +args: ["aWidget"], +source: unescape('removeTab%3A%20aWidget%0A%20%20%20%20self%20tabs%20remove%3A%20aWidget.%0A%20%20%20%20self%20update'), +messageSends: ["remove:", "tabs", "update"], referencedClasses: [] }), -smalltalk.SourceArea); +smalltalk.TabManager); smalltalk.addMethod( unescape('_renderOn_'), @@ -1081,313 +1054,270 @@ selector: unescape('renderOn%3A'), category: 'rendering', fn: function (html){ var self=this; -var textarea=nil; -(self['@div']=smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["source"])); -smalltalk.send(self['@div'], "_with_", [(function(){return (textarea=smalltalk.send(html, "_textarea", []));})]); -smalltalk.send(self, "_setEditorOn_", [smalltalk.send(textarea, "_element", [])]); -smalltalk.send(self['@div'], "_onKeyDown_", [(function(e){return smalltalk.send(self, "_handleKeyDown_", [e]);})]); +smalltalk.send(smalltalk.send(html, "_div", []), "_id_", ["logo"]); +smalltalk.send(self, "_renderToolbarOn_", [html]); +(self['@ul']=(function($rec){smalltalk.send($rec, "_id_", ["jtalkTabs"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_ul", []))); +smalltalk.send(self, "_renderTabs", []); return self;}, args: ["html"], -source: unescape('renderOn%3A%20html%0A%20%20%20%20%7C%20textarea%20%7C%0A%20%20%20%20div%20%3A%3D%20html%20div%20class%3A%20%27source%27.%0A%20%20%20%20div%20with%3A%20%5Btextarea%20%3A%3D%20html%20textarea%5D.%0A%20%20%20%20self%20setEditorOn%3A%20textarea%20element.%0A%20%20%20%20div%20onKeyDown%3A%20%5B%3Ae%20%7C%20self%20handleKeyDown%3A%20e%5D'), -messageSends: ["class:", "div", "with:", "textarea", "setEditorOn:", "element", "onKeyDown:", "handleKeyDown:"], -referencedClasses: [] -}), -smalltalk.SourceArea); - - - -smalltalk.addClass('ClassesList', smalltalk.Widget, ['browser', 'ul', 'nodes'], 'IDE'); -smalltalk.addMethod( -unescape('_category'), -smalltalk.method({ -selector: unescape('category'), -category: 'accessing', -fn: function (){ -var self=this; -return smalltalk.send(smalltalk.send(self, "_browser", []), "_selectedPackage", []); -return self;}, -args: [], -source: unescape('category%0A%09%5Eself%20browser%20selectedPackage'), -messageSends: ["selectedPackage", "browser"], +source: unescape('renderOn%3A%20html%0A%09html%20div%20id%3A%20%27logo%27.%0A%09self%20renderToolbarOn%3A%20html.%0A%09ul%20%3A%3D%20html%20ul%0A%09%09id%3A%20%27jtalkTabs%27%3B%0A%09%09yourself.%0A%09self%20renderTabs'), +messageSends: ["id:", "div", "renderToolbarOn:", "yourself", "ul", "renderTabs"], referencedClasses: [] }), -smalltalk.ClassesList); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_nodes'), +unescape('_renderTabFor_on_'), smalltalk.method({ -selector: unescape('nodes'), -category: 'accessing', -fn: function (){ +selector: unescape('renderTabFor%3Aon%3A'), +category: 'rendering', +fn: function (aWidget, html){ var self=this; -(($receiver = self['@nodes']) == nil || $receiver == undefined) ? (function(){return (self['@nodes']=smalltalk.send(self, "_getNodes", []));})() : $receiver; -return self['@nodes']; +var li=nil; +(li=smalltalk.send(html, "_li", [])); +((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [aWidget])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})])); +(function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", [(function(){((($receiver = smalltalk.send(aWidget, "_canBeClosed", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_class_", ["close"]);smalltalk.send($rec, "_with_", ["x"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_closeTab_", [aWidget]);})]);})(smalltalk.send(html, "_span", []));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_class_", ["close"]);smalltalk.send($rec, "_with_", ["x"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_closeTab_", [aWidget]);})]);})(smalltalk.send(html, "_span", []));})]));return smalltalk.send(smalltalk.send(html, "_span", []), "_with_", [smalltalk.send(self, "_labelFor_", [aWidget])]);})]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [aWidget]);})]);})(li); return self;}, -args: [], -source: unescape('nodes%0A%09nodes%20ifNil%3A%20%5Bnodes%20%3A%3D%20self%20getNodes%5D.%0A%09%5Enodes'), -messageSends: ["ifNil:", "getNodes"], +args: ["aWidget", "html"], +source: unescape('renderTabFor%3A%20aWidget%20on%3A%20html%0A%09%7C%20li%20%7C%0A%09li%20%3A%3D%20html%20li.%0A%09selectedTab%20%3D%20aWidget%20ifTrue%3A%20%5B%0A%09li%20class%3A%20%27selected%27%5D.%0A%09li%20with%3A%20%5B%0A%09%09html%20span%20class%3A%20%27ltab%27.%0A%09%09html%20span%0A%09%09%09class%3A%20%27mtab%27%3B%0A%09%09%09with%3A%20%5B%0A%09%09%09%09aWidget%20canBeClosed%20ifTrue%3A%20%5B%0A%09%09%09%09%09html%20span%20%0A%09%09%09%09%09%09class%3A%20%27close%27%3B%0A%09%09%09%09%09%09with%3A%20%27x%27%3B%0A%09%09%09%09%09onClick%3A%20%5Bself%20closeTab%3A%20aWidget%5D%5D.%0A%09%09%09html%20span%20with%3A%20%28self%20labelFor%3A%20aWidget%29%5D.%0A%09%09html%20span%20class%3A%20%27rtab%27%5D%3B%0A%09onClick%3A%20%5Bself%20selectTab%3A%20aWidget%5D'), +messageSends: ["li", "ifTrue:", unescape("%3D"), "class:", "with:", "span", "canBeClosed", "onClick:", "closeTab:", "labelFor:", "selectTab:"], referencedClasses: [] }), -smalltalk.ClassesList); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_browser'), +unescape('_renderTabs'), smalltalk.method({ -selector: unescape('browser'), -category: 'accessing', +selector: unescape('renderTabs'), +category: 'rendering', fn: function (){ var self=this; -return self['@browser']; +smalltalk.send(self['@ul'], "_contents_", [(function(html){smalltalk.send(smalltalk.send(self, "_tabs", []), "_do_", [(function(each){return smalltalk.send(self, "_renderTabFor_on_", [each, html]);})]);return (function($rec){smalltalk.send($rec, "_class_", ["newtab"]);smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", [unescape("%20+%20")]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_newBrowserTab", []);})]);})(smalltalk.send(html, "_li", []));})]); return self;}, args: [], -source: unescape('browser%0A%09%5Ebrowser'), -messageSends: [], +source: unescape('renderTabs%0A%09ul%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%20%20%20%20self%20tabs%20do%3A%20%5B%3Aeach%20%7C%0A%09%09self%20renderTabFor%3A%20each%20on%3A%20html%5D.%0A%09%20%20%20%20html%20li%0A%09%09class%3A%20%27newtab%27%3B%0A%09%09with%3A%20%5B%0A%09%09%09html%20span%20class%3A%20%27ltab%27.%0A%09%09%09html%20span%20class%3A%20%27mtab%27%3B%20with%3A%20%27%20+%20%27.%0A%09%09%09html%20span%20class%3A%20%27rtab%27%5D%3B%0A%09%09onClick%3A%20%5Bself%20newBrowserTab%5D%5D'), +messageSends: ["contents:", "do:", "tabs", "renderTabFor:on:", "class:", "with:", "span", "onClick:", "newBrowserTab", "li"], referencedClasses: [] }), -smalltalk.ClassesList); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_browser_'), +unescape('_renderToolbarOn_'), smalltalk.method({ -selector: unescape('browser%3A'), -category: 'accessing', -fn: function (aBrowser){ +selector: unescape('renderToolbarOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -(self['@browser']=aBrowser); +(function($rec){smalltalk.send($rec, "_id_", ["jt_toolbar"]);return smalltalk.send($rec, "_with_", [(function(){(self['@input']=(function($rec){smalltalk.send($rec, "_class_", ["implementors"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_input", [])));smalltalk.send(self['@input'], "_onKeyPress_", [(function(event){return ((($receiver = smalltalk.send(smalltalk.send(event, "_keyCode", []), "__eq", [(13)])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_search_", [smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val", [])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self, "_search_", [smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val", [])]);})]));})]);return (function($rec){smalltalk.send($rec, "_id_", ["jt_close"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_close", []);})]);})(smalltalk.send(html, "_div", []));})]);})(smalltalk.send(html, "_div", [])); return self;}, -args: ["aBrowser"], -source: unescape('browser%3A%20aBrowser%0A%09browser%20%3A%3D%20aBrowser'), -messageSends: [], +args: ["html"], +source: unescape('renderToolbarOn%3A%20html%0A%09html%20div%20%0A%09%09id%3A%20%27jt_toolbar%27%3B%0A%09%09with%3A%20%5B%0A%09%09%09input%20%3A%3D%20html%20input%20%0A%09%09%09%09class%3A%20%27implementors%27%3B%0A%09%09%09%09yourself.%0A%09%09%09input%20onKeyPress%3A%20%5B%3Aevent%20%7C%0A%09%09%09%09event%20keyCode%20%3D%2013%20ifTrue%3A%20%5B%0A%09%09%09%09self%20search%3A%20input%20asJQuery%20val%5D%5D.%0A%09%09%09html%20div%20id%3A%20%27jt_close%27%3B%20onClick%3A%20%5Bself%20close%5D%5D'), +messageSends: ["id:", "with:", "class:", "yourself", "input", "onKeyPress:", "ifTrue:", unescape("%3D"), "keyCode", "search:", "val", "asJQuery", "onClick:", "close", "div"], referencedClasses: [] }), -smalltalk.ClassesList); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_getNodes'), +unescape('_search_'), smalltalk.method({ -selector: unescape('getNodes'), -category: 'accessing', -fn: function (){ +selector: unescape('search%3A'), +category: 'actions', +fn: function (aString){ var self=this; -var classes=nil; -var children=nil; -var others=nil; -(classes=smalltalk.send(smalltalk.send(self, "_browser", []), "_classes", [])); -(children=[]); -(others=[]); -smalltalk.send(classes, "_do_", [(function(each){return ((($receiver = smalltalk.send(classes, "_includes_", [smalltalk.send(each, "_superclass", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(children, "_add_", [each]);})() : (function(){return smalltalk.send(others, "_add_", [each]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(children, "_add_", [each]);}), (function(){return smalltalk.send(others, "_add_", [each]);})]));})]); -return smalltalk.send(children, "_collect_", [(function(each){return smalltalk.send((smalltalk.ClassesListNode || ClassesListNode), "_on_browser_classes_level_", [each, smalltalk.send(self, "_browser", []), others, (0)]);})]); +var searchedClass=nil; +(searchedClass=smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [aString])); +((($receiver = smalltalk.send(searchedClass, "_isClass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send((smalltalk.Browser || Browser), "_openOn_", [searchedClass]);})() : (function(){return smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [aString]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send((smalltalk.Browser || Browser), "_openOn_", [searchedClass]);}), (function(){return smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [aString]);})])); return self;}, -args: [], -source: unescape('getNodes%0A%09%7C%20classes%20children%20others%20%7C%0A%09classes%20%3A%3D%20self%20browser%20classes.%0A%09children%20%3A%3D%20%23%28%29.%0A%09others%20%3A%3D%20%23%28%29.%0A%09classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%28classes%20includes%3A%20each%20superclass%29%0A%09%09%09ifFalse%3A%20%5Bchildren%20add%3A%20each%5D%0A%09%09%09ifTrue%3A%20%5Bothers%20add%3A%20each%5D%5D.%0A%09%5Echildren%20collect%3A%20%5B%3Aeach%20%7C%0A%09%09ClassesListNode%20on%3A%20each%20browser%3A%20self%20browser%20classes%3A%20others%20level%3A%200%5D'), -messageSends: ["classes", "browser", "do:", "ifFalse:ifTrue:", "includes:", "superclass", "add:", "collect:", "on:browser:classes:level:"], -referencedClasses: ["ClassesListNode"] +args: ["aString"], +source: unescape('search%3A%20aString%0A%09%7C%20searchedClass%20%7C%0A%09searchedClass%20%3A%3D%20Smalltalk%20current%20at%3A%20aString.%0A%09%09searchedClass%20isClass%0A%09%09%09ifTrue%3A%20%5BBrowser%20openOn%3A%20searchedClass%5D%0A%09%09%09ifFalse%3A%20%5BReferencesBrowser%20search%3A%20aString%5D'), +messageSends: ["at:", "current", "ifTrue:ifFalse:", "isClass", "openOn:", "search:"], +referencedClasses: ["Smalltalk", "Browser", "ReferencesBrowser"] }), -smalltalk.ClassesList); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_resetNodes'), +unescape('_selectTab_'), smalltalk.method({ -selector: unescape('resetNodes'), -category: 'accessing', -fn: function (){ +selector: unescape('selectTab%3A'), +category: 'actions', +fn: function (aWidget){ var self=this; -(self['@nodes']=nil); +smalltalk.send(self, "_open", []); +(self['@selectedTab']=aWidget); +smalltalk.send(smalltalk.send(self, "_tabs", []), "_do_", [(function(each){return smalltalk.send(each, "_hide", []);})]); +smalltalk.send(aWidget, "_show", []); +smalltalk.send(self, "_update", []); return self;}, -args: [], -source: unescape('resetNodes%0A%09nodes%20%3A%3D%20nil'), -messageSends: [], +args: ["aWidget"], +source: unescape('selectTab%3A%20aWidget%0A%20%20%20%20self%20open.%0A%20%20%20%20selectedTab%20%3A%3D%20aWidget.%0A%20%20%20%20self%20tabs%20do%3A%20%5B%3Aeach%20%7C%0A%09each%20hide%5D.%0A%20%20%20%20aWidget%20show.%0A%09%0A%20%20%20%20self%20update'), +messageSends: ["open", "do:", "tabs", "hide", "show", "update"], referencedClasses: [] }), -smalltalk.ClassesList); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_renderOn_'), +unescape('_setBodyMargin_'), smalltalk.method({ -selector: unescape('renderOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('setBodyMargin%3A'), +category: 'actions', +fn: function (anInteger){ var self=this; -(self['@ul']=(function($rec){smalltalk.send($rec, "_class_", ["jt_column browser classes"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_ul", []))); -smalltalk.send(self, "_updateNodes", []); +smalltalk.send(smalltalk.send(".jtalkBody", "_asJQuery", []), "_css_put_", [unescape("margin-bottom"), smalltalk.send(smalltalk.send(anInteger, "_asString", []), "__comma", ["px"])]); return self;}, -args: ["html"], -source: unescape('renderOn%3A%20html%0A%09ul%20%3A%3D%20html%20ul%0A%09%09class%3A%20%27jt_column%20browser%20classes%27%3B%0A%09%09yourself.%0A%09self%20updateNodes'), -messageSends: ["class:", "yourself", "ul", "updateNodes"], +args: ["anInteger"], +source: unescape('setBodyMargin%3A%20anInteger%0A%20%20%20%20%27.jtalkBody%27%20asJQuery%20css%3A%20%27margin-bottom%27%20put%3A%20anInteger%20asString%2C%20%27px%27'), +messageSends: ["css:put:", "asJQuery", unescape("%2C"), "asString"], referencedClasses: [] }), -smalltalk.ClassesList); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_updateNodes'), +unescape('_tabs'), smalltalk.method({ -selector: unescape('updateNodes'), -category: 'rendering', +selector: unescape('tabs'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self['@ul'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(self, "_nodes", []), "_do_", [(function(each){return smalltalk.send(each, "_renderOn_", [html]);})]);})]); +return (($receiver = self['@tabs']) == nil || $receiver == undefined) ? (function(){return (self['@tabs']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;}, args: [], -source: unescape('updateNodes%0A%09ul%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09self%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%09each%20renderOn%3A%20html%5D%5D'), -messageSends: ["contents:", "do:", "nodes", "renderOn:"], -referencedClasses: [] -}), -smalltalk.ClassesList); - - -smalltalk.addMethod( -unescape('_on_'), -smalltalk.method({ -selector: unescape('on%3A'), -category: 'instance creation', -fn: function (aBrowser){ -var self=this; -return (function($rec){smalltalk.send($rec, "_browser_", [aBrowser]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); -return self;}, -args: ["aBrowser"], -source: unescape('on%3A%20aBrowser%0A%09%5Eself%20new%20%0A%09%09browser%3A%20aBrowser%3B%20%0A%09%09yourself'), -messageSends: ["browser:", "yourself", "new"], -referencedClasses: [] +source: unescape('tabs%0A%20%20%20%20%5Etabs%20ifNil%3A%20%5Btabs%20%3A%3D%20Array%20new%5D'), +messageSends: ["ifNil:", "new"], +referencedClasses: ["Array"] }), -smalltalk.ClassesList.klass); - +smalltalk.TabManager); -smalltalk.addClass('ClassesListNode', smalltalk.Widget, ['browser', 'theClass', 'level', 'nodes'], 'IDE'); smalltalk.addMethod( -unescape('_renderOn_'), +unescape('_update'), smalltalk.method({ -selector: unescape('renderOn%3A'), -category: '', -fn: function (html){ +selector: unescape('update'), +category: 'updating', +fn: function (){ var self=this; -var li=nil; -var cssClass=nil; -(cssClass=""); -(li=smalltalk.send(smalltalk.send(html, "_li", []), "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_browser", []), "_selectClass_", [smalltalk.send(self, "_theClass", [])]);})])); -smalltalk.send(smalltalk.send(li, "_asJQuery", []), "_html_", [smalltalk.send(self, "_label", [])]); -((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_browser", []), "_selectedClass", []), "__eq", [smalltalk.send(self, "_theClass", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" selected"]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" selected"]));})])); -((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_theClass", []), "_comment", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" commented"]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (cssClass=smalltalk.send(cssClass, "__comma", [" commented"]));})])); -smalltalk.send(li, "_class_", [cssClass]); -smalltalk.send(smalltalk.send(self, "_nodes", []), "_do_", [(function(each){return smalltalk.send(each, "_renderOn_", [html]);})]); +smalltalk.send(self, "_renderTabs", []); return self;}, -args: ["html"], -source: unescape('renderOn%3A%20html%0A%09%7C%20li%20cssClass%20%7C%0A%09cssClass%20%3A%3D%20%27%27.%0A%09li%20%3A%3D%20html%20li%20%0A%09%09onClick%3A%20%5Bself%20browser%20selectClass%3A%20self%20theClass%5D.%20%0A%09li%20asJQuery%20html%3A%20self%20label.%0A%0A%09self%20browser%20selectedClass%20%3D%20self%20theClass%20ifTrue%3A%20%20%5B%0A%09%09cssClass%20%3A%3D%20cssClass%2C%20%27%20selected%27%5D.%0A%0A%09self%20theClass%20comment%20isEmpty%20ifFalse%3A%20%5B%0A%09%09cssClass%20%3A%3D%20cssClass%2C%20%27%20commented%27%5D.%0A%0A%09li%20class%3A%20cssClass.%0A%0A%09self%20nodes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09each%20renderOn%3A%20html%5D'), -messageSends: ["onClick:", "li", "selectClass:", "browser", "theClass", "html:", "asJQuery", "label", "ifTrue:", unescape("%3D"), "selectedClass", unescape("%2C"), "ifFalse:", "isEmpty", "comment", "class:", "do:", "nodes", "renderOn:"], +args: [], +source: unescape('update%0A%09self%20renderTabs'), +messageSends: ["renderTabs"], referencedClasses: [] }), -smalltalk.ClassesListNode); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_nodes'), +unescape('_updateBodyMargin'), smalltalk.method({ -selector: unescape('nodes'), -category: 'accessing', +selector: unescape('updateBodyMargin'), +category: 'actions', fn: function (){ var self=this; -return self['@nodes']; +smalltalk.send(self, "_setBodyMargin_", [smalltalk.send(smalltalk.send(unescape("%23jtalk"), "_asJQuery", []), "_height", [])]); return self;}, args: [], -source: unescape('nodes%0A%09%5Enodes'), -messageSends: [], +source: unescape('updateBodyMargin%0A%20%20%20%20self%20setBodyMargin%3A%20%27%23jtalk%27%20asJQuery%20height'), +messageSends: ["setBodyMargin:", "height", "asJQuery"], referencedClasses: [] }), -smalltalk.ClassesListNode); +smalltalk.TabManager); smalltalk.addMethod( -unescape('_theClass'), +unescape('_updatePosition'), smalltalk.method({ -selector: unescape('theClass'), -category: 'accessing', +selector: unescape('updatePosition'), +category: 'actions', fn: function (){ var self=this; -return self['@theClass']; +jQuery('#jtalk').css('top', '').css('bottom', '0px'); return self;}, args: [], -source: unescape('theClass%0A%09%5EtheClass'), +source: unescape('updatePosition%0A%20%20%20%20%3CjQuery%28%27%23jtalk%27%29.css%28%27top%27%2C%20%27%27%29.css%28%27bottom%27%2C%20%270px%27%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.ClassesListNode); +smalltalk.TabManager); + +smalltalk.TabManager.klass.iVarNames = ['current']; smalltalk.addMethod( -unescape('_theClass_'), +unescape('_current'), smalltalk.method({ -selector: unescape('theClass%3A'), -category: 'accessing', -fn: function (aClass){ +selector: unescape('current'), +category: 'instance creation', +fn: function (){ var self=this; -(self['@theClass']=aClass); +return (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return (self['@current']=smalltalk.send(self, "_new", [], smalltalk.Widget.klass));})() : $receiver; return self;}, -args: ["aClass"], -source: unescape('theClass%3A%20aClass%0A%09theClass%20%3A%3D%20aClass'), -messageSends: [], +args: [], +source: unescape('current%0A%20%20%20%20%5Ecurrent%20ifNil%3A%20%5Bcurrent%20%3A%3D%20super%20new%5D'), +messageSends: ["ifNil:", "new"], referencedClasses: [] }), -smalltalk.ClassesListNode); +smalltalk.TabManager.klass); smalltalk.addMethod( -unescape('_browser'), +unescape('_new'), smalltalk.method({ -selector: unescape('browser'), -category: 'accessing', +selector: unescape('new'), +category: 'instance creation', fn: function (){ var self=this; -return self['@browser']; +smalltalk.send(self, "_shouldNotImplement", []); return self;}, args: [], -source: unescape('browser%0A%09%5Ebrowser'), -messageSends: [], +source: unescape('new%0A%20%20%20%20self%20shouldNotImplement'), +messageSends: ["shouldNotImplement"], referencedClasses: [] }), -smalltalk.ClassesListNode); +smalltalk.TabManager.klass); + +smalltalk.addClass('TabWidget', smalltalk.Widget, ['div'], 'IDE'); smalltalk.addMethod( -unescape('_browser_'), +unescape('_canBeClosed'), smalltalk.method({ -selector: unescape('browser%3A'), -category: 'accessing', -fn: function (aBrowser){ +selector: unescape('canBeClosed'), +category: 'testing', +fn: function (){ var self=this; -(self['@browser']=aBrowser); +return false; return self;}, -args: ["aBrowser"], -source: unescape('browser%3A%20aBrowser%0A%09browser%20%3A%3D%20aBrowser'), +args: [], +source: unescape('canBeClosed%0A%20%20%20%20%5Efalse'), messageSends: [], referencedClasses: [] }), -smalltalk.ClassesListNode); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_level'), +unescape('_close'), smalltalk.method({ -selector: unescape('level'), -category: 'accessing', +selector: unescape('close'), +category: 'actions', fn: function (){ var self=this; -return self['@level']; +smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_closeTab_", [self]); return self;}, args: [], -source: unescape('level%0A%09%5Elevel'), -messageSends: [], -referencedClasses: [] +source: unescape('close%0A%20%20%20%20TabManager%20current%20closeTab%3A%20self'), +messageSends: ["closeTab:", "current"], +referencedClasses: ["TabManager"] }), -smalltalk.ClassesListNode); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_level_'), +unescape('_hide'), smalltalk.method({ -selector: unescape('level%3A'), -category: 'accessing', -fn: function (anInteger){ +selector: unescape('hide'), +category: 'actions', +fn: function (){ var self=this; -(self['@level']=anInteger); +smalltalk.send(smalltalk.send(self['@div'], "_asJQuery", []), "_hide", []); return self;}, -args: ["anInteger"], -source: unescape('level%3A%20anInteger%0A%09level%20%3A%3D%20anInteger'), -messageSends: [], +args: [], +source: unescape('hide%0A%09div%20asJQuery%20hide'), +messageSends: ["hide", "asJQuery"], referencedClasses: [] }), -smalltalk.ClassesListNode); +smalltalk.TabWidget); smalltalk.addMethod( unescape('_label'), @@ -1396,488 +1326,485 @@ selector: unescape('label'), category: 'accessing', fn: function (){ var self=this; -var str=nil; -(str=smalltalk.send(smalltalk.send((smalltalk.String || String), "_new", []), "_writeStream", [])); -smalltalk.send(smalltalk.send(self, "_level", []), "_timesRepeat_", [(function(){return smalltalk.send(str, "_nextPutAll_", [unescape("%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B")]);})]); -smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_theClass", []), "_name", [])]); -return smalltalk.send(str, "_contents", []); +smalltalk.send(self, "_subclassResponsibility", []); return self;}, args: [], -source: unescape('label%0A%09%7C%20str%20%7C%0A%09str%20%3A%3D%20String%20new%20writeStream.%0A%09self%20level%20timesRepeat%3A%20%5B%0A%09%09str%20nextPutAll%3A%20%27%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%27%5D.%0A%09str%20nextPutAll%3A%20self%20theClass%20name.%0A%09%5Estr%20contents'), -messageSends: ["writeStream", "new", "timesRepeat:", "level", "nextPutAll:", "name", "theClass", "contents"], -referencedClasses: ["String"] +source: unescape('label%0A%20%20%20%20self%20subclassResponsibility'), +messageSends: ["subclassResponsibility"], +referencedClasses: [] }), -smalltalk.ClassesListNode); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_getNodesFrom_'), +unescape('_open'), smalltalk.method({ -selector: unescape('getNodesFrom%3A'), -category: 'accessing', -fn: function (aCollection){ +selector: unescape('open'), +category: 'actions', +fn: function (){ var self=this; -var children=nil; -var others=nil; -(children=[]); -(others=[]); -smalltalk.send(aCollection, "_do_", [(function(each){return ((($receiver = smalltalk.send(smalltalk.send(each, "_superclass", []), "__eq", [smalltalk.send(self, "_theClass", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(children, "_add_", [each]);})() : (function(){return smalltalk.send(others, "_add_", [each]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(children, "_add_", [each]);}), (function(){return smalltalk.send(others, "_add_", [each]);})]));})]); -(self['@nodes']=smalltalk.send(children, "_collect_", [(function(each){return smalltalk.send((smalltalk.ClassesListNode || ClassesListNode), "_on_browser_classes_level_", [each, smalltalk.send(self, "_browser", []), others, ((($receiver = smalltalk.send(self, "_level", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})])); +smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_addTab_", [self]); +smalltalk.send(smalltalk.send((smalltalk.TabManager || TabManager), "_current", []), "_selectTab_", [self]); return self;}, -args: ["aCollection"], -source: unescape('getNodesFrom%3A%20aCollection%0A%09%7C%20children%20others%20%7C%0A%09children%20%3A%3D%20%23%28%29.%0A%09others%20%3A%3D%20%23%28%29.%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%28each%20superclass%20%3D%20self%20theClass%29%0A%09%09%09ifTrue%3A%20%5Bchildren%20add%3A%20each%5D%0A%09%09%09ifFalse%3A%20%5Bothers%20add%3A%20each%5D%5D.%0A%09nodes%3A%3D%20children%20collect%3A%20%5B%3Aeach%20%7C%0A%09%09ClassesListNode%20on%3A%20each%20browser%3A%20self%20browser%20classes%3A%20others%20level%3A%20self%20level%20+%201%5D'), -messageSends: ["do:", "ifTrue:ifFalse:", unescape("%3D"), "superclass", "theClass", "add:", "collect:", "on:browser:classes:level:", "browser", unescape("+"), "level"], -referencedClasses: ["ClassesListNode"] +args: [], +source: unescape('open%0A%20%20%20%20TabManager%20current%20addTab%3A%20self.%0A%20%20%20%20TabManager%20current%20selectTab%3A%20self'), +messageSends: ["addTab:", "current", "selectTab:"], +referencedClasses: ["TabManager"] }), -smalltalk.ClassesListNode); - +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_on_browser_classes_level_'), +unescape('_remove'), smalltalk.method({ -selector: unescape('on%3Abrowser%3Aclasses%3Alevel%3A'), -category: 'instance creation', -fn: function (aClass, aBrowser, aCollection, anInteger){ +selector: unescape('remove'), +category: 'actions', +fn: function (){ var self=this; -return (function($rec){smalltalk.send($rec, "_theClass_", [aClass]);smalltalk.send($rec, "_browser_", [aBrowser]);smalltalk.send($rec, "_level_", [anInteger]);smalltalk.send($rec, "_getNodesFrom_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +smalltalk.send(smalltalk.send(self['@div'], "_asJQuery", []), "_remove", []); return self;}, -args: ["aClass", "aBrowser", "aCollection", "anInteger"], -source: unescape('on%3A%20aClass%20browser%3A%20aBrowser%20classes%3A%20aCollection%20level%3A%20anInteger%0A%09%5Eself%20new%0A%09%09theClass%3A%20aClass%3B%0A%09%09browser%3A%20aBrowser%3B%0A%09%09level%3A%20anInteger%3B%0A%09%09getNodesFrom%3A%20aCollection%3B%0A%09%09yourself'), -messageSends: ["theClass:", "browser:", "level:", "getNodesFrom:", "yourself", "new"], +args: [], +source: unescape('remove%0A%09div%20asJQuery%20remove'), +messageSends: ["remove", "asJQuery"], referencedClasses: [] }), -smalltalk.ClassesListNode.klass); - +smalltalk.TabWidget); -smalltalk.addClass('DebugErrorHandler', smalltalk.ErrorHandler, [], 'IDE'); smalltalk.addMethod( -unescape('_handleError_'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('handleError%3A'), -category: 'error handling', -fn: function (anError){ +selector: unescape('renderBoxOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -smalltalk.send((function(){return (function($rec){smalltalk.send($rec, "_error_", [anError]);return smalltalk.send($rec, "_open", []);})(smalltalk.send((smalltalk.Debugger || Debugger), "_new", []));}), "_on_do_", [(smalltalk.Error || Error), (function(error){return smalltalk.send(smalltalk.send((smalltalk.ErrorHandler || ErrorHandler), "_new", []), "_handleError_", [error]);})]); -return self;}, -args: ["anError"], -source: unescape('handleError%3A%20anError%0A%09%5BDebugger%20new%0A%09%09error%3A%20anError%3B%0A%09%09open%5D%20on%3A%20Error%20do%3A%20%5B%3Aerror%20%7C%0A%09%09%09ErrorHandler%20new%20handleError%3A%20error%5D'), -messageSends: ["on:do:", "error:", "open", "new", "handleError:"], -referencedClasses: ["Debugger", "Error", "ErrorHandler"] -}), -smalltalk.DebugErrorHandler); - -smalltalk.addMethod( -unescape('_initialize'), -smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', -fn: function (){ -var self=this; -smalltalk.send(self, "_register", []); return self;}, -args: [], -source: unescape('initialize%0A%09self%20register'), -messageSends: ["register"], +args: ["html"], +source: unescape('renderBoxOn%3A%20html'), +messageSends: [], referencedClasses: [] }), -smalltalk.DebugErrorHandler.klass); - +smalltalk.TabWidget); -smalltalk.addClass('Workspace', smalltalk.TabWidget, ['sourceArea'], 'IDE'); smalltalk.addMethod( -unescape('_label'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('label'), -category: 'accessing', -fn: function (){ +selector: unescape('renderButtonsOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -return "Workspace"; + return self;}, -args: [], -source: unescape('label%0A%20%20%20%20%5E%27Workspace%27'), +args: ["html"], +source: unescape('renderButtonsOn%3A%20html'), messageSends: [], referencedClasses: [] }), -smalltalk.Workspace); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_clearWorkspace'), +unescape('_renderOn_'), smalltalk.method({ -selector: unescape('clearWorkspace'), -category: 'actions', -fn: function (){ +selector: unescape('renderOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -smalltalk.send(self['@sourceArea'], "_clear", []); +(self['@div']=(function($rec){smalltalk.send($rec, "_class_", ["jtalkTool"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_div", []))); +smalltalk.send(self, "_renderTab", []); return self;}, -args: [], -source: unescape('clearWorkspace%0A%20%20%20%20sourceArea%20clear'), -messageSends: ["clear"], +args: ["html"], +source: unescape('renderOn%3A%20html%0A%09div%20%3A%3D%20html%20div%0A%09%09class%3A%20%27jtalkTool%27%3B%0A%09%09yourself.%0A%09self%20renderTab'), +messageSends: ["class:", "yourself", "div", "renderTab"], referencedClasses: [] }), -smalltalk.Workspace); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_doIt'), +unescape('_renderTab'), smalltalk.method({ -selector: unescape('doIt'), -category: 'actions', +selector: unescape('renderTab'), +category: 'rendering', fn: function (){ var self=this; -smalltalk.send(self['@sourceArea'], "_doIt", []); +smalltalk.send(self['@div'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["jt_box"]);return smalltalk.send($rec, "_with_", [(function(){return smalltalk.send(self, "_renderBoxOn_", [html]);})]);})(smalltalk.send(html, "_div", []));return (function($rec){smalltalk.send($rec, "_class_", ["jt_buttons"]);return smalltalk.send($rec, "_with_", [(function(){return smalltalk.send(self, "_renderButtonsOn_", [html]);})]);})(smalltalk.send(html, "_div", []));})]); return self;}, args: [], -source: unescape('doIt%0A%20%20%20sourceArea%20doIt'), -messageSends: ["doIt"], +source: unescape('renderTab%0A%09div%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%20%20%20%20html%20div%0A%09%09class%3A%20%27jt_box%27%3B%0A%09%09with%3A%20%5Bself%20renderBoxOn%3A%20html%5D.%0A%09%20%20%20%20html%20div%0A%09%09class%3A%20%27jt_buttons%27%3B%0A%09%09with%3A%20%5Bself%20renderButtonsOn%3A%20html%5D%5D'), +messageSends: ["contents:", "class:", "with:", "renderBoxOn:", "div", "renderButtonsOn:"], referencedClasses: [] }), -smalltalk.Workspace); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_printIt'), +unescape('_show'), smalltalk.method({ -selector: unescape('printIt'), +selector: unescape('show'), category: 'actions', fn: function (){ var self=this; -smalltalk.send(self['@sourceArea'], "_printIt", []); +smalltalk.send(smalltalk.send(self['@div'], "_asJQuery", []), "_show", []); return self;}, args: [], -source: unescape('printIt%0A%09sourceArea%20printIt'), -messageSends: ["printIt"], +source: unescape('show%0A%09div%20asJQuery%20show'), +messageSends: ["show", "asJQuery"], referencedClasses: [] }), -smalltalk.Workspace); +smalltalk.TabWidget); smalltalk.addMethod( -unescape('_inspectIt'), -smalltalk.method({ -selector: unescape('inspectIt'), -category: 'actions', +unescape('_update'), +smalltalk.method({ +selector: unescape('update'), +category: 'rendering', fn: function (){ var self=this; -smalltalk.send(self['@sourceArea'], "_inspectIt", []); +smalltalk.send(self, "_renderTab", []); return self;}, args: [], -source: unescape('inspectIt%0A%20%20%20%20sourceArea%20inspectIt'), -messageSends: ["inspectIt"], +source: unescape('update%0A%09self%20renderTab'), +messageSends: ["renderTab"], referencedClasses: [] }), -smalltalk.Workspace); +smalltalk.TabWidget); + smalltalk.addMethod( -unescape('_fileIn'), +unescape('_open'), smalltalk.method({ -selector: unescape('fileIn'), -category: 'actions', +selector: unescape('open'), +category: 'instance creation', fn: function (){ var self=this; -smalltalk.send(self['@sourceArea'], "_fileIn", []); +return smalltalk.send(smalltalk.send(self, "_new", []), "_open", []); return self;}, args: [], -source: unescape('fileIn%0A%20%20%20%20sourceArea%20fileIn'), -messageSends: ["fileIn"], +source: unescape('open%0A%20%20%20%20%5Eself%20new%20open'), +messageSends: ["open", "new"], referencedClasses: [] }), -smalltalk.Workspace); +smalltalk.TabWidget.klass); + +smalltalk.addClass('Browser', smalltalk.TabWidget, ['selectedPackage', 'selectedClass', 'selectedProtocol', 'selectedMethod', 'packagesList', 'classesList', 'protocolsList', 'methodsList', 'sourceArea', 'tabsList', 'selectedTab', 'saveButton', 'classButtons', 'methodButtons', 'unsavedChanges'], 'IDE'); smalltalk.addMethod( -unescape('_renderBoxOn_'), +unescape('_addInstanceVariableNamed_toClass_'), smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('addInstanceVariableNamed%3AtoClass%3A'), +category: 'actions', +fn: function (aString, aClass){ var self=this; -(self['@sourceArea']=smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", [])); -smalltalk.send(self['@sourceArea'], "_renderOn_", [html]); +smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), smalltalk.send(aClass, "_name", []), (function($rec){smalltalk.send($rec, "_add_", [aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_copy", [])), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])]); return self;}, -args: ["html"], -source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20sourceArea%20%3A%3D%20SourceArea%20new.%0A%20%20%20%20sourceArea%20renderOn%3A%20html'), -messageSends: ["new", "renderOn:"], -referencedClasses: ["SourceArea"] +args: ["aString", "aClass"], +source: unescape('addInstanceVariableNamed%3A%20aString%20toClass%3A%20aClass%0A%09ClassBuilder%20new%0A%09%09addSubclassOf%3A%20aClass%20superclass%20%0A%09%09named%3A%20aClass%20name%20%0A%09%09instanceVariableNames%3A%20%28aClass%20instanceVariableNames%20copy%20add%3A%20aString%3B%20yourself%29%0A%09%09package%3A%20aClass%20package%20name'), +messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "new", "superclass", "name", "add:", "yourself", "copy", "instanceVariableNames", "package"], +referencedClasses: ["ClassBuilder"] }), -smalltalk.Workspace); +smalltalk.Browser); smalltalk.addMethod( -unescape('_renderButtonsOn_'), +unescape('_addNewClass'), smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('addNewClass'), +category: 'actions', +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);smalltalk.send($rec, "_title_", [unescape("ctrl+d")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_doIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);smalltalk.send($rec, "_title_", [unescape("ctrl+p")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_printIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);smalltalk.send($rec, "_title_", [unescape("ctrl+i")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_inspectIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["FileIn"]);smalltalk.send($rec, "_title_", [unescape("ctrl+f")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_fileIn", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["Clear workspace"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_clearWorkspace", []);})]);})(smalltalk.send(html, "_button", [])); +var className=nil; +(className=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", ["New class"])); +((($receiver = smalltalk.send(smalltalk.send(className, "_notNil", []), "_and_", [(function(){return smalltalk.send(className, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send((smalltalk.Object || Object), "_subclass_instanceVariableNames_package_", [className, "", smalltalk.send(self, "_selectedPackage", [])]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send((smalltalk.Object || Object), "_subclass_instanceVariableNames_package_", [className, "", smalltalk.send(self, "_selectedPackage", [])]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})])); return self;}, -args: ["html"], -source: unescape('renderButtonsOn%3A%20html%0A%20%20%20%20html%20button%0A%09with%3A%20%27DoIt%27%3B%0A%09title%3A%20%27ctrl+d%27%3B%0A%09onClick%3A%20%5Bself%20doIt%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27PrintIt%27%3B%0A%09title%3A%20%27ctrl+p%27%3B%0A%09onClick%3A%20%5Bself%20printIt%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27InspectIt%27%3B%0A%09title%3A%20%27ctrl+i%27%3B%0A%09onClick%3A%20%5Bself%20inspectIt%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27FileIn%27%3B%0A%09title%3A%20%27ctrl+f%27%3B%0A%09onClick%3A%20%5Bself%20fileIn%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27Clear%20workspace%27%3B%0A%09onClick%3A%20%5Bself%20clearWorkspace%5D'), -messageSends: ["with:", "title:", "onClick:", "doIt", "button", "printIt", "inspectIt", "fileIn", "clearWorkspace"], -referencedClasses: [] +args: [], +source: unescape('addNewClass%0A%09%7C%20className%20%7C%0A%09className%20%3A%3D%20window%20prompt%3A%20%27New%20class%27.%0A%09%28className%20notNil%20and%3A%20%5BclassName%20notEmpty%5D%29%20ifTrue%3A%20%5B%0A%09%09Object%20subclass%3A%20className%20instanceVariableNames%3A%20%27%27%20package%3A%20self%20selectedPackage.%0A%20%20%20%20%20%20%20%20%20%20%09%20self%20%0A%09%09%09resetClassesList%3B%0A%09%09%09updateClassesList.%0A%09%09self%20selectClass%3A%20%28Smalltalk%20current%20at%3A%20className%29%5D'), +messageSends: ["prompt:", "ifTrue:", "and:", "notNil", "notEmpty", "subclass:instanceVariableNames:package:", "selectedPackage", "resetClassesList", "updateClassesList", "selectClass:", "at:", "current"], +referencedClasses: ["Object", "Smalltalk"] }), -smalltalk.Workspace); - - +smalltalk.Browser); -smalltalk.addClass('Browser', smalltalk.TabWidget, ['selectedPackage', 'selectedClass', 'selectedProtocol', 'selectedMethod', 'packagesList', 'classesList', 'protocolsList', 'methodsList', 'sourceArea', 'tabsList', 'selectedTab', 'saveButton', 'classButtons', 'methodButtons', 'unsavedChanges'], 'IDE'); smalltalk.addMethod( -unescape('_label'), +unescape('_addNewProtocol'), smalltalk.method({ -selector: unescape('label'), -category: 'accessing', +selector: unescape('addNewProtocol'), +category: 'actions', fn: function (){ var self=this; -return (($receiver = self['@selectedClass']) == nil || $receiver == undefined) ? (function(){return unescape("Browser%20%28nil%29");})() : (function(){return smalltalk.send("Browser: ", "__comma", [smalltalk.send(self['@selectedClass'], "_name", [])]);})(); +var newProtocol=nil; +(newProtocol=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", ["New method protocol"])); +((($receiver = smalltalk.send(smalltalk.send(newProtocol, "_notNil", []), "_and_", [(function(){return smalltalk.send(newProtocol, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self['@selectedMethod'], "_category_", [newProtocol]);return smalltalk.send(self, "_setMethodProtocol_", [newProtocol]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self['@selectedMethod'], "_category_", [newProtocol]);return smalltalk.send(self, "_setMethodProtocol_", [newProtocol]);})])); return self;}, args: [], -source: unescape('label%0A%20%20%20%20%5EselectedClass%20%0A%09ifNil%3A%20%5B%27Browser%20%28nil%29%27%5D%0A%09ifNotNil%3A%20%5B%27Browser%3A%20%27%2C%20selectedClass%20name%5D'), -messageSends: ["ifNil:ifNotNil:", unescape("%2C"), "name"], +source: unescape('addNewProtocol%0A%20%20%20%20%7C%20newProtocol%20%7C%0A%20%20%20%20newProtocol%20%3A%3D%20window%20prompt%3A%20%27New%20method%20protocol%27.%0A%20%20%20%20%28newProtocol%20notNil%20and%3A%20%5BnewProtocol%20notEmpty%5D%29%20ifTrue%3A%20%5B%0A%09selectedMethod%20category%3A%20newProtocol.%0A%09self%20setMethodProtocol%3A%20newProtocol%5D'), +messageSends: ["prompt:", "ifTrue:", "and:", "notNil", "notEmpty", "category:", "setMethodProtocol:"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_packages'), +unescape('_ajaxPutAt_data_'), smalltalk.method({ -selector: unescape('packages'), -category: 'accessing', -fn: function (){ +selector: unescape('ajaxPutAt%3Adata%3A'), +category: 'network', +fn: function (anURL, aString){ var self=this; -var packages=nil; -(packages=smalltalk.send((smalltalk.Array || Array), "_new", [])); -smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(packages, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]); -return smalltalk.send(packages, "_sort", []); +smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_ajax_options_", [anURL, smalltalk.HashedCollection._fromPairs_([smalltalk.send("type", "__minus_gt", ["PUT"]),smalltalk.send("data", "__minus_gt", [aString]),smalltalk.send("contentType", "__minus_gt", [unescape("text/plain%3Bcharset%3DUTF-8")]),smalltalk.send("error", "__minus_gt", [(function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send("PUT request failed at: ", "__comma", [anURL])]);})])])]); return self;}, -args: [], -source: unescape('packages%0A%20%20%20%20%7C%20packages%20%7C%0A%20%20%20%20packages%20%3A%3D%20Array%20new.%0A%20%20%20%20Smalltalk%20current%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%28packages%20includes%3A%20each%20category%29%20ifFalse%3A%20%5B%0A%09%20%20%20%20packages%20add%3A%20each%20category%5D%5D.%0A%20%20%20%20%5Epackages%20sort'), -messageSends: ["new", "do:", "classes", "current", "ifFalse:", "includes:", "category", "add:", "sort"], -referencedClasses: ["Array", "Smalltalk"] +args: ["anURL", "aString"], +source: unescape('ajaxPutAt%3A%20anURL%20data%3A%20aString%0A%09jQuery%20%0A%09%09ajax%3A%20anURL%09options%3A%20%23%7B%09%27type%27%20-%3E%20%27PUT%27.%0A%09%09%09%09%09%09%09%09%27data%27%20-%3E%20aString.%0A%09%09%09%09%09%09%09%09%27contentType%27%20-%3E%20%27text/plain%3Bcharset%3DUTF-8%27.%0A%09%09%09%09%09%09%09%09%27error%27%20-%3E%20%5Bwindow%20alert%3A%20%27PUT%20request%20failed%20at%3A%20%20%27%2C%20anURL%5D%20%7D'), +messageSends: ["ajax:options:", unescape("-%3E"), "alert:", unescape("%2C")], +referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_classes'), +unescape('_canBeClosed'), smalltalk.method({ -selector: unescape('classes'), -category: 'accessing', +selector: unescape('canBeClosed'), +category: 'testing', fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_select_", [(function(each){return smalltalk.send(smalltalk.send(each, "_category", []), "__eq", [self['@selectedPackage']]);})]), "_sort_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_name", [])).klass === smalltalk.Number) ? $receiver <smalltalk.send(b, "_name", []) : smalltalk.send($receiver, "__lt", [smalltalk.send(b, "_name", [])]));})]), "_asSet", []); +return true; return self;}, args: [], -source: unescape('classes%0A%20%20%20%20%5E%28%28Smalltalk%20current%20classes%20%0A%09select%3A%20%5B%3Aeach%20%7C%20each%20category%20%3D%20selectedPackage%5D%29%0A%09sort%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20name%20%3C%20b%20name%5D%29%20asSet'), -messageSends: ["asSet", "sort:", "select:", "classes", "current", unescape("%3D"), "category", unescape("%3C"), "name"], -referencedClasses: ["Smalltalk"] +source: unescape('canBeClosed%0A%09%5Etrue'), +messageSends: [], +referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_protocols'), +unescape('_cancelChanges'), smalltalk.method({ -selector: unescape('protocols'), -category: 'accessing', +selector: unescape('cancelChanges'), +category: 'actions', fn: function (){ var self=this; -try{var klass=nil; -(($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return []}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return []}})})();})]));(klass=((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return self['@selectedClass'];})() : (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return self['@selectedClass'];}), (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})])));((($receiver = smalltalk.send(smalltalk.send(klass, "_methodDictionary", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send((smalltalk.Array || Array), "_with_", ["not yet classified"])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send((smalltalk.Array || Array), "_with_", ["not yet classified"])}})})();})]));return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send(klass, "_protocols", [])}})})();})() : nil; -(function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send((smalltalk.Array || Array), "_new", [])}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_protocols'){return e.fn()} throw(e)}}, +return ((($receiver = self['@unsavedChanges']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [unescape("Cancel%20changes%3F")]);})() : (function(){return true;})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [unescape("Cancel%20changes%3F")]);}), (function(){return true;})])); +return self;}, args: [], -source: unescape('protocols%0A%20%20%20%20%7C%20klass%20%7C%0A%20%20%20%20selectedClass%20ifNotNil%3A%20%5B%0A%09selectedTab%20%3D%20%23comment%20ifTrue%3A%20%5B%5E%23%28%29%5D.%0A%09klass%20%3A%3D%20selectedTab%20%3D%20%23instance%0A%09%20%20%20%20ifTrue%3A%20%5BselectedClass%5D%0A%09%20%20%20%20ifFalse%3A%20%5BselectedClass%20class%5D.%0A%09klass%20methodDictionary%20isEmpty%20ifTrue%3A%20%5B%0A%09%20%20%20%20%5EArray%20with%3A%20%27not%20yet%20classified%27%5D.%0A%09%5Eklass%20protocols%5D.%0A%20%20%20%20%5EArray%20new'), -messageSends: ["ifNotNil:", "ifTrue:", unescape("%3D"), "ifTrue:ifFalse:", "class", "isEmpty", "methodDictionary", "with:", "protocols", "new"], -referencedClasses: ["Array"] +source: unescape('cancelChanges%0A%20%20%20%20%5EunsavedChanges%20%0A%09ifTrue%3A%20%5Bwindow%20confirm%3A%20%27Cancel%20changes%3F%27%5D%0A%09ifFalse%3A%20%5Btrue%5D'), +messageSends: ["ifTrue:ifFalse:", "confirm:"], +referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_methods'), +unescape('_classCommentSource'), smalltalk.method({ -selector: unescape('methods'), +selector: unescape('classCommentSource'), category: 'accessing', fn: function (){ var self=this; -try{var klass=nil; -((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return []}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return []}})})();})])); -(($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){return (klass=((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return self['@selectedClass'];})() : (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return self['@selectedClass'];}), (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})])));})() : nil; -(function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return smalltalk.send((($receiver = self['@selectedProtocol']) == nil || $receiver == undefined) ? (function(){return (($receiver = klass) == nil || $receiver == undefined) ? (function(){return [];})() : (function(){return smalltalk.send(smalltalk.send(klass, "_methodDictionary", []), "_values", []);})();})() : (function(){return smalltalk.send(smalltalk.send(smalltalk.send(klass, "_methodDictionary", []), "_values", []), "_select_", [(function(each){return smalltalk.send(smalltalk.send(each, "_category", []), "__eq", [self['@selectedProtocol']]);})]);})(), "_sort_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_selector", [])).klass === smalltalk.Number) ? $receiver <smalltalk.send(b, "_selector", []) : smalltalk.send($receiver, "__lt", [smalltalk.send(b, "_selector", [])]));})])}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_methods'){return e.fn()} throw(e)}}, +return smalltalk.send(self['@selectedClass'], "_comment", []); +return self;}, args: [], -source: unescape('methods%0A%20%20%20%20%7C%20klass%20%7C%0A%20%20%20%20selectedTab%20%3D%20%23comment%20ifTrue%3A%20%5B%5E%23%28%29%5D.%0A%20%20%20%20selectedClass%20ifNotNil%3A%20%5B%0A%09klass%20%3A%3D%20selectedTab%20%3D%20%23instance%0A%09%20%20%20%20ifTrue%3A%20%5BselectedClass%5D%0A%09%20%20%20%20ifFalse%3A%20%5BselectedClass%20class%5D%5D.%0A%20%20%20%20%5E%28selectedProtocol%20%0A%09ifNil%3A%20%5B%0A%09%20%20%20%20klass%20%0A%09%09ifNil%3A%20%5B%23%28%29%5D%20%0A%09%09ifNotNil%3A%20%5Bklass%20methodDictionary%20values%5D%5D%0A%09ifNotNil%3A%20%5B%0A%09%20%20%20%20klass%20methodDictionary%20values%20select%3A%20%5B%3Aeach%20%7C%0A%09%09each%20category%20%3D%20selectedProtocol%5D%5D%29%20sort%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20selector%20%3C%20b%20selector%5D'), -messageSends: ["ifTrue:", unescape("%3D"), "ifNotNil:", "ifTrue:ifFalse:", "class", "sort:", "ifNil:ifNotNil:", "values", "methodDictionary", "select:", "category", unescape("%3C"), "selector"], +source: unescape('classCommentSource%0A%20%20%20%20%5EselectedClass%20comment'), +messageSends: ["comment"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_source'), +unescape('_classDeclarationSource'), smalltalk.method({ -selector: unescape('source'), +selector: unescape('classDeclarationSource'), category: 'accessing', fn: function (){ var self=this; -try{((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_source', fn: function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_declarationSource", []);})() : (function(){return smalltalk.send(self, "_methodSource", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_declarationSource", []);}), (function(){return smalltalk.send(self, "_methodSource", []);})]))}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '_source', fn: function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_declarationSource", []);})() : (function(){return smalltalk.send(self, "_methodSource", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_declarationSource", []);}), (function(){return smalltalk.send(self, "_methodSource", []);})]))}})})();})])); -(function(){throw({name: 'stReturn', selector: '_source', fn: function(){return (($receiver = self['@selectedClass']) == nil || $receiver == undefined) ? (function(){return "";})() : (function(){return smalltalk.send(self, "_classCommentSource", []);})()}})})(); +try{var stream=nil; +(stream=smalltalk.send("", "_writeStream", [])); +(($receiver = self['@selectedClass']) == nil || $receiver == undefined) ? (function(){return (function(){throw({name: 'stReturn', selector: '_classDeclarationSource', fn: function(){return smalltalk.send(self, "_classDeclarationTemplate", [])}})})();})() : $receiver; +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@selectedClass'], "_superclass", []), "_asString", [])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%20subclass%3A%20%23")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@selectedClass'], "_name", [])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send((smalltalk.String || String), "_lf", []), "__comma", [smalltalk.send((smalltalk.String || String), "_tab", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("instanceVariableNames%3A%20%27")]);})(stream); +smalltalk.send(smalltalk.send(self['@selectedClass'], "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(stream, "_nextPutAll_", [" "]);})]); +(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", [smalltalk.send((smalltalk.String || String), "_tab", [])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("package%3A%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@selectedClass'], "_category", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%27")]);})(stream); +(function(){throw({name: 'stReturn', selector: '_classDeclarationSource', fn: function(){return smalltalk.send(stream, "_contents", [])}})})(); return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_source'){return e.fn()} throw(e)}}, +} catch(e) {if(e.name === 'stReturn' && e.selector === '_classDeclarationSource'){return e.fn()} throw(e)}}, args: [], -source: unescape('source%0A%20%20%20%20selectedTab%20%3D%20%23comment%20ifFalse%3A%20%5B%0A%09%5E%28selectedProtocol%20notNil%20or%3A%20%5BselectedMethod%20notNil%5D%29%0A%09%20%20%20%20ifFalse%3A%20%5Bself%20declarationSource%5D%0A%09%20%20%20%20ifTrue%3A%20%5Bself%20methodSource%5D%5D.%0A%20%20%20%20%5EselectedClass%0A%09ifNil%3A%20%5B%27%27%5D%0A%09ifNotNil%3A%20%5Bself%20classCommentSource%5D'), -messageSends: ["ifFalse:", unescape("%3D"), "ifFalse:ifTrue:", "or:", "notNil", "declarationSource", "methodSource", "ifNil:ifNotNil:", "classCommentSource"], -referencedClasses: [] +source: unescape('classDeclarationSource%0A%09%7C%20stream%20%7C%0A%09stream%20%3A%3D%20%27%27%20writeStream.%0A%09selectedClass%20ifNil%3A%20%5B%5Eself%20classDeclarationTemplate%5D.%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20selectedClass%20superclass%20asString%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%20subclass%3A%20%23%27%3B%0A%09%20%20%20%20nextPutAll%3A%20selectedClass%20name%3B%0A%09%20%20%20%20nextPutAll%3A%20String%20lf%2C%20String%20tab%3B%0A%09%20%20%20%20nextPutAll%3A%20%27instanceVariableNames%3A%20%27%27%27.%0A%09selectedClass%20instanceVariableNames%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20stream%20nextPutAll%3A%20each%5D%20%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%20%27%5D.%0A%09stream%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27%2C%20String%20lf%2C%20String%20tab%3B%0A%09%20%20%20%20nextPutAll%3A%20%27package%3A%20%27%27%27%3B%0A%09%20%20%20%20nextPutAll%3A%20selectedClass%20category%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27.%0A%09%5Estream%20contents'), +messageSends: ["writeStream", "ifNil:", "classDeclarationTemplate", "nextPutAll:", "asString", "superclass", "name", unescape("%2C"), "lf", "tab", "do:separatedBy:", "instanceVariableNames", "category", "contents"], +referencedClasses: ["String"] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_methodSource'), +unescape('_classDeclarationTemplate'), smalltalk.method({ -selector: unescape('methodSource'), +selector: unescape('classDeclarationTemplate'), category: 'accessing', fn: function (){ var self=this; -return (($receiver = self['@selectedMethod']) == nil || $receiver == undefined) ? (function(){return smalltalk.send(self, "_dummyMethodSource", []);})() : (function(){return smalltalk.send(self['@selectedMethod'], "_source", []);})(); +return smalltalk.send(smalltalk.send(unescape("Object%20subclass%3A%20%23NameOfSubclass%0A%09instanceVariableNames%3A%20%27%27%0A%09package%3A%20%27"), "__comma", [smalltalk.send(self, "_selectedPackage", [])]), "__comma", [unescape("%27")]); return self;}, args: [], -source: unescape('methodSource%0A%20%20%20%20%5EselectedMethod%0A%09ifNil%3A%20%5Bself%20dummyMethodSource%5D%0A%09ifNotNil%3A%20%5BselectedMethod%20source%5D'), -messageSends: ["ifNil:ifNotNil:", "dummyMethodSource", "source"], +source: unescape('classDeclarationTemplate%0A%09%5E%27Object%20subclass%3A%20%23NameOfSubclass%0A%09instanceVariableNames%3A%20%27%27%27%27%0A%09package%3A%20%27%27%27%2C%20self%20selectedPackage%2C%20%27%27%27%27'), +messageSends: [unescape("%2C"), "selectedPackage"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_dummyMethodSource'), +unescape('_classes'), smalltalk.method({ -selector: unescape('dummyMethodSource'), +selector: unescape('classes'), category: 'accessing', fn: function (){ var self=this; -return unescape("messageSelectorAndArgumentNames%0A%09%22comment%20stating%20purpose%20of%20message%22%0A%0A%09%7C%20temporary%20variable%20names%20%7C%0A%09statements"); +return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_select_", [(function(each){return smalltalk.send(smalltalk.send(each, "_category", []), "__eq", [self['@selectedPackage']]);})]), "_sort_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_name", [])).klass === smalltalk.Number) ? $receiver <smalltalk.send(b, "_name", []) : smalltalk.send($receiver, "__lt", [smalltalk.send(b, "_name", [])]));})]), "_asSet", []); return self;}, args: [], -source: unescape('dummyMethodSource%0A%20%20%20%20%5E%27messageSelectorAndArgumentNames%0A%09%22comment%20stating%20purpose%20of%20message%22%0A%0A%09%7C%20temporary%20variable%20names%20%7C%0A%09statements%27'), -messageSends: [], -referencedClasses: [] +source: unescape('classes%0A%20%20%20%20%5E%28%28Smalltalk%20current%20classes%20%0A%09select%3A%20%5B%3Aeach%20%7C%20each%20category%20%3D%20selectedPackage%5D%29%0A%09sort%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20name%20%3C%20b%20name%5D%29%20asSet'), +messageSends: ["asSet", "sort:", "select:", "classes", "current", unescape("%3D"), "category", unescape("%3C"), "name"], +referencedClasses: ["Smalltalk"] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_declarationSource'), +unescape('_commitPackage'), smalltalk.method({ -selector: unescape('declarationSource'), -category: 'accessing', +selector: unescape('commitPackage'), +category: 'actions', fn: function (){ var self=this; -return ((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_classDeclarationSource", []);})() : (function(){return smalltalk.send(self, "_metaclassDeclarationSource", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_classDeclarationSource", []);}), (function(){return smalltalk.send(self, "_metaclassDeclarationSource", []);})])); +(($receiver = self['@selectedPackage']) != nil && $receiver != undefined) ? (function(){var package=nil; +(package=smalltalk.send((smalltalk.Package || Package), "_named_", [self['@selectedPackage']]));return smalltalk.send([smalltalk.send((smalltalk.Exporter || Exporter), "__minus_gt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(package, "_commitPathJs", []), "__comma", [unescape("/")]), "__comma", [self['@selectedPackage']]), "__comma", [".js"])]),smalltalk.send((smalltalk.StrippedExporter || StrippedExporter), "__minus_gt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(package, "_commitPathJs", []), "__comma", [unescape("/")]), "__comma", [self['@selectedPackage']]), "__comma", [".deploy.js"])]),smalltalk.send((smalltalk.ChunkExporter || ChunkExporter), "__minus_gt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(package, "_commitPathSt", []), "__comma", [unescape("/")]), "__comma", [self['@selectedPackage']]), "__comma", [".st"])])], "_do_", [(function(commitStrategy){var fileContents=nil; +(fileContents=smalltalk.send(smalltalk.send(smalltalk.send(commitStrategy, "_key", []), "_new", []), "_exportPackage_", [self['@selectedPackage']]));return smalltalk.send(self, "_ajaxPutAt_data_", [smalltalk.send(commitStrategy, "_value", []), fileContents]);})]);})() : nil; return self;}, args: [], -source: unescape('declarationSource%0A%20%20%20%20%5EselectedTab%20%3D%20%23instance%0A%09ifTrue%3A%20%5Bself%20classDeclarationSource%5D%0A%09ifFalse%3A%20%5Bself%20metaclassDeclarationSource%5D'), -messageSends: ["ifTrue:ifFalse:", unescape("%3D"), "classDeclarationSource", "metaclassDeclarationSource"], -referencedClasses: [] +source: unescape('commitPackage%0A%09selectedPackage%20ifNotNil%3A%20%5B%20%7Cpackage%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09%09%20package%20%3A%3D%20Package%20named%3A%20selectedPackage.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09%09%20%7B%09Exporter%20%09%09%09-%3E%20%28package%20commitPathJs%2C%20%27/%27%2C%20selectedPackage%2C%20%27.js%27%29.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09StrippedExporter%20%09-%3E%20%28package%20commitPathJs%2C%20%27/%27%2C%20selectedPackage%2C%20%27.deploy.js%27%29.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09%09%20ChunkExporter%20%09%09-%3E%20%28package%20commitPathSt%2C%20%27/%27%2C%20selectedPackage%2C%20%27.st%27%29%20%09%09%09%7D%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09%09do%3A%20%5B%3AcommitStrategy%7C%20%7CfileContents%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09fileContents%20%3A%3D%20%28commitStrategy%20key%20new%20exportPackage%3A%20selectedPackage%29.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20ajaxPutAt%3A%20commitStrategy%20value%20data%3A%20%20fileContents%5D%0A%20%20%20%20%20%20%20%20%20%09%09%09%09%09%09%5D'), +messageSends: ["ifNotNil:", "named:", "do:", unescape("-%3E"), unescape("%2C"), "commitPathJs", "commitPathSt", "exportPackage:", "new", "key", "ajaxPutAt:data:", "value"], +referencedClasses: ["Package", "Exporter", "StrippedExporter", "ChunkExporter"] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_classDeclarationSource'), +unescape('_compile'), smalltalk.method({ -selector: unescape('classDeclarationSource'), -category: 'accessing', +selector: unescape('compile'), +category: 'actions', fn: function (){ var self=this; -try{var stream=nil; -(stream=smalltalk.send("", "_writeStream", [])); -(($receiver = self['@selectedClass']) == nil || $receiver == undefined) ? (function(){return (function(){throw({name: 'stReturn', selector: '_classDeclarationSource', fn: function(){return smalltalk.send(self, "_classDeclarationTemplate", [])}})})();})() : $receiver; -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@selectedClass'], "_superclass", []), "_asString", [])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%20subclass%3A%20%23")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@selectedClass'], "_name", [])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send((smalltalk.String || String), "_lf", []), "__comma", [smalltalk.send((smalltalk.String || String), "_tab", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("instanceVariableNames%3A%20%27")]);})(stream); -smalltalk.send(smalltalk.send(self['@selectedClass'], "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(stream, "_nextPutAll_", [" "]);})]); -(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", [smalltalk.send((smalltalk.String || String), "_tab", [])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("package%3A%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@selectedClass'], "_category", [])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%27")]);})(stream); -(function(){throw({name: 'stReturn', selector: '_classDeclarationSource', fn: function(){return smalltalk.send(stream, "_contents", [])}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_classDeclarationSource'){return e.fn()} throw(e)}}, +smalltalk.send(self, "_disableSaveButton", []); +((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_compileClassComment", []);})() : nil;})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_compileDefinition", []);})() : (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_compileDefinition", []);}), (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_compileClassComment", []);})() : nil;}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_compileDefinition", []);})() : (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_compileDefinition", []);}), (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})]));})])); +return self;}, args: [], -source: unescape('classDeclarationSource%0A%09%7C%20stream%20%7C%0A%09stream%20%3A%3D%20%27%27%20writeStream.%0A%09selectedClass%20ifNil%3A%20%5B%5Eself%20classDeclarationTemplate%5D.%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20selectedClass%20superclass%20asString%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%20subclass%3A%20%23%27%3B%0A%09%20%20%20%20nextPutAll%3A%20selectedClass%20name%3B%0A%09%20%20%20%20nextPutAll%3A%20String%20lf%2C%20String%20tab%3B%0A%09%20%20%20%20nextPutAll%3A%20%27instanceVariableNames%3A%20%27%27%27.%0A%09selectedClass%20instanceVariableNames%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20stream%20nextPutAll%3A%20each%5D%20%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%20%27%5D.%0A%09stream%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27%2C%20String%20lf%2C%20String%20tab%3B%0A%09%20%20%20%20nextPutAll%3A%20%27package%3A%20%27%27%27%3B%0A%09%20%20%20%20nextPutAll%3A%20selectedClass%20category%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27.%0A%09%5Estream%20contents'), -messageSends: ["writeStream", "ifNil:", "classDeclarationTemplate", "nextPutAll:", "asString", "superclass", "name", unescape("%2C"), "lf", "tab", "do:separatedBy:", "instanceVariableNames", "category", "contents"], -referencedClasses: ["String"] +source: unescape('compile%0A%20%20%20%20self%20disableSaveButton.%0A%20%20%20%20selectedTab%20%3D%20%23comment%20%0A%09ifTrue%3A%20%5B%0A%09%09%09selectedClass%20ifNotNil%3A%20%5B%0A%09%09%09%09self%20compileClassComment%5D%5D%0A%09ifFalse%3A%20%5B%0A%09%09%09%28selectedProtocol%20notNil%20or%3A%20%5BselectedMethod%20notNil%5D%29%0A%09%09%09%09ifFalse%3A%20%5Bself%20compileDefinition%5D%0A%09%09%09%09ifTrue%3A%20%5Bself%20compileMethodDefinition%5D%5D'), +messageSends: ["disableSaveButton", "ifTrue:ifFalse:", unescape("%3D"), "ifNotNil:", "compileClassComment", "ifFalse:ifTrue:", "or:", "notNil", "compileDefinition", "compileMethodDefinition"], +referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_metaclassDeclarationSource'), +unescape('_compileClassComment'), smalltalk.method({ -selector: unescape('metaclassDeclarationSource'), -category: 'accessing', +selector: unescape('compileClassComment'), +category: 'actions', fn: function (){ -var self=this; -var stream=nil; -(stream=smalltalk.send("", "_writeStream", [])); -(($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@selectedClass'], "_asString", [])]);smalltalk.send($rec, "_nextPutAll_", [" class "]);return smalltalk.send($rec, "_nextPutAll_", [unescape("instanceVariableNames%3A%20%27")]);})(stream);smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(stream, "_nextPutAll_", [" "]);})]);return smalltalk.send(stream, "_nextPutAll_", [unescape("%27")]);})() : nil; -return smalltalk.send(stream, "_contents", []); +var self=this; +smalltalk.send(self['@selectedClass'], "_comment_", [smalltalk.send(self['@sourceArea'], "_val", [])]); return self;}, args: [], -source: unescape('metaclassDeclarationSource%0A%20%20%20%20%7C%20stream%20%7C%0A%20%20%20%20stream%20%3A%3D%20%27%27%20writeStream.%0A%20%20%20%20selectedClass%20ifNotNil%3A%20%5B%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20selectedClass%20asString%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%20class%20%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27instanceVariableNames%3A%20%27%27%27.%0A%09selectedClass%20class%20instanceVariableNames%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20stream%20nextPutAll%3A%20each%5D%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%20%27%5D.%0A%09stream%20nextPutAll%3A%20%27%27%27%27%5D.%0A%20%20%20%20%5Estream%20contents'), -messageSends: ["writeStream", "ifNotNil:", "nextPutAll:", "asString", "do:separatedBy:", "instanceVariableNames", "class", "contents"], +source: unescape('compileClassComment%0A%20%20%20%20selectedClass%20comment%3A%20sourceArea%20val'), +messageSends: ["comment:", "val"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_classCommentSource'), +unescape('_compileDefinition'), smalltalk.method({ -selector: unescape('classCommentSource'), -category: 'accessing', +selector: unescape('compileDefinition'), +category: 'actions', fn: function (){ var self=this; -return smalltalk.send(self['@selectedClass'], "_comment", []); +var newClass=nil; +(newClass=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_loadExpression_", [smalltalk.send(self['@sourceArea'], "_val", [])])); +(function($rec){smalltalk.send($rec, "_resetClassesList", []);smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); +smalltalk.send(self, "_selectClass_", [newClass]); return self;}, args: [], -source: unescape('classCommentSource%0A%20%20%20%20%5EselectedClass%20comment'), -messageSends: ["comment"], -referencedClasses: [] +source: unescape('compileDefinition%0A%20%20%20%20%7C%20newClass%20%7C%0A%20%20%20%20newClass%20%3A%3D%20Compiler%20new%20loadExpression%3A%20sourceArea%20val.%0A%20%20%20%20self%20%0A%09resetClassesList%3B%0A%09updateCategoriesList%3B%0A%09updateClassesList.%0A%20%20%20%20self%20selectClass%3A%20newClass'), +messageSends: ["loadExpression:", "new", "val", "resetClassesList", "updateCategoriesList", "updateClassesList", "selectClass:"], +referencedClasses: ["Compiler"] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_selectedClass'), +unescape('_compileMethodDefinition'), smalltalk.method({ -selector: unescape('selectedClass'), -category: 'accessing', +selector: unescape('compileMethodDefinition'), +category: 'actions', fn: function (){ var self=this; -return self['@selectedClass']; +((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [self['@selectedClass']]);})() : (function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [smalltalk.send(self['@selectedClass'], "_class", [])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [self['@selectedClass']]);}), (function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [smalltalk.send(self['@selectedClass'], "_class", [])]);})])); return self;}, args: [], -source: unescape('selectedClass%0A%09%5EselectedClass'), -messageSends: [], +source: unescape('compileMethodDefinition%0A%20%20%20%20selectedTab%20%3D%20%23instance%0A%09ifTrue%3A%20%5Bself%20compileMethodDefinitionFor%3A%20selectedClass%5D%0A%09ifFalse%3A%20%5Bself%20compileMethodDefinitionFor%3A%20selectedClass%20class%5D'), +messageSends: ["ifTrue:ifFalse:", unescape("%3D"), "compileMethodDefinitionFor:", "class"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_classDeclarationTemplate'), +unescape('_compileMethodDefinitionFor_'), smalltalk.method({ -selector: unescape('classDeclarationTemplate'), -category: 'accessing', +selector: unescape('compileMethodDefinitionFor%3A'), +category: 'actions', +fn: function (aClass){ +var self=this; +try{var compiler=nil; +var method=nil; +var source=nil; +var node=nil; +(source=smalltalk.send(self['@sourceArea'], "_val", [])); +(($receiver = self['@selectedProtocol']) == nil || $receiver == undefined) ? (function(){return (self['@selectedProtocol']=smalltalk.send(self['@selectedMethod'], "_category", []));})() : $receiver; +(compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])); +smalltalk.send(compiler, "_source_", [source]); +(node=smalltalk.send(compiler, "_parse_", [source])); +((($receiver = smalltalk.send(node, "_isParseFailure", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send(smalltalk.send(smalltalk.send("PARSE ERROR: ", "__comma", [smalltalk.send(node, "_reason", [])]), "__comma", [unescape("%2C%20position%3A%20")]), "__comma", [smalltalk.send(smalltalk.send(node, "_position", []), "_asString", [])])])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send(smalltalk.send(smalltalk.send("PARSE ERROR: ", "__comma", [smalltalk.send(node, "_reason", [])]), "__comma", [unescape("%2C%20position%3A%20")]), "__comma", [smalltalk.send(smalltalk.send(node, "_position", []), "_asString", [])])])}})})();})])); +smalltalk.send(compiler, "_currentClass_", [aClass]); +(method=smalltalk.send(compiler, "_eval_", [smalltalk.send(compiler, "_compileNode_", [node])])); +smalltalk.send(method, "_category_", [self['@selectedProtocol']]); +smalltalk.send(smalltalk.send(compiler, "_unknownVariables", []), "_do_", [(function(each){return (($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_at_", [each])) == nil || $receiver == undefined) ? (function(){return ((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send(unescape("Declare%20%27"), "__comma", [each]), "__comma", [unescape("%27%20as%20instance%20variable%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_addInstanceVariableNamed_toClass_", [each, aClass]);return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [aClass])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_addInstanceVariableNamed_toClass_", [each, aClass]);return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [aClass])}})})();})]));})() : $receiver;})]); +smalltalk.send(aClass, "_addCompiledMethod_", [method]); +smalltalk.send(compiler, "_setupClass_", [aClass]); +smalltalk.send(self, "_updateMethodsList", []); +smalltalk.send(self, "_selectMethod_", [method]); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_compileMethodDefinitionFor_'){return e.fn()} throw(e)}}, +args: ["aClass"], +source: unescape('compileMethodDefinitionFor%3A%20aClass%0A%20%20%20%20%7C%20compiler%20method%20source%20node%20%7C%20%0A%20%20%20%20source%20%3A%3D%20sourceArea%20val.%0A%20%20%20%20selectedProtocol%20ifNil%3A%20%5BselectedProtocol%20%3A%3D%20selectedMethod%20category%5D.%0A%20%20%20%20compiler%20%3A%3D%20Compiler%20new.%0A%20%20%20%20compiler%20source%3A%20source.%0A%20%20%20%20node%20%3A%3D%20compiler%20parse%3A%20source.%0A%20%20%20%20node%20isParseFailure%20ifTrue%3A%20%5B%0A%09%5Ewindow%20alert%3A%20%27PARSE%20ERROR%3A%20%27%2C%20node%20reason%2C%20%27%2C%20position%3A%20%27%2C%20node%20position%20asString%5D.%0A%20%20%20%20compiler%20currentClass%3A%20aClass.%0A%20%20%20%20method%20%3A%3D%20compiler%20eval%3A%20%28compiler%20compileNode%3A%20node%29.%0A%20%20%20%20method%20category%3A%20selectedProtocol.%0A%20%20%20%20compiler%20unknownVariables%20do%3A%20%5B%3Aeach%20%7C%0A%20%20%20%20%20%20%20%20%20%22Do%20not%20try%20to%20redeclare%20javascript%27s%20objects%22%0A%20%20%20%20%20%20%20%20%20%28window%20at%3A%20each%29%20ifNil%3A%20%5B%0A%09%20%09%28window%20confirm%3A%20%27Declare%20%27%27%27%2C%20each%2C%20%27%27%27%20as%20instance%20variable%3F%27%29%20ifTrue%3A%20%5B%0A%09%09%09self%20addInstanceVariableNamed%3A%20each%20toClass%3A%20aClass.%0A%09%09%09%5Eself%20compileMethodDefinitionFor%3A%20aClass%5D%5D%5D.%0A%20%20%20%20aClass%20addCompiledMethod%3A%20method.%0A%20%20%20%20compiler%20setupClass%3A%20aClass.%0A%20%20%20%20self%20updateMethodsList.%0A%20%20%20%20self%20selectMethod%3A%20method'), +messageSends: ["val", "ifNil:", "category", "new", "source:", "parse:", "ifTrue:", "isParseFailure", "alert:", unescape("%2C"), "reason", "asString", "position", "currentClass:", "eval:", "compileNode:", "category:", "do:", "unknownVariables", "at:", "confirm:", "addInstanceVariableNamed:toClass:", "compileMethodDefinitionFor:", "addCompiledMethod:", "setupClass:", "updateMethodsList", "selectMethod:"], +referencedClasses: ["Compiler"] +}), +smalltalk.Browser); + +smalltalk.addMethod( +unescape('_copyClass'), +smalltalk.method({ +selector: unescape('copyClass'), +category: 'actions', fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(unescape("Object%20subclass%3A%20%23NameOfSubclass%0A%09instanceVariableNames%3A%20%27%27%0A%09package%3A%20%27"), "__comma", [smalltalk.send(self, "_selectedPackage", [])]), "__comma", [unescape("%27")]); +var className=nil; +(className=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", ["Copy class"])); +((($receiver = smalltalk.send(smalltalk.send(className, "_notNil", []), "_and_", [(function(){return smalltalk.send(className, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_copyClass_named_", [smalltalk.send(self, "_selectedClass", []), className]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_copyClass_named_", [smalltalk.send(self, "_selectedClass", []), className]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})])); return self;}, args: [], -source: unescape('classDeclarationTemplate%0A%09%5E%27Object%20subclass%3A%20%23NameOfSubclass%0A%09instanceVariableNames%3A%20%27%27%27%27%0A%09package%3A%20%27%27%27%2C%20self%20selectedPackage%2C%20%27%27%27%27'), -messageSends: [unescape("%2C"), "selectedPackage"], -referencedClasses: [] +source: unescape('copyClass%0A%09%7C%20className%20%7C%0A%09className%20%3A%3D%20window%20prompt%3A%20%27Copy%20class%27.%0A%09%28className%20notNil%20and%3A%20%5BclassName%20notEmpty%5D%29%20ifTrue%3A%20%5B%0A%09%09ClassBuilder%20new%20copyClass%3A%20self%20selectedClass%20named%3A%20className.%0A%20%20%20%20%20%20%20%20%20%20%09%20self%20%0A%09%09%09resetClassesList%3B%0A%09%09%09updateClassesList.%0A%09%09self%20selectClass%3A%20%28Smalltalk%20current%20at%3A%20className%29%5D'), +messageSends: ["prompt:", "ifTrue:", "and:", "notNil", "notEmpty", "copyClass:named:", "new", "selectedClass", "resetClassesList", "updateClassesList", "selectClass:", "at:", "current"], +referencedClasses: ["ClassBuilder", "Smalltalk"] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_selectedPackage'), +unescape('_declarationSource'), smalltalk.method({ -selector: unescape('selectedPackage'), +selector: unescape('declarationSource'), category: 'accessing', fn: function (){ var self=this; -return self['@selectedPackage']; +return ((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_classDeclarationSource", []);})() : (function(){return smalltalk.send(self, "_metaclassDeclarationSource", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_classDeclarationSource", []);}), (function(){return smalltalk.send(self, "_metaclassDeclarationSource", []);})])); return self;}, args: [], -source: unescape('selectedPackage%0A%09%5EselectedPackage'), -messageSends: [], +source: unescape('declarationSource%0A%20%20%20%20%5EselectedTab%20%3D%20%23instance%0A%09ifTrue%3A%20%5Bself%20classDeclarationSource%5D%0A%09ifFalse%3A%20%5Bself%20metaclassDeclarationSource%5D'), +messageSends: ["ifTrue:ifFalse:", unescape("%3D"), "classDeclarationSource", "metaclassDeclarationSource"], referencedClasses: [] }), smalltalk.Browser); @@ -1900,33 +1827,56 @@ referencedClasses: [] smalltalk.Browser); smalltalk.addMethod( -unescape('_hideClassButtons'), +unescape('_dummyMethodSource'), smalltalk.method({ -selector: unescape('hideClassButtons'), -category: 'actions', +selector: unescape('dummyMethodSource'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@classButtons'], "_asJQuery", []), "_hide", []); +return unescape("messageSelectorAndArgumentNames%0A%09%22comment%20stating%20purpose%20of%20message%22%0A%0A%09%7C%20temporary%20variable%20names%20%7C%0A%09statements"); return self;}, args: [], -source: unescape('hideClassButtons%0A%20%20%20%20classButtons%20asJQuery%20hide'), -messageSends: ["hide", "asJQuery"], +source: unescape('dummyMethodSource%0A%20%20%20%20%5E%27messageSelectorAndArgumentNames%0A%09%22comment%20stating%20purpose%20of%20message%22%0A%0A%09%7C%20temporary%20variable%20names%20%7C%0A%09statements%27'), +messageSends: [], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_showClassButtons'), +unescape('_handleSourceAreaKeyDown_'), smalltalk.method({ -selector: unescape('showClassButtons'), +selector: unescape('handleSourceAreaKeyDown%3A'), +category: 'actions', +fn: function (anEvent){ +var self=this; +if(anEvent.ctrlKey) { + if(anEvent.keyCode === 83) { //ctrl+s + self._compile(); + anEvent.preventDefault(); + return false; + } + } + ; +return self;}, +args: ["anEvent"], +source: unescape('handleSourceAreaKeyDown%3A%20anEvent%0A%09%20%3Cif%28anEvent.ctrlKey%29%20%7B%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2083%29%20%7B%20//ctrl+s%0A%09%09%09self._compile%28%29%3B%0A%09%09%09anEvent.preventDefault%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%7D%0A%09%3E'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.Browser); + +smalltalk.addMethod( +unescape('_hideClassButtons'), +smalltalk.method({ +selector: unescape('hideClassButtons'), category: 'actions', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@classButtons'], "_asJQuery", []), "_show", []); +smalltalk.send(smalltalk.send(self['@classButtons'], "_asJQuery", []), "_hide", []); return self;}, args: [], -source: unescape('showClassButtons%0A%20%20%20%20classButtons%20asJQuery%20show'), -messageSends: ["show", "asJQuery"], +source: unescape('hideClassButtons%0A%20%20%20%20classButtons%20asJQuery%20hide'), +messageSends: ["hide", "asJQuery"], referencedClasses: [] }), smalltalk.Browser); @@ -1948,136 +1898,130 @@ referencedClasses: [] smalltalk.Browser); smalltalk.addMethod( -unescape('_showMethodButtons'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('showMethodButtons'), -category: 'actions', +selector: unescape('initialize'), +category: 'initialization', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@methodButtons'], "_asJQuery", []), "_show", []); +smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); +(self['@selectedTab']=smalltalk.symbolFor("instance")); +(self['@selectedPackage']=smalltalk.send(smalltalk.send(self, "_packages", []), "_first", [])); +(self['@unsavedChanges']=false); return self;}, args: [], -source: unescape('showMethodButtons%0A%20%20%20%20methodButtons%20asJQuery%20show'), -messageSends: ["show", "asJQuery"], +source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20selectedTab%20%3A%3D%20%23instance.%0A%20%20%20%20selectedPackage%20%3A%3D%20self%20packages%20first.%0A%20%20%20%20unsavedChanges%20%3A%3D%20false'), +messageSends: ["initialize", "first", "packages"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_compile'), +unescape('_label'), smalltalk.method({ -selector: unescape('compile'), -category: 'actions', +selector: unescape('label'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self, "_disableSaveButton", []); -((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_compileClassComment", []);})() : nil;})() : (function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_compileDefinition", []);})() : (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_compileDefinition", []);}), (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_compileClassComment", []);})() : nil;}), (function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_compileDefinition", []);})() : (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_compileDefinition", []);}), (function(){return smalltalk.send(self, "_compileMethodDefinition", []);})]));})])); +return (($receiver = self['@selectedClass']) == nil || $receiver == undefined) ? (function(){return unescape("Browser%20%28nil%29");})() : (function(){return smalltalk.send("Browser: ", "__comma", [smalltalk.send(self['@selectedClass'], "_name", [])]);})(); return self;}, args: [], -source: unescape('compile%0A%20%20%20%20self%20disableSaveButton.%0A%20%20%20%20selectedTab%20%3D%20%23comment%20%0A%09ifTrue%3A%20%5B%0A%09%09%09selectedClass%20ifNotNil%3A%20%5B%0A%09%09%09%09self%20compileClassComment%5D%5D%0A%09ifFalse%3A%20%5B%0A%09%09%09%28selectedProtocol%20notNil%20or%3A%20%5BselectedMethod%20notNil%5D%29%0A%09%09%09%09ifFalse%3A%20%5Bself%20compileDefinition%5D%0A%09%09%09%09ifTrue%3A%20%5Bself%20compileMethodDefinition%5D%5D'), -messageSends: ["disableSaveButton", "ifTrue:ifFalse:", unescape("%3D"), "ifNotNil:", "compileClassComment", "ifFalse:ifTrue:", "or:", "notNil", "compileDefinition", "compileMethodDefinition"], +source: unescape('label%0A%20%20%20%20%5EselectedClass%20%0A%09ifNil%3A%20%5B%27Browser%20%28nil%29%27%5D%0A%09ifNotNil%3A%20%5B%27Browser%3A%20%27%2C%20selectedClass%20name%5D'), +messageSends: ["ifNil:ifNotNil:", unescape("%2C"), "name"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_compileClassComment'), +unescape('_metaclassDeclarationSource'), smalltalk.method({ -selector: unescape('compileClassComment'), -category: 'actions', +selector: unescape('metaclassDeclarationSource'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self['@selectedClass'], "_comment_", [smalltalk.send(self['@sourceArea'], "_val", [])]); +var stream=nil; +(stream=smalltalk.send("", "_writeStream", [])); +(($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self['@selectedClass'], "_asString", [])]);smalltalk.send($rec, "_nextPutAll_", [" class "]);return smalltalk.send($rec, "_nextPutAll_", [unescape("instanceVariableNames%3A%20%27")]);})(stream);smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedClass'], "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(stream, "_nextPutAll_", [" "]);})]);return smalltalk.send(stream, "_nextPutAll_", [unescape("%27")]);})() : nil; +return smalltalk.send(stream, "_contents", []); return self;}, args: [], -source: unescape('compileClassComment%0A%20%20%20%20selectedClass%20comment%3A%20sourceArea%20val'), -messageSends: ["comment:", "val"], +source: unescape('metaclassDeclarationSource%0A%20%20%20%20%7C%20stream%20%7C%0A%20%20%20%20stream%20%3A%3D%20%27%27%20writeStream.%0A%20%20%20%20selectedClass%20ifNotNil%3A%20%5B%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20selectedClass%20asString%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%20class%20%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27instanceVariableNames%3A%20%27%27%27.%0A%09selectedClass%20class%20instanceVariableNames%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20stream%20nextPutAll%3A%20each%5D%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%20%27%5D.%0A%09stream%20nextPutAll%3A%20%27%27%27%27%5D.%0A%20%20%20%20%5Estream%20contents'), +messageSends: ["writeStream", "ifNotNil:", "nextPutAll:", "asString", "do:separatedBy:", "instanceVariableNames", "class", "contents"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_compileMethodDefinition'), +unescape('_methodSource'), smalltalk.method({ -selector: unescape('compileMethodDefinition'), -category: 'actions', +selector: unescape('methodSource'), +category: 'accessing', fn: function (){ var self=this; -((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [self['@selectedClass']]);})() : (function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [smalltalk.send(self['@selectedClass'], "_class", [])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [self['@selectedClass']]);}), (function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [smalltalk.send(self['@selectedClass'], "_class", [])]);})])); +return (($receiver = self['@selectedMethod']) == nil || $receiver == undefined) ? (function(){return smalltalk.send(self, "_dummyMethodSource", []);})() : (function(){return smalltalk.send(self['@selectedMethod'], "_source", []);})(); return self;}, args: [], -source: unescape('compileMethodDefinition%0A%20%20%20%20selectedTab%20%3D%20%23instance%0A%09ifTrue%3A%20%5Bself%20compileMethodDefinitionFor%3A%20selectedClass%5D%0A%09ifFalse%3A%20%5Bself%20compileMethodDefinitionFor%3A%20selectedClass%20class%5D'), -messageSends: ["ifTrue:ifFalse:", unescape("%3D"), "compileMethodDefinitionFor:", "class"], +source: unescape('methodSource%0A%20%20%20%20%5EselectedMethod%0A%09ifNil%3A%20%5Bself%20dummyMethodSource%5D%0A%09ifNotNil%3A%20%5BselectedMethod%20source%5D'), +messageSends: ["ifNil:ifNotNil:", "dummyMethodSource", "source"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_compileMethodDefinitionFor_'), +unescape('_methods'), smalltalk.method({ -selector: unescape('compileMethodDefinitionFor%3A'), -category: 'actions', -fn: function (aClass){ +selector: unescape('methods'), +category: 'accessing', +fn: function (){ var self=this; -try{var compiler=nil; -var method=nil; -var source=nil; -var node=nil; -(source=smalltalk.send(self['@sourceArea'], "_val", [])); -(($receiver = self['@selectedProtocol']) == nil || $receiver == undefined) ? (function(){return (self['@selectedProtocol']=smalltalk.send(self['@selectedMethod'], "_category", []));})() : $receiver; -(compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])); -smalltalk.send(compiler, "_source_", [source]); -(node=smalltalk.send(compiler, "_parse_", [source])); -((($receiver = smalltalk.send(node, "_isParseFailure", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send(smalltalk.send(smalltalk.send("PARSE ERROR: ", "__comma", [smalltalk.send(node, "_reason", [])]), "__comma", [unescape("%2C%20position%3A%20")]), "__comma", [smalltalk.send(smalltalk.send(node, "_position", []), "_asString", [])])])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send(smalltalk.send(smalltalk.send("PARSE ERROR: ", "__comma", [smalltalk.send(node, "_reason", [])]), "__comma", [unescape("%2C%20position%3A%20")]), "__comma", [smalltalk.send(smalltalk.send(node, "_position", []), "_asString", [])])])}})})();})])); -smalltalk.send(compiler, "_currentClass_", [aClass]); -(method=smalltalk.send(compiler, "_eval_", [smalltalk.send(compiler, "_compileNode_", [node])])); -smalltalk.send(method, "_category_", [self['@selectedProtocol']]); -smalltalk.send(smalltalk.send(compiler, "_unknownVariables", []), "_do_", [(function(each){return (($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_at_", [each])) == nil || $receiver == undefined) ? (function(){return ((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send(unescape("Declare%20%27"), "__comma", [each]), "__comma", [unescape("%27%20as%20instance%20variable%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self, "_addInstanceVariableNamed_toClass_", [each, aClass]);return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [aClass])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self, "_addInstanceVariableNamed_toClass_", [each, aClass]);return (function(){throw({name: 'stReturn', selector: '_compileMethodDefinitionFor_', fn: function(){return smalltalk.send(self, "_compileMethodDefinitionFor_", [aClass])}})})();})]));})() : $receiver;})]); -smalltalk.send(aClass, "_addCompiledMethod_", [method]); -smalltalk.send(compiler, "_setupClass_", [aClass]); -smalltalk.send(self, "_updateMethodsList", []); -smalltalk.send(self, "_selectMethod_", [method]); +try{var klass=nil; +((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return []}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return []}})})();})])); +(($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){return (klass=((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return self['@selectedClass'];})() : (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return self['@selectedClass'];}), (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})])));})() : nil; +(function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return smalltalk.send((($receiver = self['@selectedProtocol']) == nil || $receiver == undefined) ? (function(){return (($receiver = klass) == nil || $receiver == undefined) ? (function(){return [];})() : (function(){return smalltalk.send(smalltalk.send(klass, "_methodDictionary", []), "_values", []);})();})() : (function(){return smalltalk.send(smalltalk.send(smalltalk.send(klass, "_methodDictionary", []), "_values", []), "_select_", [(function(each){return smalltalk.send(smalltalk.send(each, "_category", []), "__eq", [self['@selectedProtocol']]);})]);})(), "_sort_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_selector", [])).klass === smalltalk.Number) ? $receiver <smalltalk.send(b, "_selector", []) : smalltalk.send($receiver, "__lt", [smalltalk.send(b, "_selector", [])]));})])}})})(); return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_compileMethodDefinitionFor_'){return e.fn()} throw(e)}}, -args: ["aClass"], -source: unescape('compileMethodDefinitionFor%3A%20aClass%0A%20%20%20%20%7C%20compiler%20method%20source%20node%20%7C%20%0A%20%20%20%20source%20%3A%3D%20sourceArea%20val.%0A%20%20%20%20selectedProtocol%20ifNil%3A%20%5BselectedProtocol%20%3A%3D%20selectedMethod%20category%5D.%0A%20%20%20%20compiler%20%3A%3D%20Compiler%20new.%0A%20%20%20%20compiler%20source%3A%20source.%0A%20%20%20%20node%20%3A%3D%20compiler%20parse%3A%20source.%0A%20%20%20%20node%20isParseFailure%20ifTrue%3A%20%5B%0A%09%5Ewindow%20alert%3A%20%27PARSE%20ERROR%3A%20%27%2C%20node%20reason%2C%20%27%2C%20position%3A%20%27%2C%20node%20position%20asString%5D.%0A%20%20%20%20compiler%20currentClass%3A%20aClass.%0A%20%20%20%20method%20%3A%3D%20compiler%20eval%3A%20%28compiler%20compileNode%3A%20node%29.%0A%20%20%20%20method%20category%3A%20selectedProtocol.%0A%20%20%20%20compiler%20unknownVariables%20do%3A%20%5B%3Aeach%20%7C%0A%20%20%20%20%20%20%20%20%20%22Do%20not%20try%20to%20redeclare%20javascript%27s%20objects%22%0A%20%20%20%20%20%20%20%20%20%28window%20at%3A%20each%29%20ifNil%3A%20%5B%0A%09%20%09%28window%20confirm%3A%20%27Declare%20%27%27%27%2C%20each%2C%20%27%27%27%20as%20instance%20variable%3F%27%29%20ifTrue%3A%20%5B%0A%09%09%09self%20addInstanceVariableNamed%3A%20each%20toClass%3A%20aClass.%0A%09%09%09%5Eself%20compileMethodDefinitionFor%3A%20aClass%5D%5D%5D.%0A%20%20%20%20aClass%20addCompiledMethod%3A%20method.%0A%20%20%20%20compiler%20setupClass%3A%20aClass.%0A%20%20%20%20self%20updateMethodsList.%0A%20%20%20%20self%20selectMethod%3A%20method'), -messageSends: ["val", "ifNil:", "category", "new", "source:", "parse:", "ifTrue:", "isParseFailure", "alert:", unescape("%2C"), "reason", "asString", "position", "currentClass:", "eval:", "compileNode:", "category:", "do:", "unknownVariables", "at:", "confirm:", "addInstanceVariableNamed:toClass:", "compileMethodDefinitionFor:", "addCompiledMethod:", "setupClass:", "updateMethodsList", "selectMethod:"], -referencedClasses: ["Compiler"] +} catch(e) {if(e.name === 'stReturn' && e.selector === '_methods'){return e.fn()} throw(e)}}, +args: [], +source: unescape('methods%0A%20%20%20%20%7C%20klass%20%7C%0A%20%20%20%20selectedTab%20%3D%20%23comment%20ifTrue%3A%20%5B%5E%23%28%29%5D.%0A%20%20%20%20selectedClass%20ifNotNil%3A%20%5B%0A%09klass%20%3A%3D%20selectedTab%20%3D%20%23instance%0A%09%20%20%20%20ifTrue%3A%20%5BselectedClass%5D%0A%09%20%20%20%20ifFalse%3A%20%5BselectedClass%20class%5D%5D.%0A%20%20%20%20%5E%28selectedProtocol%20%0A%09ifNil%3A%20%5B%0A%09%20%20%20%20klass%20%0A%09%09ifNil%3A%20%5B%23%28%29%5D%20%0A%09%09ifNotNil%3A%20%5Bklass%20methodDictionary%20values%5D%5D%0A%09ifNotNil%3A%20%5B%0A%09%20%20%20%20klass%20methodDictionary%20values%20select%3A%20%5B%3Aeach%20%7C%0A%09%09each%20category%20%3D%20selectedProtocol%5D%5D%29%20sort%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20selector%20%3C%20b%20selector%5D'), +messageSends: ["ifTrue:", unescape("%3D"), "ifNotNil:", "ifTrue:ifFalse:", "class", "sort:", "ifNil:ifNotNil:", "values", "methodDictionary", "select:", "category", unescape("%3C"), "selector"], +referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_compileDefinition'), +unescape('_packages'), smalltalk.method({ -selector: unescape('compileDefinition'), -category: 'actions', +selector: unescape('packages'), +category: 'accessing', fn: function (){ var self=this; -var newClass=nil; -(newClass=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_loadExpression_", [smalltalk.send(self['@sourceArea'], "_val", [])])); -(function($rec){smalltalk.send($rec, "_resetClassesList", []);smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); -smalltalk.send(self, "_selectClass_", [newClass]); +var packages=nil; +(packages=smalltalk.send((smalltalk.Array || Array), "_new", [])); +smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(packages, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]); +return smalltalk.send(packages, "_sort", []); return self;}, args: [], -source: unescape('compileDefinition%0A%20%20%20%20%7C%20newClass%20%7C%0A%20%20%20%20newClass%20%3A%3D%20Compiler%20new%20loadExpression%3A%20sourceArea%20val.%0A%20%20%20%20self%20%0A%09resetClassesList%3B%0A%09updateCategoriesList%3B%0A%09updateClassesList.%0A%20%20%20%20self%20selectClass%3A%20newClass'), -messageSends: ["loadExpression:", "new", "val", "resetClassesList", "updateCategoriesList", "updateClassesList", "selectClass:"], -referencedClasses: ["Compiler"] +source: unescape('packages%0A%20%20%20%20%7C%20packages%20%7C%0A%20%20%20%20packages%20%3A%3D%20Array%20new.%0A%20%20%20%20Smalltalk%20current%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%28packages%20includes%3A%20each%20category%29%20ifFalse%3A%20%5B%0A%09%20%20%20%20packages%20add%3A%20each%20category%5D%5D.%0A%20%20%20%20%5Epackages%20sort'), +messageSends: ["new", "do:", "classes", "current", "ifFalse:", "includes:", "category", "add:", "sort"], +referencedClasses: ["Array", "Smalltalk"] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_cancelChanges'), +unescape('_protocols'), smalltalk.method({ -selector: unescape('cancelChanges'), -category: 'actions', +selector: unescape('protocols'), +category: 'accessing', fn: function (){ var self=this; -return ((($receiver = self['@unsavedChanges']).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [unescape("Cancel%20changes%3F")]);})() : (function(){return true;})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [unescape("Cancel%20changes%3F")]);}), (function(){return true;})])); -return self;}, +try{var klass=nil; +(($receiver = self['@selectedClass']) != nil && $receiver != undefined) ? (function(){((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return []}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return []}})})();})]));(klass=((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return self['@selectedClass'];})() : (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return self['@selectedClass'];}), (function(){return smalltalk.send(self['@selectedClass'], "_class", []);})])));((($receiver = smalltalk.send(smalltalk.send(klass, "_methodDictionary", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send((smalltalk.Array || Array), "_with_", ["not yet classified"])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send((smalltalk.Array || Array), "_with_", ["not yet classified"])}})})();})]));return (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send(klass, "_protocols", [])}})})();})() : nil; +(function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return smalltalk.send((smalltalk.Array || Array), "_new", [])}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_protocols'){return e.fn()} throw(e)}}, args: [], -source: unescape('cancelChanges%0A%20%20%20%20%5EunsavedChanges%20%0A%09ifTrue%3A%20%5Bwindow%20confirm%3A%20%27Cancel%20changes%3F%27%5D%0A%09ifFalse%3A%20%5Btrue%5D'), -messageSends: ["ifTrue:ifFalse:", "confirm:"], -referencedClasses: [] +source: unescape('protocols%0A%20%20%20%20%7C%20klass%20%7C%0A%20%20%20%20selectedClass%20ifNotNil%3A%20%5B%0A%09selectedTab%20%3D%20%23comment%20ifTrue%3A%20%5B%5E%23%28%29%5D.%0A%09klass%20%3A%3D%20selectedTab%20%3D%20%23instance%0A%09%20%20%20%20ifTrue%3A%20%5BselectedClass%5D%0A%09%20%20%20%20ifFalse%3A%20%5BselectedClass%20class%5D.%0A%09klass%20methodDictionary%20isEmpty%20ifTrue%3A%20%5B%0A%09%20%20%20%20%5EArray%20with%3A%20%27not%20yet%20classified%27%5D.%0A%09%5Eklass%20protocols%5D.%0A%20%20%20%20%5EArray%20new'), +messageSends: ["ifNotNil:", "ifTrue:", unescape("%3D"), "ifTrue:ifFalse:", "class", "isEmpty", "methodDictionary", "with:", "protocols", "new"], +referencedClasses: ["Array"] }), smalltalk.Browser); @@ -2114,182 +2058,156 @@ referencedClasses: [] smalltalk.Browser); smalltalk.addMethod( -unescape('_setMethodProtocol_'), -smalltalk.method({ -selector: unescape('setMethodProtocol%3A'), -category: 'actions', -fn: function (aString){ -var self=this; -((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_protocols", []), "_includes_", [aString])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_addNewProtocol", []);})() : (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_addNewProtocol", []);}), (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_protocols", []), "_includes_", [aString])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_addNewProtocol", []);})() : (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_addNewProtocol", []);}), (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})]));})])); -return self;}, -args: ["aString"], -source: unescape('setMethodProtocol%3A%20aString%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09%28self%20protocols%20includes%3A%20aString%29%0A%09%20%20%20%20ifFalse%3A%20%5Bself%20addNewProtocol%5D%0A%09%20%20%20%20ifTrue%3A%20%5B%0A%09%09selectedMethod%20category%3A%20aString.%0A%09%09selectedProtocol%20%3A%3D%20aString.%0A%09%09selectedMethod%20%3A%3D%20selectedMethod.%0A%09%09self%20%0A%09%09%20%20%20%20updateProtocolsList%3B%0A%09%09%20%20%20%20updateMethodsList%3B%0A%09%09%20%20%20%20updateSourceAndButtons%5D%5D'), -messageSends: ["ifTrue:", "cancelChanges", "ifFalse:ifTrue:", "includes:", "protocols", "addNewProtocol", "category:", "updateProtocolsList", "updateMethodsList", "updateSourceAndButtons"], -referencedClasses: [] -}), -smalltalk.Browser); - -smalltalk.addMethod( -unescape('_addNewProtocol'), +unescape('_removePackage'), smalltalk.method({ -selector: unescape('addNewProtocol'), +selector: unescape('removePackage'), category: 'actions', fn: function (){ var self=this; -var newProtocol=nil; -(newProtocol=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", ["New method protocol"])); -((($receiver = smalltalk.send(smalltalk.send(newProtocol, "_notNil", []), "_and_", [(function(){return smalltalk.send(newProtocol, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self['@selectedMethod'], "_category_", [newProtocol]);return smalltalk.send(self, "_setMethodProtocol_", [newProtocol]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self['@selectedMethod'], "_category_", [newProtocol]);return smalltalk.send(self, "_setMethodProtocol_", [newProtocol]);})])); +((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send("Do you really want to remove the whole package ", "__comma", [self['@selectedPackage']]), "__comma", [unescape("%20with%20all%20its%20classes%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removePackage_", [self['@selectedPackage']]);return smalltalk.send(self, "_updateCategoriesList", []);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removePackage_", [self['@selectedPackage']]);return smalltalk.send(self, "_updateCategoriesList", []);})])); return self;}, args: [], -source: unescape('addNewProtocol%0A%20%20%20%20%7C%20newProtocol%20%7C%0A%20%20%20%20newProtocol%20%3A%3D%20window%20prompt%3A%20%27New%20method%20protocol%27.%0A%20%20%20%20%28newProtocol%20notNil%20and%3A%20%5BnewProtocol%20notEmpty%5D%29%20ifTrue%3A%20%5B%0A%09selectedMethod%20category%3A%20newProtocol.%0A%09self%20setMethodProtocol%3A%20newProtocol%5D'), -messageSends: ["prompt:", "ifTrue:", "and:", "notNil", "notEmpty", "category:", "setMethodProtocol:"], -referencedClasses: [] +source: unescape('removePackage%0A%0A%20%20%28window%20confirm%3A%20%27Do%20you%20really%20want%20to%20remove%20the%20whole%20package%20%27%2C%20selectedPackage%2C%20%27%20with%20all%20its%20classes%3F%27%29%0A%09ifTrue%3A%20%5B%0A%09%20%20%20%20Smalltalk%20current%20removePackage%3A%20selectedPackage.%0A%09%20%20%20%20self%20updateCategoriesList%5D'), +messageSends: ["ifTrue:", "confirm:", unescape("%2C"), "removePackage:", "current", "updateCategoriesList"], +referencedClasses: ["Smalltalk"] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_selectCategory_'), +unescape('_renameClass'), smalltalk.method({ -selector: unescape('selectCategory%3A'), +selector: unescape('renameClass'), category: 'actions', -fn: function (aCategory){ +fn: function (){ var self=this; -((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedPackage']=aCategory);(self['@selectedClass']=(self['@selectedProtocol']=(self['@selectedMethod']=nil)));smalltalk.send(self, "_resetClassesList", []);return (function($rec){smalltalk.send($rec, "_updateCategoriesList", []);smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedPackage']=aCategory);(self['@selectedClass']=(self['@selectedProtocol']=(self['@selectedMethod']=nil)));smalltalk.send(self, "_resetClassesList", []);return (function($rec){smalltalk.send($rec, "_updateCategoriesList", []);smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); +var newName=nil; +(newName=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", [smalltalk.send("Rename class ", "__comma", [smalltalk.send(self['@selectedClass'], "_name", [])])])); +((($receiver = smalltalk.send(smalltalk.send(newName, "_notNil", []), "_and_", [(function(){return smalltalk.send(newName, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self['@selectedClass'], "_rename_", [newName]);return (function($rec){smalltalk.send($rec, "_updateClassesList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self['@selectedClass'], "_rename_", [newName]);return (function($rec){smalltalk.send($rec, "_updateClassesList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); return self;}, -args: ["aCategory"], -source: unescape('selectCategory%3A%20aCategory%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedPackage%20%3A%3D%20aCategory.%0A%09selectedClass%20%3A%3D%20selectedProtocol%20%3A%3D%20selectedMethod%20%3A%3D%20%20nil.%0A%09self%20resetClassesList.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList%3B%0A%09%20%20%20%20updateProtocolsList%3B%0A%09%20%20%20%20updateMethodsList%3B%0A%09%20%20%20%20updateSourceAndButtons%5D'), -messageSends: ["ifTrue:", "cancelChanges", "resetClassesList", "updateCategoriesList", "updateClassesList", "updateProtocolsList", "updateMethodsList", "updateSourceAndButtons"], +args: [], +source: unescape('renameClass%0A%20%20%20%20%7C%20newName%20%7C%0A%20%20%20%20newName%20%3A%3D%20window%20prompt%3A%20%27Rename%20class%20%27%2C%20selectedClass%20name.%0A%20%20%20%20%28newName%20notNil%20and%3A%20%5BnewName%20notEmpty%5D%29%20ifTrue%3A%20%5B%0A%09selectedClass%20rename%3A%20newName.%0A%09self%20%0A%09%09updateClassesList%3B%0A%09%09updateSourceAndButtons%5D'), +messageSends: ["prompt:", unescape("%2C"), "name", "ifTrue:", "and:", "notNil", "notEmpty", "rename:", "updateClassesList", "updateSourceAndButtons"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_selectClass_'), +unescape('_renamePackage'), smalltalk.method({ -selector: unescape('selectClass%3A'), +selector: unescape('renamePackage'), category: 'actions', -fn: function (aClass){ +fn: function (){ var self=this; -((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedClass']=aClass);(self['@selectedProtocol']=(self['@selectedMethod']=nil));return (function($rec){smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedClass']=aClass);(self['@selectedProtocol']=(self['@selectedMethod']=nil));return (function($rec){smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); +var newName=nil; +(newName=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", [smalltalk.send("Rename package ", "__comma", [self['@selectedPackage']])])); +(($receiver = newName) != nil && $receiver != undefined) ? (function(){return ((($receiver = smalltalk.send(newName, "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_renamePackage_to_", [self['@selectedPackage'], newName]);return smalltalk.send(self, "_updateCategoriesList", []);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_renamePackage_to_", [self['@selectedPackage'], newName]);return smalltalk.send(self, "_updateCategoriesList", []);})]));})() : nil; return self;}, -args: ["aClass"], -source: unescape('selectClass%3A%20aClass%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedClass%20%3A%3D%20aClass.%0A%09selectedProtocol%20%3A%3D%20selectedMethod%20%3A%3D%20nil.%0A%09self%20%0A%09%20%20%20%20updateClassesList%3B%0A%09%20%20%20%20updateProtocolsList%3B%0A%09%20%20%20%20updateMethodsList%3B%0A%09%20%20%20%20updateSourceAndButtons%5D'), -messageSends: ["ifTrue:", "cancelChanges", "updateClassesList", "updateProtocolsList", "updateMethodsList", "updateSourceAndButtons"], -referencedClasses: [] +args: [], +source: unescape('renamePackage%0A%0A%20%20%7C%20newName%20%7C%0A%20%20newName%20%3A%3D%20window%20prompt%3A%20%27Rename%20package%20%27%2C%20selectedPackage.%0A%20%20newName%20ifNotNil%3A%20%5B%0A%20%20%20%20newName%20notEmpty%20ifTrue%3A%20%5B%0A%09Smalltalk%20current%20renamePackage%3A%20selectedPackage%20to%3A%20newName.%0A%09self%20updateCategoriesList%5D%5D'), +messageSends: ["prompt:", unescape("%2C"), "ifNotNil:", "ifTrue:", "notEmpty", "renamePackage:to:", "current", "updateCategoriesList"], +referencedClasses: ["Smalltalk"] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_selectProtocol_'), +unescape('_renderBottomPanelOn_'), smalltalk.method({ -selector: unescape('selectProtocol%3A'), -category: 'actions', -fn: function (aString){ +selector: unescape('renderBottomPanelOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedProtocol']=aString);(self['@selectedMethod']=nil);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedProtocol']=aString);(self['@selectedMethod']=nil);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); +(function($rec){smalltalk.send($rec, "_class_", ["jt_sourceCode"]);return smalltalk.send($rec, "_with_", [(function(){(self['@sourceArea']=smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", []));smalltalk.send(self['@sourceArea'], "_renderOn_", [html]);smalltalk.send(self['@sourceArea'], "_onKeyDown_", [(function(e){return smalltalk.send(self, "_handleSourceAreaKeyDown_", [e]);})]);return smalltalk.send(self['@sourceArea'], "_onKeyUp_", [(function(){return smalltalk.send(self, "_updateStatus", []);})]);})]);})(smalltalk.send(html, "_div", [])); return self;}, -args: ["aString"], -source: unescape('selectProtocol%3A%20aString%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedProtocol%20%3A%3D%20aString.%0A%09selectedMethod%20%3A%3D%20nil.%0A%09self%20%0A%09%20%20%20%20updateProtocolsList%3B%0A%09%20%20%20%20updateMethodsList%3B%0A%09%20%20%20%20updateSourceAndButtons%5D'), -messageSends: ["ifTrue:", "cancelChanges", "updateProtocolsList", "updateMethodsList", "updateSourceAndButtons"], -referencedClasses: [] +args: ["html"], +source: unescape('renderBottomPanelOn%3A%20html%0A%20%20%20%20html%20div%0A%09class%3A%20%27jt_sourceCode%27%3B%0A%09with%3A%20%5B%0A%09%20%20%20%20sourceArea%20%3A%3D%20SourceArea%20new.%0A%09%20%20%20%20sourceArea%20renderOn%3A%20html.%0A%20%20%20%20%20%20%20%20%20%20%20%20sourceArea%20onKeyDown%3A%20%5B%3Ae%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20handleSourceAreaKeyDown%3A%20e%5D.%0A%09%20%20%20%20sourceArea%20onKeyUp%3A%20%5Bself%20updateStatus%5D%5D'), +messageSends: ["class:", "with:", "new", "renderOn:", "onKeyDown:", "handleSourceAreaKeyDown:", "onKeyUp:", "updateStatus", "div"], +referencedClasses: ["SourceArea"] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_selectMethod_'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('selectMethod%3A'), -category: 'actions', -fn: function (aMethod){ +selector: unescape('renderBoxOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedMethod']=aMethod);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedMethod']=aMethod);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); +(function($rec){smalltalk.send($rec, "_renderTopPanelOn_", [html]);smalltalk.send($rec, "_renderTabsOn_", [html]);return smalltalk.send($rec, "_renderBottomPanelOn_", [html]);})(self); return self;}, -args: ["aMethod"], -source: unescape('selectMethod%3A%20aMethod%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedMethod%20%3A%3D%20aMethod.%0A%09self%20%0A%09%20%20%20%20updateProtocolsList%3B%0A%09%20%20%20%20updateMethodsList%3B%0A%09%20%20%20%20updateSourceAndButtons%5D'), -messageSends: ["ifTrue:", "cancelChanges", "updateProtocolsList", "updateMethodsList", "updateSourceAndButtons"], +args: ["html"], +source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20self%20%0A%09renderTopPanelOn%3A%20html%3B%0A%09renderTabsOn%3A%20html%3B%0A%09renderBottomPanelOn%3A%20html'), +messageSends: ["renderTopPanelOn:", "renderTabsOn:", "renderBottomPanelOn:"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_selectTab_'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('selectTab%3A'), -category: 'actions', -fn: function (aString){ +selector: unescape('renderButtonsOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedTab']=aString);smalltalk.send(self, "_selectProtocol_", [nil]);return smalltalk.send(self, "_updateTabsList", []);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedTab']=aString);smalltalk.send(self, "_selectProtocol_", [nil]);return smalltalk.send(self, "_updateTabsList", []);})])); +(self['@saveButton']=smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["Save"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_compile", []);})]);})(self['@saveButton']); +(self['@methodButtons']=smalltalk.send(html, "_span", [])); +(self['@classButtons']=smalltalk.send(html, "_span", [])); +(function($rec){smalltalk.send($rec, "_class_", ["right"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_doIt", []);})]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_printIt", []);})]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_inspectIt", []);})]);})(smalltalk.send(html, "_button", []));})]);})(smalltalk.send(html, "_div", [])); +smalltalk.send(self, "_updateSourceAndButtons", []); return self;}, -args: ["aString"], -source: unescape('selectTab%3A%20aString%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedTab%20%3A%3D%20aString.%0A%09self%20selectProtocol%3A%20nil.%0A%09self%20updateTabsList%5D'), -messageSends: ["ifTrue:", "cancelChanges", "selectProtocol:", "updateTabsList"], +args: ["html"], +source: unescape('renderButtonsOn%3A%20html%0A%20%20%20%20saveButton%20%3A%3D%20html%20button.%0A%20%20%20%20saveButton%20%0A%09with%3A%20%27Save%27%3B%0A%09onClick%3A%20%5Bself%20compile%5D.%0A%20%20%20%20methodButtons%20%3A%3D%20html%20span.%0A%20%20%20%20classButtons%20%3A%3D%20html%20span.%0A%20%20%20%20html%20div%20%0A%09class%3A%20%27right%27%3B%0A%09with%3A%20%5B%0A%09%09html%20button%0A%09%09%09with%3A%20%27DoIt%27%3B%0A%09%09%09onClick%3A%20%5BsourceArea%20doIt%5D.%0A%09%09html%20button%0A%09%09%09with%3A%20%27PrintIt%27%3B%0A%09%09%09onClick%3A%20%5BsourceArea%20printIt%5D.%0A%09%09html%20button%20with%3A%20%27InspectIt%27%3B%0A%09%09%09onClick%3A%20%5BsourceArea%20inspectIt%5D%5D.%20%0A%20%20%20%20self%20updateSourceAndButtons'), +messageSends: ["button", "with:", "onClick:", "compile", "span", "class:", "doIt", "printIt", "inspectIt", "div", "updateSourceAndButtons"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_renameClass'), +unescape('_renderTabsOn_'), smalltalk.method({ -selector: unescape('renameClass'), -category: 'actions', -fn: function (){ +selector: unescape('renderTabsOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -var newName=nil; -(newName=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", [smalltalk.send("Rename class ", "__comma", [smalltalk.send(self['@selectedClass'], "_name", [])])])); -((($receiver = smalltalk.send(smalltalk.send(newName, "_notNil", []), "_and_", [(function(){return smalltalk.send(newName, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(self['@selectedClass'], "_rename_", [newName]);return (function($rec){smalltalk.send($rec, "_updateClassesList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(self['@selectedClass'], "_rename_", [newName]);return (function($rec){smalltalk.send($rec, "_updateClassesList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); +(self['@tabsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_tabs jt_browser"])); +smalltalk.send(self, "_updateTabsList", []); return self;}, -args: [], -source: unescape('renameClass%0A%20%20%20%20%7C%20newName%20%7C%0A%20%20%20%20newName%20%3A%3D%20window%20prompt%3A%20%27Rename%20class%20%27%2C%20selectedClass%20name.%0A%20%20%20%20%28newName%20notNil%20and%3A%20%5BnewName%20notEmpty%5D%29%20ifTrue%3A%20%5B%0A%09selectedClass%20rename%3A%20newName.%0A%09self%20%0A%09%09updateClassesList%3B%0A%09%09updateSourceAndButtons%5D'), -messageSends: ["prompt:", unescape("%2C"), "name", "ifTrue:", "and:", "notNil", "notEmpty", "rename:", "updateClassesList", "updateSourceAndButtons"], +args: ["html"], +source: unescape('renderTabsOn%3A%20html%0A%20%20%20%20tabsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_tabs%20jt_browser%27.%0A%20%20%20%20self%20updateTabsList.'), +messageSends: ["class:", "ul", "updateTabsList"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_addInstanceVariableNamed_toClass_'), -smalltalk.method({ -selector: unescape('addInstanceVariableNamed%3AtoClass%3A'), -category: 'actions', -fn: function (aString, aClass){ -var self=this; -smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), smalltalk.send(aClass, "_name", []), (function($rec){smalltalk.send($rec, "_add_", [aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_copy", [])), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])]); -return self;}, -args: ["aString", "aClass"], -source: unescape('addInstanceVariableNamed%3A%20aString%20toClass%3A%20aClass%0A%09ClassBuilder%20new%0A%09%09addSubclassOf%3A%20aClass%20superclass%20%0A%09%09named%3A%20aClass%20name%20%0A%09%09instanceVariableNames%3A%20%28aClass%20instanceVariableNames%20copy%20add%3A%20aString%3B%20yourself%29%0A%09%09package%3A%20aClass%20package%20name'), -messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "new", "superclass", "name", "add:", "yourself", "copy", "instanceVariableNames", "package"], -referencedClasses: ["ClassBuilder"] -}), -smalltalk.Browser); - -smalltalk.addMethod( -unescape('_searchReferencesOf_'), +unescape('_renderTopPanelOn_'), smalltalk.method({ -selector: unescape('searchReferencesOf%3A'), -category: 'actions', -fn: function (aString){ +selector: unescape('renderTopPanelOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [aString]); +(function($rec){smalltalk.send($rec, "_class_", ["top"]);return smalltalk.send($rec, "_with_", [(function(){(self['@packagesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column browser packages"]));(function($rec){smalltalk.send($rec, "_class_", ["jt_packagesButtons"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_title_", ["Commit classes in this package to disk"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_commitPackage", []);})]);return smalltalk.send($rec, "_with_", ["Commit"]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_title_", ["Rename package"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_renamePackage", []);})]);return smalltalk.send($rec, "_with_", ["Rename"]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_title_", ["Remove this package from the system"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_removePackage", []);})]);return smalltalk.send($rec, "_with_", ["Remove"]);})(smalltalk.send(html, "_button", []));})]);})(smalltalk.send(html, "_div", []));(self['@classesList']=smalltalk.send((smalltalk.ClassesList || ClassesList), "_on_", [self]));smalltalk.send(self['@classesList'], "_renderOn_", [html]);(self['@protocolsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column browser protocols"]));(self['@methodsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column browser methods"]));(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);return smalltalk.send($rec, "_updateMethodsList", []);})(self);return smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["jt_clear"]);})]);})(smalltalk.send(html, "_div", [])); return self;}, -args: ["aString"], -source: unescape('searchReferencesOf%3A%20aString%0A%09ReferencesBrowser%20search%3A%20aString'), -messageSends: ["search:"], -referencedClasses: ["ReferencesBrowser"] +args: ["html"], +source: unescape('renderTopPanelOn%3A%20html%0A%09html%20div%20%0A%09%09class%3A%20%27top%27%3B%20%0A%09%09with%3A%20%5B%0A%09%09%09packagesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20browser%20packages%27.%0A%20%20%20%20%20%20%20%20%20%20%09%09html%20div%20class%3A%20%27jt_packagesButtons%27%3B%20with%3A%20%5B%0A%09%09%09%09html%20button%20%0A%09%09%09%09%09title%3A%20%27Commit%20classes%20in%20this%20package%20to%20disk%27%3B%0A%09%09%09%09%09onClick%3A%20%5Bself%20commitPackage%5D%3B%0A%09%09%09%09%09with%3A%20%27Commit%27.%0A%20%20%20%20%20%20%20%20%09%09%09html%20button%0A%09%09%09%09%09title%3A%20%27Rename%20package%27%3B%0A%09%09%09%09%09onClick%3A%20%5Bself%20renamePackage%5D%3B%0A%09%09%09%09%09with%3A%20%27Rename%27.%0A%20%20%20%20%20%20%20%20%09%09%09html%20button%0A%09%09%09%09%09title%3A%20%27Remove%20this%20package%20from%20the%20system%27%3B%0A%09%09%09%09%09onClick%3A%20%5Bself%20removePackage%5D%3B%0A%09%09%09%09%09with%3A%20%27Remove%27%5D.%0A%09%09%09classesList%20%3A%3D%20ClassesList%20on%3A%20self.%0A%09%09%09classesList%20renderOn%3A%20html.%0A%09%09%09protocolsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20browser%20protocols%27.%0A%09%09%09methodsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20browser%20methods%27.%0A%09%09%09self%0A%09%09%09%09updateCategoriesList%3B%0A%09%09%09%09updateClassesList%3B%0A%09%09%09%09updateProtocolsList%3B%0A%09%09%09%09updateMethodsList.%0A%09%09%09html%20div%20class%3A%20%27jt_clear%27%5D'), +messageSends: ["class:", "with:", "ul", "title:", "onClick:", "commitPackage", "button", "renamePackage", "removePackage", "div", "on:", "renderOn:", "updateCategoriesList", "updateClassesList", "updateProtocolsList", "updateMethodsList"], +referencedClasses: ["ClassesList"] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_searchClassReferences'), +unescape('_resetClassesList'), smalltalk.method({ -selector: unescape('searchClassReferences'), -category: 'actions', +selector: unescape('resetClassesList'), +category: 'updating', fn: function (){ var self=this; -smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [smalltalk.send(self['@selectedClass'], "_name", [])]); +smalltalk.send(self['@classesList'], "_resetNodes", []); return self;}, args: [], -source: unescape('searchClassReferences%0A%09ReferencesBrowser%20search%3A%20selectedClass%20name'), -messageSends: ["search:", "name"], -referencedClasses: ["ReferencesBrowser"] +source: unescape('resetClassesList%0A%09classesList%20resetNodes'), +messageSends: ["resetNodes"], +referencedClasses: [] }), smalltalk.Browser); @@ -2312,249 +2230,211 @@ referencedClasses: ["Smalltalk"] smalltalk.Browser); smalltalk.addMethod( -unescape('_handleSourceAreaKeyDown_'), -smalltalk.method({ -selector: unescape('handleSourceAreaKeyDown%3A'), -category: 'actions', -fn: function (anEvent){ -var self=this; -if(anEvent.ctrlKey) { - if(anEvent.keyCode === 83) { //ctrl+s - self._compile(); - anEvent.preventDefault(); - return false; - } - } - ; -return self;}, -args: ["anEvent"], -source: unescape('handleSourceAreaKeyDown%3A%20anEvent%0A%09%20%3Cif%28anEvent.ctrlKey%29%20%7B%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2083%29%20%7B%20//ctrl+s%0A%09%09%09self._compile%28%29%3B%0A%09%09%09anEvent.preventDefault%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%7D%0A%09%3E'), -messageSends: [], -referencedClasses: [] -}), -smalltalk.Browser); - -smalltalk.addMethod( -unescape('_commitPackage'), +unescape('_searchClassReferences'), smalltalk.method({ -selector: unescape('commitPackage'), +selector: unescape('searchClassReferences'), category: 'actions', fn: function (){ var self=this; -(($receiver = self['@selectedPackage']) != nil && $receiver != undefined) ? (function(){var package=nil; -(package=smalltalk.send((smalltalk.Package || Package), "_named_", [self['@selectedPackage']]));return smalltalk.send([smalltalk.send((smalltalk.Exporter || Exporter), "__minus_gt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(package, "_commitPathJs", []), "__comma", [unescape("/")]), "__comma", [self['@selectedPackage']]), "__comma", [".js"])]),smalltalk.send((smalltalk.StrippedExporter || StrippedExporter), "__minus_gt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(package, "_commitPathJs", []), "__comma", [unescape("/")]), "__comma", [self['@selectedPackage']]), "__comma", [".deploy.js"])]),smalltalk.send((smalltalk.ChunkExporter || ChunkExporter), "__minus_gt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(package, "_commitPathSt", []), "__comma", [unescape("/")]), "__comma", [self['@selectedPackage']]), "__comma", [".st"])])], "_do_", [(function(commitStrategy){var fileContents=nil; -(fileContents=smalltalk.send(smalltalk.send(smalltalk.send(commitStrategy, "_key", []), "_new", []), "_exportPackage_", [self['@selectedPackage']]));return smalltalk.send(self, "_ajaxPutAt_data_", [smalltalk.send(commitStrategy, "_value", []), fileContents]);})]);})() : nil; +smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [smalltalk.send(self['@selectedClass'], "_name", [])]); return self;}, args: [], -source: unescape('commitPackage%0A%09selectedPackage%20ifNotNil%3A%20%5B%20%7Cpackage%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09%09%20package%20%3A%3D%20Package%20named%3A%20selectedPackage.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09%09%20%7B%09Exporter%20%09%09%09-%3E%20%28package%20commitPathJs%2C%20%27/%27%2C%20selectedPackage%2C%20%27.js%27%29.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09StrippedExporter%20%09-%3E%20%28package%20commitPathJs%2C%20%27/%27%2C%20selectedPackage%2C%20%27.deploy.js%27%29.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09%09%20ChunkExporter%20%09%09-%3E%20%28package%20commitPathSt%2C%20%27/%27%2C%20selectedPackage%2C%20%27.st%27%29%20%09%09%09%7D%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09%09do%3A%20%5B%3AcommitStrategy%7C%20%7CfileContents%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09fileContents%20%3A%3D%20%28commitStrategy%20key%20new%20exportPackage%3A%20selectedPackage%29.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09self%20ajaxPutAt%3A%20commitStrategy%20value%20data%3A%20%20fileContents%5D%0A%20%20%20%20%20%20%20%20%20%09%09%09%09%09%09%5D'), -messageSends: ["ifNotNil:", "named:", "do:", unescape("-%3E"), unescape("%2C"), "commitPathJs", "commitPathSt", "exportPackage:", "new", "key", "ajaxPutAt:data:", "value"], -referencedClasses: ["Package", "Exporter", "StrippedExporter", "ChunkExporter"] +source: unescape('searchClassReferences%0A%09ReferencesBrowser%20search%3A%20selectedClass%20name'), +messageSends: ["search:", "name"], +referencedClasses: ["ReferencesBrowser"] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_renamePackage'), +unescape('_searchReferencesOf_'), smalltalk.method({ -selector: unescape('renamePackage'), +selector: unescape('searchReferencesOf%3A'), category: 'actions', -fn: function (){ -var self=this; -var newName=nil; -(newName=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", [smalltalk.send("Rename package ", "__comma", [self['@selectedPackage']])])); -(($receiver = newName) != nil && $receiver != undefined) ? (function(){return ((($receiver = smalltalk.send(newName, "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_renamePackage_to_", [self['@selectedPackage'], newName]);return smalltalk.send(self, "_updateCategoriesList", []);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_renamePackage_to_", [self['@selectedPackage'], newName]);return smalltalk.send(self, "_updateCategoriesList", []);})]));})() : nil; -return self;}, -args: [], -source: unescape('renamePackage%0A%0A%20%20%7C%20newName%20%7C%0A%20%20newName%20%3A%3D%20window%20prompt%3A%20%27Rename%20package%20%27%2C%20selectedPackage.%0A%20%20newName%20ifNotNil%3A%20%5B%0A%20%20%20%20newName%20notEmpty%20ifTrue%3A%20%5B%0A%09Smalltalk%20current%20renamePackage%3A%20selectedPackage%20to%3A%20newName.%0A%09self%20updateCategoriesList%5D%5D'), -messageSends: ["prompt:", unescape("%2C"), "ifNotNil:", "ifTrue:", "notEmpty", "renamePackage:to:", "current", "updateCategoriesList"], -referencedClasses: ["Smalltalk"] +fn: function (aString){ +var self=this; +smalltalk.send((smalltalk.ReferencesBrowser || ReferencesBrowser), "_search_", [aString]); +return self;}, +args: ["aString"], +source: unescape('searchReferencesOf%3A%20aString%0A%09ReferencesBrowser%20search%3A%20aString'), +messageSends: ["search:"], +referencedClasses: ["ReferencesBrowser"] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_removePackage'), +unescape('_selectCategory_'), smalltalk.method({ -selector: unescape('removePackage'), +selector: unescape('selectCategory%3A'), category: 'actions', -fn: function (){ +fn: function (aCategory){ var self=this; -((($receiver = smalltalk.send((typeof window == 'undefined' ? nil : window), "_confirm_", [smalltalk.send(smalltalk.send("Do you really want to remove the whole package ", "__comma", [self['@selectedPackage']]), "__comma", [unescape("%20with%20all%20its%20classes%3F")])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removePackage_", [self['@selectedPackage']]);return smalltalk.send(self, "_updateCategoriesList", []);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removePackage_", [self['@selectedPackage']]);return smalltalk.send(self, "_updateCategoriesList", []);})])); +((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedPackage']=aCategory);(self['@selectedClass']=(self['@selectedProtocol']=(self['@selectedMethod']=nil)));smalltalk.send(self, "_resetClassesList", []);return (function($rec){smalltalk.send($rec, "_updateCategoriesList", []);smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedPackage']=aCategory);(self['@selectedClass']=(self['@selectedProtocol']=(self['@selectedMethod']=nil)));smalltalk.send(self, "_resetClassesList", []);return (function($rec){smalltalk.send($rec, "_updateCategoriesList", []);smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); return self;}, -args: [], -source: unescape('removePackage%0A%0A%20%20%28window%20confirm%3A%20%27Do%20you%20really%20want%20to%20remove%20the%20whole%20package%20%27%2C%20selectedPackage%2C%20%27%20with%20all%20its%20classes%3F%27%29%0A%09ifTrue%3A%20%5B%0A%09%20%20%20%20Smalltalk%20current%20removePackage%3A%20selectedPackage.%0A%09%20%20%20%20self%20updateCategoriesList%5D'), -messageSends: ["ifTrue:", "confirm:", unescape("%2C"), "removePackage:", "current", "updateCategoriesList"], -referencedClasses: ["Smalltalk"] +args: ["aCategory"], +source: unescape('selectCategory%3A%20aCategory%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedPackage%20%3A%3D%20aCategory.%0A%09selectedClass%20%3A%3D%20selectedProtocol%20%3A%3D%20selectedMethod%20%3A%3D%20%20nil.%0A%09self%20resetClassesList.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList%3B%0A%09%20%20%20%20updateProtocolsList%3B%0A%09%20%20%20%20updateMethodsList%3B%0A%09%20%20%20%20updateSourceAndButtons%5D'), +messageSends: ["ifTrue:", "cancelChanges", "resetClassesList", "updateCategoriesList", "updateClassesList", "updateProtocolsList", "updateMethodsList", "updateSourceAndButtons"], +referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_addNewClass'), +unescape('_selectClass_'), smalltalk.method({ -selector: unescape('addNewClass'), +selector: unescape('selectClass%3A'), category: 'actions', -fn: function (){ +fn: function (aClass){ var self=this; -var className=nil; -(className=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", ["New class"])); -((($receiver = smalltalk.send(smalltalk.send(className, "_notNil", []), "_and_", [(function(){return smalltalk.send(className, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send((smalltalk.Object || Object), "_subclass_instanceVariableNames_package_", [className, "", smalltalk.send(self, "_selectedPackage", [])]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send((smalltalk.Object || Object), "_subclass_instanceVariableNames_package_", [className, "", smalltalk.send(self, "_selectedPackage", [])]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})])); +((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedClass']=aClass);(self['@selectedProtocol']=(self['@selectedMethod']=nil));return (function($rec){smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedClass']=aClass);(self['@selectedProtocol']=(self['@selectedMethod']=nil));return (function($rec){smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); return self;}, -args: [], -source: unescape('addNewClass%0A%09%7C%20className%20%7C%0A%09className%20%3A%3D%20window%20prompt%3A%20%27New%20class%27.%0A%09%28className%20notNil%20and%3A%20%5BclassName%20notEmpty%5D%29%20ifTrue%3A%20%5B%0A%09%09Object%20subclass%3A%20className%20instanceVariableNames%3A%20%27%27%20package%3A%20self%20selectedPackage.%0A%20%20%20%20%20%20%20%20%20%20%09%20self%20%0A%09%09%09resetClassesList%3B%0A%09%09%09updateClassesList.%0A%09%09self%20selectClass%3A%20%28Smalltalk%20current%20at%3A%20className%29%5D'), -messageSends: ["prompt:", "ifTrue:", "and:", "notNil", "notEmpty", "subclass:instanceVariableNames:package:", "selectedPackage", "resetClassesList", "updateClassesList", "selectClass:", "at:", "current"], -referencedClasses: ["Object", "Smalltalk"] +args: ["aClass"], +source: unescape('selectClass%3A%20aClass%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedClass%20%3A%3D%20aClass.%0A%09selectedProtocol%20%3A%3D%20selectedMethod%20%3A%3D%20nil.%0A%09self%20%0A%09%20%20%20%20updateClassesList%3B%0A%09%20%20%20%20updateProtocolsList%3B%0A%09%20%20%20%20updateMethodsList%3B%0A%09%20%20%20%20updateSourceAndButtons%5D'), +messageSends: ["ifTrue:", "cancelChanges", "updateClassesList", "updateProtocolsList", "updateMethodsList", "updateSourceAndButtons"], +referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_copyClass'), +unescape('_selectMethod_'), smalltalk.method({ -selector: unescape('copyClass'), +selector: unescape('selectMethod%3A'), category: 'actions', -fn: function (){ +fn: function (aMethod){ var self=this; -var className=nil; -(className=smalltalk.send((typeof window == 'undefined' ? nil : window), "_prompt_", ["Copy class"])); -((($receiver = smalltalk.send(smalltalk.send(className, "_notNil", []), "_and_", [(function(){return smalltalk.send(className, "_notEmpty", []);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_copyClass_named_", [smalltalk.send(self, "_selectedClass", []), className]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_copyClass_named_", [smalltalk.send(self, "_selectedClass", []), className]);(function($rec){smalltalk.send($rec, "_resetClassesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);return smalltalk.send(self, "_selectClass_", [smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_at_", [className])]);})])); +((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedMethod']=aMethod);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedMethod']=aMethod);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); return self;}, -args: [], -source: unescape('copyClass%0A%09%7C%20className%20%7C%0A%09className%20%3A%3D%20window%20prompt%3A%20%27Copy%20class%27.%0A%09%28className%20notNil%20and%3A%20%5BclassName%20notEmpty%5D%29%20ifTrue%3A%20%5B%0A%09%09ClassBuilder%20new%20copyClass%3A%20self%20selectedClass%20named%3A%20className.%0A%20%20%20%20%20%20%20%20%20%20%09%20self%20%0A%09%09%09resetClassesList%3B%0A%09%09%09updateClassesList.%0A%09%09self%20selectClass%3A%20%28Smalltalk%20current%20at%3A%20className%29%5D'), -messageSends: ["prompt:", "ifTrue:", "and:", "notNil", "notEmpty", "copyClass:named:", "new", "selectedClass", "resetClassesList", "updateClassesList", "selectClass:", "at:", "current"], -referencedClasses: ["ClassBuilder", "Smalltalk"] +args: ["aMethod"], +source: unescape('selectMethod%3A%20aMethod%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedMethod%20%3A%3D%20aMethod.%0A%09self%20%0A%09%20%20%20%20updateProtocolsList%3B%0A%09%20%20%20%20updateMethodsList%3B%0A%09%20%20%20%20updateSourceAndButtons%5D'), +messageSends: ["ifTrue:", "cancelChanges", "updateProtocolsList", "updateMethodsList", "updateSourceAndButtons"], +referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_initialize'), +unescape('_selectProtocol_'), smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', -fn: function (){ +selector: unescape('selectProtocol%3A'), +category: 'actions', +fn: function (aString){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); -(self['@selectedTab']=smalltalk.symbolFor("instance")); -(self['@selectedPackage']=smalltalk.send(smalltalk.send(self, "_packages", []), "_first", [])); -(self['@unsavedChanges']=false); +((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedProtocol']=aString);(self['@selectedMethod']=nil);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedProtocol']=aString);(self['@selectedMethod']=nil);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})])); return self;}, -args: [], -source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20selectedTab%20%3A%3D%20%23instance.%0A%20%20%20%20selectedPackage%20%3A%3D%20self%20packages%20first.%0A%20%20%20%20unsavedChanges%20%3A%3D%20false'), -messageSends: ["initialize", "first", "packages"], +args: ["aString"], +source: unescape('selectProtocol%3A%20aString%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedProtocol%20%3A%3D%20aString.%0A%09selectedMethod%20%3A%3D%20nil.%0A%09self%20%0A%09%20%20%20%20updateProtocolsList%3B%0A%09%20%20%20%20updateMethodsList%3B%0A%09%20%20%20%20updateSourceAndButtons%5D'), +messageSends: ["ifTrue:", "cancelChanges", "updateProtocolsList", "updateMethodsList", "updateSourceAndButtons"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_ajaxPutAt_data_'), +unescape('_selectTab_'), smalltalk.method({ -selector: unescape('ajaxPutAt%3Adata%3A'), -category: 'network', -fn: function (anURL, aString){ +selector: unescape('selectTab%3A'), +category: 'actions', +fn: function (aString){ var self=this; -smalltalk.send((typeof jQuery == 'undefined' ? nil : jQuery), "_ajax_options_", [anURL, smalltalk.HashedCollection._fromPairs_([smalltalk.send("type", "__minus_gt", ["PUT"]),smalltalk.send("data", "__minus_gt", [aString]),smalltalk.send("contentType", "__minus_gt", [unescape("text/plain%3Bcharset%3DUTF-8")]),smalltalk.send("error", "__minus_gt", [(function(){return smalltalk.send((typeof window == 'undefined' ? nil : window), "_alert_", [smalltalk.send("PUT request failed at: ", "__comma", [anURL])]);})])])]); +((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(self['@selectedTab']=aString);smalltalk.send(self, "_selectProtocol_", [nil]);return smalltalk.send(self, "_updateTabsList", []);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){(self['@selectedTab']=aString);smalltalk.send(self, "_selectProtocol_", [nil]);return smalltalk.send(self, "_updateTabsList", []);})])); return self;}, -args: ["anURL", "aString"], -source: unescape('ajaxPutAt%3A%20anURL%20data%3A%20aString%0A%09jQuery%20%0A%09%09ajax%3A%20anURL%09options%3A%20%23%7B%09%27type%27%20-%3E%20%27PUT%27.%0A%09%09%09%09%09%09%09%09%27data%27%20-%3E%20aString.%0A%09%09%09%09%09%09%09%09%27contentType%27%20-%3E%20%27text/plain%3Bcharset%3DUTF-8%27.%0A%09%09%09%09%09%09%09%09%27error%27%20-%3E%20%5Bwindow%20alert%3A%20%27PUT%20request%20failed%20at%3A%20%20%27%2C%20anURL%5D%20%7D'), -messageSends: ["ajax:options:", unescape("-%3E"), "alert:", unescape("%2C")], +args: ["aString"], +source: unescape('selectTab%3A%20aString%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedTab%20%3A%3D%20aString.%0A%09self%20selectProtocol%3A%20nil.%0A%09self%20updateTabsList%5D'), +messageSends: ["ifTrue:", "cancelChanges", "selectProtocol:", "updateTabsList"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_renderBoxOn_'), +unescape('_selectedClass'), smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('selectedClass'), +category: 'accessing', +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_renderTopPanelOn_", [html]);smalltalk.send($rec, "_renderTabsOn_", [html]);return smalltalk.send($rec, "_renderBottomPanelOn_", [html]);})(self); +return self['@selectedClass']; return self;}, -args: ["html"], -source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20self%20%0A%09renderTopPanelOn%3A%20html%3B%0A%09renderTabsOn%3A%20html%3B%0A%09renderBottomPanelOn%3A%20html'), -messageSends: ["renderTopPanelOn:", "renderTabsOn:", "renderBottomPanelOn:"], +args: [], +source: unescape('selectedClass%0A%09%5EselectedClass'), +messageSends: [], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_renderTopPanelOn_'), +unescape('_selectedPackage'), smalltalk.method({ -selector: unescape('renderTopPanelOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('selectedPackage'), +category: 'accessing', +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_class_", ["top"]);return smalltalk.send($rec, "_with_", [(function(){(self['@packagesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column browser packages"]));(function($rec){smalltalk.send($rec, "_class_", ["jt_packagesButtons"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_title_", ["Commit classes in this package to disk"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_commitPackage", []);})]);return smalltalk.send($rec, "_with_", ["Commit"]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_title_", ["Rename package"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_renamePackage", []);})]);return smalltalk.send($rec, "_with_", ["Rename"]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_title_", ["Remove this package from the system"]);smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_removePackage", []);})]);return smalltalk.send($rec, "_with_", ["Remove"]);})(smalltalk.send(html, "_button", []));})]);})(smalltalk.send(html, "_div", []));(self['@classesList']=smalltalk.send((smalltalk.ClassesList || ClassesList), "_on_", [self]));smalltalk.send(self['@classesList'], "_renderOn_", [html]);(self['@protocolsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column browser protocols"]));(self['@methodsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column browser methods"]));(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);smalltalk.send($rec, "_updateClassesList", []);smalltalk.send($rec, "_updateProtocolsList", []);return smalltalk.send($rec, "_updateMethodsList", []);})(self);return smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["jt_clear"]);})]);})(smalltalk.send(html, "_div", [])); +return self['@selectedPackage']; return self;}, -args: ["html"], -source: unescape('renderTopPanelOn%3A%20html%0A%09html%20div%20%0A%09%09class%3A%20%27top%27%3B%20%0A%09%09with%3A%20%5B%0A%09%09%09packagesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20browser%20packages%27.%0A%20%20%20%20%20%20%20%20%20%20%09%09html%20div%20class%3A%20%27jt_packagesButtons%27%3B%20with%3A%20%5B%0A%09%09%09%09html%20button%20%0A%09%09%09%09%09title%3A%20%27Commit%20classes%20in%20this%20package%20to%20disk%27%3B%0A%09%09%09%09%09onClick%3A%20%5Bself%20commitPackage%5D%3B%0A%09%09%09%09%09with%3A%20%27Commit%27.%0A%20%20%20%20%20%20%20%20%09%09%09html%20button%0A%09%09%09%09%09title%3A%20%27Rename%20package%27%3B%0A%09%09%09%09%09onClick%3A%20%5Bself%20renamePackage%5D%3B%0A%09%09%09%09%09with%3A%20%27Rename%27.%0A%20%20%20%20%20%20%20%20%09%09%09html%20button%0A%09%09%09%09%09title%3A%20%27Remove%20this%20package%20from%20the%20system%27%3B%0A%09%09%09%09%09onClick%3A%20%5Bself%20removePackage%5D%3B%0A%09%09%09%09%09with%3A%20%27Remove%27%5D.%0A%09%09%09classesList%20%3A%3D%20ClassesList%20on%3A%20self.%0A%09%09%09classesList%20renderOn%3A%20html.%0A%09%09%09protocolsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20browser%20protocols%27.%0A%09%09%09methodsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20browser%20methods%27.%0A%09%09%09self%0A%09%09%09%09updateCategoriesList%3B%0A%09%09%09%09updateClassesList%3B%0A%09%09%09%09updateProtocolsList%3B%0A%09%09%09%09updateMethodsList.%0A%09%09%09html%20div%20class%3A%20%27jt_clear%27%5D'), -messageSends: ["class:", "with:", "ul", "title:", "onClick:", "commitPackage", "button", "renamePackage", "removePackage", "div", "on:", "renderOn:", "updateCategoriesList", "updateClassesList", "updateProtocolsList", "updateMethodsList"], -referencedClasses: ["ClassesList"] +args: [], +source: unescape('selectedPackage%0A%09%5EselectedPackage'), +messageSends: [], +referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_renderTabsOn_'), +unescape('_setMethodProtocol_'), smalltalk.method({ -selector: unescape('renderTabsOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('setMethodProtocol%3A'), +category: 'actions', +fn: function (aString){ var self=this; -(self['@tabsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_tabs jt_browser"])); -smalltalk.send(self, "_updateTabsList", []); +((($receiver = smalltalk.send(self, "_cancelChanges", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_protocols", []), "_includes_", [aString])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_addNewProtocol", []);})() : (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_addNewProtocol", []);}), (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})]));})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_protocols", []), "_includes_", [aString])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_addNewProtocol", []);})() : (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_addNewProtocol", []);}), (function(){smalltalk.send(self['@selectedMethod'], "_category_", [aString]);(self['@selectedProtocol']=aString);(self['@selectedMethod']=self['@selectedMethod']);return (function($rec){smalltalk.send($rec, "_updateProtocolsList", []);smalltalk.send($rec, "_updateMethodsList", []);return smalltalk.send($rec, "_updateSourceAndButtons", []);})(self);})]));})])); return self;}, -args: ["html"], -source: unescape('renderTabsOn%3A%20html%0A%20%20%20%20tabsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_tabs%20jt_browser%27.%0A%20%20%20%20self%20updateTabsList.'), -messageSends: ["class:", "ul", "updateTabsList"], +args: ["aString"], +source: unescape('setMethodProtocol%3A%20aString%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09%28self%20protocols%20includes%3A%20aString%29%0A%09%20%20%20%20ifFalse%3A%20%5Bself%20addNewProtocol%5D%0A%09%20%20%20%20ifTrue%3A%20%5B%0A%09%09selectedMethod%20category%3A%20aString.%0A%09%09selectedProtocol%20%3A%3D%20aString.%0A%09%09selectedMethod%20%3A%3D%20selectedMethod.%0A%09%09self%20%0A%09%09%20%20%20%20updateProtocolsList%3B%0A%09%09%20%20%20%20updateMethodsList%3B%0A%09%09%20%20%20%20updateSourceAndButtons%5D%5D'), +messageSends: ["ifTrue:", "cancelChanges", "ifFalse:ifTrue:", "includes:", "protocols", "addNewProtocol", "category:", "updateProtocolsList", "updateMethodsList", "updateSourceAndButtons"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_renderBottomPanelOn_'), +unescape('_showClassButtons'), smalltalk.method({ -selector: unescape('renderBottomPanelOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('showClassButtons'), +category: 'actions', +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_class_", ["jt_sourceCode"]);return smalltalk.send($rec, "_with_", [(function(){(self['@sourceArea']=smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", []));smalltalk.send(self['@sourceArea'], "_renderOn_", [html]);smalltalk.send(self['@sourceArea'], "_onKeyDown_", [(function(e){return smalltalk.send(self, "_handleSourceAreaKeyDown_", [e]);})]);return smalltalk.send(self['@sourceArea'], "_onKeyUp_", [(function(){return smalltalk.send(self, "_updateStatus", []);})]);})]);})(smalltalk.send(html, "_div", [])); +smalltalk.send(smalltalk.send(self['@classButtons'], "_asJQuery", []), "_show", []); return self;}, -args: ["html"], -source: unescape('renderBottomPanelOn%3A%20html%0A%20%20%20%20html%20div%0A%09class%3A%20%27jt_sourceCode%27%3B%0A%09with%3A%20%5B%0A%09%20%20%20%20sourceArea%20%3A%3D%20SourceArea%20new.%0A%09%20%20%20%20sourceArea%20renderOn%3A%20html.%0A%20%20%20%20%20%20%20%20%20%20%20%20sourceArea%20onKeyDown%3A%20%5B%3Ae%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20handleSourceAreaKeyDown%3A%20e%5D.%0A%09%20%20%20%20sourceArea%20onKeyUp%3A%20%5Bself%20updateStatus%5D%5D'), -messageSends: ["class:", "with:", "new", "renderOn:", "onKeyDown:", "handleSourceAreaKeyDown:", "onKeyUp:", "updateStatus", "div"], -referencedClasses: ["SourceArea"] +args: [], +source: unescape('showClassButtons%0A%20%20%20%20classButtons%20asJQuery%20show'), +messageSends: ["show", "asJQuery"], +referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_renderButtonsOn_'), +unescape('_showMethodButtons'), smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('showMethodButtons'), +category: 'actions', +fn: function (){ var self=this; -(self['@saveButton']=smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["Save"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_compile", []);})]);})(self['@saveButton']); -(self['@methodButtons']=smalltalk.send(html, "_span", [])); -(self['@classButtons']=smalltalk.send(html, "_span", [])); -(function($rec){smalltalk.send($rec, "_class_", ["right"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_doIt", []);})]);})(smalltalk.send(html, "_button", []));(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_printIt", []);})]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_inspectIt", []);})]);})(smalltalk.send(html, "_button", []));})]);})(smalltalk.send(html, "_div", [])); -smalltalk.send(self, "_updateSourceAndButtons", []); +smalltalk.send(smalltalk.send(self['@methodButtons'], "_asJQuery", []), "_show", []); return self;}, -args: ["html"], -source: unescape('renderButtonsOn%3A%20html%0A%20%20%20%20saveButton%20%3A%3D%20html%20button.%0A%20%20%20%20saveButton%20%0A%09with%3A%20%27Save%27%3B%0A%09onClick%3A%20%5Bself%20compile%5D.%0A%20%20%20%20methodButtons%20%3A%3D%20html%20span.%0A%20%20%20%20classButtons%20%3A%3D%20html%20span.%0A%20%20%20%20html%20div%20%0A%09class%3A%20%27right%27%3B%0A%09with%3A%20%5B%0A%09%09html%20button%0A%09%09%09with%3A%20%27DoIt%27%3B%0A%09%09%09onClick%3A%20%5BsourceArea%20doIt%5D.%0A%09%09html%20button%0A%09%09%09with%3A%20%27PrintIt%27%3B%0A%09%09%09onClick%3A%20%5BsourceArea%20printIt%5D.%0A%09%09html%20button%20with%3A%20%27InspectIt%27%3B%0A%09%09%09onClick%3A%20%5BsourceArea%20inspectIt%5D%5D.%20%0A%20%20%20%20self%20updateSourceAndButtons'), -messageSends: ["button", "with:", "onClick:", "compile", "span", "class:", "doIt", "printIt", "inspectIt", "div", "updateSourceAndButtons"], +args: [], +source: unescape('showMethodButtons%0A%20%20%20%20methodButtons%20asJQuery%20show'), +messageSends: ["show", "asJQuery"], referencedClasses: [] }), smalltalk.Browser); smalltalk.addMethod( -unescape('_canBeClosed'), +unescape('_source'), smalltalk.method({ -selector: unescape('canBeClosed'), -category: 'testing', +selector: unescape('source'), +category: 'accessing', fn: function (){ var self=this; -return true; -return self;}, +try{((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_source', fn: function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_declarationSource", []);})() : (function(){return smalltalk.send(self, "_methodSource", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_declarationSource", []);}), (function(){return smalltalk.send(self, "_methodSource", []);})]))}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '_source', fn: function(){return ((($receiver = smalltalk.send(smalltalk.send(self['@selectedProtocol'], "_notNil", []), "_or_", [(function(){return smalltalk.send(self['@selectedMethod'], "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_declarationSource", []);})() : (function(){return smalltalk.send(self, "_methodSource", []);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self, "_declarationSource", []);}), (function(){return smalltalk.send(self, "_methodSource", []);})]))}})})();})])); +(function(){throw({name: 'stReturn', selector: '_source', fn: function(){return (($receiver = self['@selectedClass']) == nil || $receiver == undefined) ? (function(){return "";})() : (function(){return smalltalk.send(self, "_classCommentSource", []);})()}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_source'){return e.fn()} throw(e)}}, args: [], -source: unescape('canBeClosed%0A%09%5Etrue'), -messageSends: [], +source: unescape('source%0A%20%20%20%20selectedTab%20%3D%20%23comment%20ifFalse%3A%20%5B%0A%09%5E%28selectedProtocol%20notNil%20or%3A%20%5BselectedMethod%20notNil%5D%29%0A%09%20%20%20%20ifFalse%3A%20%5Bself%20declarationSource%5D%0A%09%20%20%20%20ifTrue%3A%20%5Bself%20methodSource%5D%5D.%0A%20%20%20%20%5EselectedClass%0A%09ifNil%3A%20%5B%27%27%5D%0A%09ifNotNil%3A%20%5Bself%20classCommentSource%5D'), +messageSends: ["ifFalse:", unescape("%3D"), "ifFalse:ifTrue:", "or:", "notNil", "declarationSource", "methodSource", "ifNil:ifNotNil:", "classCommentSource"], referencedClasses: [] }), smalltalk.Browser); @@ -2594,23 +2474,6 @@ referencedClasses: ["TabManager"] }), smalltalk.Browser); -smalltalk.addMethod( -unescape('_updateProtocolsList'), -smalltalk.method({ -selector: unescape('updateProtocolsList'), -category: 'updating', -fn: function (){ -var self=this; -smalltalk.send(self['@protocolsList'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(self, "_protocols", []), "_do_", [(function(each){var li=nil; -(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedProtocol'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));return (function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectProtocol_", [each]);})]);})(li);})]);})]); -return self;}, -args: [], -source: unescape('updateProtocolsList%0A%20%20%20%20protocolsList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09self%20protocols%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%20selectedProtocol%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09li%20class%3A%20%27selected%27%5D.%0A%09%20%20%20%20li%20%0A%09%09with%3A%20each%3B%0A%09%09onClick%3A%20%5Bself%20selectProtocol%3A%20each%5D%5D%5D'), -messageSends: ["contents:", "do:", "protocols", "li", "ifTrue:", unescape("%3D"), "class:", "with:", "onClick:", "selectProtocol:"], -referencedClasses: [] -}), -smalltalk.Browser); - smalltalk.addMethod( unescape('_updateMethodsList'), smalltalk.method({ @@ -2629,18 +2492,18 @@ referencedClasses: [] smalltalk.Browser); smalltalk.addMethod( -unescape('_updateTabsList'), +unescape('_updateProtocolsList'), smalltalk.method({ -selector: unescape('updateTabsList'), +selector: unescape('updateProtocolsList'), category: 'updating', fn: function (){ var self=this; -smalltalk.send(self['@tabsList'], "_contents_", [(function(html){var li=nil; -(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));(function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", ["Instance"]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [smalltalk.symbolFor("instance")]);})]);})(li);(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("class")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));(function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", ["Class"]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [smalltalk.symbolFor("class")]);})]);})(li);(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));return (function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", ["Comment"]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [smalltalk.symbolFor("comment")]);})]);})(li);})]); +smalltalk.send(self['@protocolsList'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(self, "_protocols", []), "_do_", [(function(each){var li=nil; +(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedProtocol'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));return (function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectProtocol_", [each]);})]);})(li);})]);})]); return self;}, args: [], -source: unescape('updateTabsList%0A%20%20%20%20tabsList%20contents%3A%20%5B%3Ahtml%20%7C%7C%20li%20%7C%0A%09li%20%3A%3D%20html%20li.%0A%09selectedTab%20%3D%20%23instance%20ifTrue%3A%20%5Bli%20class%3A%20%27selected%27%5D.%0A%09li%0A%09%20%20%20%20with%3A%20%5B%0A%09%09html%20span%20class%3A%20%27ltab%27.%0A%09%09html%20span%20class%3A%20%27mtab%27%3B%20with%3A%20%27Instance%27.%0A%09%09html%20span%20class%3A%20%27rtab%27%5D%3B%0A%09%20%20%20%20onClick%3A%20%5Bself%20selectTab%3A%20%23instance%5D.%0A%09li%20%3A%3D%20html%20li.%0A%09selectedTab%20%3D%20%23class%20ifTrue%3A%20%5Bli%20class%3A%20%27selected%27%5D.%0A%09li%0A%09%20%20%20%20with%3A%20%5B%0A%09%09html%20span%20class%3A%20%27ltab%27.%0A%09%09html%20span%20class%3A%20%27mtab%27%3B%20with%3A%20%27Class%27.%0A%09%09html%20span%20class%3A%20%27rtab%27%5D%3B%0A%09%20%20%20%20onClick%3A%20%5Bself%20selectTab%3A%20%23class%5D.%0A%09li%20%3A%3D%20html%20li.%0A%09selectedTab%20%3D%20%23comment%20ifTrue%3A%20%5Bli%20class%3A%20%27selected%27%5D.%0A%09li%0A%09%20%20%20%20with%3A%20%5B%0A%09%09html%20span%20class%3A%20%27ltab%27.%0A%09%09html%20span%20class%3A%20%27mtab%27%3B%20with%3A%20%27Comment%27.%0A%09%09html%20span%20class%3A%20%27rtab%27%5D%3B%0A%09%20%20%20%20onClick%3A%20%5Bself%20selectTab%3A%20%23comment%5D%5D'), -messageSends: ["contents:", "li", "ifTrue:", unescape("%3D"), "class:", "with:", "span", "onClick:", "selectTab:"], +source: unescape('updateProtocolsList%0A%20%20%20%20protocolsList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09self%20protocols%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%20selectedProtocol%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09li%20class%3A%20%27selected%27%5D.%0A%09%20%20%20%20li%20%0A%09%09with%3A%20each%3B%0A%09%09onClick%3A%20%5Bself%20selectProtocol%3A%20each%5D%5D%5D'), +messageSends: ["contents:", "do:", "protocols", "li", "ifTrue:", unescape("%3D"), "class:", "with:", "onClick:", "selectProtocol:"], referencedClasses: [] }), smalltalk.Browser); @@ -2686,17 +2549,18 @@ referencedClasses: [] smalltalk.Browser); smalltalk.addMethod( -unescape('_resetClassesList'), +unescape('_updateTabsList'), smalltalk.method({ -selector: unescape('resetClassesList'), +selector: unescape('updateTabsList'), category: 'updating', fn: function (){ var self=this; -smalltalk.send(self['@classesList'], "_resetNodes", []); +smalltalk.send(self['@tabsList'], "_contents_", [(function(html){var li=nil; +(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("instance")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));(function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", ["Instance"]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [smalltalk.symbolFor("instance")]);})]);})(li);(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("class")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));(function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", ["Class"]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [smalltalk.symbolFor("class")]);})]);})(li);(li=smalltalk.send(html, "_li", []));((($receiver = smalltalk.send(self['@selectedTab'], "__eq", [smalltalk.symbolFor("comment")])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));return (function($rec){smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["ltab"]);(function($rec){smalltalk.send($rec, "_class_", ["mtab"]);return smalltalk.send($rec, "_with_", ["Comment"]);})(smalltalk.send(html, "_span", []));return smalltalk.send(smalltalk.send(html, "_span", []), "_class_", ["rtab"]);})]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectTab_", [smalltalk.symbolFor("comment")]);})]);})(li);})]); return self;}, args: [], -source: unescape('resetClassesList%0A%09classesList%20resetNodes'), -messageSends: ["resetNodes"], +source: unescape('updateTabsList%0A%20%20%20%20tabsList%20contents%3A%20%5B%3Ahtml%20%7C%7C%20li%20%7C%0A%09li%20%3A%3D%20html%20li.%0A%09selectedTab%20%3D%20%23instance%20ifTrue%3A%20%5Bli%20class%3A%20%27selected%27%5D.%0A%09li%0A%09%20%20%20%20with%3A%20%5B%0A%09%09html%20span%20class%3A%20%27ltab%27.%0A%09%09html%20span%20class%3A%20%27mtab%27%3B%20with%3A%20%27Instance%27.%0A%09%09html%20span%20class%3A%20%27rtab%27%5D%3B%0A%09%20%20%20%20onClick%3A%20%5Bself%20selectTab%3A%20%23instance%5D.%0A%09li%20%3A%3D%20html%20li.%0A%09selectedTab%20%3D%20%23class%20ifTrue%3A%20%5Bli%20class%3A%20%27selected%27%5D.%0A%09li%0A%09%20%20%20%20with%3A%20%5B%0A%09%09html%20span%20class%3A%20%27ltab%27.%0A%09%09html%20span%20class%3A%20%27mtab%27%3B%20with%3A%20%27Class%27.%0A%09%09html%20span%20class%3A%20%27rtab%27%5D%3B%0A%09%20%20%20%20onClick%3A%20%5Bself%20selectTab%3A%20%23class%5D.%0A%09li%20%3A%3D%20html%20li.%0A%09selectedTab%20%3D%20%23comment%20ifTrue%3A%20%5Bli%20class%3A%20%27selected%27%5D.%0A%09li%0A%09%20%20%20%20with%3A%20%5B%0A%09%09html%20span%20class%3A%20%27ltab%27.%0A%09%09html%20span%20class%3A%20%27mtab%27%3B%20with%3A%20%27Comment%27.%0A%09%09html%20span%20class%3A%20%27rtab%27%5D%3B%0A%09%20%20%20%20onClick%3A%20%5Bself%20selectTab%3A%20%23comment%5D%5D'), +messageSends: ["contents:", "li", "ifTrue:", unescape("%3D"), "class:", "with:", "span", "onClick:", "selectTab:"], referencedClasses: [] }), smalltalk.Browser); @@ -2728,8 +2592,24 @@ var self=this; return "st"; return self;}, args: [], -source: unescape('commitPathSt%0A%09%5E%27st%27'), -messageSends: [], +source: unescape('commitPathSt%0A%09%5E%27st%27'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.Browser.klass); + +smalltalk.addMethod( +unescape('_open'), +smalltalk.method({ +selector: unescape('open'), +category: 'convenience', +fn: function (){ +var self=this; +smalltalk.send(smalltalk.send(self, "_new", []), "_open", []); +return self;}, +args: [], +source: unescape('open%0A%20%20%20%20self%20new%20open'), +messageSends: ["open", "new"], referencedClasses: [] }), smalltalk.Browser.klass); @@ -2750,185 +2630,188 @@ referencedClasses: [] }), smalltalk.Browser.klass); + +smalltalk.addClass('Debugger', smalltalk.TabWidget, ['error', 'selectedContext', 'sourceArea', 'ul', 'ul2', 'inspector', 'saveButton', 'unsavedChanges', 'selectedVariable', 'selectedVariableName', 'inspectButton'], 'IDE'); smalltalk.addMethod( -unescape('_open'), +unescape('_arguments'), smalltalk.method({ -selector: unescape('open'), -category: 'convenience', +selector: unescape('arguments'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_new", []), "_open", []); +return (($receiver = smalltalk.send(self, "_method", [])) == nil || $receiver == undefined) ? (function(){return smalltalk.send(smalltalk.send(self['@selectedContext'], "_temps", []), "_collect_", [(function(each){return nil;})]);})() : (function(){return smalltalk.send(smalltalk.send(self, "_method", []), "_arguments", []);})(); return self;}, args: [], -source: unescape('open%0A%20%20%20%20self%20new%20open'), -messageSends: ["open", "new"], +source: unescape('arguments%0A%09%5Eself%20method%20%0A%09%09ifNil%3A%20%5BselectedContext%20temps%20collect%3A%20%5B%3Aeach%20%7C%20nil%5D%5D%0A%09%09ifNotNil%3A%20%5Bself%20method%20arguments%5D'), +messageSends: ["ifNil:ifNotNil:", "method", "collect:", "temps", "arguments"], referencedClasses: [] }), -smalltalk.Browser.klass); - +smalltalk.Debugger); -smalltalk.addClass('Inspector', smalltalk.TabWidget, ['label', 'variables', 'object', 'selectedVariable', 'variablesList', 'valueTextarea', 'diveButton', 'sourceArea'], 'IDE'); smalltalk.addMethod( -unescape('_label'), +unescape('_canBeClosed'), smalltalk.method({ -selector: unescape('label'), -category: 'accessing', +selector: unescape('canBeClosed'), +category: 'testing', fn: function (){ var self=this; -return (($receiver = self['@label']) == nil || $receiver == undefined) ? (function(){return unescape("Inspector%20%28nil%29");})() : $receiver; +return true; return self;}, args: [], -source: unescape('label%0A%09%5Elabel%20ifNil%3A%20%5B%27Inspector%20%28nil%29%27%5D'), -messageSends: ["ifNil:"], +source: unescape('canBeClosed%0A%20%20%20%20%5Etrue'), +messageSends: [], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_variables'), +unescape('_error'), smalltalk.method({ -selector: unescape('variables'), +selector: unescape('error'), category: 'accessing', fn: function (){ var self=this; -return self['@variables']; +return self['@error']; return self;}, args: [], -source: unescape('variables%0A%09%5Evariables'), +source: unescape('error%0A%09%5Eerror'), messageSends: [], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_setVariables_'), +unescape('_error_'), smalltalk.method({ -selector: unescape('setVariables%3A'), +selector: unescape('error%3A'), category: 'accessing', -fn: function (aCollection){ +fn: function (anError){ var self=this; -(self['@variables']=aCollection); +(self['@error']=anError); return self;}, -args: ["aCollection"], -source: unescape('setVariables%3A%20aCollection%0A%09variables%20%3A%3D%20aCollection'), +args: ["anError"], +source: unescape('error%3A%20anError%0A%09error%20%3A%3D%20anError'), messageSends: [], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_setLabel_'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('setLabel%3A'), -category: 'accessing', -fn: function (aString){ +selector: unescape('initialize'), +category: 'initialization', +fn: function (){ var self=this; -(self['@label']=aString); +smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); +smalltalk.send(self['@unsavedChanges'], "__eq", [false]); return self;}, -args: ["aString"], -source: unescape('setLabel%3A%20aString%0A%09label%20%3A%3D%20aString'), -messageSends: [], +args: [], +source: unescape('initialize%0A%09super%20initialize.%0A%09unsavedChanges%20%3D%20false'), +messageSends: ["initialize", unescape("%3D")], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_selectedVariable'), +unescape('_inspectSelectedVariable'), smalltalk.method({ -selector: unescape('selectedVariable'), -category: 'accessing', +selector: unescape('inspectSelectedVariable'), +category: 'actions', fn: function (){ var self=this; -return self['@selectedVariable']; +smalltalk.send(self['@selectedVariable'], "_inspect", []); return self;}, args: [], -source: unescape('selectedVariable%0A%09%5EselectedVariable'), -messageSends: [], +source: unescape('inspectSelectedVariable%0A%09selectedVariable%20inspect'), +messageSends: ["inspect"], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_selectedVariable_'), +unescape('_label'), smalltalk.method({ -selector: unescape('selectedVariable%3A'), +selector: unescape('label'), category: 'accessing', -fn: function (aString){ +fn: function (){ var self=this; -(self['@selectedVariable']=aString); +return unescape("%5BDebugger%5D"); return self;}, -args: ["aString"], -source: unescape('selectedVariable%3A%20aString%0A%09selectedVariable%20%3A%3D%20aString'), +args: [], +source: unescape('label%0A%09%5E%27%5BDebugger%5D%27'), messageSends: [], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_sourceArea'), +unescape('_method'), smalltalk.method({ -selector: unescape('sourceArea'), +selector: unescape('method'), category: 'accessing', fn: function (){ var self=this; -return self['@sourceArea']; +return smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_class", []), "_methodAt_", [smalltalk.send(self['@selectedContext'], "_selector", [])]); return self;}, args: [], -source: unescape('sourceArea%0A%09%5EsourceArea'), -messageSends: [], +source: unescape('method%0A%09%5EselectedContext%20receiver%20class%20methodAt%3A%20selectedContext%20selector'), +messageSends: ["methodAt:", "class", "receiver", "selector"], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_inspect_'), +unescape('_proceed'), smalltalk.method({ -selector: unescape('inspect%3A'), +selector: unescape('proceed'), category: 'actions', -fn: function (anObject){ +fn: function (){ var self=this; -(self['@object']=anObject); -(self['@variables']=[]); -smalltalk.send(self['@object'], "_inspectOn_", [self]); +smalltalk.send(self, "_close", []); +smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_perform_withArguments_", [smalltalk.send(self['@selectedContext'], "_selector", []), smalltalk.send(self['@selectedContext'], "_temps", [])]); return self;}, -args: ["anObject"], -source: unescape('inspect%3A%20anObject%0A%09object%20%3A%3D%20anObject.%0A%09variables%20%3A%3D%20%23%28%29.%0A%09object%20inspectOn%3A%20self'), -messageSends: ["inspectOn:"], +args: [], +source: unescape('proceed%0A%09self%20close.%0A%09selectedContext%20receiver%20perform%3A%20selectedContext%20selector%20withArguments%3A%20selectedContext%20temps'), +messageSends: ["close", "perform:withArguments:", "receiver", "selector", "temps"], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_dive'), +unescape('_receiver'), smalltalk.method({ -selector: unescape('dive'), -category: 'actions', +selector: unescape('receiver'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_inspect", []); +return smalltalk.send(self['@selectedContext'], "_receiver", []); return self;}, args: [], -source: unescape('dive%0A%09%28self%20variables%20at%3A%20self%20selectedVariable%29%20inspect'), -messageSends: ["inspect", "at:", "variables", "selectedVariable"], +source: unescape('receiver%0A%09%5EselectedContext%20receiver'), +messageSends: ["receiver"], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_refresh'), +unescape('_renderBottomPanelOn_'), smalltalk.method({ -selector: unescape('refresh'), -category: 'actions', -fn: function (){ +selector: unescape('renderBottomPanelOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -(function($rec){smalltalk.send($rec, "_inspect_", [self['@object']]);smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateValueTextarea", []);})(self); +(function($rec){smalltalk.send($rec, "_class_", ["jt_sourceCode debugger"]);return smalltalk.send($rec, "_with_", [(function(){(self['@sourceArea']=smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", []));return smalltalk.send(self['@sourceArea'], "_renderOn_", [html]);})]);})(smalltalk.send(html, "_div", [])); +(self['@ul2']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column debugger variables"])); +(self['@inspector']=smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["jt_column debugger inspector"])); +smalltalk.send(self['@sourceArea'], "_onKeyUp_", [(function(){return smalltalk.send(self, "_updateStatus", []);})]); return self;}, -args: [], -source: unescape('refresh%0A%09self%20%0A%09%09inspect%3A%20object%3B%20%0A%09%09updateVariablesList%3B%0A%09%09updateValueTextarea'), -messageSends: ["inspect:", "updateVariablesList", "updateValueTextarea"], -referencedClasses: [] +args: ["html"], +source: unescape('renderBottomPanelOn%3A%20html%0A%09html%20div%0A%09%09class%3A%20%27jt_sourceCode%20debugger%27%3B%0A%09%09with%3A%20%5B%0A%09%09%09sourceArea%20%3A%3D%20SourceArea%20new.%0A%09%09%09sourceArea%20renderOn%3A%20html%5D.%0A%09ul2%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20debugger%20variables%27.%0A%09inspector%20%3A%3D%20html%20div%20class%3A%20%27jt_column%20debugger%20inspector%27.%0A%09sourceArea%0A%09%09onKeyUp%3A%20%5Bself%20updateStatus%5D'), +messageSends: ["class:", "with:", "new", "renderOn:", "div", "ul", "onKeyUp:", "updateStatus"], +referencedClasses: ["SourceArea"] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( unescape('_renderBoxOn_'), @@ -2940,347 +2823,363 @@ var self=this; (function($rec){smalltalk.send($rec, "_renderTopPanelOn_", [html]);return smalltalk.send($rec, "_renderBottomPanelOn_", [html]);})(self); return self;}, args: ["html"], -source: unescape('renderBoxOn%3A%20html%0A%09self%20%0A%09%09renderTopPanelOn%3A%20html%3B%0A%09%09renderBottomPanelOn%3A%20html'), +source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20self%20%0A%09renderTopPanelOn%3A%20html%3B%0A%09renderBottomPanelOn%3A%20html'), messageSends: ["renderTopPanelOn:", "renderBottomPanelOn:"], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_renderTopPanelOn_'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('renderTopPanelOn%3A'), +selector: unescape('renderButtonsOn%3A'), category: 'rendering', fn: function (html){ var self=this; -(function($rec){smalltalk.send($rec, "_class_", ["top"]);return smalltalk.send($rec, "_with_", [(function(){(self['@variablesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column variables"]));(self['@valueTextarea']=(function($rec){smalltalk.send($rec, "_class_", ["jt_column value"]);return smalltalk.send($rec, "_at_put_", ["readonly", "readonly"]);})(smalltalk.send(html, "_textarea", [])));(function($rec){smalltalk.send($rec, "_class_", ["jt_tabs inspector"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_class_", ["jt_button inspector refresh"]);smalltalk.send($rec, "_with_", ["Refresh"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_refresh", []);})]);})(smalltalk.send(html, "_button", []));return (self['@diveButton']=(function($rec){smalltalk.send($rec, "_class_", ["jt_button inspector dive"]);smalltalk.send($rec, "_with_", ["Dive"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_dive", []);})]);})(smalltalk.send(html, "_button", [])));})]);})(smalltalk.send(html, "_div", []));return smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["jt_clear"]);})]);})(smalltalk.send(html, "_div", [])); -(function($rec){smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateValueTextarea", []);})(self); +(self['@saveButton']=(function($rec){smalltalk.send($rec, "_with_", ["Save"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_save", []);})]);})(smalltalk.send(html, "_button", []))); +(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_doIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_printIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_inspectIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["Proceed"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_proceed", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["Abandon"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_close", []);})]);})(smalltalk.send(html, "_button", [])); +(self['@inspectButton']=(function($rec){smalltalk.send($rec, "_class_", ["jt_button debugger inspect"]);smalltalk.send($rec, "_with_", ["Inspect"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_inspectSelectedVariable", []);})]);})(smalltalk.send(html, "_button", []))); +(function($rec){smalltalk.send($rec, "_updateSourceArea", []);smalltalk.send($rec, "_updateStatus", []);smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateInspector", []);})(self); return self;}, args: ["html"], -source: unescape('renderTopPanelOn%3A%20html%0A%09html%20div%20%0A%09%09class%3A%20%27top%27%3B%20%0A%09%09with%3A%20%5B%0A%09%09%09variablesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20variables%27.%0A%09%09%09valueTextarea%20%3A%3D%20html%20textarea%20class%3A%20%27jt_column%20value%27%3B%20at%3A%20%27readonly%27%20put%3A%20%27readonly%27.%0A%09%09%09html%20div%20class%3A%20%27jt_tabs%20inspector%27%3B%20with%3A%20%5B%0A%09%09%09%09html%20button%0A%09%09%09%09%09class%3A%20%27jt_button%20inspector%20refresh%27%3B%0A%09%09%09%09%09with%3A%20%27Refresh%27%3B%0A%09%09%09%09%09onClick%3A%20%5Bself%20refresh%5D.%0A%09%09%09%09diveButton%20%3A%3D%20html%20button%20%0A%09%09%09%09%09class%3A%20%27jt_button%20inspector%20dive%27%3B%0A%09%09%09%09%09with%3A%20%27Dive%27%3B%20%0A%09%09%09%09%09onClick%3A%20%5Bself%20dive%5D%5D.%0A%09%09%09html%20div%20class%3A%20%27jt_clear%27%5D.%0A%09self%0A%09%09updateVariablesList%3B%0A%09%09updateValueTextarea.'), -messageSends: ["class:", "with:", "ul", "at:put:", "textarea", "onClick:", "refresh", "button", "dive", "div", "updateVariablesList", "updateValueTextarea"], +source: unescape('renderButtonsOn%3A%20html%0A%09saveButton%20%3A%3D%20html%20button%0A%09%09with%3A%20%27Save%27%3B%0A%09%09onClick%3A%20%5Bself%20save%5D.%0A%09html%20button%0A%09%09with%3A%20%27DoIt%27%3B%0A%09%09onClick%3A%20%5BsourceArea%20doIt%5D.%0A%09html%20button%0A%09%09with%3A%20%27PrintIt%27%3B%0A%09%09onClick%3A%20%5BsourceArea%20printIt%5D.%0A%09html%20button%0A%09%09with%3A%20%27InspectIt%27%3B%0A%09%09onClick%3A%20%5BsourceArea%20inspectIt%5D.%0A%09html%20button%20%0A%09%09with%3A%20%27Proceed%27%3B%0A%09%09onClick%3A%20%5Bself%20proceed%5D.%0A%09html%20button%0A%09%09with%3A%20%27Abandon%27%3B%0A%09%09onClick%3A%20%5Bself%20close%5D.%0A%09inspectButton%20%3A%3D%20html%20button%0A%09%09class%3A%20%27jt_button%20debugger%20inspect%27%3B%0A%09%09with%3A%20%27Inspect%27%3B%0A%09%09onClick%3A%20%5Bself%20inspectSelectedVariable%5D.%0A%09%20self%20%0A%09%09updateSourceArea%3B%0A%09%09updateStatus%3B%0A%09%09updateVariablesList%3B%0A%09%09updateInspector'), +messageSends: ["with:", "onClick:", "save", "button", "doIt", "printIt", "inspectIt", "proceed", "close", "class:", "inspectSelectedVariable", "updateSourceArea", "updateStatus", "updateVariablesList", "updateInspector"], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_renderBottomPanelOn_'), +unescape('_renderContext_on_'), smalltalk.method({ -selector: unescape('renderBottomPanelOn%3A'), +selector: unescape('renderContext%3Aon%3A'), category: 'rendering', -fn: function (html){ +fn: function (aContext, html){ var self=this; -(function($rec){smalltalk.send($rec, "_class_", ["jt_sourceCode"]);return smalltalk.send($rec, "_with_", [(function(){(self['@sourceArea']=(function($rec){smalltalk.send($rec, "_receiver_", [self['@object']]);smalltalk.send($rec, "_onDoIt_", [(function(){return smalltalk.send(self, "_refresh", []);})]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", [])));return smalltalk.send(self['@sourceArea'], "_renderOn_", [html]);})]);})(smalltalk.send(html, "_div", [])); +var li=nil; +(li=smalltalk.send(html, "_li", [])); +((($receiver = smalltalk.send(self['@selectedContext'], "__eq", [aContext])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})])); +(function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(aContext, "_asString", [])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectContext_", [aContext]);})]);})(li); +(($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_renderContext_on_", [smalltalk.send(aContext, "_home", []), html]);})() : nil; return self;}, -args: ["html"], -source: unescape('renderBottomPanelOn%3A%20html%0A%20%20%20%20html%20div%0A%09class%3A%20%27jt_sourceCode%27%3B%0A%09with%3A%20%5B%0A%09%20%20%20%20sourceArea%20%3A%3D%20SourceArea%20new%0A%09%09receiver%3A%20object%3B%0A%09%09onDoIt%3A%20%5Bself%20refresh%5D%3B%0A%09%09yourself.%0A%20%20%20%20%20%20%20%20%20%20%20%20sourceArea%20renderOn%3A%20html%5D'), -messageSends: ["class:", "with:", "receiver:", "onDoIt:", "refresh", "yourself", "new", "renderOn:", "div"], -referencedClasses: ["SourceArea"] +args: ["aContext", "html"], +source: unescape('renderContext%3A%20aContext%20on%3A%20html%0A%09%7C%20li%20%7C%0A%09li%20%3A%3D%20html%20li.%0A%09selectedContext%20%3D%20aContext%20ifTrue%3A%20%5B%0A%09%09li%20class%3A%20%27selected%27%5D.%0A%09li%20%0A%09%09with%3A%20aContext%20asString%3B%0A%09%09onClick%3A%20%5Bself%20selectContext%3A%20aContext%5D.%0A%09aContext%20home%20ifNotNil%3A%20%5Bself%20renderContext%3A%20aContext%20home%20on%3A%20html%5D'), +messageSends: ["li", "ifTrue:", unescape("%3D"), "class:", "with:", "asString", "onClick:", "selectContext:", "ifNotNil:", "home", "renderContext:on:"], +referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_renderButtonsOn_'), +unescape('_renderTopPanelOn_'), smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), +selector: unescape('renderTopPanelOn%3A'), category: 'rendering', fn: function (html){ var self=this; -(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_sourceArea", []), "_doIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_sourceArea", []), "_printIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_sourceArea", []), "_inspectIt", []);})]);})(smalltalk.send(html, "_button", [])); -smalltalk.send(self, "_updateButtons", []); +(self['@selectedContext']=smalltalk.send(smalltalk.send(self, "_error", []), "_context", [])); +(function($rec){smalltalk.send($rec, "_class_", ["top"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_class_", ["label"]);return smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(self, "_error", []), "_messageText", [])]);})(smalltalk.send(html, "_div", []));return (self['@ul']=(function($rec){smalltalk.send($rec, "_class_", ["jt_column debugger contexts"]);return smalltalk.send($rec, "_with_", [(function(){return smalltalk.send(self, "_renderContext_on_", [smalltalk.send(smalltalk.send(self, "_error", []), "_context", []), html]);})]);})(smalltalk.send(html, "_ul", [])));})]);})(smalltalk.send(html, "_div", [])); return self;}, args: ["html"], -source: unescape('renderButtonsOn%3A%20html%0A%09html%20button%20%0A%09%09with%3A%20%27DoIt%27%3B%0A%09%09onClick%3A%20%5Bself%20sourceArea%20doIt%5D.%0A%09html%20button%20%0A%09%09with%3A%20%27PrintIt%27%3B%0A%09%09onClick%3A%20%5Bself%20sourceArea%20printIt%5D.%0A%09html%20button%20%0A%09%09with%3A%20%27InspectIt%27%3B%0A%09%09onClick%3A%20%5Bself%20sourceArea%20inspectIt%5D.%0A%09self%20updateButtons'), -messageSends: ["with:", "onClick:", "doIt", "sourceArea", "button", "printIt", "inspectIt", "updateButtons"], +source: unescape('renderTopPanelOn%3A%20html%0A%09selectedContext%20%3A%3D%20self%20error%20context.%0A%09html%20div%20%0A%09%09class%3A%20%27top%27%3B%20%0A%09%09with%3A%20%5B%0A%09%09%09html%20div%20%0A%09%09%09%09class%3A%20%27label%27%3B%0A%09%09%09%09with%3A%20self%20error%20messageText.%0A%09%09%09ul%20%3A%3D%20html%20ul%20%0A%09%09%09%09class%3A%20%27jt_column%20debugger%20contexts%27%3B%0A%09%09%09%09with%3A%20%5Bself%20renderContext%3A%20self%20error%20context%20on%3A%20html%5D%5D'), +messageSends: ["context", "error", "class:", "with:", "messageText", "div", "renderContext:on:", "ul"], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_canBeClosed'), +unescape('_save'), smalltalk.method({ -selector: unescape('canBeClosed'), -category: 'testing', +selector: unescape('save'), +category: 'actions', fn: function (){ var self=this; -return true; +var protocol=nil; +(protocol=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(self['@selectedContext'], "_selector", [])]), "_category", [])); +smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_class", []), "_compile_category_", [smalltalk.send(self['@sourceArea'], "_val", []), protocol]); +smalltalk.send(self, "_updateStatus", []); return self;}, args: [], -source: unescape('canBeClosed%0A%09%5Etrue'), -messageSends: [], +source: unescape('save%0A%09%7C%20protocol%20%7C%0A%09protocol%20%3A%3D%20%28selectedContext%20receiver%20class%20methodDictionary%20at%3A%20selectedContext%20selector%29%20category.%0A%09selectedContext%20receiver%20class%20compile%3A%20sourceArea%20val%20category%3A%20protocol.%0A%09self%20updateStatus'), +messageSends: ["category", "at:", "methodDictionary", "class", "receiver", "selector", "compile:category:", "val", "updateStatus"], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_updateVariablesList'), +unescape('_selectContext_'), smalltalk.method({ -selector: unescape('updateVariablesList'), -category: 'updating', -fn: function (){ +selector: unescape('selectContext%3A'), +category: 'actions', +fn: function (aContext){ var self=this; -smalltalk.send(self['@variablesList'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_keys", []), "_do_", [(function(each){var li=nil; -(li=smalltalk.send(html, "_li", []));(function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_", [each]);})]);})(li);return ((($receiver = smalltalk.send(smalltalk.send(self, "_selectedVariable", []), "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));})]);})]); +(self['@selectedContext']=aContext); +(self['@selectedVariable']=nil); +(self['@selectedVariableName']=nil); +(function($rec){smalltalk.send($rec, "_updateContextsList", []);smalltalk.send($rec, "_updateSourceArea", []);smalltalk.send($rec, "_updateInspector", []);smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateStatus", []);})(self); return self;}, -args: [], -source: unescape('updateVariablesList%0A%09variablesList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09self%20variables%20keys%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%09%09li%20%3A%3D%20html%20li.%0A%09%09%09li%0A%09%09%09%09with%3A%20each%3B%0A%09%09%09%09onClick%3A%20%5Bself%20selectVariable%3A%20each%5D.%0A%09%09%09self%20selectedVariable%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09%09%09li%20class%3A%20%27selected%27%5D%5D%5D'), -messageSends: ["contents:", "do:", "keys", "variables", "li", "with:", "onClick:", "selectVariable:", "ifTrue:", unescape("%3D"), "selectedVariable", "class:"], +args: ["aContext"], +source: unescape('selectContext%3A%20aContext%0A%09selectedContext%20%3A%3D%20aContext.%0A%09selectedVariable%20%3A%3D%20nil.%0A%09selectedVariableName%20%3A%3D%20nil.%0A%09self%20%0A%09%09updateContextsList%3B%0A%09%09updateSourceArea%3B%0A%09%09updateInspector%3B%0A%09%09updateVariablesList%3B%0A%09%09updateStatus'), +messageSends: ["updateContextsList", "updateSourceArea", "updateInspector", "updateVariablesList", "updateStatus"], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_selectVariable_'), +unescape('_selectVariable_named_'), smalltalk.method({ -selector: unescape('selectVariable%3A'), -category: 'updating', -fn: function (aString){ +selector: unescape('selectVariable%3Anamed%3A'), +category: 'actions', +fn: function (anObject, aString){ var self=this; -smalltalk.send(self, "_selectedVariable_", [aString]); -(function($rec){smalltalk.send($rec, "_updateVariablesList", []);smalltalk.send($rec, "_updateValueTextarea", []);return smalltalk.send($rec, "_updateButtons", []);})(self); +(self['@selectedVariable']=anObject); +(self['@selectedVariableName']=aString); +smalltalk.send(self['@inspector'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(anObject, "_printString", [])]);})]); +smalltalk.send(self, "_updateVariablesList", []); return self;}, -args: ["aString"], -source: unescape('selectVariable%3A%20aString%0A%09self%20selectedVariable%3A%20aString.%0A%09self%20%0A%09%09updateVariablesList%3B%0A%09%09updateValueTextarea%3B%0A%09%09updateButtons'), -messageSends: ["selectedVariable:", "updateVariablesList", "updateValueTextarea", "updateButtons"], +args: ["anObject", "aString"], +source: unescape('selectVariable%3A%20anObject%20named%3A%20aString%0A%09selectedVariable%20%3A%3D%20anObject.%0A%09selectedVariableName%20%3A%3D%20aString.%0A%09inspector%20contents%3A%20%5B%3Ahtml%20%7C%20html%20with%3A%20anObject%20printString%5D.%0A%09self%20updateVariablesList'), +messageSends: ["contents:", "with:", "printString", "updateVariablesList"], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_updateValueTextarea'), +unescape('_source'), smalltalk.method({ -selector: unescape('updateValueTextarea'), -category: 'updating', +selector: unescape('source'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@valueTextarea'], "_asJQuery", []), "_val_", [((($receiver = smalltalk.send(smalltalk.send(self, "_selectedVariable", []), "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "";})() : (function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_printString", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "";}), (function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_printString", []);})]))]); +return (($receiver = smalltalk.send(self, "_method", [])) == nil || $receiver == undefined) ? (function(){return unescape("Method%20doesn%27t%20exist%21");})() : (function(){return smalltalk.send(smalltalk.send(self, "_method", []), "_source", []);})(); return self;}, args: [], -source: unescape('updateValueTextarea%0A%09valueTextarea%20asJQuery%20val%3A%20%28self%20selectedVariable%20isNil%0A%09%09ifTrue%3A%20%5B%27%27%5D%0A%09%09ifFalse%3A%20%5B%28self%20variables%20at%3A%20self%20selectedVariable%29%20printString%5D%29'), -messageSends: ["val:", "asJQuery", "ifTrue:ifFalse:", "isNil", "selectedVariable", "printString", "at:", "variables"], +source: unescape('source%0A%09%5Eself%20method%20%0A%09%09ifNil%3A%20%5B%27Method%20doesn%27%27t%20exist%21%27%5D%0A%09%09ifNotNil%3A%20%5Bself%20method%20source%5D'), +messageSends: ["ifNil:ifNotNil:", "method", "source"], referencedClasses: [] }), -smalltalk.Inspector); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_updateButtons'), +unescape('_updateContextsList'), smalltalk.method({ -selector: unescape('updateButtons'), +selector: unescape('updateContextsList'), category: 'updating', fn: function (){ var self=this; -((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedVariable", []), "_notNil", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@diveButton'], "_at_put_", ["disabled", true]);})() : (function(){return smalltalk.send(self['@diveButton'], "_removeAt_", ["disabled"]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@diveButton'], "_at_put_", ["disabled", true]);}), (function(){return smalltalk.send(self['@diveButton'], "_removeAt_", ["disabled"]);})])); +smalltalk.send(self['@ul'], "_contents_", [(function(html){return smalltalk.send(self, "_renderContext_on_", [smalltalk.send(smalltalk.send(self, "_error", []), "_context", []), html]);})]); return self;}, args: [], -source: unescape('updateButtons%0A%09%28self%20selectedVariable%20notNil%20and%3A%20%5B%28self%20variables%20at%3A%20self%20selectedVariable%29%20notNil%5D%29%0A%09%09ifFalse%3A%20%5BdiveButton%20at%3A%20%27disabled%27%20put%3A%20true%5D%20%0A%09%09ifTrue%3A%20%5BdiveButton%20removeAt%3A%20%27disabled%27%5D'), -messageSends: ["ifFalse:ifTrue:", "and:", "notNil", "selectedVariable", "at:", "variables", "at:put:", "removeAt:"], +source: unescape('updateContextsList%0A%09ul%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09self%20renderContext%3A%20self%20error%20context%20on%3A%20html%5D'), +messageSends: ["contents:", "renderContext:on:", "context", "error"], referencedClasses: [] }), -smalltalk.Inspector); - +smalltalk.Debugger); smalltalk.addMethod( -unescape('_on_'), +unescape('_updateInspector'), smalltalk.method({ -selector: unescape('on%3A'), -category: 'instance creation', -fn: function (anObject){ +selector: unescape('updateInspector'), +category: 'updating', +fn: function (){ var self=this; -return (function($rec){smalltalk.send($rec, "_inspect_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +smalltalk.send(self['@inspector'], "_contents_", [(function(html){return nil;})]); return self;}, -args: ["anObject"], -source: unescape('on%3A%20anObject%0A%09%5Eself%20new%0A%09%09inspect%3A%20anObject%3B%0A%09%09yourself'), -messageSends: ["inspect:", "yourself", "new"], +args: [], +source: unescape('updateInspector%0A%09inspector%20contents%3A%20%5B%3Ahtml%20%7C%5D'), +messageSends: ["contents:"], referencedClasses: [] }), -smalltalk.Inspector.klass); - +smalltalk.Debugger); -smalltalk.addClass('ReferencesBrowser', smalltalk.TabWidget, ['implementors', 'senders', 'implementorsList', 'input', 'timer', 'selector', 'sendersList', 'referencedClasses', 'referencedClassesList'], 'IDE'); smalltalk.addMethod( -unescape('_implementors'), +unescape('_updateSourceArea'), smalltalk.method({ -selector: unescape('implementors'), -category: 'accessing', +selector: unescape('updateSourceArea'), +category: 'updating', fn: function (){ var self=this; -return (($receiver = self['@implementors']) == nil || $receiver == undefined) ? (function(){return (self['@implementors']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +smalltalk.send(self['@sourceArea'], "_val_", [smalltalk.send(self, "_source", [])]); return self;}, args: [], -source: unescape('implementors%0A%09%5Eimplementors%20ifNil%3A%20%5Bimplementors%20%3A%3D%20Array%20new%5D'), -messageSends: ["ifNil:", "new"], -referencedClasses: ["Array"] +source: unescape('updateSourceArea%0A%09%20sourceArea%20val%3A%20self%20source'), +messageSends: ["val:", "source"], +referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_label'), +unescape('_updateStatus'), smalltalk.method({ -selector: unescape('label'), -category: 'accessing', +selector: unescape('updateStatus'), +category: 'updating', fn: function (){ var self=this; -return unescape("%5BReferences%5D"); +((($receiver = smalltalk.send(smalltalk.send(self['@sourceArea'], "_val", []), "__eq", [smalltalk.send(self, "_source", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil;return (self['@unsavedChanges']=false);})() : (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_removeAt_", ["disabled"]);})() : nil;return (self['@unsavedChanges']=true);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil;return (self['@unsavedChanges']=false);}), (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_removeAt_", ["disabled"]);})() : nil;return (self['@unsavedChanges']=true);})])); return self;}, args: [], -source: unescape('label%0A%09%5E%27%5BReferences%5D%27'), -messageSends: [], +source: unescape('updateStatus%0A%09sourceArea%20val%20%3D%20self%20source%0A%09%09ifTrue%3A%20%5B%0A%09%09%09saveButton%20ifNotNil%3A%20%5B%0A%09%09%09%09saveButton%20at%3A%20%27disabled%27%20put%3A%20true%5D.%0A%09%09%09unsavedChanges%20%3A%3D%20false%5D%0A%09%09ifFalse%3A%20%5B%0A%09%09%09saveButton%20ifNotNil%3A%20%5B%0A%09%09%09%09saveButton%20removeAt%3A%20%27disabled%27%5D.%0A%09%09%09unsavedChanges%20%3A%3D%20true%5D'), +messageSends: ["ifTrue:ifFalse:", unescape("%3D"), "val", "source", "ifNotNil:", "at:put:", "removeAt:"], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.Debugger); smalltalk.addMethod( -unescape('_selector'), +unescape('_updateVariablesList'), smalltalk.method({ -selector: unescape('selector'), -category: 'accessing', +selector: unescape('updateVariablesList'), +category: 'updating', fn: function (){ var self=this; -return self['@selector']; +smalltalk.send(self['@ul2'], "_contents_", [(function(html){var li=nil; +(li=(function($rec){smalltalk.send($rec, "_with_", ["self"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_named_", [smalltalk.send(self, "_receiver", []), "self"]);})]);})(smalltalk.send(html, "_li", [])));((($receiver = smalltalk.send(self['@selectedVariableName'], "__eq", ["self"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));smalltalk.send(smalltalk.send(self, "_arguments", []), "_withIndexDo_", [(function(each, index){var param=nil; +(param=smalltalk.send(smalltalk.send(self['@selectedContext'], "_temps", []), "_at_", [index]));(li=(function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_named_", [param, each]);})]);})(smalltalk.send(html, "_li", [])));return ((($receiver = smalltalk.send(self['@selectedVariableName'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));})]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_allInstanceVariableNames", []), "_do_", [(function(each){var ivar=nil; +(ivar=smalltalk.send(smalltalk.send(self, "_receiver", []), "_instVarAt_", [each]));(li=(function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_named_", [ivar, each]);})]);})(smalltalk.send(html, "_li", [])));return ((($receiver = smalltalk.send(self['@selectedVariableName'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));})]);})]); +(($receiver = self['@selectedVariable']) == nil || $receiver == undefined) ? (function(){return smalltalk.send(self['@inspectButton'], "_at_put_", ["disabled", true]);})() : (function(){return smalltalk.send(self['@inspectButton'], "_removeAt_", ["disabled"]);})(); return self;}, args: [], -source: unescape('selector%0A%09%5Eselector'), -messageSends: [], +source: unescape('updateVariablesList%0A%09ul2%20contents%3A%20%5B%3Ahtml%20%7C%20%7C%20li%20%7C%0A%09%09li%20%3A%3D%20html%20li%20%0A%09%09%09with%3A%20%27self%27%3B%0A%09%09%09onClick%3A%20%5Bself%20selectVariable%3A%20self%20receiver%20named%3A%20%27self%27%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20selectedVariableName%20%3D%20%27self%27%20ifTrue%3A%20%5B%0A%09%09%09li%20class%3A%20%27selected%27%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20arguments%20withIndexDo%3A%20%5B%3Aeach%20%3Aindex%20%7C%20%7C%20param%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20param%20%3A%3D%20selectedContext%20temps%20at%3A%20index.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20li%20%3A%3D%20html%20li%20%0A%09%09%09%09with%3A%20each%3B%0A%09%09%09%09onClick%3A%20%5Bself%20selectVariable%3A%20param%20named%3A%20each%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20selectedVariableName%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09%09%09li%20class%3A%20%27selected%27%5D%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20receiver%20class%20allInstanceVariableNames%20do%3A%20%5B%3Aeach%20%7C%20%7C%20ivar%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ivar%20%3A%3D%20self%20receiver%20instVarAt%3A%20each.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20li%20%3A%3D%20html%20li%20%0A%09%09%09%09with%3A%20each%3B%0A%09%09%09%09onClick%3A%20%5Bself%20selectVariable%3A%20ivar%20named%3A%20each%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20selectedVariableName%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09%09%09li%20class%3A%20%27selected%27%5D%5D%5D.%0A%09selectedVariable%20ifNil%3A%20%5BinspectButton%20at%3A%20%27disabled%27%20put%3A%20true%5D%20ifNotNil%3A%20%5BinspectButton%20removeAt%3A%20%27disabled%27%5D'), +messageSends: ["contents:", "with:", "onClick:", "selectVariable:named:", "receiver", "li", "ifTrue:", unescape("%3D"), "class:", "withIndexDo:", "arguments", "at:", "temps", "do:", "allInstanceVariableNames", "class", "instVarAt:", "ifNil:ifNotNil:", "at:put:", "removeAt:"], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.Debugger); + + +smalltalk.addClass('IDETranscript', smalltalk.TabWidget, ['textarea'], 'IDE'); smalltalk.addMethod( -unescape('_senders'), +unescape('_clear'), smalltalk.method({ -selector: unescape('senders'), -category: 'accessing', +selector: unescape('clear'), +category: 'actions', fn: function (){ var self=this; -return (($receiver = self['@senders']) == nil || $receiver == undefined) ? (function(){return (self['@senders']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val_", [""]); return self;}, args: [], -source: unescape('senders%0A%09%5Esenders%20ifNil%3A%20%5Bsenders%20%3A%3D%20Array%20new%5D'), -messageSends: ["ifNil:", "new"], -referencedClasses: ["Array"] +source: unescape('clear%0A%20%20%20%20textarea%20asJQuery%20val%3A%20%27%27'), +messageSends: ["val:", "asJQuery"], +referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript); smalltalk.addMethod( -unescape('_classesAndMetaclasses'), +unescape('_cr'), smalltalk.method({ -selector: unescape('classesAndMetaclasses'), -category: 'accessing', +selector: unescape('cr'), +category: 'actions', fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_collect_", [(function(each){return smalltalk.send(each, "_class", []);})])]); +smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val_", [smalltalk.send(smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val", []), "__comma", [smalltalk.send((smalltalk.String || String), "_cr", [])])]); return self;}, args: [], -source: unescape('classesAndMetaclasses%0A%09%5ESmalltalk%20current%20classes%2C%20%28Smalltalk%20current%20classes%20collect%3A%20%5B%3Aeach%20%7C%20each%20class%5D%29'), -messageSends: [unescape("%2C"), "classes", "current", "collect:", "class"], -referencedClasses: ["Smalltalk"] +source: unescape('cr%0A%20%20%20%20textarea%20asJQuery%20val%3A%20textarea%20asJQuery%20val%2C%20String%20cr.'), +messageSends: ["val:", "asJQuery", unescape("%2C"), "val", "cr"], +referencedClasses: ["String"] }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript); smalltalk.addMethod( -unescape('_referencedClasses'), +unescape('_label'), smalltalk.method({ -selector: unescape('referencedClasses'), +selector: unescape('label'), category: 'accessing', fn: function (){ var self=this; -return (($receiver = self['@referencedClasses']) == nil || $receiver == undefined) ? (function(){return (self['@referencedClasses']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +return "Transcript"; return self;}, args: [], -source: unescape('referencedClasses%0A%09%5EreferencedClasses%20ifNil%3A%20%5BreferencedClasses%20%3A%3D%20Array%20new%5D'), -messageSends: ["ifNil:", "new"], -referencedClasses: ["Array"] +source: unescape('label%0A%20%20%20%20%5E%27Transcript%27'), +messageSends: [], +referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript); smalltalk.addMethod( -unescape('_openBrowserOn_'), +unescape('_open'), smalltalk.method({ -selector: unescape('openBrowserOn%3A'), +selector: unescape('open'), category: 'actions', -fn: function (aMethod){ +fn: function (){ var self=this; -var browser=nil; -(browser=smalltalk.send((smalltalk.Browser || Browser), "_openOn_", [((($receiver = smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_instanceClass", []);})() : (function(){return smalltalk.send(aMethod, "_methodClass", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_instanceClass", []);}), (function(){return smalltalk.send(aMethod, "_methodClass", []);})]))])); -((($receiver = smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(browser, "_selectTab_", [smalltalk.symbolFor("class")]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(browser, "_selectTab_", [smalltalk.symbolFor("class")]);})])); -(function($rec){smalltalk.send($rec, "_selectProtocol_", [smalltalk.send(aMethod, "_category", [])]);return smalltalk.send($rec, "_selectMethod_", [aMethod]);})(browser); +(function($rec){smalltalk.send($rec, "_open", []);return smalltalk.send($rec, "_selectTab_", [self]);})(smalltalk.send((smalltalk.TabManager || TabManager), "_current", [])); return self;}, -args: ["aMethod"], -source: unescape('openBrowserOn%3A%20aMethod%0A%20%20%20%20%20%20%20%7C%20browser%20%7C%0A%20%20%20%20%20%20%20browser%20%3A%3D%20Browser%20openOn%3A%20%28aMethod%20methodClass%20isMetaclass%20%0A%09%09ifTrue%3A%20%5BaMethod%20methodClass%20instanceClass%5D%20ifFalse%3A%20%5BaMethod%20methodClass%5D%29.%0A%20%20%20%20%20%20%20aMethod%20methodClass%20isMetaclass%20ifTrue%3A%20%5Bbrowser%20selectTab%3A%20%23class%5D.%0A%20%20%20%20%20%20%20browser%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20selectProtocol%3A%20aMethod%20category%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20selectMethod%3A%20aMethod'), -messageSends: ["openOn:", "ifTrue:ifFalse:", "isMetaclass", "methodClass", "instanceClass", "ifTrue:", "selectTab:", "selectProtocol:", "category", "selectMethod:"], -referencedClasses: ["Browser"] +args: [], +source: unescape('open%0A%20%20%20%20TabManager%20current%20%0A%09open%3B%0A%09selectTab%3A%20self'), +messageSends: ["open", "selectTab:", "current"], +referencedClasses: ["TabManager"] }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript); smalltalk.addMethod( -unescape('_searchReferencesFor_'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('searchReferencesFor%3A'), -category: 'actions', -fn: function (aString){ +selector: unescape('renderBoxOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -(self['@selector']=aString); -(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['@textarea']=smalltalk.send(html, "_textarea", [])); +(function($rec){smalltalk.send($rec, "_class_", ["jt_transcript"]);return smalltalk.send($rec, "_at_put_", ["spellcheck", "false"]);})(self['@textarea']); 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:"], -referencedClasses: ["Array"] +args: ["html"], +source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20textarea%20%3A%3D%20html%20textarea.%0A%20%20%20%20textarea%20%0A%09class%3A%20%27jt_transcript%27%3B%0A%09at%3A%20%27spellcheck%27%20put%3A%20%27false%27'), +messageSends: ["textarea", "class:", "at:put:"], +referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript); smalltalk.addMethod( -unescape('_search_'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('search%3A'), -category: 'actions', -fn: function (aString){ +selector: unescape('renderButtonsOn%3A'), +category: 'rendering', +fn: function (html){ 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, "_with_", ["Clear transcript"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_clear", []);})]);})(smalltalk.send(html, "_button", [])); 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"], +args: ["html"], +source: unescape('renderButtonsOn%3A%20html%0A%20%20%20%20html%20button%0A%09with%3A%20%27Clear%20transcript%27%3B%0A%09onClick%3A%20%5Bself%20clear%5D'), +messageSends: ["with:", "onClick:", "clear", "button"], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript); smalltalk.addMethod( -unescape('_searchReferencedClassesFor_'), +unescape('_show_'), smalltalk.method({ -selector: unescape('searchReferencedClassesFor%3A'), +selector: unescape('show%3A'), category: 'actions', -fn: function (aString){ +fn: function (anObject){ 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]);})]));})]);})]); +(($receiver = self['@textarea']) == nil || $receiver == undefined) ? (function(){return smalltalk.send(self, "_open", []);})() : $receiver; +smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val_", [smalltalk.send(smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val", []), "__comma", [smalltalk.send(anObject, "_asString", [])])]); 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'), -messageSends: ["do:", "classesAndMetaclasses", "values", "methodDictionary", "ifTrue:", "includes:", "referencedClasses", "add:"], +args: ["anObject"], +source: unescape('show%3A%20anObject%0A%20%20%20%20textarea%20ifNil%3A%20%5Bself%20open%5D.%0A%20%20%20%20textarea%20asJQuery%20val%3A%20textarea%20asJQuery%20val%2C%20anObject%20asString.'), +messageSends: ["ifNil:", "open", "val:", "asJQuery", unescape("%2C"), "val", "asString"], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript); + +smalltalk.IDETranscript.klass.iVarNames = ['current']; smalltalk.addMethod( -unescape('_searchSelectorReferencesFor_'), +unescape('_current'), smalltalk.method({ -selector: unescape('searchSelectorReferencesFor%3A'), -category: 'actions', -fn: function (aString){ +selector: unescape('current'), +category: 'instance creation', +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 (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return (self['@current']=smalltalk.send(self, "_new", [], smalltalk.TabWidget.klass));})() : $receiver; 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'), -messageSends: ["do:", "classesAndMetaclasses", "keysAndValuesDo:", "methodDictionary", "ifTrue:", unescape("%3D"), "add:", "implementors", "includes:", "messageSends", "senders"], +args: [], +source: unescape('current%0A%09%5Ecurrent%20ifNil%3A%20%5Bcurrent%20%3A%3D%20super%20new%5D'), +messageSends: ["ifNil:", "new"], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript.klass); smalltalk.addMethod( unescape('_initialize'), @@ -3289,515 +3188,465 @@ selector: unescape('initialize'), category: 'initialization', fn: function (){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); -(self['@selector']=""); +smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_current", [])]); return self;}, args: [], -source: unescape('initialize%0A%09super%20initialize.%0A%09selector%20%3A%3D%20%27%27'), -messageSends: ["initialize"], -referencedClasses: [] +source: unescape('initialize%0A%09Transcript%20register%3A%20self%20current'), +messageSends: ["register:", "current"], +referencedClasses: ["Transcript"] }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript.klass); smalltalk.addMethod( -unescape('_setInputEvents'), +unescape('_new'), smalltalk.method({ -selector: unescape('setInputEvents'), -category: 'private', +selector: unescape('new'), +category: 'instance creation', fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_onKeyUp_", [(function(){return (self['@timer']=smalltalk.send((function(){return smalltalk.send(self, "_search_", [smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val", [])]);}), "_valueWithTimeout_", [(100)]));})]);return smalltalk.send($rec, "_onKeyDown_", [(function(){return (($receiver = self['@timer']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@timer'], "_clearTimeout", []);})() : nil;})]);})(self['@input']); +smalltalk.send(self, "_shouldNotImplement", []); return self;}, args: [], -source: unescape('setInputEvents%0A%09input%0A%09%09onKeyUp%3A%20%5Btimer%20%3A%3D%20%5Bself%20search%3A%20input%20asJQuery%20val%5D%20valueWithTimeout%3A%20100%5D%3B%0A%09%09onKeyDown%3A%20%5Btimer%20ifNotNil%3A%20%5Btimer%20clearTimeout%5D%5D'), -messageSends: ["onKeyUp:", "valueWithTimeout:", "search:", "val", "asJQuery", "onKeyDown:", "ifNotNil:", "clearTimeout"], +source: unescape('new%0A%20%20%20%20self%20shouldNotImplement'), +messageSends: ["shouldNotImplement"], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript.klass); smalltalk.addMethod( -unescape('_renderBoxOn_'), +unescape('_open'), smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('open'), +category: 'instance creation', +fn: function (){ 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, "_open", []);return smalltalk.send($rec, "_selectTab_", [smalltalk.send(self, "_current", [])]);})(smalltalk.send((smalltalk.TabManager || TabManager), "_current", [])); 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:"], -referencedClasses: [] +args: [], +source: unescape('open%0A%20%20%20%20TabManager%20current%20%0A%09open%3B%0A%09selectTab%3A%20self%20current'), +messageSends: ["open", "selectTab:", "current"], +referencedClasses: ["TabManager"] }), -smalltalk.ReferencesBrowser); +smalltalk.IDETranscript.klass); + +smalltalk.addClass('Inspector', smalltalk.TabWidget, ['label', 'variables', 'object', 'selectedVariable', 'variablesList', 'valueTextarea', 'diveButton', 'sourceArea'], 'IDE'); smalltalk.addMethod( -unescape('_renderInputOn_'), +unescape('_canBeClosed'), smalltalk.method({ -selector: unescape('renderInputOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('canBeClosed'), +category: 'testing', +fn: function (){ var self=this; -(self['@input']=(function($rec){smalltalk.send($rec, "_class_", ["implementors"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_input", []))); -smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val_", [self['@selector']]); -smalltalk.send(self, "_setInputEvents", []); +return true; return self;}, -args: ["html"], -source: unescape('renderInputOn%3A%20html%0A%09input%20%3A%3D%20html%20input%20%0A%09%09class%3A%20%27implementors%27%3B%0A%09%09yourself.%0A%09input%20asJQuery%20val%3A%20selector.%0A%09self%20setInputEvents'), -messageSends: ["class:", "yourself", "input", "val:", "asJQuery", "setInputEvents"], +args: [], +source: unescape('canBeClosed%0A%09%5Etrue'), +messageSends: [], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_renderImplementorsOn_'), +unescape('_dive'), smalltalk.method({ -selector: unescape('renderImplementorsOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('dive'), +category: 'actions', +fn: function (){ var self=this; -(self['@implementorsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column implementors"])); -smalltalk.send(self, "_updateImplementorsList", []); +smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_inspect", []); return self;}, -args: ["html"], -source: unescape('renderImplementorsOn%3A%20html%0A%09implementorsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20implementors%27.%0A%09self%20updateImplementorsList'), -messageSends: ["class:", "ul", "updateImplementorsList"], +args: [], +source: unescape('dive%0A%09%28self%20variables%20at%3A%20self%20selectedVariable%29%20inspect'), +messageSends: ["inspect", "at:", "variables", "selectedVariable"], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_renderSendersOn_'), +unescape('_inspect_'), smalltalk.method({ -selector: unescape('renderSendersOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('inspect%3A'), +category: 'actions', +fn: function (anObject){ var self=this; -(self['@sendersList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column senders"])); -smalltalk.send(self, "_updateSendersList", []); +(self['@object']=anObject); +(self['@variables']=[]); +smalltalk.send(self['@object'], "_inspectOn_", [self]); return self;}, -args: ["html"], -source: unescape('renderSendersOn%3A%20html%0A%09sendersList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20senders%27.%0A%09self%20updateSendersList'), -messageSends: ["class:", "ul", "updateSendersList"], +args: ["anObject"], +source: unescape('inspect%3A%20anObject%0A%09object%20%3A%3D%20anObject.%0A%09variables%20%3A%3D%20%23%28%29.%0A%09object%20inspectOn%3A%20self'), +messageSends: ["inspectOn:"], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_renderReferencedClassesOn_'), +unescape('_label'), smalltalk.method({ -selector: unescape('renderReferencedClassesOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('label'), +category: 'accessing', +fn: function (){ var self=this; -(self['@referencedClassesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column referenced_classes"])); -smalltalk.send(self, "_updateReferencedClassesList", []); +return (($receiver = self['@label']) == nil || $receiver == undefined) ? (function(){return unescape("Inspector%20%28nil%29");})() : $receiver; return self;}, -args: ["html"], -source: unescape('renderReferencedClassesOn%3A%20html%0A%09referencedClassesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20referenced_classes%27.%0A%09self%20updateReferencedClassesList'), -messageSends: ["class:", "ul", "updateReferencedClassesList"], +args: [], +source: unescape('label%0A%09%5Elabel%20ifNil%3A%20%5B%27Inspector%20%28nil%29%27%5D'), +messageSends: ["ifNil:"], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_canBeClosed'), +unescape('_refresh'), smalltalk.method({ -selector: unescape('canBeClosed'), -category: 'testing', +selector: unescape('refresh'), +category: 'actions', fn: function (){ var self=this; -return true; +(function($rec){smalltalk.send($rec, "_inspect_", [self['@object']]);smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateValueTextarea", []);})(self); return self;}, args: [], -source: unescape('canBeClosed%0A%09%5Etrue'), -messageSends: [], +source: unescape('refresh%0A%09self%20%0A%09%09inspect%3A%20object%3B%20%0A%09%09updateVariablesList%3B%0A%09%09updateValueTextarea'), +messageSends: ["inspect:", "updateVariablesList", "updateValueTextarea"], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_updateImplementorsList'), +unescape('_renderBottomPanelOn_'), smalltalk.method({ -selector: unescape('updateImplementorsList'), -category: 'updating', -fn: function (){ +selector: unescape('renderBottomPanelOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -smalltalk.send(self['@implementorsList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Implementors%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_implementors", []), "_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, "_implementors", []), "_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(self, "_selector", [])])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_openBrowserOn_", [each]);})]);})(li);})]);})]); +(function($rec){smalltalk.send($rec, "_class_", ["jt_sourceCode"]);return smalltalk.send($rec, "_with_", [(function(){(self['@sourceArea']=(function($rec){smalltalk.send($rec, "_receiver_", [self['@object']]);smalltalk.send($rec, "_onDoIt_", [(function(){return smalltalk.send(self, "_refresh", []);})]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", [])));return smalltalk.send(self['@sourceArea'], "_renderOn_", [html]);})]);})(smalltalk.send(html, "_div", [])); return self;}, -args: [], -source: unescape('updateImplementorsList%0A%20%20%20%20implementorsList%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%27Implementors%20%28%27%2C%20self%20implementors%20size%20asString%2C%20%27%29%27%3B%0A%09%09style%3A%20%27font-weight%3A%20bold%27.%0A%09self%20implementors%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%20self%20selector%29%3B%0A%09%09onClick%3A%20%5Bself%20openBrowserOn%3A%20each%5D%5D%5D'), -messageSends: ["contents:", "class:", "with:", unescape("%2C"), "asString", "size", "implementors", "style:", "li", "do:", "methodClass", "selector", "onClick:", "openBrowserOn:"], -referencedClasses: [] +args: ["html"], +source: unescape('renderBottomPanelOn%3A%20html%0A%20%20%20%20html%20div%0A%09class%3A%20%27jt_sourceCode%27%3B%0A%09with%3A%20%5B%0A%09%20%20%20%20sourceArea%20%3A%3D%20SourceArea%20new%0A%09%09receiver%3A%20object%3B%0A%09%09onDoIt%3A%20%5Bself%20refresh%5D%3B%0A%09%09yourself.%0A%20%20%20%20%20%20%20%20%20%20%20%20sourceArea%20renderOn%3A%20html%5D'), +messageSends: ["class:", "with:", "receiver:", "onDoIt:", "refresh", "yourself", "new", "renderOn:", "div"], +referencedClasses: ["SourceArea"] }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_updateSendersList'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('updateSendersList'), -category: 'updating', -fn: function (){ +selector: unescape('renderBoxOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -smalltalk.send(self['@sendersList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Senders%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_senders", []), "_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, "_senders", []), "_do_", [(function(each){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]);})]);})(smalltalk.send(html, "_li", []));})]);})]); +(function($rec){smalltalk.send($rec, "_renderTopPanelOn_", [html]);return smalltalk.send($rec, "_renderBottomPanelOn_", [html]);})(self); return self;}, -args: [], -source: unescape('updateSendersList%0A%09sendersList%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%27Senders%20%28%27%2C%20self%20senders%20size%20asString%2C%20%27%29%27%3B%0A%09%09style%3A%20%27font-weight%3A%20bold%27.%0A%09self%20senders%20do%3A%20%5B%3Aeach%20%7C%0A%09%09html%20li%0A%09%09%09with%3A%20%28each%20methodClass%20asString%2C%20%27%20%3E%3E%20%27%2C%20each%20selector%29%3B%0A%09%09%09onClick%3A%20%5Bself%20openBrowserOn%3A%20each%5D%5D%5D'), -messageSends: ["contents:", "class:", "with:", unescape("%2C"), "asString", "size", "senders", "style:", "li", "do:", "methodClass", "selector", "onClick:", "openBrowserOn:"], +args: ["html"], +source: unescape('renderBoxOn%3A%20html%0A%09self%20%0A%09%09renderTopPanelOn%3A%20html%3B%0A%09%09renderBottomPanelOn%3A%20html'), +messageSends: ["renderTopPanelOn:", "renderBottomPanelOn:"], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_updateReferencedClassesList'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('updateReferencedClassesList'), -category: 'updating', -fn: function (){ +selector: unescape('renderButtonsOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -smalltalk.send(self['@referencedClassesList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Class%20references%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_referencedClasses", []), "_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, "_referencedClasses", []), "_do_", [(function(each){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]);})]);})(smalltalk.send(html, "_li", []));})]);})]); +(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_sourceArea", []), "_doIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_sourceArea", []), "_printIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(smalltalk.send(self, "_sourceArea", []), "_inspectIt", []);})]);})(smalltalk.send(html, "_button", [])); +smalltalk.send(self, "_updateButtons", []); return self;}, -args: [], -source: unescape('updateReferencedClassesList%0A%09referencedClassesList%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%27Class%20references%20%28%27%2C%20self%20referencedClasses%20size%20asString%2C%20%27%29%27%3B%0A%09%09style%3A%20%27font-weight%3A%20bold%27.%0A%09self%20referencedClasses%20do%3A%20%5B%3Aeach%20%7C%0A%09%09html%20li%0A%09%09%09with%3A%20%28each%20methodClass%20asString%2C%20%27%20%3E%3E%20%27%2C%20each%20selector%29%3B%0A%09%09%09onClick%3A%20%5Bself%20openBrowserOn%3A%20each%5D%5D%5D'), -messageSends: ["contents:", "class:", "with:", unescape("%2C"), "asString", "size", "referencedClasses", "style:", "li", "do:", "methodClass", "selector", "onClick:", "openBrowserOn:"], +args: ["html"], +source: unescape('renderButtonsOn%3A%20html%0A%09html%20button%20%0A%09%09with%3A%20%27DoIt%27%3B%0A%09%09onClick%3A%20%5Bself%20sourceArea%20doIt%5D.%0A%09html%20button%20%0A%09%09with%3A%20%27PrintIt%27%3B%0A%09%09onClick%3A%20%5Bself%20sourceArea%20printIt%5D.%0A%09html%20button%20%0A%09%09with%3A%20%27InspectIt%27%3B%0A%09%09onClick%3A%20%5Bself%20sourceArea%20inspectIt%5D.%0A%09self%20updateButtons'), +messageSends: ["with:", "onClick:", "doIt", "sourceArea", "button", "printIt", "inspectIt", "updateButtons"], referencedClasses: [] }), -smalltalk.ReferencesBrowser); +smalltalk.Inspector); +smalltalk.addMethod( +unescape('_renderTopPanelOn_'), +smalltalk.method({ +selector: unescape('renderTopPanelOn%3A'), +category: 'rendering', +fn: function (html){ +var self=this; +(function($rec){smalltalk.send($rec, "_class_", ["top"]);return smalltalk.send($rec, "_with_", [(function(){(self['@variablesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column variables"]));(self['@valueTextarea']=(function($rec){smalltalk.send($rec, "_class_", ["jt_column value"]);return smalltalk.send($rec, "_at_put_", ["readonly", "readonly"]);})(smalltalk.send(html, "_textarea", [])));(function($rec){smalltalk.send($rec, "_class_", ["jt_tabs inspector"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_class_", ["jt_button inspector refresh"]);smalltalk.send($rec, "_with_", ["Refresh"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_refresh", []);})]);})(smalltalk.send(html, "_button", []));return (self['@diveButton']=(function($rec){smalltalk.send($rec, "_class_", ["jt_button inspector dive"]);smalltalk.send($rec, "_with_", ["Dive"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_dive", []);})]);})(smalltalk.send(html, "_button", [])));})]);})(smalltalk.send(html, "_div", []));return smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["jt_clear"]);})]);})(smalltalk.send(html, "_div", [])); +(function($rec){smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateValueTextarea", []);})(self); +return self;}, +args: ["html"], +source: unescape('renderTopPanelOn%3A%20html%0A%09html%20div%20%0A%09%09class%3A%20%27top%27%3B%20%0A%09%09with%3A%20%5B%0A%09%09%09variablesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20variables%27.%0A%09%09%09valueTextarea%20%3A%3D%20html%20textarea%20class%3A%20%27jt_column%20value%27%3B%20at%3A%20%27readonly%27%20put%3A%20%27readonly%27.%0A%09%09%09html%20div%20class%3A%20%27jt_tabs%20inspector%27%3B%20with%3A%20%5B%0A%09%09%09%09html%20button%0A%09%09%09%09%09class%3A%20%27jt_button%20inspector%20refresh%27%3B%0A%09%09%09%09%09with%3A%20%27Refresh%27%3B%0A%09%09%09%09%09onClick%3A%20%5Bself%20refresh%5D.%0A%09%09%09%09diveButton%20%3A%3D%20html%20button%20%0A%09%09%09%09%09class%3A%20%27jt_button%20inspector%20dive%27%3B%0A%09%09%09%09%09with%3A%20%27Dive%27%3B%20%0A%09%09%09%09%09onClick%3A%20%5Bself%20dive%5D%5D.%0A%09%09%09html%20div%20class%3A%20%27jt_clear%27%5D.%0A%09self%0A%09%09updateVariablesList%3B%0A%09%09updateValueTextarea.'), +messageSends: ["class:", "with:", "ul", "at:put:", "textarea", "onClick:", "refresh", "button", "dive", "div", "updateVariablesList", "updateValueTextarea"], +referencedClasses: [] +}), +smalltalk.Inspector); smalltalk.addMethod( -unescape('_search_'), +unescape('_selectVariable_'), smalltalk.method({ -selector: unescape('search%3A'), -category: 'instance creation', +selector: unescape('selectVariable%3A'), +category: 'updating', fn: function (aString){ var self=this; -return (function($rec){smalltalk.send($rec, "_searchReferencesFor_", [aString]);return smalltalk.send($rec, "_open", []);})(smalltalk.send(self, "_new", [])); +smalltalk.send(self, "_selectedVariable_", [aString]); +(function($rec){smalltalk.send($rec, "_updateVariablesList", []);smalltalk.send($rec, "_updateValueTextarea", []);return smalltalk.send($rec, "_updateButtons", []);})(self); return self;}, args: ["aString"], -source: unescape('search%3A%20aString%0A%09%5Eself%20new%0A%09%09searchReferencesFor%3A%20aString%3B%0A%09%09open'), -messageSends: ["searchReferencesFor:", "open", "new"], +source: unescape('selectVariable%3A%20aString%0A%09self%20selectedVariable%3A%20aString.%0A%09self%20%0A%09%09updateVariablesList%3B%0A%09%09updateValueTextarea%3B%0A%09%09updateButtons'), +messageSends: ["selectedVariable:", "updateVariablesList", "updateValueTextarea", "updateButtons"], referencedClasses: [] }), -smalltalk.ReferencesBrowser.klass); - +smalltalk.Inspector); -smalltalk.addClass('Debugger', smalltalk.TabWidget, ['error', 'selectedContext', 'sourceArea', 'ul', 'ul2', 'inspector', 'saveButton', 'unsavedChanges', 'selectedVariable', 'selectedVariableName', 'inspectButton'], 'IDE'); smalltalk.addMethod( -unescape('_error'), +unescape('_selectedVariable'), smalltalk.method({ -selector: unescape('error'), +selector: unescape('selectedVariable'), category: 'accessing', fn: function (){ var self=this; -return self['@error']; +return self['@selectedVariable']; return self;}, args: [], -source: unescape('error%0A%09%5Eerror'), +source: unescape('selectedVariable%0A%09%5EselectedVariable'), messageSends: [], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_error_'), +unescape('_selectedVariable_'), smalltalk.method({ -selector: unescape('error%3A'), +selector: unescape('selectedVariable%3A'), category: 'accessing', -fn: function (anError){ +fn: function (aString){ var self=this; -(self['@error']=anError); +(self['@selectedVariable']=aString); return self;}, -args: ["anError"], -source: unescape('error%3A%20anError%0A%09error%20%3A%3D%20anError'), +args: ["aString"], +source: unescape('selectedVariable%3A%20aString%0A%09selectedVariable%20%3A%3D%20aString'), messageSends: [], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_label'), +unescape('_setLabel_'), smalltalk.method({ -selector: unescape('label'), +selector: unescape('setLabel%3A'), category: 'accessing', -fn: function (){ +fn: function (aString){ var self=this; -return unescape("%5BDebugger%5D"); +(self['@label']=aString); return self;}, -args: [], -source: unescape('label%0A%09%5E%27%5BDebugger%5D%27'), +args: ["aString"], +source: unescape('setLabel%3A%20aString%0A%09label%20%3A%3D%20aString'), messageSends: [], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_source'), +unescape('_setVariables_'), smalltalk.method({ -selector: unescape('source'), +selector: unescape('setVariables%3A'), category: 'accessing', -fn: function (){ +fn: function (aCollection){ var self=this; -return (($receiver = smalltalk.send(self, "_method", [])) == nil || $receiver == undefined) ? (function(){return unescape("Method%20doesn%27t%20exist%21");})() : (function(){return smalltalk.send(smalltalk.send(self, "_method", []), "_source", []);})(); +(self['@variables']=aCollection); return self;}, -args: [], -source: unescape('source%0A%09%5Eself%20method%20%0A%09%09ifNil%3A%20%5B%27Method%20doesn%27%27t%20exist%21%27%5D%0A%09%09ifNotNil%3A%20%5Bself%20method%20source%5D'), -messageSends: ["ifNil:ifNotNil:", "method", "source"], +args: ["aCollection"], +source: unescape('setVariables%3A%20aCollection%0A%09variables%20%3A%3D%20aCollection'), +messageSends: [], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_method'), +unescape('_sourceArea'), smalltalk.method({ -selector: unescape('method'), +selector: unescape('sourceArea'), category: 'accessing', fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_class", []), "_methodAt_", [smalltalk.send(self['@selectedContext'], "_selector", [])]); +return self['@sourceArea']; return self;}, args: [], -source: unescape('method%0A%09%5EselectedContext%20receiver%20class%20methodAt%3A%20selectedContext%20selector'), -messageSends: ["methodAt:", "class", "receiver", "selector"], +source: unescape('sourceArea%0A%09%5EsourceArea'), +messageSends: [], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_arguments'), +unescape('_updateButtons'), smalltalk.method({ -selector: unescape('arguments'), -category: 'accessing', +selector: unescape('updateButtons'), +category: 'updating', fn: function (){ var self=this; -return (($receiver = smalltalk.send(self, "_method", [])) == nil || $receiver == undefined) ? (function(){return smalltalk.send(smalltalk.send(self['@selectedContext'], "_temps", []), "_collect_", [(function(each){return nil;})]);})() : (function(){return smalltalk.send(smalltalk.send(self, "_method", []), "_arguments", []);})(); +((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedVariable", []), "_notNil", []), "_and_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_notNil", []);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@diveButton'], "_at_put_", ["disabled", true]);})() : (function(){return smalltalk.send(self['@diveButton'], "_removeAt_", ["disabled"]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@diveButton'], "_at_put_", ["disabled", true]);}), (function(){return smalltalk.send(self['@diveButton'], "_removeAt_", ["disabled"]);})])); return self;}, args: [], -source: unescape('arguments%0A%09%5Eself%20method%20%0A%09%09ifNil%3A%20%5BselectedContext%20temps%20collect%3A%20%5B%3Aeach%20%7C%20nil%5D%5D%0A%09%09ifNotNil%3A%20%5Bself%20method%20arguments%5D'), -messageSends: ["ifNil:ifNotNil:", "method", "collect:", "temps", "arguments"], +source: unescape('updateButtons%0A%09%28self%20selectedVariable%20notNil%20and%3A%20%5B%28self%20variables%20at%3A%20self%20selectedVariable%29%20notNil%5D%29%0A%09%09ifFalse%3A%20%5BdiveButton%20at%3A%20%27disabled%27%20put%3A%20true%5D%20%0A%09%09ifTrue%3A%20%5BdiveButton%20removeAt%3A%20%27disabled%27%5D'), +messageSends: ["ifFalse:ifTrue:", "and:", "notNil", "selectedVariable", "at:", "variables", "at:put:", "removeAt:"], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_receiver'), +unescape('_updateValueTextarea'), smalltalk.method({ -selector: unescape('receiver'), -category: 'accessing', +selector: unescape('updateValueTextarea'), +category: 'updating', fn: function (){ var self=this; -return smalltalk.send(self['@selectedContext'], "_receiver", []); +smalltalk.send(smalltalk.send(self['@valueTextarea'], "_asJQuery", []), "_val_", [((($receiver = smalltalk.send(smalltalk.send(self, "_selectedVariable", []), "_isNil", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "";})() : (function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_printString", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "";}), (function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_at_", [smalltalk.send(self, "_selectedVariable", [])]), "_printString", []);})]))]); return self;}, args: [], -source: unescape('receiver%0A%09%5EselectedContext%20receiver'), -messageSends: ["receiver"], -referencedClasses: [] -}), -smalltalk.Debugger); - -smalltalk.addMethod( -unescape('_selectContext_'), -smalltalk.method({ -selector: unescape('selectContext%3A'), -category: 'actions', -fn: function (aContext){ -var self=this; -(self['@selectedContext']=aContext); -(self['@selectedVariable']=nil); -(self['@selectedVariableName']=nil); -(function($rec){smalltalk.send($rec, "_updateContextsList", []);smalltalk.send($rec, "_updateSourceArea", []);smalltalk.send($rec, "_updateInspector", []);smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateStatus", []);})(self); -return self;}, -args: ["aContext"], -source: unescape('selectContext%3A%20aContext%0A%09selectedContext%20%3A%3D%20aContext.%0A%09selectedVariable%20%3A%3D%20nil.%0A%09selectedVariableName%20%3A%3D%20nil.%0A%09self%20%0A%09%09updateContextsList%3B%0A%09%09updateSourceArea%3B%0A%09%09updateInspector%3B%0A%09%09updateVariablesList%3B%0A%09%09updateStatus'), -messageSends: ["updateContextsList", "updateSourceArea", "updateInspector", "updateVariablesList", "updateStatus"], +source: unescape('updateValueTextarea%0A%09valueTextarea%20asJQuery%20val%3A%20%28self%20selectedVariable%20isNil%0A%09%09ifTrue%3A%20%5B%27%27%5D%0A%09%09ifFalse%3A%20%5B%28self%20variables%20at%3A%20self%20selectedVariable%29%20printString%5D%29'), +messageSends: ["val:", "asJQuery", "ifTrue:ifFalse:", "isNil", "selectedVariable", "printString", "at:", "variables"], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_proceed'), +unescape('_updateVariablesList'), smalltalk.method({ -selector: unescape('proceed'), -category: 'actions', +selector: unescape('updateVariablesList'), +category: 'updating', fn: function (){ var self=this; -smalltalk.send(self, "_close", []); -smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_perform_withArguments_", [smalltalk.send(self['@selectedContext'], "_selector", []), smalltalk.send(self['@selectedContext'], "_temps", [])]); +smalltalk.send(self['@variablesList'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_variables", []), "_keys", []), "_do_", [(function(each){var li=nil; +(li=smalltalk.send(html, "_li", []));(function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_", [each]);})]);})(li);return ((($receiver = smalltalk.send(smalltalk.send(self, "_selectedVariable", []), "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));})]);})]); return self;}, args: [], -source: unescape('proceed%0A%09self%20close.%0A%09selectedContext%20receiver%20perform%3A%20selectedContext%20selector%20withArguments%3A%20selectedContext%20temps'), -messageSends: ["close", "perform:withArguments:", "receiver", "selector", "temps"], +source: unescape('updateVariablesList%0A%09variablesList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09self%20variables%20keys%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%09%09li%20%3A%3D%20html%20li.%0A%09%09%09li%0A%09%09%09%09with%3A%20each%3B%0A%09%09%09%09onClick%3A%20%5Bself%20selectVariable%3A%20each%5D.%0A%09%09%09self%20selectedVariable%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09%09%09li%20class%3A%20%27selected%27%5D%5D%5D'), +messageSends: ["contents:", "do:", "keys", "variables", "li", "with:", "onClick:", "selectVariable:", "ifTrue:", unescape("%3D"), "selectedVariable", "class:"], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.Inspector); smalltalk.addMethod( -unescape('_save'), +unescape('_variables'), smalltalk.method({ -selector: unescape('save'), -category: 'actions', +selector: unescape('variables'), +category: 'accessing', fn: function (){ var self=this; -var protocol=nil; -(protocol=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(self['@selectedContext'], "_selector", [])]), "_category", [])); -smalltalk.send(smalltalk.send(smalltalk.send(self['@selectedContext'], "_receiver", []), "_class", []), "_compile_category_", [smalltalk.send(self['@sourceArea'], "_val", []), protocol]); -smalltalk.send(self, "_updateStatus", []); +return self['@variables']; return self;}, args: [], -source: unescape('save%0A%09%7C%20protocol%20%7C%0A%09protocol%20%3A%3D%20%28selectedContext%20receiver%20class%20methodDictionary%20at%3A%20selectedContext%20selector%29%20category.%0A%09selectedContext%20receiver%20class%20compile%3A%20sourceArea%20val%20category%3A%20protocol.%0A%09self%20updateStatus'), -messageSends: ["category", "at:", "methodDictionary", "class", "receiver", "selector", "compile:category:", "val", "updateStatus"], +source: unescape('variables%0A%09%5Evariables'), +messageSends: [], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.Inspector); -smalltalk.addMethod( -unescape('_selectVariable_named_'), -smalltalk.method({ -selector: unescape('selectVariable%3Anamed%3A'), -category: 'actions', -fn: function (anObject, aString){ -var self=this; -(self['@selectedVariable']=anObject); -(self['@selectedVariableName']=aString); -smalltalk.send(self['@inspector'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(anObject, "_printString", [])]);})]); -smalltalk.send(self, "_updateVariablesList", []); -return self;}, -args: ["anObject", "aString"], -source: unescape('selectVariable%3A%20anObject%20named%3A%20aString%0A%09selectedVariable%20%3A%3D%20anObject.%0A%09selectedVariableName%20%3A%3D%20aString.%0A%09inspector%20contents%3A%20%5B%3Ahtml%20%7C%20html%20with%3A%20anObject%20printString%5D.%0A%09self%20updateVariablesList'), -messageSends: ["contents:", "with:", "printString", "updateVariablesList"], -referencedClasses: [] -}), -smalltalk.Debugger); smalltalk.addMethod( -unescape('_inspectSelectedVariable'), +unescape('_on_'), smalltalk.method({ -selector: unescape('inspectSelectedVariable'), -category: 'actions', -fn: function (){ +selector: unescape('on%3A'), +category: 'instance creation', +fn: function (anObject){ var self=this; -smalltalk.send(self['@selectedVariable'], "_inspect", []); +return (function($rec){smalltalk.send($rec, "_inspect_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, -args: [], -source: unescape('inspectSelectedVariable%0A%09selectedVariable%20inspect'), -messageSends: ["inspect"], +args: ["anObject"], +source: unescape('on%3A%20anObject%0A%09%5Eself%20new%0A%09%09inspect%3A%20anObject%3B%0A%09%09yourself'), +messageSends: ["inspect:", "yourself", "new"], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.Inspector.klass); + +smalltalk.addClass('ProgressBar', smalltalk.TabWidget, ['percent', 'progressDiv', 'div'], 'IDE'); smalltalk.addMethod( -unescape('_initialize'), +unescape('_percent'), smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', +selector: unescape('percent'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); -smalltalk.send(self['@unsavedChanges'], "__eq", [false]); +return (($receiver = self['@percent']) == nil || $receiver == undefined) ? (function(){return (0);})() : $receiver; return self;}, args: [], -source: unescape('initialize%0A%09super%20initialize.%0A%09unsavedChanges%20%3D%20false'), -messageSends: ["initialize", unescape("%3D")], -referencedClasses: [] -}), -smalltalk.Debugger); - -smalltalk.addMethod( -unescape('_renderTopPanelOn_'), -smalltalk.method({ -selector: unescape('renderTopPanelOn%3A'), -category: 'rendering', -fn: function (html){ -var self=this; -(self['@selectedContext']=smalltalk.send(smalltalk.send(self, "_error", []), "_context", [])); -(function($rec){smalltalk.send($rec, "_class_", ["top"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_class_", ["label"]);return smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(self, "_error", []), "_messageText", [])]);})(smalltalk.send(html, "_div", []));return (self['@ul']=(function($rec){smalltalk.send($rec, "_class_", ["jt_column debugger contexts"]);return smalltalk.send($rec, "_with_", [(function(){return smalltalk.send(self, "_renderContext_on_", [smalltalk.send(smalltalk.send(self, "_error", []), "_context", []), html]);})]);})(smalltalk.send(html, "_ul", [])));})]);})(smalltalk.send(html, "_div", [])); -return self;}, -args: ["html"], -source: unescape('renderTopPanelOn%3A%20html%0A%09selectedContext%20%3A%3D%20self%20error%20context.%0A%09html%20div%20%0A%09%09class%3A%20%27top%27%3B%20%0A%09%09with%3A%20%5B%0A%09%09%09html%20div%20%0A%09%09%09%09class%3A%20%27label%27%3B%0A%09%09%09%09with%3A%20self%20error%20messageText.%0A%09%09%09ul%20%3A%3D%20html%20ul%20%0A%09%09%09%09class%3A%20%27jt_column%20debugger%20contexts%27%3B%0A%09%09%09%09with%3A%20%5Bself%20renderContext%3A%20self%20error%20context%20on%3A%20html%5D%5D'), -messageSends: ["context", "error", "class:", "with:", "messageText", "div", "renderContext:on:", "ul"], +source: unescape('percent%0A%09%5Epercent%20ifNil%3A%20%5B0%5D'), +messageSends: ["ifNil:"], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.ProgressBar); smalltalk.addMethod( -unescape('_renderContext_on_'), +unescape('_percent_'), smalltalk.method({ -selector: unescape('renderContext%3Aon%3A'), -category: 'rendering', -fn: function (aContext, html){ +selector: unescape('percent%3A'), +category: 'accessing', +fn: function (aNumber){ var self=this; -var li=nil; -(li=smalltalk.send(html, "_li", [])); -((($receiver = smalltalk.send(self['@selectedContext'], "__eq", [aContext])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})])); -(function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(aContext, "_asString", [])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectContext_", [aContext]);})]);})(li); -(($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_renderContext_on_", [smalltalk.send(aContext, "_home", []), html]);})() : nil; +(self['@percent']=aNumber); return self;}, -args: ["aContext", "html"], -source: unescape('renderContext%3A%20aContext%20on%3A%20html%0A%09%7C%20li%20%7C%0A%09li%20%3A%3D%20html%20li.%0A%09selectedContext%20%3D%20aContext%20ifTrue%3A%20%5B%0A%09%09li%20class%3A%20%27selected%27%5D.%0A%09li%20%0A%09%09with%3A%20aContext%20asString%3B%0A%09%09onClick%3A%20%5Bself%20selectContext%3A%20aContext%5D.%0A%09aContext%20home%20ifNotNil%3A%20%5Bself%20renderContext%3A%20aContext%20home%20on%3A%20html%5D'), -messageSends: ["li", "ifTrue:", unescape("%3D"), "class:", "with:", "asString", "onClick:", "selectContext:", "ifNotNil:", "home", "renderContext:on:"], +args: ["aNumber"], +source: unescape('percent%3A%20aNumber%0A%09percent%20%3A%3D%20aNumber'), +messageSends: [], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.ProgressBar); smalltalk.addMethod( -unescape('_renderBottomPanelOn_'), +unescape('_renderOn_'), smalltalk.method({ -selector: unescape('renderBottomPanelOn%3A'), +selector: unescape('renderOn%3A'), category: 'rendering', fn: function (html){ var self=this; -(function($rec){smalltalk.send($rec, "_class_", ["jt_sourceCode debugger"]);return smalltalk.send($rec, "_with_", [(function(){(self['@sourceArea']=smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", []));return smalltalk.send(self['@sourceArea'], "_renderOn_", [html]);})]);})(smalltalk.send(html, "_div", [])); -(self['@ul2']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column debugger variables"])); -(self['@inspector']=smalltalk.send(smalltalk.send(html, "_div", []), "_class_", ["jt_column debugger inspector"])); -smalltalk.send(self['@sourceArea'], "_onKeyUp_", [(function(){return smalltalk.send(self, "_updateStatus", []);})]); +(self['@div']=(function($rec){smalltalk.send($rec, "_class_", ["progress_bar"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_div", []))); +smalltalk.send(self, "_renderProgressBar", []); return self;}, args: ["html"], -source: unescape('renderBottomPanelOn%3A%20html%0A%09html%20div%0A%09%09class%3A%20%27jt_sourceCode%20debugger%27%3B%0A%09%09with%3A%20%5B%0A%09%09%09sourceArea%20%3A%3D%20SourceArea%20new.%0A%09%09%09sourceArea%20renderOn%3A%20html%5D.%0A%09ul2%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20debugger%20variables%27.%0A%09inspector%20%3A%3D%20html%20div%20class%3A%20%27jt_column%20debugger%20inspector%27.%0A%09sourceArea%0A%09%09onKeyUp%3A%20%5Bself%20updateStatus%5D'), -messageSends: ["class:", "with:", "new", "renderOn:", "div", "ul", "onKeyUp:", "updateStatus"], -referencedClasses: ["SourceArea"] +source: unescape('renderOn%3A%20html%20%0A%09div%20%3A%3D%20html%20div%20%0A%09%09class%3A%20%27progress_bar%27%3B%0A%09%09yourself.%0A%09self%20renderProgressBar'), +messageSends: ["class:", "yourself", "div", "renderProgressBar"], +referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.ProgressBar); smalltalk.addMethod( -unescape('_renderButtonsOn_'), +unescape('_renderProgressBar'), smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), +selector: unescape('renderProgressBar'), category: 'rendering', -fn: function (html){ +fn: function (){ var self=this; -(self['@saveButton']=(function($rec){smalltalk.send($rec, "_with_", ["Save"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_save", []);})]);})(smalltalk.send(html, "_button", []))); -(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_doIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_printIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self['@sourceArea'], "_inspectIt", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["Proceed"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_proceed", []);})]);})(smalltalk.send(html, "_button", [])); -(function($rec){smalltalk.send($rec, "_with_", ["Abandon"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_close", []);})]);})(smalltalk.send(html, "_button", [])); -(self['@inspectButton']=(function($rec){smalltalk.send($rec, "_class_", ["jt_button debugger inspect"]);smalltalk.send($rec, "_with_", ["Inspect"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_inspectSelectedVariable", []);})]);})(smalltalk.send(html, "_button", []))); -(function($rec){smalltalk.send($rec, "_updateSourceArea", []);smalltalk.send($rec, "_updateStatus", []);smalltalk.send($rec, "_updateVariablesList", []);return smalltalk.send($rec, "_updateInspector", []);})(self); +smalltalk.send(self['@div'], "_contents_", [(function(html){return (function($rec){smalltalk.send($rec, "_class_", ["progress"]);return smalltalk.send($rec, "_style_", [smalltalk.send(smalltalk.send("width:", "__comma", [smalltalk.send(smalltalk.send(self, "_percent", []), "_asString", [])]), "__comma", [unescape("%25")])]);})(smalltalk.send(html, "_div", []));})]); return self;}, -args: ["html"], -source: unescape('renderButtonsOn%3A%20html%0A%09saveButton%20%3A%3D%20html%20button%0A%09%09with%3A%20%27Save%27%3B%0A%09%09onClick%3A%20%5Bself%20save%5D.%0A%09html%20button%0A%09%09with%3A%20%27DoIt%27%3B%0A%09%09onClick%3A%20%5BsourceArea%20doIt%5D.%0A%09html%20button%0A%09%09with%3A%20%27PrintIt%27%3B%0A%09%09onClick%3A%20%5BsourceArea%20printIt%5D.%0A%09html%20button%0A%09%09with%3A%20%27InspectIt%27%3B%0A%09%09onClick%3A%20%5BsourceArea%20inspectIt%5D.%0A%09html%20button%20%0A%09%09with%3A%20%27Proceed%27%3B%0A%09%09onClick%3A%20%5Bself%20proceed%5D.%0A%09html%20button%0A%09%09with%3A%20%27Abandon%27%3B%0A%09%09onClick%3A%20%5Bself%20close%5D.%0A%09inspectButton%20%3A%3D%20html%20button%0A%09%09class%3A%20%27jt_button%20debugger%20inspect%27%3B%0A%09%09with%3A%20%27Inspect%27%3B%0A%09%09onClick%3A%20%5Bself%20inspectSelectedVariable%5D.%0A%09%20self%20%0A%09%09updateSourceArea%3B%0A%09%09updateStatus%3B%0A%09%09updateVariablesList%3B%0A%09%09updateInspector'), -messageSends: ["with:", "onClick:", "save", "button", "doIt", "printIt", "inspectIt", "proceed", "close", "class:", "inspectSelectedVariable", "updateSourceArea", "updateStatus", "updateVariablesList", "updateInspector"], +args: [], +source: unescape('renderProgressBar%0A%09div%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09html%20div%20%0A%09%09%09class%3A%20%27progress%27%3B%0A%09%09%09style%3A%20%27width%3A%27%2C%20self%20percent%20asString%2C%20%27%25%27%5D'), +messageSends: ["contents:", "class:", "style:", unescape("%2C"), "asString", "percent", "div"], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.ProgressBar); smalltalk.addMethod( -unescape('_renderBoxOn_'), +unescape('_updatePercent_'), smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('updatePercent%3A'), +category: 'updating', +fn: function (aNumber){ var self=this; -(function($rec){smalltalk.send($rec, "_renderTopPanelOn_", [html]);return smalltalk.send($rec, "_renderBottomPanelOn_", [html]);})(self); +smalltalk.send(self, "_percent_", [aNumber]); +smalltalk.send(self, "_renderProgressBar", []); return self;}, -args: ["html"], -source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20self%20%0A%09renderTopPanelOn%3A%20html%3B%0A%09renderBottomPanelOn%3A%20html'), -messageSends: ["renderTopPanelOn:", "renderBottomPanelOn:"], +args: ["aNumber"], +source: unescape('updatePercent%3A%20aNumber%0A%09self%20percent%3A%20aNumber.%0A%09self%20renderProgressBar'), +messageSends: ["percent:", "renderProgressBar"], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.ProgressBar); + + +smalltalk.addClass('ReferencesBrowser', smalltalk.TabWidget, ['implementors', 'senders', 'implementorsList', 'input', 'timer', 'selector', 'sendersList', 'referencedClasses', 'referencedClassesList'], 'IDE'); smalltalk.addMethod( unescape('_canBeClosed'), smalltalk.method({ @@ -3808,435 +3657,494 @@ var self=this; return true; return self;}, args: [], -source: unescape('canBeClosed%0A%20%20%20%20%5Etrue'), +source: unescape('canBeClosed%0A%09%5Etrue'), messageSends: [], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_updateContextsList'), +unescape('_classesAndMetaclasses'), smalltalk.method({ -selector: unescape('updateContextsList'), -category: 'updating', +selector: unescape('classesAndMetaclasses'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self['@ul'], "_contents_", [(function(html){return smalltalk.send(self, "_renderContext_on_", [smalltalk.send(smalltalk.send(self, "_error", []), "_context", []), html]);})]); +return smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_classes", []), "_collect_", [(function(each){return smalltalk.send(each, "_class", []);})])]); return self;}, args: [], -source: unescape('updateContextsList%0A%09ul%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09self%20renderContext%3A%20self%20error%20context%20on%3A%20html%5D'), -messageSends: ["contents:", "renderContext:on:", "context", "error"], -referencedClasses: [] +source: unescape('classesAndMetaclasses%0A%09%5ESmalltalk%20current%20classes%2C%20%28Smalltalk%20current%20classes%20collect%3A%20%5B%3Aeach%20%7C%20each%20class%5D%29'), +messageSends: [unescape("%2C"), "classes", "current", "collect:", "class"], +referencedClasses: ["Smalltalk"] }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_updateSourceArea'), +unescape('_implementors'), smalltalk.method({ -selector: unescape('updateSourceArea'), -category: 'updating', +selector: unescape('implementors'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self['@sourceArea'], "_val_", [smalltalk.send(self, "_source", [])]); +return (($receiver = self['@implementors']) == nil || $receiver == undefined) ? (function(){return (self['@implementors']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;}, args: [], -source: unescape('updateSourceArea%0A%09%20sourceArea%20val%3A%20self%20source'), -messageSends: ["val:", "source"], -referencedClasses: [] +source: unescape('implementors%0A%09%5Eimplementors%20ifNil%3A%20%5Bimplementors%20%3A%3D%20Array%20new%5D'), +messageSends: ["ifNil:", "new"], +referencedClasses: ["Array"] }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_updateStatus'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('updateStatus'), -category: 'updating', +selector: unescape('initialize'), +category: 'initialization', fn: function (){ var self=this; -((($receiver = smalltalk.send(smalltalk.send(self['@sourceArea'], "_val", []), "__eq", [smalltalk.send(self, "_source", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil;return (self['@unsavedChanges']=false);})() : (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_removeAt_", ["disabled"]);})() : nil;return (self['@unsavedChanges']=true);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_at_put_", ["disabled", true]);})() : nil;return (self['@unsavedChanges']=false);}), (function(){(($receiver = self['@saveButton']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@saveButton'], "_removeAt_", ["disabled"]);})() : nil;return (self['@unsavedChanges']=true);})])); +smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); +(self['@selector']=""); return self;}, args: [], -source: unescape('updateStatus%0A%09sourceArea%20val%20%3D%20self%20source%0A%09%09ifTrue%3A%20%5B%0A%09%09%09saveButton%20ifNotNil%3A%20%5B%0A%09%09%09%09saveButton%20at%3A%20%27disabled%27%20put%3A%20true%5D.%0A%09%09%09unsavedChanges%20%3A%3D%20false%5D%0A%09%09ifFalse%3A%20%5B%0A%09%09%09saveButton%20ifNotNil%3A%20%5B%0A%09%09%09%09saveButton%20removeAt%3A%20%27disabled%27%5D.%0A%09%09%09unsavedChanges%20%3A%3D%20true%5D'), -messageSends: ["ifTrue:ifFalse:", unescape("%3D"), "val", "source", "ifNotNil:", "at:put:", "removeAt:"], +source: unescape('initialize%0A%09super%20initialize.%0A%09selector%20%3A%3D%20%27%27'), +messageSends: ["initialize"], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_updateInspector'), +unescape('_label'), smalltalk.method({ -selector: unescape('updateInspector'), -category: 'updating', +selector: unescape('label'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self['@inspector'], "_contents_", [(function(html){return nil;})]); +return unescape("%5BReferences%5D"); return self;}, args: [], -source: unescape('updateInspector%0A%09inspector%20contents%3A%20%5B%3Ahtml%20%7C%5D'), -messageSends: ["contents:"], +source: unescape('label%0A%09%5E%27%5BReferences%5D%27'), +messageSends: [], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_updateVariablesList'), +unescape('_openBrowserOn_'), smalltalk.method({ -selector: unescape('updateVariablesList'), -category: 'updating', +selector: unescape('openBrowserOn%3A'), +category: 'actions', +fn: function (aMethod){ +var self=this; +var browser=nil; +(browser=smalltalk.send((smalltalk.Browser || Browser), "_openOn_", [((($receiver = smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_instanceClass", []);})() : (function(){return smalltalk.send(aMethod, "_methodClass", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_instanceClass", []);}), (function(){return smalltalk.send(aMethod, "_methodClass", []);})]))])); +((($receiver = smalltalk.send(smalltalk.send(aMethod, "_methodClass", []), "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(browser, "_selectTab_", [smalltalk.symbolFor("class")]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(browser, "_selectTab_", [smalltalk.symbolFor("class")]);})])); +(function($rec){smalltalk.send($rec, "_selectProtocol_", [smalltalk.send(aMethod, "_category", [])]);return smalltalk.send($rec, "_selectMethod_", [aMethod]);})(browser); +return self;}, +args: ["aMethod"], +source: unescape('openBrowserOn%3A%20aMethod%0A%20%20%20%20%20%20%20%7C%20browser%20%7C%0A%20%20%20%20%20%20%20browser%20%3A%3D%20Browser%20openOn%3A%20%28aMethod%20methodClass%20isMetaclass%20%0A%09%09ifTrue%3A%20%5BaMethod%20methodClass%20instanceClass%5D%20ifFalse%3A%20%5BaMethod%20methodClass%5D%29.%0A%20%20%20%20%20%20%20aMethod%20methodClass%20isMetaclass%20ifTrue%3A%20%5Bbrowser%20selectTab%3A%20%23class%5D.%0A%20%20%20%20%20%20%20browser%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20selectProtocol%3A%20aMethod%20category%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20selectMethod%3A%20aMethod'), +messageSends: ["openOn:", "ifTrue:ifFalse:", "isMetaclass", "methodClass", "instanceClass", "ifTrue:", "selectTab:", "selectProtocol:", "category", "selectMethod:"], +referencedClasses: ["Browser"] +}), +smalltalk.ReferencesBrowser); + +smalltalk.addMethod( +unescape('_referencedClasses'), +smalltalk.method({ +selector: unescape('referencedClasses'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(self['@ul2'], "_contents_", [(function(html){var li=nil; -(li=(function($rec){smalltalk.send($rec, "_with_", ["self"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_named_", [smalltalk.send(self, "_receiver", []), "self"]);})]);})(smalltalk.send(html, "_li", [])));((($receiver = smalltalk.send(self['@selectedVariableName'], "__eq", ["self"])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));smalltalk.send(smalltalk.send(self, "_arguments", []), "_withIndexDo_", [(function(each, index){var param=nil; -(param=smalltalk.send(smalltalk.send(self['@selectedContext'], "_temps", []), "_at_", [index]));(li=(function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_named_", [param, each]);})]);})(smalltalk.send(html, "_li", [])));return ((($receiver = smalltalk.send(self['@selectedVariableName'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));})]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_allInstanceVariableNames", []), "_do_", [(function(each){var ivar=nil; -(ivar=smalltalk.send(smalltalk.send(self, "_receiver", []), "_instVarAt_", [each]));(li=(function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectVariable_named_", [ivar, each]);})]);})(smalltalk.send(html, "_li", [])));return ((($receiver = smalltalk.send(self['@selectedVariableName'], "__eq", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(li, "_class_", ["selected"]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]));})]);})]); -(($receiver = self['@selectedVariable']) == nil || $receiver == undefined) ? (function(){return smalltalk.send(self['@inspectButton'], "_at_put_", ["disabled", true]);})() : (function(){return smalltalk.send(self['@inspectButton'], "_removeAt_", ["disabled"]);})(); +return (($receiver = self['@referencedClasses']) == nil || $receiver == undefined) ? (function(){return (self['@referencedClasses']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;}, args: [], -source: unescape('updateVariablesList%0A%09ul2%20contents%3A%20%5B%3Ahtml%20%7C%20%7C%20li%20%7C%0A%09%09li%20%3A%3D%20html%20li%20%0A%09%09%09with%3A%20%27self%27%3B%0A%09%09%09onClick%3A%20%5Bself%20selectVariable%3A%20self%20receiver%20named%3A%20%27self%27%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20selectedVariableName%20%3D%20%27self%27%20ifTrue%3A%20%5B%0A%09%09%09li%20class%3A%20%27selected%27%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20arguments%20withIndexDo%3A%20%5B%3Aeach%20%3Aindex%20%7C%20%7C%20param%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20param%20%3A%3D%20selectedContext%20temps%20at%3A%20index.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20li%20%3A%3D%20html%20li%20%0A%09%09%09%09with%3A%20each%3B%0A%09%09%09%09onClick%3A%20%5Bself%20selectVariable%3A%20param%20named%3A%20each%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20selectedVariableName%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09%09%09li%20class%3A%20%27selected%27%5D%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20receiver%20class%20allInstanceVariableNames%20do%3A%20%5B%3Aeach%20%7C%20%7C%20ivar%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ivar%20%3A%3D%20self%20receiver%20instVarAt%3A%20each.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20li%20%3A%3D%20html%20li%20%0A%09%09%09%09with%3A%20each%3B%0A%09%09%09%09onClick%3A%20%5Bself%20selectVariable%3A%20ivar%20named%3A%20each%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20selectedVariableName%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09%09%09li%20class%3A%20%27selected%27%5D%5D%5D.%0A%09selectedVariable%20ifNil%3A%20%5BinspectButton%20at%3A%20%27disabled%27%20put%3A%20true%5D%20ifNotNil%3A%20%5BinspectButton%20removeAt%3A%20%27disabled%27%5D'), -messageSends: ["contents:", "with:", "onClick:", "selectVariable:named:", "receiver", "li", "ifTrue:", unescape("%3D"), "class:", "withIndexDo:", "arguments", "at:", "temps", "do:", "allInstanceVariableNames", "class", "instVarAt:", "ifNil:ifNotNil:", "at:put:", "removeAt:"], +source: unescape('referencedClasses%0A%09%5EreferencedClasses%20ifNil%3A%20%5BreferencedClasses%20%3A%3D%20Array%20new%5D'), +messageSends: ["ifNil:", "new"], +referencedClasses: ["Array"] +}), +smalltalk.ReferencesBrowser); + +smalltalk.addMethod( +unescape('_renderBoxOn_'), +smalltalk.method({ +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); +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:"], referencedClasses: [] }), -smalltalk.Debugger); +smalltalk.ReferencesBrowser); + +smalltalk.addMethod( +unescape('_renderImplementorsOn_'), +smalltalk.method({ +selector: unescape('renderImplementorsOn%3A'), +category: 'rendering', +fn: function (html){ +var self=this; +(self['@implementorsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column implementors"])); +smalltalk.send(self, "_updateImplementorsList", []); +return self;}, +args: ["html"], +source: unescape('renderImplementorsOn%3A%20html%0A%09implementorsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20implementors%27.%0A%09self%20updateImplementorsList'), +messageSends: ["class:", "ul", "updateImplementorsList"], +referencedClasses: [] +}), +smalltalk.ReferencesBrowser); +smalltalk.addMethod( +unescape('_renderInputOn_'), +smalltalk.method({ +selector: unescape('renderInputOn%3A'), +category: 'rendering', +fn: function (html){ +var self=this; +(self['@input']=(function($rec){smalltalk.send($rec, "_class_", ["implementors"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_input", []))); +smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val_", [self['@selector']]); +smalltalk.send(self, "_setInputEvents", []); +return self;}, +args: ["html"], +source: unescape('renderInputOn%3A%20html%0A%09input%20%3A%3D%20html%20input%20%0A%09%09class%3A%20%27implementors%27%3B%0A%09%09yourself.%0A%09input%20asJQuery%20val%3A%20selector.%0A%09self%20setInputEvents'), +messageSends: ["class:", "yourself", "input", "val:", "asJQuery", "setInputEvents"], +referencedClasses: [] +}), +smalltalk.ReferencesBrowser); +smalltalk.addMethod( +unescape('_renderReferencedClassesOn_'), +smalltalk.method({ +selector: unescape('renderReferencedClassesOn%3A'), +category: 'rendering', +fn: function (html){ +var self=this; +(self['@referencedClassesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column referenced_classes"])); +smalltalk.send(self, "_updateReferencedClassesList", []); +return self;}, +args: ["html"], +source: unescape('renderReferencedClassesOn%3A%20html%0A%09referencedClassesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20referenced_classes%27.%0A%09self%20updateReferencedClassesList'), +messageSends: ["class:", "ul", "updateReferencedClassesList"], +referencedClasses: [] +}), +smalltalk.ReferencesBrowser); -smalltalk.addClass('ProgressBar', smalltalk.TabWidget, ['percent', 'progressDiv', 'div'], 'IDE'); smalltalk.addMethod( -unescape('_percent'), +unescape('_renderSendersOn_'), smalltalk.method({ -selector: unescape('percent'), -category: 'accessing', -fn: function (){ +selector: unescape('renderSendersOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -return (($receiver = self['@percent']) == nil || $receiver == undefined) ? (function(){return (0);})() : $receiver; +(self['@sendersList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column senders"])); +smalltalk.send(self, "_updateSendersList", []); return self;}, -args: [], -source: unescape('percent%0A%09%5Epercent%20ifNil%3A%20%5B0%5D'), -messageSends: ["ifNil:"], +args: ["html"], +source: unescape('renderSendersOn%3A%20html%0A%09sendersList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20senders%27.%0A%09self%20updateSendersList'), +messageSends: ["class:", "ul", "updateSendersList"], referencedClasses: [] }), -smalltalk.ProgressBar); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_percent_'), +unescape('_search_'), smalltalk.method({ -selector: unescape('percent%3A'), -category: 'accessing', -fn: function (aNumber){ +selector: unescape('search%3A'), +category: 'actions', +fn: function (aString){ var self=this; -(self['@percent']=aNumber); +(function($rec){smalltalk.send($rec, "_searchReferencesFor_", [aString]);smalltalk.send($rec, "_updateImplementorsList", []);smalltalk.send($rec, "_updateSendersList", []);return smalltalk.send($rec, "_updateReferencedClassesList", []);})(self); return self;}, -args: ["aNumber"], -source: unescape('percent%3A%20aNumber%0A%09percent%20%3A%3D%20aNumber'), -messageSends: [], +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"], referencedClasses: [] }), -smalltalk.ProgressBar); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_renderOn_'), +unescape('_searchReferencedClassesFor_'), smalltalk.method({ -selector: unescape('renderOn%3A'), -category: 'rendering', -fn: function (html){ +selector: unescape('searchReferencedClassesFor%3A'), +category: 'actions', +fn: function (aString){ var self=this; -(self['@div']=(function($rec){smalltalk.send($rec, "_class_", ["progress_bar"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_div", []))); -smalltalk.send(self, "_renderProgressBar", []); +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: ["html"], -source: unescape('renderOn%3A%20html%20%0A%09div%20%3A%3D%20html%20div%20%0A%09%09class%3A%20%27progress_bar%27%3B%0A%09%09yourself.%0A%09self%20renderProgressBar'), -messageSends: ["class:", "yourself", "div", "renderProgressBar"], +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'), +messageSends: ["do:", "classesAndMetaclasses", "values", "methodDictionary", "ifTrue:", "includes:", "referencedClasses", "add:"], referencedClasses: [] }), -smalltalk.ProgressBar); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_renderProgressBar'), +unescape('_searchReferencesFor_'), smalltalk.method({ -selector: unescape('renderProgressBar'), -category: 'rendering', -fn: function (){ +selector: unescape('searchReferencesFor%3A'), +category: 'actions', +fn: function (aString){ var self=this; -smalltalk.send(self['@div'], "_contents_", [(function(html){return (function($rec){smalltalk.send($rec, "_class_", ["progress"]);return smalltalk.send($rec, "_style_", [smalltalk.send(smalltalk.send("width:", "__comma", [smalltalk.send(smalltalk.send(self, "_percent", []), "_asString", [])]), "__comma", [unescape("%25")])]);})(smalltalk.send(html, "_div", []));})]); +(self['@selector']=aString); +(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']]);})])); return self;}, -args: [], -source: unescape('renderProgressBar%0A%09div%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09html%20div%20%0A%09%09%09class%3A%20%27progress%27%3B%0A%09%09%09style%3A%20%27width%3A%27%2C%20self%20percent%20asString%2C%20%27%25%27%5D'), -messageSends: ["contents:", "class:", "style:", unescape("%2C"), "asString", "percent", "div"], -referencedClasses: [] +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:"], +referencedClasses: ["Array"] }), -smalltalk.ProgressBar); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_updatePercent_'), +unescape('_searchSelectorReferencesFor_'), smalltalk.method({ -selector: unescape('updatePercent%3A'), -category: 'updating', -fn: function (aNumber){ +selector: unescape('searchSelectorReferencesFor%3A'), +category: 'actions', +fn: function (aString){ var self=this; -smalltalk.send(self, "_percent_", [aNumber]); -smalltalk.send(self, "_renderProgressBar", []); +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: ["aNumber"], -source: unescape('updatePercent%3A%20aNumber%0A%09self%20percent%3A%20aNumber.%0A%09self%20renderProgressBar'), -messageSends: ["percent:", "renderProgressBar"], +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'), +messageSends: ["do:", "classesAndMetaclasses", "keysAndValuesDo:", "methodDictionary", "ifTrue:", unescape("%3D"), "add:", "implementors", "includes:", "messageSends", "senders"], referencedClasses: [] }), -smalltalk.ProgressBar); - - +smalltalk.ReferencesBrowser); -smalltalk.addClass('TestRunner', smalltalk.TabWidget, ['selectedCategories', 'packagesList', 'selectedClasses', 'classesList', 'selectedMethods', 'progressBar', 'methodsList', 'result', 'statusDiv'], 'IDE'); smalltalk.addMethod( -unescape('_label'), +unescape('_selector'), smalltalk.method({ -selector: unescape('label'), +selector: unescape('selector'), category: 'accessing', fn: function (){ var self=this; -return "SUnit"; +return self['@selector']; return self;}, args: [], -source: unescape('label%0A%20%20%20%20%5E%27SUnit%27'), +source: unescape('selector%0A%09%5Eselector'), messageSends: [], referencedClasses: [] }), -smalltalk.TestRunner); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_packages'), +unescape('_senders'), smalltalk.method({ -selector: unescape('packages'), +selector: unescape('senders'), category: 'accessing', fn: function (){ var self=this; -var packages=nil; -(packages=smalltalk.send((smalltalk.Array || Array), "_new", [])); -smalltalk.send(smalltalk.send(self, "_allClasses", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(packages, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]); -return smalltalk.send(packages, "_sort", []); +return (($receiver = self['@senders']) == nil || $receiver == undefined) ? (function(){return (self['@senders']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; return self;}, args: [], -source: unescape('packages%0A%20%20%20%20%7C%20packages%20%7C%0A%20%20%20%20packages%20%3A%3D%20Array%20new.%0A%20%20%20%20self%20allClasses%20do%3A%20%5B%3Aeach%20%7C%0A%09%28packages%20includes%3A%20each%20category%29%20ifFalse%3A%20%5B%0A%09%20%20%20%20packages%20add%3A%20each%20category%5D%5D.%0A%20%20%20%20%5Epackages%20sort'), -messageSends: ["new", "do:", "allClasses", "ifFalse:", "includes:", "category", "add:", "sort"], +source: unescape('senders%0A%09%5Esenders%20ifNil%3A%20%5Bsenders%20%3A%3D%20Array%20new%5D'), +messageSends: ["ifNil:", "new"], referencedClasses: ["Array"] }), -smalltalk.TestRunner); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_classes'), +unescape('_setInputEvents'), smalltalk.method({ -selector: unescape('classes'), -category: 'accessing', +selector: unescape('setInputEvents'), +category: 'private', fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(self, "_allClasses", []), "_select_", [(function(each){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [smalltalk.send(each, "_category", [])]);})]), "_sort_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_name", [])).klass === smalltalk.Number) ? $receiver >smalltalk.send(b, "_name", []) : smalltalk.send($receiver, "__gt", [smalltalk.send(b, "_name", [])]));})]); +(function($rec){smalltalk.send($rec, "_onKeyUp_", [(function(){return (self['@timer']=smalltalk.send((function(){return smalltalk.send(self, "_search_", [smalltalk.send(smalltalk.send(self['@input'], "_asJQuery", []), "_val", [])]);}), "_valueWithTimeout_", [(100)]));})]);return smalltalk.send($rec, "_onKeyDown_", [(function(){return (($receiver = self['@timer']) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self['@timer'], "_clearTimeout", []);})() : nil;})]);})(self['@input']); return self;}, args: [], -source: unescape('classes%0A%20%20%20%20%5E%28self%20allClasses%20%0A%09select%3A%20%5B%3Aeach%20%7C%20self%20selectedCategories%20includes%3A%20each%20category%5D%29%0A%09sort%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20name%20%3E%20b%20name%5D'), -messageSends: ["sort:", "select:", "allClasses", "includes:", "selectedCategories", "category", unescape("%3E"), "name"], +source: unescape('setInputEvents%0A%09input%0A%09%09onKeyUp%3A%20%5Btimer%20%3A%3D%20%5Bself%20search%3A%20input%20asJQuery%20val%5D%20valueWithTimeout%3A%20100%5D%3B%0A%09%09onKeyDown%3A%20%5Btimer%20ifNotNil%3A%20%5Btimer%20clearTimeout%5D%5D'), +messageSends: ["onKeyUp:", "valueWithTimeout:", "search:", "val", "asJQuery", "onKeyDown:", "ifNotNil:", "clearTimeout"], referencedClasses: [] }), -smalltalk.TestRunner); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_selectedCategories'), +unescape('_updateImplementorsList'), smalltalk.method({ -selector: unescape('selectedCategories'), -category: 'accessing', +selector: unescape('updateImplementorsList'), +category: 'updating', fn: function (){ var self=this; -return (($receiver = self['@selectedCategories']) == nil || $receiver == undefined) ? (function(){return (self['@selectedCategories']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +smalltalk.send(self['@implementorsList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Implementors%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_implementors", []), "_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, "_implementors", []), "_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(self, "_selector", [])])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_openBrowserOn_", [each]);})]);})(li);})]);})]); return self;}, args: [], -source: unescape('selectedCategories%0A%09%5EselectedCategories%20ifNil%3A%20%5BselectedCategories%20%3A%3D%20Array%20new%5D'), -messageSends: ["ifNil:", "new"], -referencedClasses: ["Array"] +source: unescape('updateImplementorsList%0A%20%20%20%20implementorsList%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%27Implementors%20%28%27%2C%20self%20implementors%20size%20asString%2C%20%27%29%27%3B%0A%09%09style%3A%20%27font-weight%3A%20bold%27.%0A%09self%20implementors%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%20self%20selector%29%3B%0A%09%09onClick%3A%20%5Bself%20openBrowserOn%3A%20each%5D%5D%5D'), +messageSends: ["contents:", "class:", "with:", unescape("%2C"), "asString", "size", "implementors", "style:", "li", "do:", "methodClass", "selector", "onClick:", "openBrowserOn:"], +referencedClasses: [] }), -smalltalk.TestRunner); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_allClasses'), +unescape('_updateReferencedClassesList'), smalltalk.method({ -selector: unescape('allClasses'), -category: 'accessing', +selector: unescape('updateReferencedClassesList'), +category: 'updating', fn: function (){ var self=this; -return smalltalk.send((smalltalk.TestCase || TestCase), "_allSubclasses", []); +smalltalk.send(self['@referencedClassesList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Class%20references%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_referencedClasses", []), "_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, "_referencedClasses", []), "_do_", [(function(each){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]);})]);})(smalltalk.send(html, "_li", []));})]);})]); return self;}, args: [], -source: unescape('allClasses%0A%09%5ETestCase%20allSubclasses'), -messageSends: ["allSubclasses"], -referencedClasses: ["TestCase"] +source: unescape('updateReferencedClassesList%0A%09referencedClassesList%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%27Class%20references%20%28%27%2C%20self%20referencedClasses%20size%20asString%2C%20%27%29%27%3B%0A%09%09style%3A%20%27font-weight%3A%20bold%27.%0A%09self%20referencedClasses%20do%3A%20%5B%3Aeach%20%7C%0A%09%09html%20li%0A%09%09%09with%3A%20%28each%20methodClass%20asString%2C%20%27%20%3E%3E%20%27%2C%20each%20selector%29%3B%0A%09%09%09onClick%3A%20%5Bself%20openBrowserOn%3A%20each%5D%5D%5D'), +messageSends: ["contents:", "class:", "with:", unescape("%2C"), "asString", "size", "referencedClasses", "style:", "li", "do:", "methodClass", "selector", "onClick:", "openBrowserOn:"], +referencedClasses: [] }), -smalltalk.TestRunner); +smalltalk.ReferencesBrowser); smalltalk.addMethod( -unescape('_selectedClasses'), +unescape('_updateSendersList'), smalltalk.method({ -selector: unescape('selectedClasses'), -category: 'accessing', +selector: unescape('updateSendersList'), +category: 'updating', fn: function (){ var self=this; -return (($receiver = self['@selectedClasses']) == nil || $receiver == undefined) ? (function(){return (self['@selectedClasses']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +smalltalk.send(self['@sendersList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["column_label"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(unescape("Senders%20%28"), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_senders", []), "_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, "_senders", []), "_do_", [(function(each){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]);})]);})(smalltalk.send(html, "_li", []));})]);})]); return self;}, args: [], -source: unescape('selectedClasses%0A%09%5EselectedClasses%20%20ifNil%3A%20%5BselectedClasses%20%3A%3D%20Array%20new%5D'), -messageSends: ["ifNil:", "new"], -referencedClasses: ["Array"] +source: unescape('updateSendersList%0A%09sendersList%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%27Senders%20%28%27%2C%20self%20senders%20size%20asString%2C%20%27%29%27%3B%0A%09%09style%3A%20%27font-weight%3A%20bold%27.%0A%09self%20senders%20do%3A%20%5B%3Aeach%20%7C%0A%09%09html%20li%0A%09%09%09with%3A%20%28each%20methodClass%20asString%2C%20%27%20%3E%3E%20%27%2C%20each%20selector%29%3B%0A%09%09%09onClick%3A%20%5Bself%20openBrowserOn%3A%20each%5D%5D%5D'), +messageSends: ["contents:", "class:", "with:", unescape("%2C"), "asString", "size", "senders", "style:", "li", "do:", "methodClass", "selector", "onClick:", "openBrowserOn:"], +referencedClasses: [] }), -smalltalk.TestRunner); +smalltalk.ReferencesBrowser); -smalltalk.addMethod( -unescape('_progressBar'), -smalltalk.method({ -selector: unescape('progressBar'), -category: 'accessing', -fn: function (){ -var self=this; -return (($receiver = self['@progressBar']) == nil || $receiver == undefined) ? (function(){return (self['@progressBar']=smalltalk.send((smalltalk.ProgressBar || ProgressBar), "_new", []));})() : $receiver; -return self;}, -args: [], -source: unescape('progressBar%0A%09%5EprogressBar%20ifNil%3A%20%5BprogressBar%20%3A%3D%20ProgressBar%20new%5D'), -messageSends: ["ifNil:", "new"], -referencedClasses: ["ProgressBar"] -}), -smalltalk.TestRunner); smalltalk.addMethod( -unescape('_statusInfo'), +unescape('_search_'), smalltalk.method({ -selector: unescape('statusInfo'), -category: 'accessing', -fn: function (){ +selector: unescape('search%3A'), +category: 'instance creation', +fn: function (aString){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printTotal", []), "__comma", [smalltalk.send(self, "_printPasses", [])]), "__comma", [smalltalk.send(self, "_printErrors", [])]), "__comma", [smalltalk.send(self, "_printFailures", [])]); +return (function($rec){smalltalk.send($rec, "_searchReferencesFor_", [aString]);return smalltalk.send($rec, "_open", []);})(smalltalk.send(self, "_new", [])); return self;}, -args: [], -source: unescape('statusInfo%0A%09%5Eself%20printTotal%2C%20self%20printPasses%2C%20self%20printErrors%2C%20self%20printFailures'), -messageSends: [unescape("%2C"), "printTotal", "printPasses", "printErrors", "printFailures"], +args: ["aString"], +source: unescape('search%3A%20aString%0A%09%5Eself%20new%0A%09%09searchReferencesFor%3A%20aString%3B%0A%09%09open'), +messageSends: ["searchReferencesFor:", "open", "new"], referencedClasses: [] }), -smalltalk.TestRunner); +smalltalk.ReferencesBrowser.klass); + +smalltalk.addClass('TestRunner', smalltalk.TabWidget, ['selectedCategories', 'packagesList', 'selectedClasses', 'classesList', 'selectedMethods', 'progressBar', 'methodsList', 'result', 'statusDiv'], 'IDE'); smalltalk.addMethod( -unescape('_result'), +unescape('_allClasses'), smalltalk.method({ -selector: unescape('result'), +selector: unescape('allClasses'), category: 'accessing', fn: function (){ var self=this; -return self['@result']; +return smalltalk.send((smalltalk.TestCase || TestCase), "_allSubclasses", []); return self;}, args: [], -source: unescape('result%0A%09%5Eresult'), -messageSends: [], -referencedClasses: [] +source: unescape('allClasses%0A%09%5ETestCase%20allSubclasses'), +messageSends: ["allSubclasses"], +referencedClasses: ["TestCase"] }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_testCases'), +unescape('_classes'), smalltalk.method({ -selector: unescape('testCases'), +selector: unescape('classes'), category: 'accessing', fn: function (){ var self=this; -var testCases=nil; -(testCases=[]); -smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_do_", [(function(each){return smalltalk.send(testCases, "_addAll_", [smalltalk.send(each, "_buildSuite", [])]);})]); -return testCases; +return smalltalk.send(smalltalk.send(smalltalk.send(self, "_allClasses", []), "_select_", [(function(each){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [smalltalk.send(each, "_category", [])]);})]), "_sort_", [(function(a, b){return ((($receiver = smalltalk.send(a, "_name", [])).klass === smalltalk.Number) ? $receiver >smalltalk.send(b, "_name", []) : smalltalk.send($receiver, "__gt", [smalltalk.send(b, "_name", [])]));})]); return self;}, args: [], -source: unescape('testCases%0A%09%7C%20testCases%20%7C%0A%09testCases%20%3A%3D%20%23%28%29.%0A%09self%20selectedClasses%20do%3A%20%5B%3Aeach%20%7C%20testCases%20addAll%3A%20each%20buildSuite%5D.%0A%09%5EtestCases'), -messageSends: ["do:", "selectedClasses", "addAll:", "buildSuite"], +source: unescape('classes%0A%20%20%20%20%5E%28self%20allClasses%20%0A%09select%3A%20%5B%3Aeach%20%7C%20self%20selectedCategories%20includes%3A%20each%20category%5D%29%0A%09sort%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20name%20%3E%20b%20name%5D'), +messageSends: ["sort:", "select:", "allClasses", "includes:", "selectedCategories", "category", unescape("%3E"), "name"], referencedClasses: [] }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_selectAllCategories'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('selectAllCategories'), -category: 'actions', +selector: unescape('initialize'), +category: 'initialization', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_packages", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(self['@selectedCategories'], "_includes_", [each])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_add_", [each]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_add_", [each]);})]));})]); -(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); +smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); +(self['@result']=smalltalk.send((smalltalk.TestResult || TestResult), "_new", [])); return self;}, args: [], -source: unescape('selectAllCategories%0A%09self%20packages%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%28selectedCategories%20includes%3A%20each%29%20ifFalse%3A%20%5B%0A%09%09%09self%20selectedCategories%20add%3A%20each%5D%5D.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList'), -messageSends: ["do:", "packages", "ifFalse:", "includes:", "add:", "selectedCategories", "updateCategoriesList", "updateClassesList"], -referencedClasses: [] +source: unescape('initialize%0A%09super%20initialize.%0A%09result%20%3A%3D%20TestResult%20new'), +messageSends: ["initialize", "new"], +referencedClasses: ["TestResult"] }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_toggleCategory_'), +unescape('_isSelectedCategory_'), smalltalk.method({ -selector: unescape('toggleCategory%3A'), -category: 'actions', +selector: unescape('isSelectedCategory%3A'), +category: 'testing', fn: function (aCategory){ var self=this; -((($receiver = smalltalk.send(self, "_isSelectedCategory_", [aCategory])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@selectedCategories'], "_add_", [aCategory]);})() : (function(){return smalltalk.send(self['@selectedCategories'], "_remove_", [aCategory]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedCategories'], "_add_", [aCategory]);}), (function(){return smalltalk.send(self['@selectedCategories'], "_remove_", [aCategory]);})])); -(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); +return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [aCategory]); return self;}, args: ["aCategory"], -source: unescape('toggleCategory%3A%20aCategory%0A%09%28self%20isSelectedCategory%3A%20aCategory%29%20%0A%09%09ifFalse%3A%20%5BselectedCategories%20add%3A%20aCategory%5D%0A%09%09ifTrue%3A%20%5BselectedCategories%20remove%3A%20aCategory%5D.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList'), -messageSends: ["ifFalse:ifTrue:", "isSelectedCategory:", "add:", "remove:", "updateCategoriesList", "updateClassesList"], +source: unescape('isSelectedCategory%3A%20aCategory%0A%09%5E%28self%20selectedCategories%20includes%3A%20aCategory%29'), +messageSends: ["includes:", "selectedCategories"], referencedClasses: [] }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_toggleClass_'), +unescape('_isSelectedClass_'), smalltalk.method({ -selector: unescape('toggleClass%3A'), -category: 'actions', +selector: unescape('isSelectedClass%3A'), +category: 'testing', fn: function (aClass){ var self=this; -((($receiver = smalltalk.send(self, "_isSelectedClass_", [aClass])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@selectedClasses'], "_add_", [aClass]);})() : (function(){return smalltalk.send(self['@selectedClasses'], "_remove_", [aClass]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedClasses'], "_add_", [aClass]);}), (function(){return smalltalk.send(self['@selectedClasses'], "_remove_", [aClass]);})])); -smalltalk.send(self, "_updateClassesList", []); +return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_includes_", [aClass]); return self;}, args: ["aClass"], -source: unescape('toggleClass%3A%20aClass%0A%09%28self%20isSelectedClass%3A%20aClass%29%20%0A%09%09ifFalse%3A%20%5BselectedClasses%20add%3A%20aClass%5D%0A%09%09ifTrue%3A%20%5BselectedClasses%20remove%3A%20aClass%5D.%0A%09self%20%0A%09%20%20%20%20updateClassesList'), -messageSends: ["ifFalse:ifTrue:", "isSelectedClass:", "add:", "remove:", "updateClassesList"], +source: unescape('isSelectedClass%3A%20aClass%0A%09%5E%28self%20selectedClasses%20includes%3A%20aClass%29'), +messageSends: ["includes:", "selectedClasses"], referencedClasses: [] }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_selectAllClasses'), +unescape('_label'), smalltalk.method({ -selector: unescape('selectAllClasses'), -category: 'actions', +selector: unescape('label'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_classes", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(self['@selectedClasses'], "_includes_", [each])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_add_", [each]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_add_", [each]);})]));})]); -(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); +return "SUnit"; return self;}, args: [], -source: unescape('selectAllClasses%0A%09self%20classes%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%28selectedClasses%20includes%3A%20each%29%20ifFalse%3A%20%5B%0A%09%09%09self%20selectedClasses%20add%3A%20each%5D%5D.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList'), -messageSends: ["do:", "classes", "ifFalse:", "includes:", "add:", "selectedClasses", "updateCategoriesList", "updateClassesList"], +source: unescape('label%0A%20%20%20%20%5E%27SUnit%27'), +messageSends: [], referencedClasses: [] }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_run_'), +unescape('_packages'), smalltalk.method({ -selector: unescape('run%3A'), -category: 'actions', -fn: function (aCollection){ +selector: unescape('packages'), +category: 'accessing', +fn: function (){ var self=this; -(self['@result']=smalltalk.send((smalltalk.TestResult || TestResult), "_new", [])); -(function($rec){smalltalk.send($rec, "_updateStatusDiv", []);return smalltalk.send($rec, "_updateMethodsList", []);})(self); -smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [(0)]); -smalltalk.send(self['@result'], "_total_", [smalltalk.send(aCollection, "_size", [])]); -smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send((function(){smalltalk.send(each, "_runCaseFor_", [self['@result']]);smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [((($receiver = ((($receiver = smalltalk.send(self['@result'], "_runs", [])).klass === smalltalk.Number) ? $receiver /smalltalk.send(self['@result'], "_total", []) : smalltalk.send($receiver, "__slash", [smalltalk.send(self['@result'], "_total", [])]))).klass === smalltalk.Number) ? $receiver *(100) : smalltalk.send($receiver, "__star", [(100)]))]);smalltalk.send(self, "_updateStatusDiv", []);return smalltalk.send(self, "_updateMethodsList", []);}), "_valueWithTimeout_", [(100)]);})]); +var packages=nil; +(packages=smalltalk.send((smalltalk.Array || Array), "_new", [])); +smalltalk.send(smalltalk.send(self, "_allClasses", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(packages, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(packages, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]); +return smalltalk.send(packages, "_sort", []); return self;}, -args: ["aCollection"], -source: unescape('run%3A%20aCollection%0A%09result%20%3A%3D%20TestResult%20new.%0A%09self%20%0A%09%09updateStatusDiv%3B%0A%09%09updateMethodsList.%0A%09self%20progressBar%20updatePercent%3A%200.%0A%09result%20total%3A%20aCollection%20size.%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%5Beach%20runCaseFor%3A%20result.%0A%09%09self%20progressBar%20updatePercent%3A%20result%20runs%20/%20result%20total%20*%20100.%0A%09%09self%20updateStatusDiv.%0A%09%09self%20updateMethodsList%5D%20valueWithTimeout%3A%20100%5D.'), -messageSends: ["new", "updateStatusDiv", "updateMethodsList", "updatePercent:", "progressBar", "total:", "size", "do:", "valueWithTimeout:", "runCaseFor:", unescape("*"), unescape("/"), "runs", "total"], -referencedClasses: ["TestResult"] +args: [], +source: unescape('packages%0A%20%20%20%20%7C%20packages%20%7C%0A%20%20%20%20packages%20%3A%3D%20Array%20new.%0A%20%20%20%20self%20allClasses%20do%3A%20%5B%3Aeach%20%7C%0A%09%28packages%20includes%3A%20each%20category%29%20ifFalse%3A%20%5B%0A%09%20%20%20%20packages%20add%3A%20each%20category%5D%5D.%0A%20%20%20%20%5Epackages%20sort'), +messageSends: ["new", "do:", "allClasses", "ifFalse:", "includes:", "category", "add:", "sort"], +referencedClasses: ["Array"] }), smalltalk.TestRunner); @@ -4256,23 +4164,6 @@ referencedClasses: [] }), smalltalk.TestRunner); -smalltalk.addMethod( -unescape('_initialize'), -smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', -fn: function (){ -var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.TabWidget); -(self['@result']=smalltalk.send((smalltalk.TestResult || TestResult), "_new", [])); -return self;}, -args: [], -source: unescape('initialize%0A%09super%20initialize.%0A%09result%20%3A%3D%20TestResult%20new'), -messageSends: ["initialize", "new"], -referencedClasses: ["TestResult"] -}), -smalltalk.TestRunner); - smalltalk.addMethod( unescape('_printErrors'), smalltalk.method({ @@ -4337,6 +4228,22 @@ referencedClasses: [] }), smalltalk.TestRunner); +smalltalk.addMethod( +unescape('_progressBar'), +smalltalk.method({ +selector: unescape('progressBar'), +category: 'accessing', +fn: function (){ +var self=this; +return (($receiver = self['@progressBar']) == nil || $receiver == undefined) ? (function(){return (self['@progressBar']=smalltalk.send((smalltalk.ProgressBar || ProgressBar), "_new", []));})() : $receiver; +return self;}, +args: [], +source: unescape('progressBar%0A%09%5EprogressBar%20ifNil%3A%20%5BprogressBar%20%3A%3D%20ProgressBar%20new%5D'), +messageSends: ["ifNil:", "new"], +referencedClasses: ["ProgressBar"] +}), +smalltalk.TestRunner); + smalltalk.addMethod( unescape('_renderBoxOn_'), smalltalk.method({ @@ -4404,21 +4311,17 @@ referencedClasses: [] smalltalk.TestRunner); smalltalk.addMethod( -unescape('_renderResultsOn_'), +unescape('_renderErrorsOn_'), smalltalk.method({ -selector: unescape('renderResultsOn%3A'), +selector: unescape('renderErrorsOn%3A'), category: 'rendering', fn: function (html){ var self=this; -(self['@statusDiv']=smalltalk.send(html, "_div", [])); -smalltalk.send(html, "_with_", [smalltalk.send(self, "_progressBar", [])]); -(self['@methodsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit results"])); -smalltalk.send(self, "_updateMethodsList", []); -smalltalk.send(self, "_updateStatusDiv", []); +smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_errors", []), "_do_", [(function(each){return (function($rec){smalltalk.send($rec, "_class_", ["errors"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(each, "_class", []), "_name", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(each, "_selector", [])])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_performFailure_", [each]);})]);})(smalltalk.send(html, "_li", []));})]); return self;}, args: ["html"], -source: unescape('renderResultsOn%3A%20html%0A%09statusDiv%20%3A%3D%20html%20div.%0A%09html%20with%3A%20self%20progressBar.%0A%09methodsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20sunit%20results%27.%0A%09self%20updateMethodsList.%0A%09self%20updateStatusDiv'), -messageSends: ["div", "with:", "progressBar", "class:", "ul", "updateMethodsList", "updateStatusDiv"], +source: unescape('renderErrorsOn%3A%20html%0A%09self%20result%20errors%20do%3A%20%5B%3Aeach%20%7C%0A%09%09html%20li%20%0A%09%09%09class%3A%20%27errors%27%3B%0A%09%09%09with%3A%20each%20class%20name%2C%20%27%20%3E%3E%20%27%2C%20each%20selector%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onClick%3A%20%5Bself%20performFailure%3A%20each%5D%5D'), +messageSends: ["do:", "errors", "result", "class:", "with:", unescape("%2C"), "name", "class", "selector", "onClick:", "performFailure:", "li"], referencedClasses: [] }), smalltalk.TestRunner); @@ -4440,49 +4343,192 @@ referencedClasses: [] smalltalk.TestRunner); smalltalk.addMethod( -unescape('_renderErrorsOn_'), +unescape('_renderResultsOn_'), smalltalk.method({ -selector: unescape('renderErrorsOn%3A'), +selector: unescape('renderResultsOn%3A'), category: 'rendering', fn: function (html){ var self=this; -smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_errors", []), "_do_", [(function(each){return (function($rec){smalltalk.send($rec, "_class_", ["errors"]);smalltalk.send($rec, "_with_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(each, "_class", []), "_name", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(each, "_selector", [])])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_performFailure_", [each]);})]);})(smalltalk.send(html, "_li", []));})]); +(self['@statusDiv']=smalltalk.send(html, "_div", [])); +smalltalk.send(html, "_with_", [smalltalk.send(self, "_progressBar", [])]); +(self['@methodsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit results"])); +smalltalk.send(self, "_updateMethodsList", []); +smalltalk.send(self, "_updateStatusDiv", []); return self;}, args: ["html"], -source: unescape('renderErrorsOn%3A%20html%0A%09self%20result%20errors%20do%3A%20%5B%3Aeach%20%7C%0A%09%09html%20li%20%0A%09%09%09class%3A%20%27errors%27%3B%0A%09%09%09with%3A%20each%20class%20name%2C%20%27%20%3E%3E%20%27%2C%20each%20selector%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onClick%3A%20%5Bself%20performFailure%3A%20each%5D%5D'), -messageSends: ["do:", "errors", "result", "class:", "with:", unescape("%2C"), "name", "class", "selector", "onClick:", "performFailure:", "li"], +source: unescape('renderResultsOn%3A%20html%0A%09statusDiv%20%3A%3D%20html%20div.%0A%09html%20with%3A%20self%20progressBar.%0A%09methodsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20sunit%20results%27.%0A%09self%20updateMethodsList.%0A%09self%20updateStatusDiv'), +messageSends: ["div", "with:", "progressBar", "class:", "ul", "updateMethodsList", "updateStatusDiv"], referencedClasses: [] }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_isSelectedClass_'), +unescape('_result'), smalltalk.method({ -selector: unescape('isSelectedClass%3A'), -category: 'testing', -fn: function (aClass){ +selector: unescape('result'), +category: 'accessing', +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_includes_", [aClass]); +return self['@result']; return self;}, -args: ["aClass"], -source: unescape('isSelectedClass%3A%20aClass%0A%09%5E%28self%20selectedClasses%20includes%3A%20aClass%29'), -messageSends: ["includes:", "selectedClasses"], +args: [], +source: unescape('result%0A%09%5Eresult'), +messageSends: [], referencedClasses: [] }), smalltalk.TestRunner); smalltalk.addMethod( -unescape('_isSelectedCategory_'), +unescape('_run_'), +smalltalk.method({ +selector: unescape('run%3A'), +category: 'actions', +fn: function (aCollection){ +var self=this; +(self['@result']=smalltalk.send((smalltalk.TestResult || TestResult), "_new", [])); +(function($rec){smalltalk.send($rec, "_updateStatusDiv", []);return smalltalk.send($rec, "_updateMethodsList", []);})(self); +smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [(0)]); +smalltalk.send(self['@result'], "_total_", [smalltalk.send(aCollection, "_size", [])]); +smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send((function(){smalltalk.send(each, "_runCaseFor_", [self['@result']]);smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [((($receiver = ((($receiver = smalltalk.send(self['@result'], "_runs", [])).klass === smalltalk.Number) ? $receiver /smalltalk.send(self['@result'], "_total", []) : smalltalk.send($receiver, "__slash", [smalltalk.send(self['@result'], "_total", [])]))).klass === smalltalk.Number) ? $receiver *(100) : smalltalk.send($receiver, "__star", [(100)]))]);smalltalk.send(self, "_updateStatusDiv", []);return smalltalk.send(self, "_updateMethodsList", []);}), "_valueWithTimeout_", [(100)]);})]); +return self;}, +args: ["aCollection"], +source: unescape('run%3A%20aCollection%0A%09result%20%3A%3D%20TestResult%20new.%0A%09self%20%0A%09%09updateStatusDiv%3B%0A%09%09updateMethodsList.%0A%09self%20progressBar%20updatePercent%3A%200.%0A%09result%20total%3A%20aCollection%20size.%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%5Beach%20runCaseFor%3A%20result.%0A%09%09self%20progressBar%20updatePercent%3A%20result%20runs%20/%20result%20total%20*%20100.%0A%09%09self%20updateStatusDiv.%0A%09%09self%20updateMethodsList%5D%20valueWithTimeout%3A%20100%5D.'), +messageSends: ["new", "updateStatusDiv", "updateMethodsList", "updatePercent:", "progressBar", "total:", "size", "do:", "valueWithTimeout:", "runCaseFor:", unescape("*"), unescape("/"), "runs", "total"], +referencedClasses: ["TestResult"] +}), +smalltalk.TestRunner); + +smalltalk.addMethod( +unescape('_selectAllCategories'), +smalltalk.method({ +selector: unescape('selectAllCategories'), +category: 'actions', +fn: function (){ +var self=this; +smalltalk.send(smalltalk.send(self, "_packages", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(self['@selectedCategories'], "_includes_", [each])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_add_", [each]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_add_", [each]);})]));})]); +(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); +return self;}, +args: [], +source: unescape('selectAllCategories%0A%09self%20packages%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%28selectedCategories%20includes%3A%20each%29%20ifFalse%3A%20%5B%0A%09%09%09self%20selectedCategories%20add%3A%20each%5D%5D.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList'), +messageSends: ["do:", "packages", "ifFalse:", "includes:", "add:", "selectedCategories", "updateCategoriesList", "updateClassesList"], +referencedClasses: [] +}), +smalltalk.TestRunner); + +smalltalk.addMethod( +unescape('_selectAllClasses'), +smalltalk.method({ +selector: unescape('selectAllClasses'), +category: 'actions', +fn: function (){ +var self=this; +smalltalk.send(smalltalk.send(self, "_classes", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(self['@selectedClasses'], "_includes_", [each])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_add_", [each]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_add_", [each]);})]));})]); +(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); +return self;}, +args: [], +source: unescape('selectAllClasses%0A%09self%20classes%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%28selectedClasses%20includes%3A%20each%29%20ifFalse%3A%20%5B%0A%09%09%09self%20selectedClasses%20add%3A%20each%5D%5D.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList'), +messageSends: ["do:", "classes", "ifFalse:", "includes:", "add:", "selectedClasses", "updateCategoriesList", "updateClassesList"], +referencedClasses: [] +}), +smalltalk.TestRunner); + +smalltalk.addMethod( +unescape('_selectedCategories'), +smalltalk.method({ +selector: unescape('selectedCategories'), +category: 'accessing', +fn: function (){ +var self=this; +return (($receiver = self['@selectedCategories']) == nil || $receiver == undefined) ? (function(){return (self['@selectedCategories']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +return self;}, +args: [], +source: unescape('selectedCategories%0A%09%5EselectedCategories%20ifNil%3A%20%5BselectedCategories%20%3A%3D%20Array%20new%5D'), +messageSends: ["ifNil:", "new"], +referencedClasses: ["Array"] +}), +smalltalk.TestRunner); + +smalltalk.addMethod( +unescape('_selectedClasses'), +smalltalk.method({ +selector: unescape('selectedClasses'), +category: 'accessing', +fn: function (){ +var self=this; +return (($receiver = self['@selectedClasses']) == nil || $receiver == undefined) ? (function(){return (self['@selectedClasses']=smalltalk.send((smalltalk.Array || Array), "_new", []));})() : $receiver; +return self;}, +args: [], +source: unescape('selectedClasses%0A%09%5EselectedClasses%20%20ifNil%3A%20%5BselectedClasses%20%3A%3D%20Array%20new%5D'), +messageSends: ["ifNil:", "new"], +referencedClasses: ["Array"] +}), +smalltalk.TestRunner); + +smalltalk.addMethod( +unescape('_statusInfo'), +smalltalk.method({ +selector: unescape('statusInfo'), +category: 'accessing', +fn: function (){ +var self=this; +return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printTotal", []), "__comma", [smalltalk.send(self, "_printPasses", [])]), "__comma", [smalltalk.send(self, "_printErrors", [])]), "__comma", [smalltalk.send(self, "_printFailures", [])]); +return self;}, +args: [], +source: unescape('statusInfo%0A%09%5Eself%20printTotal%2C%20self%20printPasses%2C%20self%20printErrors%2C%20self%20printFailures'), +messageSends: [unescape("%2C"), "printTotal", "printPasses", "printErrors", "printFailures"], +referencedClasses: [] +}), +smalltalk.TestRunner); + +smalltalk.addMethod( +unescape('_testCases'), +smalltalk.method({ +selector: unescape('testCases'), +category: 'accessing', +fn: function (){ +var self=this; +var testCases=nil; +(testCases=[]); +smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_do_", [(function(each){return smalltalk.send(testCases, "_addAll_", [smalltalk.send(each, "_buildSuite", [])]);})]); +return testCases; +return self;}, +args: [], +source: unescape('testCases%0A%09%7C%20testCases%20%7C%0A%09testCases%20%3A%3D%20%23%28%29.%0A%09self%20selectedClasses%20do%3A%20%5B%3Aeach%20%7C%20testCases%20addAll%3A%20each%20buildSuite%5D.%0A%09%5EtestCases'), +messageSends: ["do:", "selectedClasses", "addAll:", "buildSuite"], +referencedClasses: [] +}), +smalltalk.TestRunner); + +smalltalk.addMethod( +unescape('_toggleCategory_'), +smalltalk.method({ +selector: unescape('toggleCategory%3A'), +category: 'actions', +fn: function (aCategory){ +var self=this; +((($receiver = smalltalk.send(self, "_isSelectedCategory_", [aCategory])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@selectedCategories'], "_add_", [aCategory]);})() : (function(){return smalltalk.send(self['@selectedCategories'], "_remove_", [aCategory]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedCategories'], "_add_", [aCategory]);}), (function(){return smalltalk.send(self['@selectedCategories'], "_remove_", [aCategory]);})])); +(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self); +return self;}, +args: ["aCategory"], +source: unescape('toggleCategory%3A%20aCategory%0A%09%28self%20isSelectedCategory%3A%20aCategory%29%20%0A%09%09ifFalse%3A%20%5BselectedCategories%20add%3A%20aCategory%5D%0A%09%09ifTrue%3A%20%5BselectedCategories%20remove%3A%20aCategory%5D.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList'), +messageSends: ["ifFalse:ifTrue:", "isSelectedCategory:", "add:", "remove:", "updateCategoriesList", "updateClassesList"], +referencedClasses: [] +}), +smalltalk.TestRunner); + +smalltalk.addMethod( +unescape('_toggleClass_'), smalltalk.method({ -selector: unescape('isSelectedCategory%3A'), -category: 'testing', -fn: function (aCategory){ +selector: unescape('toggleClass%3A'), +category: 'actions', +fn: function (aClass){ var self=this; -return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [aCategory]); +((($receiver = smalltalk.send(self, "_isSelectedClass_", [aClass])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self['@selectedClasses'], "_add_", [aClass]);})() : (function(){return smalltalk.send(self['@selectedClasses'], "_remove_", [aClass]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedClasses'], "_add_", [aClass]);}), (function(){return smalltalk.send(self['@selectedClasses'], "_remove_", [aClass]);})])); +smalltalk.send(self, "_updateClassesList", []); return self;}, -args: ["aCategory"], -source: unescape('isSelectedCategory%3A%20aCategory%0A%09%5E%28self%20selectedCategories%20includes%3A%20aCategory%29'), -messageSends: ["includes:", "selectedCategories"], +args: ["aClass"], +source: unescape('toggleClass%3A%20aClass%0A%09%28self%20isSelectedClass%3A%20aClass%29%20%0A%09%09ifFalse%3A%20%5BselectedClasses%20add%3A%20aClass%5D%0A%09%09ifTrue%3A%20%5BselectedClasses%20remove%3A%20aClass%5D.%0A%09self%20%0A%09%20%20%20%20updateClassesList'), +messageSends: ["ifFalse:ifTrue:", "isSelectedClass:", "add:", "remove:", "updateClassesList"], referencedClasses: [] }), smalltalk.TestRunner); @@ -4556,186 +4602,140 @@ smalltalk.TestRunner); -smalltalk.addClass('IDETranscript', smalltalk.TabWidget, ['textarea'], 'IDE'); +smalltalk.addClass('Workspace', smalltalk.TabWidget, ['sourceArea'], 'IDE'); smalltalk.addMethod( -unescape('_label'), +unescape('_clearWorkspace'), smalltalk.method({ -selector: unescape('label'), -category: 'accessing', +selector: unescape('clearWorkspace'), +category: 'actions', fn: function (){ var self=this; -return "Transcript"; +smalltalk.send(self['@sourceArea'], "_clear", []); return self;}, args: [], -source: unescape('label%0A%20%20%20%20%5E%27Transcript%27'), -messageSends: [], +source: unescape('clearWorkspace%0A%20%20%20%20sourceArea%20clear'), +messageSends: ["clear"], referencedClasses: [] }), -smalltalk.IDETranscript); +smalltalk.Workspace); smalltalk.addMethod( -unescape('_clear'), +unescape('_doIt'), smalltalk.method({ -selector: unescape('clear'), +selector: unescape('doIt'), category: 'actions', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val_", [""]); +smalltalk.send(self['@sourceArea'], "_doIt", []); return self;}, args: [], -source: unescape('clear%0A%20%20%20%20textarea%20asJQuery%20val%3A%20%27%27'), -messageSends: ["val:", "asJQuery"], +source: unescape('doIt%0A%20%20%20sourceArea%20doIt'), +messageSends: ["doIt"], referencedClasses: [] }), -smalltalk.IDETranscript); +smalltalk.Workspace); smalltalk.addMethod( -unescape('_cr'), +unescape('_fileIn'), smalltalk.method({ -selector: unescape('cr'), +selector: unescape('fileIn'), category: 'actions', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val_", [smalltalk.send(smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val", []), "__comma", [smalltalk.send((smalltalk.String || String), "_cr", [])])]); +smalltalk.send(self['@sourceArea'], "_fileIn", []); return self;}, args: [], -source: unescape('cr%0A%20%20%20%20textarea%20asJQuery%20val%3A%20textarea%20asJQuery%20val%2C%20String%20cr.'), -messageSends: ["val:", "asJQuery", unescape("%2C"), "val", "cr"], -referencedClasses: ["String"] -}), -smalltalk.IDETranscript); - -smalltalk.addMethod( -unescape('_show_'), -smalltalk.method({ -selector: unescape('show%3A'), -category: 'actions', -fn: function (anObject){ -var self=this; -(($receiver = self['@textarea']) == nil || $receiver == undefined) ? (function(){return smalltalk.send(self, "_open", []);})() : $receiver; -smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val_", [smalltalk.send(smalltalk.send(smalltalk.send(self['@textarea'], "_asJQuery", []), "_val", []), "__comma", [smalltalk.send(anObject, "_asString", [])])]); -return self;}, -args: ["anObject"], -source: unescape('show%3A%20anObject%0A%20%20%20%20textarea%20ifNil%3A%20%5Bself%20open%5D.%0A%20%20%20%20textarea%20asJQuery%20val%3A%20textarea%20asJQuery%20val%2C%20anObject%20asString.'), -messageSends: ["ifNil:", "open", "val:", "asJQuery", unescape("%2C"), "val", "asString"], +source: unescape('fileIn%0A%20%20%20%20sourceArea%20fileIn'), +messageSends: ["fileIn"], referencedClasses: [] }), -smalltalk.IDETranscript); +smalltalk.Workspace); smalltalk.addMethod( -unescape('_open'), +unescape('_inspectIt'), smalltalk.method({ -selector: unescape('open'), +selector: unescape('inspectIt'), category: 'actions', fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_open", []);return smalltalk.send($rec, "_selectTab_", [self]);})(smalltalk.send((smalltalk.TabManager || TabManager), "_current", [])); +smalltalk.send(self['@sourceArea'], "_inspectIt", []); return self;}, args: [], -source: unescape('open%0A%20%20%20%20TabManager%20current%20%0A%09open%3B%0A%09selectTab%3A%20self'), -messageSends: ["open", "selectTab:", "current"], -referencedClasses: ["TabManager"] -}), -smalltalk.IDETranscript); - -smalltalk.addMethod( -unescape('_renderBoxOn_'), -smalltalk.method({ -selector: unescape('renderBoxOn%3A'), -category: 'rendering', -fn: function (html){ -var self=this; -(self['@textarea']=smalltalk.send(html, "_textarea", [])); -(function($rec){smalltalk.send($rec, "_class_", ["jt_transcript"]);return smalltalk.send($rec, "_at_put_", ["spellcheck", "false"]);})(self['@textarea']); -return self;}, -args: ["html"], -source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20textarea%20%3A%3D%20html%20textarea.%0A%20%20%20%20textarea%20%0A%09class%3A%20%27jt_transcript%27%3B%0A%09at%3A%20%27spellcheck%27%20put%3A%20%27false%27'), -messageSends: ["textarea", "class:", "at:put:"], -referencedClasses: [] -}), -smalltalk.IDETranscript); - -smalltalk.addMethod( -unescape('_renderButtonsOn_'), -smalltalk.method({ -selector: unescape('renderButtonsOn%3A'), -category: 'rendering', -fn: function (html){ -var self=this; -(function($rec){smalltalk.send($rec, "_with_", ["Clear transcript"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_clear", []);})]);})(smalltalk.send(html, "_button", [])); -return self;}, -args: ["html"], -source: unescape('renderButtonsOn%3A%20html%0A%20%20%20%20html%20button%0A%09with%3A%20%27Clear%20transcript%27%3B%0A%09onClick%3A%20%5Bself%20clear%5D'), -messageSends: ["with:", "onClick:", "clear", "button"], +source: unescape('inspectIt%0A%20%20%20%20sourceArea%20inspectIt'), +messageSends: ["inspectIt"], referencedClasses: [] }), -smalltalk.IDETranscript); - +smalltalk.Workspace); -smalltalk.IDETranscript.klass.iVarNames = ['current']; smalltalk.addMethod( -unescape('_initialize'), +unescape('_label'), smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', +selector: unescape('label'), +category: 'accessing', fn: function (){ var self=this; -smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_current", [])]); +return "Workspace"; return self;}, args: [], -source: unescape('initialize%0A%09Transcript%20register%3A%20self%20current'), -messageSends: ["register:", "current"], -referencedClasses: ["Transcript"] +source: unescape('label%0A%20%20%20%20%5E%27Workspace%27'), +messageSends: [], +referencedClasses: [] }), -smalltalk.IDETranscript.klass); +smalltalk.Workspace); smalltalk.addMethod( -unescape('_new'), +unescape('_printIt'), smalltalk.method({ -selector: unescape('new'), -category: 'instance creation', +selector: unescape('printIt'), +category: 'actions', fn: function (){ var self=this; -smalltalk.send(self, "_shouldNotImplement", []); +smalltalk.send(self['@sourceArea'], "_printIt", []); return self;}, args: [], -source: unescape('new%0A%20%20%20%20self%20shouldNotImplement'), -messageSends: ["shouldNotImplement"], +source: unescape('printIt%0A%09sourceArea%20printIt'), +messageSends: ["printIt"], referencedClasses: [] }), -smalltalk.IDETranscript.klass); +smalltalk.Workspace); smalltalk.addMethod( -unescape('_open'), +unescape('_renderBoxOn_'), smalltalk.method({ -selector: unescape('open'), -category: 'instance creation', -fn: function (){ +selector: unescape('renderBoxOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -(function($rec){smalltalk.send($rec, "_open", []);return smalltalk.send($rec, "_selectTab_", [smalltalk.send(self, "_current", [])]);})(smalltalk.send((smalltalk.TabManager || TabManager), "_current", [])); +(self['@sourceArea']=smalltalk.send((smalltalk.SourceArea || SourceArea), "_new", [])); +smalltalk.send(self['@sourceArea'], "_renderOn_", [html]); return self;}, -args: [], -source: unescape('open%0A%20%20%20%20TabManager%20current%20%0A%09open%3B%0A%09selectTab%3A%20self%20current'), -messageSends: ["open", "selectTab:", "current"], -referencedClasses: ["TabManager"] +args: ["html"], +source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20sourceArea%20%3A%3D%20SourceArea%20new.%0A%20%20%20%20sourceArea%20renderOn%3A%20html'), +messageSends: ["new", "renderOn:"], +referencedClasses: ["SourceArea"] }), -smalltalk.IDETranscript.klass); +smalltalk.Workspace); smalltalk.addMethod( -unescape('_current'), +unescape('_renderButtonsOn_'), smalltalk.method({ -selector: unescape('current'), -category: 'instance creation', -fn: function (){ +selector: unescape('renderButtonsOn%3A'), +category: 'rendering', +fn: function (html){ var self=this; -return (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return (self['@current']=smalltalk.send(self, "_new", [], smalltalk.TabWidget.klass));})() : $receiver; +(function($rec){smalltalk.send($rec, "_with_", ["DoIt"]);smalltalk.send($rec, "_title_", [unescape("ctrl+d")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_doIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["PrintIt"]);smalltalk.send($rec, "_title_", [unescape("ctrl+p")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_printIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["InspectIt"]);smalltalk.send($rec, "_title_", [unescape("ctrl+i")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_inspectIt", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["FileIn"]);smalltalk.send($rec, "_title_", [unescape("ctrl+f")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_fileIn", []);})]);})(smalltalk.send(html, "_button", [])); +(function($rec){smalltalk.send($rec, "_with_", ["Clear workspace"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_clearWorkspace", []);})]);})(smalltalk.send(html, "_button", [])); return self;}, -args: [], -source: unescape('current%0A%09%5Ecurrent%20ifNil%3A%20%5Bcurrent%20%3A%3D%20super%20new%5D'), -messageSends: ["ifNil:", "new"], +args: ["html"], +source: unescape('renderButtonsOn%3A%20html%0A%20%20%20%20html%20button%0A%09with%3A%20%27DoIt%27%3B%0A%09title%3A%20%27ctrl+d%27%3B%0A%09onClick%3A%20%5Bself%20doIt%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27PrintIt%27%3B%0A%09title%3A%20%27ctrl+p%27%3B%0A%09onClick%3A%20%5Bself%20printIt%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27InspectIt%27%3B%0A%09title%3A%20%27ctrl+i%27%3B%0A%09onClick%3A%20%5Bself%20inspectIt%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27FileIn%27%3B%0A%09title%3A%20%27ctrl+f%27%3B%0A%09onClick%3A%20%5Bself%20fileIn%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27Clear%20workspace%27%3B%0A%09onClick%3A%20%5Bself%20clearWorkspace%5D'), +messageSends: ["with:", "title:", "onClick:", "doIt", "button", "printIt", "inspectIt", "fileIn", "clearWorkspace"], referencedClasses: [] }), -smalltalk.IDETranscript.klass); +smalltalk.Workspace); + smalltalk.addMethod( @@ -4784,21 +4784,15 @@ var self=this; var variables=nil; (variables=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); smalltalk.send(variables, "_at_put_", [unescape("%23self"), self]); -smalltalk.send(variables, "_at_put_", [unescape("%23year"), smalltalk.send(self, "_year", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23month"), smalltalk.send(self, "_month", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23day"), smalltalk.send(self, "_day", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23hours"), smalltalk.send(self, "_hours", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23minutes"), smalltalk.send(self, "_minutes", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23seconds"), smalltalk.send(self, "_seconds", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23milliseconds"), smalltalk.send(self, "_milliseconds", [])]); +smalltalk.send(self, "_withIndexDo_", [(function(each, i){return smalltalk.send(variables, "_at_put_", [i, each]);})]); (function($rec){smalltalk.send($rec, "_setLabel_", [smalltalk.send(self, "_printString", [])]);return smalltalk.send($rec, "_setVariables_", [variables]);})(anInspector); return self;}, args: ["anInspector"], -source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self.%0A%09variables%20at%3A%20%27%23year%27%20put%3A%20self%20year.%0A%09variables%20at%3A%20%27%23month%27%20put%3A%20self%20month.%0A%09variables%20at%3A%20%27%23day%27%20put%3A%20self%20day.%0A%09variables%20at%3A%20%27%23hours%27%20put%3A%20self%20hours.%0A%09variables%20at%3A%20%27%23minutes%27%20put%3A%20self%20minutes.%0A%09variables%20at%3A%20%27%23seconds%27%20put%3A%20self%20seconds.%0A%09variables%20at%3A%20%27%23milliseconds%27%20put%3A%20self%20milliseconds.%0A%09anInspector%20%0A%09%09setLabel%3A%20self%20printString%3B%0A%09%09setVariables%3A%20variables'), -messageSends: ["new", "at:put:", "year", "month", "day", "hours", "minutes", "seconds", "milliseconds", "setLabel:", "printString", "setVariables:"], +source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self.%0A%09self%20withIndexDo%3A%20%5B%3Aeach%20%3Ai%20%7C%0A%09%09variables%20at%3A%20i%20put%3A%20each%5D.%0A%09anInspector%20%0A%09%09setLabel%3A%20self%20printString%3B%0A%09%09setVariables%3A%20variables'), +messageSends: ["new", "at:put:", "withIndexDo:", "setLabel:", "printString", "setVariables:"], referencedClasses: ["Dictionary"] }), -smalltalk.Date); +smalltalk.Collection); smalltalk.addMethod( unescape('_inspectOn_'), @@ -4810,15 +4804,16 @@ var self=this; var variables=nil; (variables=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); smalltalk.send(variables, "_at_put_", [unescape("%23self"), self]); -smalltalk.send(self, "_withIndexDo_", [(function(each, i){return smalltalk.send(variables, "_at_put_", [i, each]);})]); +smalltalk.send(variables, "_at_put_", [unescape("%23keys"), smalltalk.send(self, "_keys", [])]); +smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(variables, "_at_put_", [key, value]);})]); (function($rec){smalltalk.send($rec, "_setLabel_", [smalltalk.send(self, "_printString", [])]);return smalltalk.send($rec, "_setVariables_", [variables]);})(anInspector); return self;}, args: ["anInspector"], -source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self.%0A%09self%20withIndexDo%3A%20%5B%3Aeach%20%3Ai%20%7C%0A%09%09variables%20at%3A%20i%20put%3A%20each%5D.%0A%09anInspector%20%0A%09%09setLabel%3A%20self%20printString%3B%0A%09%09setVariables%3A%20variables'), -messageSends: ["new", "at:put:", "withIndexDo:", "setLabel:", "printString", "setVariables:"], +source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self.%0A%09variables%20at%3A%20%27%23keys%27%20put%3A%20self%20keys.%0A%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%09variables%20at%3A%20key%20put%3A%20value%5D.%0A%09anInspector%20%0A%09%09setLabel%3A%20self%20printString%3B%0A%09%09setVariables%3A%20variables'), +messageSends: ["new", "at:put:", "keys", "keysAndValuesDo:", "setLabel:", "printString", "setVariables:"], referencedClasses: ["Dictionary"] }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( unescape('_inspectOn_'), @@ -4849,19 +4844,15 @@ var self=this; var variables=nil; (variables=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); smalltalk.send(variables, "_at_put_", [unescape("%23self"), self]); -smalltalk.send(variables, "_at_put_", [unescape("%23home"), smalltalk.send(self, "_home", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23receiver"), smalltalk.send(self, "_receiver", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23selector"), smalltalk.send(self, "_selector", [])]); -smalltalk.send(variables, "_at_put_", [unescape("%23temps"), smalltalk.send(self, "_temps", [])]); -smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_instanceVariableNames", []), "_do_", [(function(each){return smalltalk.send(variables, "_at_put_", [each, smalltalk.send(self, "_instVarAt_", [each])]);})]); +smalltalk.send(self['@elements'], "_withIndexDo_", [(function(each, i){return smalltalk.send(variables, "_at_put_", [i, each]);})]); (function($rec){smalltalk.send($rec, "_setLabel_", [smalltalk.send(self, "_printString", [])]);return smalltalk.send($rec, "_setVariables_", [variables]);})(anInspector); return self;}, args: ["anInspector"], -source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self.%0A%09variables%20at%3A%20%27%23home%27%20put%3A%20self%20home.%0A%09variables%20at%3A%20%27%23receiver%27%20put%3A%20self%20receiver.%0A%09variables%20at%3A%20%27%23selector%27%20put%3A%20self%20selector.%0A%09variables%20at%3A%20%27%23temps%27%20put%3A%20self%20temps.%0A%09self%20class%20instanceVariableNames%20do%3A%20%5B%3Aeach%20%7C%0A%09%09variables%20at%3A%20each%20put%3A%20%28self%20instVarAt%3A%20each%29%5D.%0A%09anInspector%20%0A%09%09setLabel%3A%20self%20printString%3B%0A%09%09setVariables%3A%20variables'), -messageSends: ["new", "at:put:", "home", "receiver", "selector", "temps", "do:", "instanceVariableNames", "class", "instVarAt:", "setLabel:", "printString", "setVariables:"], +source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self.%0A%09elements%20withIndexDo%3A%20%5B%3Aeach%20%3Ai%20%7C%0A%09%09variables%20at%3A%20i%20put%3A%20each%5D.%0A%09anInspector%20%0A%09%09setLabel%3A%20self%20printString%3B%0A%09%09setVariables%3A%20variables'), +messageSends: ["new", "at:put:", "withIndexDo:", "setLabel:", "printString", "setVariables:"], referencedClasses: ["Dictionary"] }), -smalltalk.MethodContext); +smalltalk.Set); smalltalk.addMethod( unescape('_inspectOn_'), @@ -4899,15 +4890,21 @@ var self=this; var variables=nil; (variables=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); smalltalk.send(variables, "_at_put_", [unescape("%23self"), self]); -smalltalk.send(self['@elements'], "_withIndexDo_", [(function(each, i){return smalltalk.send(variables, "_at_put_", [i, each]);})]); +smalltalk.send(variables, "_at_put_", [unescape("%23year"), smalltalk.send(self, "_year", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23month"), smalltalk.send(self, "_month", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23day"), smalltalk.send(self, "_day", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23hours"), smalltalk.send(self, "_hours", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23minutes"), smalltalk.send(self, "_minutes", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23seconds"), smalltalk.send(self, "_seconds", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23milliseconds"), smalltalk.send(self, "_milliseconds", [])]); (function($rec){smalltalk.send($rec, "_setLabel_", [smalltalk.send(self, "_printString", [])]);return smalltalk.send($rec, "_setVariables_", [variables]);})(anInspector); return self;}, args: ["anInspector"], -source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self.%0A%09elements%20withIndexDo%3A%20%5B%3Aeach%20%3Ai%20%7C%0A%09%09variables%20at%3A%20i%20put%3A%20each%5D.%0A%09anInspector%20%0A%09%09setLabel%3A%20self%20printString%3B%0A%09%09setVariables%3A%20variables'), -messageSends: ["new", "at:put:", "withIndexDo:", "setLabel:", "printString", "setVariables:"], +source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self.%0A%09variables%20at%3A%20%27%23year%27%20put%3A%20self%20year.%0A%09variables%20at%3A%20%27%23month%27%20put%3A%20self%20month.%0A%09variables%20at%3A%20%27%23day%27%20put%3A%20self%20day.%0A%09variables%20at%3A%20%27%23hours%27%20put%3A%20self%20hours.%0A%09variables%20at%3A%20%27%23minutes%27%20put%3A%20self%20minutes.%0A%09variables%20at%3A%20%27%23seconds%27%20put%3A%20self%20seconds.%0A%09variables%20at%3A%20%27%23milliseconds%27%20put%3A%20self%20milliseconds.%0A%09anInspector%20%0A%09%09setLabel%3A%20self%20printString%3B%0A%09%09setVariables%3A%20variables'), +messageSends: ["new", "at:put:", "year", "month", "day", "hours", "minutes", "seconds", "milliseconds", "setLabel:", "printString", "setVariables:"], referencedClasses: ["Dictionary"] }), -smalltalk.Set); +smalltalk.Date); smalltalk.addMethod( unescape('_inspectOn_'), @@ -4919,14 +4916,17 @@ var self=this; var variables=nil; (variables=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); smalltalk.send(variables, "_at_put_", [unescape("%23self"), self]); -smalltalk.send(variables, "_at_put_", [unescape("%23keys"), smalltalk.send(self, "_keys", [])]); -smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(variables, "_at_put_", [key, value]);})]); +smalltalk.send(variables, "_at_put_", [unescape("%23home"), smalltalk.send(self, "_home", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23receiver"), smalltalk.send(self, "_receiver", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23selector"), smalltalk.send(self, "_selector", [])]); +smalltalk.send(variables, "_at_put_", [unescape("%23temps"), smalltalk.send(self, "_temps", [])]); +smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_instanceVariableNames", []), "_do_", [(function(each){return smalltalk.send(variables, "_at_put_", [each, smalltalk.send(self, "_instVarAt_", [each])]);})]); (function($rec){smalltalk.send($rec, "_setLabel_", [smalltalk.send(self, "_printString", [])]);return smalltalk.send($rec, "_setVariables_", [variables]);})(anInspector); return self;}, args: ["anInspector"], -source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self.%0A%09variables%20at%3A%20%27%23keys%27%20put%3A%20self%20keys.%0A%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%09variables%20at%3A%20key%20put%3A%20value%5D.%0A%09anInspector%20%0A%09%09setLabel%3A%20self%20printString%3B%0A%09%09setVariables%3A%20variables'), -messageSends: ["new", "at:put:", "keys", "keysAndValuesDo:", "setLabel:", "printString", "setVariables:"], +source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self.%0A%09variables%20at%3A%20%27%23home%27%20put%3A%20self%20home.%0A%09variables%20at%3A%20%27%23receiver%27%20put%3A%20self%20receiver.%0A%09variables%20at%3A%20%27%23selector%27%20put%3A%20self%20selector.%0A%09variables%20at%3A%20%27%23temps%27%20put%3A%20self%20temps.%0A%09self%20class%20instanceVariableNames%20do%3A%20%5B%3Aeach%20%7C%0A%09%09variables%20at%3A%20each%20put%3A%20%28self%20instVarAt%3A%20each%29%5D.%0A%09anInspector%20%0A%09%09setLabel%3A%20self%20printString%3B%0A%09%09setVariables%3A%20variables'), +messageSends: ["new", "at:put:", "home", "receiver", "selector", "temps", "do:", "instanceVariableNames", "class", "instVarAt:", "setLabel:", "printString", "setVariables:"], referencedClasses: ["Dictionary"] }), -smalltalk.HashedCollection); +smalltalk.MethodContext); diff --git a/amber/src/js/Kernel-Classes.deploy.js b/amber/src/js/Kernel-Classes.deploy.js index 4be50db4811..4ea2d04ae8c 100644 --- a/amber/src/js/Kernel-Classes.deploy.js +++ b/amber/src/js/Kernel-Classes.deploy.js @@ -1,132 +1,131 @@ smalltalk.addPackage('Kernel-Classes', {}); smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel-Classes'); smalltalk.addMethod( -unescape('_new'), +unescape('_addCompiledMethod_'), smalltalk.method({ -selector: unescape('new'), -fn: function (){ +selector: unescape('addCompiledMethod%3A'), +fn: function (aMethod){ var self=this; -return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []); +smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self); return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_basicNew'), +unescape('_allInstanceVariableNames'), smalltalk.method({ -selector: unescape('basicNew'), +selector: unescape('allInstanceVariableNames'), fn: function (){ var self=this; -return new self.fn(); +var result=nil; +(result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", [])); +(($receiver = smalltalk.send(self, "_superclass", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(result, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allInstanceVariableNames", [])]);})() : nil; +return result; return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_name'), +unescape('_allSubclasses'), smalltalk.method({ -selector: unescape('name'), +selector: unescape('allSubclasses'), fn: function (){ var self=this; -return self.className || nil; +var result=nil; +(result=smalltalk.send(self, "_subclasses", [])); +smalltalk.send(smalltalk.send(self, "_subclasses", []), "_do_", [(function(each){return smalltalk.send(result, "_addAll_", [smalltalk.send(each, "_allSubclasses", [])]);})]); +return result; return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_superclass'), +unescape('_basicNew'), smalltalk.method({ -selector: unescape('superclass'), +selector: unescape('basicNew'), fn: function (){ var self=this; -return self.superclass || nil; +return new self.fn(); return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_subclasses'), +unescape('_comment'), smalltalk.method({ -selector: unescape('subclasses'), +selector: unescape('comment'), fn: function (){ var self=this; -return smalltalk.subclasses(self); +return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver; return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_allSubclasses'), +unescape('_comment_'), smalltalk.method({ -selector: unescape('allSubclasses'), -fn: function (){ +selector: unescape('comment%3A'), +fn: function (aString){ var self=this; -var result=nil; -(result=smalltalk.send(self, "_subclasses", [])); -smalltalk.send(smalltalk.send(self, "_subclasses", []), "_do_", [(function(each){return smalltalk.send(result, "_addAll_", [smalltalk.send(each, "_allSubclasses", [])]);})]); -return result; +smalltalk.send(self, "_basicAt_put_", ["comment", aString]); return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_withAllSubclasses'), +unescape('_commentStamp'), smalltalk.method({ -selector: unescape('withAllSubclasses'), +selector: unescape('commentStamp'), 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 (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", [])); return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_prototype'), +unescape('_commentStamp_prior_'), smalltalk.method({ -selector: unescape('prototype'), -fn: function (){ +selector: unescape('commentStamp%3Aprior%3A'), +fn: function (aStamp, prior){ var self=this; -return self.fn.prototype; +return smalltalk.send(self, "_commentStamp", []); return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_methodDictionary'), +unescape('_compile_'), smalltalk.method({ -selector: unescape('methodDictionary'), -fn: function (){ +selector: unescape('compile%3A'), +fn: function (aString){ var self=this; -var dict = smalltalk.HashedCollection._new(); - var methods = self.fn.prototype.methods; - for(var i in methods) { - if(methods[i].selector) { - dict._at_put_(methods[i].selector, methods[i]); - } - }; - return dict; +smalltalk.send(self, "_compile_category_", [aString, ""]); return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_methodsFor_'), +unescape('_compile_category_'), smalltalk.method({ -selector: unescape('methodsFor%3A'), -fn: function (aString){ +selector: unescape('compile%3Acategory%3A'), +fn: function (aString, anotherString){ var self=this; -return (function($rec){smalltalk.send($rec, "_class_category_", [self, aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCategoryReader || ClassCategoryReader), "_new", [])); +var method=nil; +(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self])); +smalltalk.send(method, "_category_", [anotherString]); +smalltalk.send(self, "_addCompiledMethod_", [method]); return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_addCompiledMethod_'), +unescape('_inheritsFrom_'), smalltalk.method({ -selector: unescape('addCompiledMethod%3A'), -fn: function (aMethod){ +selector: unescape('inheritsFrom%3A'), +fn: function (aClass){ var self=this; -smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self); +return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]); return self;} }), smalltalk.Behavior); @@ -143,58 +142,74 @@ return self;} smalltalk.Behavior); smalltalk.addMethod( -unescape('_comment'), +unescape('_methodAt_'), smalltalk.method({ -selector: unescape('comment'), +selector: unescape('methodAt%3A'), +fn: function (aString){ +var self=this; +return smalltalk.methods(self)[aString]; +return self;} +}), +smalltalk.Behavior); + +smalltalk.addMethod( +unescape('_methodDictionary'), +smalltalk.method({ +selector: unescape('methodDictionary'), fn: function (){ var self=this; -return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver; +var dict = smalltalk.HashedCollection._new(); + var methods = self.fn.prototype.methods; + for(var i in methods) { + if(methods[i].selector) { + dict._at_put_(methods[i].selector, methods[i]); + } + }; + return dict; return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_comment_'), +unescape('_methodsFor_'), smalltalk.method({ -selector: unescape('comment%3A'), +selector: unescape('methodsFor%3A'), fn: function (aString){ var self=this; -smalltalk.send(self, "_basicAt_put_", ["comment", aString]); +return (function($rec){smalltalk.send($rec, "_class_category_", [self, aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCategoryReader || ClassCategoryReader), "_new", [])); return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_commentStamp'), +unescape('_methodsFor_stamp_'), smalltalk.method({ -selector: unescape('commentStamp'), -fn: function (){ +selector: unescape('methodsFor%3Astamp%3A'), +fn: function (aString, aStamp){ var self=this; -return (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", [])); +return smalltalk.send(self, "_methodsFor_", [aString]); return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_removeCompiledMethod_'), +unescape('_name'), smalltalk.method({ -selector: unescape('removeCompiledMethod%3A'), -fn: function (aMethod){ +selector: unescape('name'), +fn: function (){ var self=this; -delete self.fn.prototype[aMethod.selector._asSelector()]; - delete self.fn.prototype.methods[aMethod.selector]; - smalltalk.init(self);; +return self.className || nil; return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_inheritsFrom_'), +unescape('_new'), smalltalk.method({ -selector: unescape('inheritsFrom%3A'), -fn: function (aClass){ +selector: unescape('new'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]); +return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []); return self;} }), smalltalk.Behavior); @@ -228,73 +243,58 @@ return self;} smalltalk.Behavior); smalltalk.addMethod( -unescape('_allInstanceVariableNames'), +unescape('_prototype'), smalltalk.method({ -selector: unescape('allInstanceVariableNames'), +selector: unescape('prototype'), fn: function (){ var self=this; -var result=nil; -(result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", [])); -(($receiver = smalltalk.send(self, "_superclass", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(result, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allInstanceVariableNames", [])]);})() : nil; -return result; -return self;} -}), -smalltalk.Behavior); - -smalltalk.addMethod( -unescape('_methodAt_'), -smalltalk.method({ -selector: unescape('methodAt%3A'), -fn: function (aString){ -var self=this; -return smalltalk.methods(self)[aString]; +return self.fn.prototype; return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_methodsFor_stamp_'), +unescape('_removeCompiledMethod_'), smalltalk.method({ -selector: unescape('methodsFor%3Astamp%3A'), -fn: function (aString, aStamp){ +selector: unescape('removeCompiledMethod%3A'), +fn: function (aMethod){ var self=this; -return smalltalk.send(self, "_methodsFor_", [aString]); +delete self.fn.prototype[aMethod.selector._asSelector()]; + delete self.fn.prototype.methods[aMethod.selector]; + smalltalk.init(self);; return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_commentStamp_prior_'), +unescape('_subclasses'), smalltalk.method({ -selector: unescape('commentStamp%3Aprior%3A'), -fn: function (aStamp, prior){ +selector: unescape('subclasses'), +fn: function (){ var self=this; -return smalltalk.send(self, "_commentStamp", []); +return smalltalk.subclasses(self); return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_compile_'), +unescape('_superclass'), smalltalk.method({ -selector: unescape('compile%3A'), -fn: function (aString){ +selector: unescape('superclass'), +fn: function (){ var self=this; -smalltalk.send(self, "_compile_category_", [aString, ""]); +return self.superclass || nil; return self;} }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_compile_category_'), +unescape('_withAllSubclasses'), smalltalk.method({ -selector: unescape('compile%3Acategory%3A'), -fn: function (aString, anotherString){ +selector: unescape('withAllSubclasses'), +fn: function (){ var self=this; -var method=nil; -(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self])); -smalltalk.send(method, "_category_", [anotherString]); -smalltalk.send(self, "_addCompiledMethod_", [method]); +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;} }), smalltalk.Behavior); @@ -314,35 +314,34 @@ return self;} smalltalk.Class); smalltalk.addMethod( -unescape('_subclass_instanceVariableNames_'), +unescape('_isClass'), smalltalk.method({ -selector: unescape('subclass%3AinstanceVariableNames%3A'), -fn: function (aString, anotherString){ +selector: unescape('isClass'), +fn: function (){ var self=this; -return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]); +return true; return self;} }), smalltalk.Class); smalltalk.addMethod( -unescape('_subclass_instanceVariableNames_category_'), +unescape('_package'), smalltalk.method({ -selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'), -fn: function (aString, aString2, aString3){ +selector: unescape('package'), +fn: function (){ var self=this; -smalltalk.send(self, "_deprecatedAPI", []); -return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]); +return self.pkg; return self;} }), smalltalk.Class); smalltalk.addMethod( -unescape('_isClass'), +unescape('_package_'), smalltalk.method({ -selector: unescape('isClass'), -fn: function (){ +selector: unescape('package%3A'), +fn: function (aPackage){ var self=this; -return true; +self.pkg = aPackage; return self;} }), smalltalk.Class); @@ -374,34 +373,35 @@ return self;} smalltalk.Class); smalltalk.addMethod( -unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'), +unescape('_subclass_instanceVariableNames_'), smalltalk.method({ -selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'), -fn: function (aString, aString2, classVars, pools, aString3){ +selector: unescape('subclass%3AinstanceVariableNames%3A'), +fn: function (aString, anotherString){ var self=this; -return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]); +return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]); return self;} }), smalltalk.Class); smalltalk.addMethod( -unescape('_package'), +unescape('_subclass_instanceVariableNames_category_'), smalltalk.method({ -selector: unescape('package'), -fn: function (){ +selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'), +fn: function (aString, aString2, aString3){ var self=this; -return self.pkg; +smalltalk.send(self, "_deprecatedAPI", []); +return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]); return self;} }), smalltalk.Class); smalltalk.addMethod( -unescape('_package_'), +unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'), smalltalk.method({ -selector: unescape('package%3A'), -fn: function (aPackage){ +selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'), +fn: function (aString, aString2, classVars, pools, aString3){ var self=this; -self.pkg = aPackage; +return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]); return self;} }), smalltalk.Class); @@ -468,12 +468,25 @@ smalltalk.Metaclass); smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel-Classes'); smalltalk.addMethod( -unescape('_superclass_subclass_'), +unescape('_addSubclassOf_named_instanceVariableNames_'), smalltalk.method({ -selector: unescape('superclass%3Asubclass%3A'), -fn: function (aClass, aString){ +selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'), +fn: function (aClass, aString, aCollection){ var self=this; -return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]); +smalltalk.addClass(aString, aClass, aCollection); + return smalltalk[aString]; +return self;} +}), +smalltalk.ClassBuilder); + +smalltalk.addMethod( +unescape('_addSubclassOf_named_instanceVariableNames_package_'), +smalltalk.method({ +selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'), +fn: function (aClass, aString, aCollection, packageName){ +var self=this; +smalltalk.addClass(aString, aClass, aCollection, packageName); + return smalltalk[aString]; return self;} }), smalltalk.ClassBuilder); @@ -492,24 +505,29 @@ return self;} smalltalk.ClassBuilder); smalltalk.addMethod( -unescape('_instanceVariableNamesFor_'), +unescape('_copyClass_named_'), smalltalk.method({ -selector: unescape('instanceVariableNamesFor%3A'), -fn: function (aString){ +selector: unescape('copyClass%3Anamed%3A'), +fn: function (aClass, aString){ var self=this; -return smalltalk.send(smalltalk.send(aString, "_tokenize_", [" "]), "_reject_", [(function(each){return smalltalk.send(each, "_isEmpty", []);})]); +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", [])])); +smalltalk.send(self, "_setupClass_", [newClass]); +smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(newClass, "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), newClass])]);return smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]); +smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(smalltalk.send(newClass, "_class", []), "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), smalltalk.send(newClass, "_class", [])])]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]); +smalltalk.send(self, "_setupClass_", [newClass]); +return newClass; return self;} }), smalltalk.ClassBuilder); smalltalk.addMethod( -unescape('_addSubclassOf_named_instanceVariableNames_'), +unescape('_instanceVariableNamesFor_'), smalltalk.method({ -selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'), -fn: function (aClass, aString, aCollection){ +selector: unescape('instanceVariableNamesFor%3A'), +fn: function (aString){ var self=this; -smalltalk.addClass(aString, aClass, aCollection); - return smalltalk[aString]; +return smalltalk.send(smalltalk.send(aString, "_tokenize_", [" "]), "_reject_", [(function(each){return smalltalk.send(each, "_isEmpty", []);})]); return self;} }), smalltalk.ClassBuilder); @@ -525,6 +543,17 @@ return self;} }), smalltalk.ClassBuilder); +smalltalk.addMethod( +unescape('_superclass_subclass_'), +smalltalk.method({ +selector: unescape('superclass%3Asubclass%3A'), +fn: function (aClass, aString){ +var self=this; +return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]); +return self;} +}), +smalltalk.ClassBuilder); + smalltalk.addMethod( unescape('_superclass_subclass_instanceVariableNames_package_'), smalltalk.method({ @@ -539,38 +568,37 @@ return self;} }), smalltalk.ClassBuilder); + + +smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel-Classes'); smalltalk.addMethod( -unescape('_addSubclassOf_named_instanceVariableNames_package_'), +unescape('_class_category_'), smalltalk.method({ -selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'), -fn: function (aClass, aString, aCollection, packageName){ +selector: unescape('class%3Acategory%3A'), +fn: function (aClass, aString){ var self=this; -smalltalk.addClass(aString, aClass, aCollection, packageName); - return smalltalk[aString]; +(self['@class']=aClass); +(self['@category']=aString); return self;} }), -smalltalk.ClassBuilder); +smalltalk.ClassCategoryReader); smalltalk.addMethod( -unescape('_copyClass_named_'), +unescape('_compileMethod_'), smalltalk.method({ -selector: unescape('copyClass%3Anamed%3A'), -fn: function (aClass, aString){ +selector: unescape('compileMethod%3A'), +fn: function (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", [])])); -smalltalk.send(self, "_setupClass_", [newClass]); -smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(newClass, "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), newClass])]);return smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]); -smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(smalltalk.send(newClass, "_class", []), "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), smalltalk.send(newClass, "_class", [])])]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]); -smalltalk.send(self, "_setupClass_", [newClass]); -return newClass; +var method=nil; +var compiler=nil; +(method=smalltalk.send((compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])), "_load_forClass_", [aString, self['@class']])); +smalltalk.send(method, "_category_", [self['@category']]); +smalltalk.send(self['@class'], "_addCompiledMethod_", [method]); +smalltalk.send(compiler, "_setupClass_", [self['@class']]); return self;} }), -smalltalk.ClassBuilder); - - +smalltalk.ClassCategoryReader); -smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel-Classes'); smalltalk.addMethod( unescape('_initialize'), smalltalk.method({ @@ -583,18 +611,6 @@ return self;} }), smalltalk.ClassCategoryReader); -smalltalk.addMethod( -unescape('_class_category_'), -smalltalk.method({ -selector: unescape('class%3Acategory%3A'), -fn: function (aClass, aString){ -var self=this; -(self['@class']=aClass); -(self['@category']=aString); -return self;} -}), -smalltalk.ClassCategoryReader); - smalltalk.addMethod( unescape('_scanFrom_'), smalltalk.method({ @@ -607,20 +623,6 @@ return self;} }), smalltalk.ClassCategoryReader); -smalltalk.addMethod( -unescape('_compileMethod_'), -smalltalk.method({ -selector: unescape('compileMethod%3A'), -fn: function (aString){ -var self=this; -var method=nil; -(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self['@class']])); -smalltalk.send(method, "_category_", [self['@category']]); -smalltalk.send(self['@class'], "_addCompiledMethod_", [method]); -return self;} -}), -smalltalk.ClassCategoryReader); - smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel-Classes'); @@ -635,6 +637,18 @@ return self;} }), smalltalk.ClassCommentReader); +smalltalk.addMethod( +unescape('_initialize'), +smalltalk.method({ +selector: unescape('initialize'), +fn: function (){ +var self=this; +smalltalk.send(self, "_initialize", [], smalltalk.Object); +(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", [])); +return self;} +}), +smalltalk.ClassCommentReader); + smalltalk.addMethod( unescape('_scanFrom_'), smalltalk.method({ @@ -649,27 +663,112 @@ return self;} smalltalk.ClassCommentReader); smalltalk.addMethod( -unescape('_initialize'), +unescape('_setComment_'), smalltalk.method({ -selector: unescape('initialize'), -fn: function (){ +selector: unescape('setComment%3A'), +fn: function (aString){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.Object); -(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", [])); +smalltalk.send(self['@class'], "_comment_", [aString]); return self;} }), smalltalk.ClassCommentReader); + + +smalltalk.addClass('ClassSorterNode', smalltalk.Object, ['theClass', 'level', 'nodes'], 'Kernel-Classes'); smalltalk.addMethod( -unescape('_setComment_'), +unescape('_getNodesFrom_'), smalltalk.method({ -selector: unescape('setComment%3A'), -fn: function (aString){ +selector: unescape('getNodesFrom%3A'), +fn: function (aCollection){ var self=this; -smalltalk.send(self['@class'], "_comment_", [aString]); +var children=nil; +var others=nil; +(children=[]); +(others=[]); +smalltalk.send(aCollection, "_do_", [(function(each){return ((($receiver = smalltalk.send(smalltalk.send(each, "_superclass", []), "__eq", [smalltalk.send(self, "_theClass", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(children, "_add_", [each]);})() : (function(){return smalltalk.send(others, "_add_", [each]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(children, "_add_", [each]);}), (function(){return smalltalk.send(others, "_add_", [each]);})]));})]); +(self['@nodes']=smalltalk.send(children, "_collect_", [(function(each){return smalltalk.send((smalltalk.ClassSorterNode || ClassSorterNode), "_on_classes_level_", [each, others, ((($receiver = smalltalk.send(self, "_level", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})])); return self;} }), -smalltalk.ClassCommentReader); +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_level'), +smalltalk.method({ +selector: unescape('level'), +fn: function (){ +var self=this; +return self['@level']; +return self;} +}), +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_level_'), +smalltalk.method({ +selector: unescape('level%3A'), +fn: function (anInteger){ +var self=this; +(self['@level']=anInteger); +return self;} +}), +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_nodes'), +smalltalk.method({ +selector: unescape('nodes'), +fn: function (){ +var self=this; +return self['@nodes']; +return self;} +}), +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_theClass'), +smalltalk.method({ +selector: unescape('theClass'), +fn: function (){ +var self=this; +return self['@theClass']; +return self;} +}), +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_theClass_'), +smalltalk.method({ +selector: unescape('theClass%3A'), +fn: function (aClass){ +var self=this; +(self['@theClass']=aClass); +return self;} +}), +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_traverseClassesWith_'), +smalltalk.method({ +selector: unescape('traverseClassesWith%3A'), +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]);})]); +return self;} +}), +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_on_classes_level_'), +smalltalk.method({ +selector: unescape('on%3Aclasses%3Alevel%3A'), +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;} +}), +smalltalk.ClassSorterNode.klass); diff --git a/amber/src/js/Kernel-Classes.js b/amber/src/js/Kernel-Classes.js index 35556eaa5bf..e5422521113 100644 --- a/amber/src/js/Kernel-Classes.js +++ b/amber/src/js/Kernel-Classes.js @@ -2,187 +2,186 @@ smalltalk.addPackage('Kernel-Classes', {}); smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel-Classes'); smalltalk.Behavior.comment=unescape('Behavior%20is%20the%20superclass%20of%20all%20class%20objects.%20%0A%0AIt%20defines%20the%20protocol%20for%20creating%20instances%20of%20a%20class%20with%20%60%23basicNew%60%20and%20%60%23new%60%20%28see%20%60boot.js%60%20for%20class%20constructors%20details%29.%0AInstances%20know%20about%20the%20subclass/superclass%20relationships%20between%20classes%2C%20contain%20the%20description%20that%20instances%20are%20created%20from%2C%20%0Aand%20hold%20the%20method%20dictionary%20that%27s%20associated%20with%20each%20class.%0A%0ABehavior%20also%20%20provides%20methods%20for%20compiling%20methods%2C%20examining%20the%20method%20dictionary%2C%20and%20iterating%20over%20the%20class%20hierarchy.') smalltalk.addMethod( -unescape('_new'), +unescape('_addCompiledMethod_'), smalltalk.method({ -selector: unescape('new'), -category: 'instance creation', -fn: function (){ +selector: unescape('addCompiledMethod%3A'), +category: 'compiling', +fn: function (aMethod){ var self=this; -return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []); +smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self); return self;}, -args: [], -source: unescape('new%0A%09%5Eself%20basicNew%20initialize'), -messageSends: ["initialize", "basicNew"], +args: ["aMethod"], +source: unescape('addCompiledMethod%3A%20aMethod%0A%09%3Csmalltalk.addMethod%28aMethod.selector._asSelector%28%29%2C%20aMethod%2C%20self%29%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_basicNew'), +unescape('_allInstanceVariableNames'), smalltalk.method({ -selector: unescape('basicNew'), -category: 'instance creation', +selector: unescape('allInstanceVariableNames'), +category: 'accessing', fn: function (){ var self=this; -return new self.fn(); +var result=nil; +(result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", [])); +(($receiver = smalltalk.send(self, "_superclass", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(result, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allInstanceVariableNames", [])]);})() : nil; +return result; return self;}, args: [], -source: unescape('basicNew%0A%09%3Creturn%20new%20self.fn%28%29%3E'), -messageSends: [], +source: unescape('allInstanceVariableNames%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%20self%20instanceVariableNames%20copy.%0A%09self%20superclass%20ifNotNil%3A%20%5B%0A%09%20%20%20%20result%20addAll%3A%20self%20superclass%20allInstanceVariableNames%5D.%0A%09%5Eresult'), +messageSends: ["copy", "instanceVariableNames", "ifNotNil:", "superclass", "addAll:", "allInstanceVariableNames"], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_name'), +unescape('_allSubclasses'), smalltalk.method({ -selector: unescape('name'), +selector: unescape('allSubclasses'), category: 'accessing', fn: function (){ var self=this; -return self.className || nil; +var result=nil; +(result=smalltalk.send(self, "_subclasses", [])); +smalltalk.send(smalltalk.send(self, "_subclasses", []), "_do_", [(function(each){return smalltalk.send(result, "_addAll_", [smalltalk.send(each, "_allSubclasses", [])]);})]); +return result; return self;}, args: [], -source: unescape('name%0A%09%3Creturn%20self.className%20%7C%7C%20nil%3E'), -messageSends: [], +source: unescape('allSubclasses%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%20self%20subclasses.%0A%09self%20subclasses%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20result%20addAll%3A%20each%20allSubclasses%5D.%0A%09%5Eresult'), +messageSends: ["subclasses", "do:", "addAll:", "allSubclasses"], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_superclass'), +unescape('_basicNew'), smalltalk.method({ -selector: unescape('superclass'), -category: 'accessing', +selector: unescape('basicNew'), +category: 'instance creation', fn: function (){ var self=this; -return self.superclass || nil; +return new self.fn(); return self;}, args: [], -source: unescape('superclass%0A%09%3Creturn%20self.superclass%20%7C%7C%20nil%3E'), +source: unescape('basicNew%0A%09%3Creturn%20new%20self.fn%28%29%3E'), messageSends: [], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_subclasses'), +unescape('_comment'), smalltalk.method({ -selector: unescape('subclasses'), +selector: unescape('comment'), category: 'accessing', fn: function (){ var self=this; -return smalltalk.subclasses(self); +return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver; return self;}, args: [], -source: unescape('subclasses%0A%09%3Creturn%20smalltalk.subclasses%28self%29%3E'), -messageSends: [], +source: unescape('comment%0A%20%20%20%20%5E%28self%20basicAt%3A%20%27comment%27%29%20ifNil%3A%20%5B%27%27%5D'), +messageSends: ["ifNil:", "basicAt:"], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_allSubclasses'), +unescape('_comment_'), smalltalk.method({ -selector: unescape('allSubclasses'), +selector: unescape('comment%3A'), category: 'accessing', -fn: function (){ +fn: function (aString){ var self=this; -var result=nil; -(result=smalltalk.send(self, "_subclasses", [])); -smalltalk.send(smalltalk.send(self, "_subclasses", []), "_do_", [(function(each){return smalltalk.send(result, "_addAll_", [smalltalk.send(each, "_allSubclasses", [])]);})]); -return result; +smalltalk.send(self, "_basicAt_put_", ["comment", aString]); return self;}, -args: [], -source: unescape('allSubclasses%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%20self%20subclasses.%0A%09self%20subclasses%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20result%20addAll%3A%20each%20allSubclasses%5D.%0A%09%5Eresult'), -messageSends: ["subclasses", "do:", "addAll:", "allSubclasses"], +args: ["aString"], +source: unescape('comment%3A%20aString%0A%20%20%20%20self%20basicAt%3A%20%27comment%27%20put%3A%20aString'), +messageSends: ["basicAt:put:"], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_withAllSubclasses'), +unescape('_commentStamp'), smalltalk.method({ -selector: unescape('withAllSubclasses'), +selector: unescape('commentStamp'), category: 'accessing', 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 (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", [])); return self;}, args: [], -source: unescape('withAllSubclasses%0A%09%5E%28Array%20with%3A%20self%29%20addAll%3A%20self%20allSubclasses%3B%20yourself'), -messageSends: ["addAll:", "allSubclasses", "yourself", "with:"], -referencedClasses: ["Array"] +source: unescape('commentStamp%0A%20%20%20%20%5EClassCommentReader%20new%0A%09class%3A%20self%3B%0A%09yourself'), +messageSends: ["class:", "yourself", "new"], +referencedClasses: ["ClassCommentReader"] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_prototype'), +unescape('_commentStamp_prior_'), smalltalk.method({ -selector: unescape('prototype'), +selector: unescape('commentStamp%3Aprior%3A'), category: 'accessing', -fn: function (){ +fn: function (aStamp, prior){ var self=this; -return self.fn.prototype; +return smalltalk.send(self, "_commentStamp", []); return self;}, -args: [], -source: unescape('prototype%0A%09%3Creturn%20self.fn.prototype%3E'), -messageSends: [], +args: ["aStamp", "prior"], +source: unescape('commentStamp%3A%20aStamp%20prior%3A%20prior%0A%20%20%20%20%20%20%20%20%5Eself%20commentStamp'), +messageSends: ["commentStamp"], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_methodDictionary'), +unescape('_compile_'), smalltalk.method({ -selector: unescape('methodDictionary'), -category: 'accessing', -fn: function (){ +selector: unescape('compile%3A'), +category: 'compiling', +fn: function (aString){ var self=this; -var dict = smalltalk.HashedCollection._new(); - var methods = self.fn.prototype.methods; - for(var i in methods) { - if(methods[i].selector) { - dict._at_put_(methods[i].selector, methods[i]); - } - }; - return dict; +smalltalk.send(self, "_compile_category_", [aString, ""]); return self;}, -args: [], -source: unescape('methodDictionary%0A%09%3Cvar%20dict%20%3D%20smalltalk.HashedCollection._new%28%29%3B%0A%09var%20methods%20%3D%20self.fn.prototype.methods%3B%0A%09for%28var%20i%20in%20methods%29%20%7B%0A%09%09if%28methods%5Bi%5D.selector%29%20%7B%0A%09%09%09dict._at_put_%28methods%5Bi%5D.selector%2C%20methods%5Bi%5D%29%3B%0A%09%09%7D%0A%09%7D%3B%0A%09return%20dict%3E'), -messageSends: [], +args: ["aString"], +source: unescape('compile%3A%20aString%0A%09self%20compile%3A%20aString%20category%3A%20%27%27'), +messageSends: ["compile:category:"], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_methodsFor_'), +unescape('_compile_category_'), smalltalk.method({ -selector: unescape('methodsFor%3A'), -category: 'accessing', -fn: function (aString){ +selector: unescape('compile%3Acategory%3A'), +category: 'compiling', +fn: function (aString, anotherString){ var self=this; -return (function($rec){smalltalk.send($rec, "_class_category_", [self, aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCategoryReader || ClassCategoryReader), "_new", [])); +var method=nil; +(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self])); +smalltalk.send(method, "_category_", [anotherString]); +smalltalk.send(self, "_addCompiledMethod_", [method]); return self;}, -args: ["aString"], -source: unescape('methodsFor%3A%20aString%0A%09%5EClassCategoryReader%20new%0A%09%20%20%20%20class%3A%20self%20category%3A%20aString%3B%0A%09%20%20%20%20yourself'), -messageSends: ["class:category:", "yourself", "new"], -referencedClasses: ["ClassCategoryReader"] +args: ["aString", "anotherString"], +source: unescape('compile%3A%20aString%20category%3A%20anotherString%0A%09%7C%20method%20%7C%0A%09method%20%3A%3D%20Compiler%20new%20load%3A%20aString%20forClass%3A%20self.%0A%09method%20category%3A%20anotherString.%0A%09self%20addCompiledMethod%3A%20method'), +messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:"], +referencedClasses: ["Compiler"] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_addCompiledMethod_'), +unescape('_inheritsFrom_'), smalltalk.method({ -selector: unescape('addCompiledMethod%3A'), -category: 'compiling', -fn: function (aMethod){ +selector: unescape('inheritsFrom%3A'), +category: 'testing', +fn: function (aClass){ var self=this; -smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self); +return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]); return self;}, -args: ["aMethod"], -source: unescape('addCompiledMethod%3A%20aMethod%0A%09%3Csmalltalk.addMethod%28aMethod.selector._asSelector%28%29%2C%20aMethod%2C%20self%29%3E'), -messageSends: [], +args: ["aClass"], +source: unescape('inheritsFrom%3A%20aClass%0A%09%5EaClass%20allSubclasses%20includes%3A%20self'), +messageSends: ["includes:", "allSubclasses"], referencedClasses: [] }), smalltalk.Behavior); @@ -204,83 +203,104 @@ referencedClasses: [] smalltalk.Behavior); smalltalk.addMethod( -unescape('_comment'), +unescape('_methodAt_'), smalltalk.method({ -selector: unescape('comment'), +selector: unescape('methodAt%3A'), +category: 'accessing', +fn: function (aString){ +var self=this; +return smalltalk.methods(self)[aString]; +return self;}, +args: ["aString"], +source: unescape('methodAt%3A%20aString%0A%09%3Creturn%20smalltalk.methods%28self%29%5BaString%5D%3E'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.Behavior); + +smalltalk.addMethod( +unescape('_methodDictionary'), +smalltalk.method({ +selector: unescape('methodDictionary'), category: 'accessing', fn: function (){ var self=this; -return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver; +var dict = smalltalk.HashedCollection._new(); + var methods = self.fn.prototype.methods; + for(var i in methods) { + if(methods[i].selector) { + dict._at_put_(methods[i].selector, methods[i]); + } + }; + return dict; return self;}, args: [], -source: unescape('comment%0A%20%20%20%20%5E%28self%20basicAt%3A%20%27comment%27%29%20ifNil%3A%20%5B%27%27%5D'), -messageSends: ["ifNil:", "basicAt:"], +source: unescape('methodDictionary%0A%09%3Cvar%20dict%20%3D%20smalltalk.HashedCollection._new%28%29%3B%0A%09var%20methods%20%3D%20self.fn.prototype.methods%3B%0A%09for%28var%20i%20in%20methods%29%20%7B%0A%09%09if%28methods%5Bi%5D.selector%29%20%7B%0A%09%09%09dict._at_put_%28methods%5Bi%5D.selector%2C%20methods%5Bi%5D%29%3B%0A%09%09%7D%0A%09%7D%3B%0A%09return%20dict%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_comment_'), +unescape('_methodsFor_'), smalltalk.method({ -selector: unescape('comment%3A'), +selector: unescape('methodsFor%3A'), category: 'accessing', fn: function (aString){ var self=this; -smalltalk.send(self, "_basicAt_put_", ["comment", aString]); +return (function($rec){smalltalk.send($rec, "_class_category_", [self, aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCategoryReader || ClassCategoryReader), "_new", [])); return self;}, args: ["aString"], -source: unescape('comment%3A%20aString%0A%20%20%20%20self%20basicAt%3A%20%27comment%27%20put%3A%20aString'), -messageSends: ["basicAt:put:"], -referencedClasses: [] +source: unescape('methodsFor%3A%20aString%0A%09%5EClassCategoryReader%20new%0A%09%20%20%20%20class%3A%20self%20category%3A%20aString%3B%0A%09%20%20%20%20yourself'), +messageSends: ["class:category:", "yourself", "new"], +referencedClasses: ["ClassCategoryReader"] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_commentStamp'), +unescape('_methodsFor_stamp_'), smalltalk.method({ -selector: unescape('commentStamp'), +selector: unescape('methodsFor%3Astamp%3A'), category: 'accessing', -fn: function (){ +fn: function (aString, aStamp){ var self=this; -return (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", [])); +return smalltalk.send(self, "_methodsFor_", [aString]); return self;}, -args: [], -source: unescape('commentStamp%0A%20%20%20%20%5EClassCommentReader%20new%0A%09class%3A%20self%3B%0A%09yourself'), -messageSends: ["class:", "yourself", "new"], -referencedClasses: ["ClassCommentReader"] +args: ["aString", "aStamp"], +source: unescape('methodsFor%3A%20aString%20stamp%3A%20aStamp%0A%09%22Added%20for%20compatibility%2C%20right%20now%20ignores%20stamp.%22%0A%09%5Eself%20methodsFor%3A%20aString'), +messageSends: ["methodsFor:"], +referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_removeCompiledMethod_'), +unescape('_name'), smalltalk.method({ -selector: unescape('removeCompiledMethod%3A'), -category: 'compiling', -fn: function (aMethod){ +selector: unescape('name'), +category: 'accessing', +fn: function (){ var self=this; -delete self.fn.prototype[aMethod.selector._asSelector()]; - delete self.fn.prototype.methods[aMethod.selector]; - smalltalk.init(self);; +return self.className || nil; return self;}, -args: ["aMethod"], -source: unescape('removeCompiledMethod%3A%20aMethod%0A%09%3Cdelete%20self.fn.prototype%5BaMethod.selector._asSelector%28%29%5D%3B%0A%09delete%20self.fn.prototype.methods%5BaMethod.selector%5D%3B%0A%09smalltalk.init%28self%29%3B%3E'), +args: [], +source: unescape('name%0A%09%3Creturn%20self.className%20%7C%7C%20nil%3E'), messageSends: [], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_inheritsFrom_'), +unescape('_new'), smalltalk.method({ -selector: unescape('inheritsFrom%3A'), -category: 'testing', -fn: function (aClass){ +selector: unescape('new'), +category: 'instance creation', +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]); +return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []); return self;}, -args: ["aClass"], -source: unescape('inheritsFrom%3A%20aClass%0A%09%5EaClass%20allSubclasses%20includes%3A%20self'), -messageSends: ["includes:", "allSubclasses"], +args: [], +source: unescape('new%0A%09%5Eself%20basicNew%20initialize'), +messageSends: ["initialize", "basicNew"], referencedClasses: [] }), smalltalk.Behavior); @@ -324,104 +344,84 @@ referencedClasses: ["HashedCollection", "Array"] smalltalk.Behavior); smalltalk.addMethod( -unescape('_allInstanceVariableNames'), +unescape('_prototype'), smalltalk.method({ -selector: unescape('allInstanceVariableNames'), +selector: unescape('prototype'), category: 'accessing', fn: function (){ var self=this; -var result=nil; -(result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", [])); -(($receiver = smalltalk.send(self, "_superclass", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(result, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allInstanceVariableNames", [])]);})() : nil; -return result; +return self.fn.prototype; return self;}, args: [], -source: unescape('allInstanceVariableNames%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%20self%20instanceVariableNames%20copy.%0A%09self%20superclass%20ifNotNil%3A%20%5B%0A%09%20%20%20%20result%20addAll%3A%20self%20superclass%20allInstanceVariableNames%5D.%0A%09%5Eresult'), -messageSends: ["copy", "instanceVariableNames", "ifNotNil:", "superclass", "addAll:", "allInstanceVariableNames"], +source: unescape('prototype%0A%09%3Creturn%20self.fn.prototype%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_methodAt_'), +unescape('_removeCompiledMethod_'), smalltalk.method({ -selector: unescape('methodAt%3A'), -category: 'accessing', -fn: function (aString){ +selector: unescape('removeCompiledMethod%3A'), +category: 'compiling', +fn: function (aMethod){ var self=this; -return smalltalk.methods(self)[aString]; +delete self.fn.prototype[aMethod.selector._asSelector()]; + delete self.fn.prototype.methods[aMethod.selector]; + smalltalk.init(self);; return self;}, -args: ["aString"], -source: unescape('methodAt%3A%20aString%0A%09%3Creturn%20smalltalk.methods%28self%29%5BaString%5D%3E'), +args: ["aMethod"], +source: unescape('removeCompiledMethod%3A%20aMethod%0A%09%3Cdelete%20self.fn.prototype%5BaMethod.selector._asSelector%28%29%5D%3B%0A%09delete%20self.fn.prototype.methods%5BaMethod.selector%5D%3B%0A%09smalltalk.init%28self%29%3B%3E'), messageSends: [], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_methodsFor_stamp_'), +unescape('_subclasses'), smalltalk.method({ -selector: unescape('methodsFor%3Astamp%3A'), +selector: unescape('subclasses'), category: 'accessing', -fn: function (aString, aStamp){ +fn: function (){ var self=this; -return smalltalk.send(self, "_methodsFor_", [aString]); +return smalltalk.subclasses(self); return self;}, -args: ["aString", "aStamp"], -source: unescape('methodsFor%3A%20aString%20stamp%3A%20aStamp%0A%09%22Added%20for%20compatibility%2C%20right%20now%20ignores%20stamp.%22%0A%09%5Eself%20methodsFor%3A%20aString'), -messageSends: ["methodsFor:"], +args: [], +source: unescape('subclasses%0A%09%3Creturn%20smalltalk.subclasses%28self%29%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_commentStamp_prior_'), +unescape('_superclass'), smalltalk.method({ -selector: unescape('commentStamp%3Aprior%3A'), +selector: unescape('superclass'), category: 'accessing', -fn: function (aStamp, prior){ -var self=this; -return smalltalk.send(self, "_commentStamp", []); -return self;}, -args: ["aStamp", "prior"], -source: unescape('commentStamp%3A%20aStamp%20prior%3A%20prior%0A%20%20%20%20%20%20%20%20%5Eself%20commentStamp'), -messageSends: ["commentStamp"], -referencedClasses: [] -}), -smalltalk.Behavior); - -smalltalk.addMethod( -unescape('_compile_'), -smalltalk.method({ -selector: unescape('compile%3A'), -category: 'compiling', -fn: function (aString){ +fn: function (){ var self=this; -smalltalk.send(self, "_compile_category_", [aString, ""]); +return self.superclass || nil; return self;}, -args: ["aString"], -source: unescape('compile%3A%20aString%0A%09self%20compile%3A%20aString%20category%3A%20%27%27'), -messageSends: ["compile:category:"], +args: [], +source: unescape('superclass%0A%09%3Creturn%20self.superclass%20%7C%7C%20nil%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.Behavior); smalltalk.addMethod( -unescape('_compile_category_'), +unescape('_withAllSubclasses'), smalltalk.method({ -selector: unescape('compile%3Acategory%3A'), -category: 'compiling', -fn: function (aString, anotherString){ +selector: unescape('withAllSubclasses'), +category: 'accessing', +fn: function (){ var self=this; -var method=nil; -(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self])); -smalltalk.send(method, "_category_", [anotherString]); -smalltalk.send(self, "_addCompiledMethod_", [method]); +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;}, -args: ["aString", "anotherString"], -source: unescape('compile%3A%20aString%20category%3A%20anotherString%0A%09%7C%20method%20%7C%0A%09method%20%3A%3D%20Compiler%20new%20load%3A%20aString%20forClass%3A%20self.%0A%09method%20category%3A%20anotherString.%0A%09self%20addCompiledMethod%3A%20method'), -messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:"], -referencedClasses: ["Compiler"] +args: [], +source: unescape('withAllSubclasses%0A%09%5E%28Array%20with%3A%20self%29%20addAll%3A%20self%20allSubclasses%3B%20yourself'), +messageSends: ["addAll:", "allSubclasses", "yourself", "with:"], +referencedClasses: ["Array"] }), smalltalk.Behavior); @@ -446,49 +446,48 @@ referencedClasses: [] smalltalk.Class); smalltalk.addMethod( -unescape('_subclass_instanceVariableNames_'), +unescape('_isClass'), smalltalk.method({ -selector: unescape('subclass%3AinstanceVariableNames%3A'), -category: 'class creation', -fn: function (aString, anotherString){ +selector: unescape('isClass'), +category: 'testing', +fn: function (){ var self=this; -return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]); +return true; return self;}, -args: ["aString", "anotherString"], -source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%22Kept%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20package%3A%20nil'), -messageSends: ["subclass:instanceVariableNames:package:"], +args: [], +source: unescape('isClass%0A%09%5Etrue'), +messageSends: [], referencedClasses: [] }), smalltalk.Class); smalltalk.addMethod( -unescape('_subclass_instanceVariableNames_category_'), +unescape('_package'), smalltalk.method({ -selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'), -category: 'class creation', -fn: function (aString, aString2, aString3){ +selector: unescape('package'), +category: 'accessing', +fn: function (){ var self=this; -smalltalk.send(self, "_deprecatedAPI", []); -return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]); +return self.pkg; return self;}, -args: ["aString", "aString2", "aString3"], -source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%22Kept%20for%20compatibility.%22%0A%09self%20deprecatedAPI.%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'), -messageSends: ["deprecatedAPI", "subclass:instanceVariableNames:package:"], +args: [], +source: unescape('package%0A%09%3Creturn%20self.pkg%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.Class); smalltalk.addMethod( -unescape('_isClass'), +unescape('_package_'), smalltalk.method({ -selector: unescape('isClass'), -category: 'testing', -fn: function (){ +selector: unescape('package%3A'), +category: 'accessing', +fn: function (aPackage){ var self=this; -return true; +self.pkg = aPackage; return self;}, -args: [], -source: unescape('isClass%0A%09%5Etrue'), +args: ["aPackage"], +source: unescape('package%3A%20aPackage%0A%09%3Cself.pkg%20%3D%20aPackage%3E'), messageSends: [], referencedClasses: [] }), @@ -531,49 +530,50 @@ referencedClasses: [] smalltalk.Class); smalltalk.addMethod( -unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'), +unescape('_subclass_instanceVariableNames_'), smalltalk.method({ -selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'), +selector: unescape('subclass%3AinstanceVariableNames%3A'), category: 'class creation', -fn: function (aString, aString2, classVars, pools, aString3){ +fn: function (aString, anotherString){ var self=this; -return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]); +return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]); return self;}, -args: ["aString", "aString2", "classVars", "pools", "aString3"], -source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20classVariableNames%3A%20classVars%20poolDictionaries%3A%20pools%20category%3A%20aString3%0A%09%22Just%20ignore%20class%20variables%20and%20pools.%20Added%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'), +args: ["aString", "anotherString"], +source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%22Kept%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20package%3A%20nil'), messageSends: ["subclass:instanceVariableNames:package:"], referencedClasses: [] }), smalltalk.Class); smalltalk.addMethod( -unescape('_package'), +unescape('_subclass_instanceVariableNames_category_'), smalltalk.method({ -selector: unescape('package'), -category: 'accessing', -fn: function (){ +selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'), +category: 'class creation', +fn: function (aString, aString2, aString3){ var self=this; -return self.pkg; +smalltalk.send(self, "_deprecatedAPI", []); +return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]); return self;}, -args: [], -source: unescape('package%0A%09%3Creturn%20self.pkg%3E'), -messageSends: [], +args: ["aString", "aString2", "aString3"], +source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%22Kept%20for%20compatibility.%22%0A%09self%20deprecatedAPI.%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'), +messageSends: ["deprecatedAPI", "subclass:instanceVariableNames:package:"], referencedClasses: [] }), smalltalk.Class); smalltalk.addMethod( -unescape('_package_'), +unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'), smalltalk.method({ -selector: unescape('package%3A'), -category: 'accessing', -fn: function (aPackage){ +selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'), +category: 'class creation', +fn: function (aString, aString2, classVars, pools, aString3){ var self=this; -self.pkg = aPackage; +return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]); return self;}, -args: ["aPackage"], -source: unescape('package%3A%20aPackage%0A%09%3Cself.pkg%20%3D%20aPackage%3E'), -messageSends: [], +args: ["aString", "aString2", "classVars", "pools", "aString3"], +source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20classVariableNames%3A%20classVars%20poolDictionaries%3A%20pools%20category%3A%20aString3%0A%09%22Just%20ignore%20class%20variables%20and%20pools.%20Added%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'), +messageSends: ["subclass:instanceVariableNames:package:"], referencedClasses: [] }), smalltalk.Class); @@ -667,17 +667,35 @@ smalltalk.Metaclass); smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel-Classes'); smalltalk.ClassBuilder.comment=unescape('ClassBuilder%20is%20responsible%20for%20compiling%20new%20classes%20or%20modifying%20existing%20classes%20in%20the%20system.%0A%0ARather%20than%20using%20ClassBuilder%20directly%20to%20compile%20a%20class%2C%20use%20%60Class%20%3E%3E%20subclass%3AinstanceVariableNames%3Apackage%3A%60.') smalltalk.addMethod( -unescape('_superclass_subclass_'), +unescape('_addSubclassOf_named_instanceVariableNames_'), smalltalk.method({ -selector: unescape('superclass%3Asubclass%3A'), -category: 'class creation', -fn: function (aClass, aString){ +selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'), +category: 'private', +fn: function (aClass, aString, aCollection){ var self=this; -return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]); +smalltalk.addClass(aString, aClass, aCollection); + return smalltalk[aString]; +return self;}, +args: ["aClass", "aString", "aCollection"], +source: unescape('addSubclassOf%3A%20aClass%20named%3A%20aString%20instanceVariableNames%3A%20aCollection%0A%09%3Csmalltalk.addClass%28aString%2C%20aClass%2C%20aCollection%29%3B%0A%09%20%20%20%20return%20smalltalk%5BaString%5D%3E'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.ClassBuilder); + +smalltalk.addMethod( +unescape('_addSubclassOf_named_instanceVariableNames_package_'), +smalltalk.method({ +selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'), +category: 'private', +fn: function (aClass, aString, aCollection, packageName){ +var self=this; +smalltalk.addClass(aString, aClass, aCollection, packageName); + return smalltalk[aString]; return self;}, -args: ["aClass", "aString"], -source: unescape('superclass%3A%20aClass%20subclass%3A%20aString%0A%09%5Eself%20superclass%3A%20aClass%20subclass%3A%20aString%20instanceVariableNames%3A%20%27%27%20package%3A%20nil'), -messageSends: ["superclass:subclass:instanceVariableNames:package:"], +args: ["aClass", "aString", "aCollection", "packageName"], +source: unescape('addSubclassOf%3A%20aClass%20named%3A%20aString%20instanceVariableNames%3A%20aCollection%20package%3A%20packageName%0A%09%3Csmalltalk.addClass%28aString%2C%20aClass%2C%20aCollection%2C%20packageName%29%3B%0A%09%20%20%20%20return%20smalltalk%5BaString%5D%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.ClassBuilder); @@ -700,6 +718,28 @@ referencedClasses: [] }), smalltalk.ClassBuilder); +smalltalk.addMethod( +unescape('_copyClass_named_'), +smalltalk.method({ +selector: unescape('copyClass%3Anamed%3A'), +category: 'private', +fn: function (aClass, aString){ +var self=this; +var newClass=nil; +(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), aString, smalltalk.send(aClass, "_instanceVariableNames", []), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])])); +smalltalk.send(self, "_setupClass_", [newClass]); +smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(newClass, "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), newClass])]);return smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]); +smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(smalltalk.send(newClass, "_class", []), "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), smalltalk.send(newClass, "_class", [])])]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]); +smalltalk.send(self, "_setupClass_", [newClass]); +return newClass; +return self;}, +args: ["aClass", "aString"], +source: unescape('copyClass%3A%20aClass%20named%3A%20aString%0A%09%7C%20newClass%20%7C%0A%0A%09newClass%20%3A%3D%20self%20%0A%09%09addSubclassOf%3A%20aClass%20superclass%0A%09%09named%3A%20aString%20%0A%09%09instanceVariableNames%3A%20aClass%20instanceVariableNames%20%0A%09%09package%3A%20aClass%20package%20name.%0A%0A%09self%20setupClass%3A%20newClass.%0A%0A%09aClass%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09newClass%20addCompiledMethod%3A%20%28Compiler%20new%20load%3A%20each%20source%20forClass%3A%20newClass%29.%0A%09%09%28newClass%20methodDictionary%20at%3A%20each%20selector%29%20category%3A%20each%20category%5D.%0A%0A%09aClass%20class%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09newClass%20class%20addCompiledMethod%3A%20%28Compiler%20new%20load%3A%20each%20source%20forClass%3A%20newClass%20class%29.%0A%09%09%28newClass%20class%20methodDictionary%20at%3A%20each%20selector%29%20category%3A%20each%20category%5D.%0A%0A%09self%20setupClass%3A%20newClass.%0A%09%5EnewClass'), +messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "superclass", "instanceVariableNames", "name", "package", "setupClass:", "do:", "values", "methodDictionary", "addCompiledMethod:", "load:forClass:", "new", "source", "category:", "at:", "selector", "category", "class"], +referencedClasses: ["Compiler"] +}), +smalltalk.ClassBuilder); + smalltalk.addMethod( unescape('_instanceVariableNamesFor_'), smalltalk.method({ @@ -717,34 +757,33 @@ referencedClasses: [] smalltalk.ClassBuilder); smalltalk.addMethod( -unescape('_addSubclassOf_named_instanceVariableNames_'), +unescape('_setupClass_'), smalltalk.method({ -selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'), +selector: unescape('setupClass%3A'), category: 'private', -fn: function (aClass, aString, aCollection){ +fn: function (aClass){ var self=this; -smalltalk.addClass(aString, aClass, aCollection); - return smalltalk[aString]; +smalltalk.init(aClass);; return self;}, -args: ["aClass", "aString", "aCollection"], -source: unescape('addSubclassOf%3A%20aClass%20named%3A%20aString%20instanceVariableNames%3A%20aCollection%0A%09%3Csmalltalk.addClass%28aString%2C%20aClass%2C%20aCollection%29%3B%0A%09%20%20%20%20return%20smalltalk%5BaString%5D%3E'), +args: ["aClass"], +source: unescape('setupClass%3A%20aClass%0A%09%3Csmalltalk.init%28aClass%29%3B%3E'), messageSends: [], referencedClasses: [] }), smalltalk.ClassBuilder); smalltalk.addMethod( -unescape('_setupClass_'), +unescape('_superclass_subclass_'), smalltalk.method({ -selector: unescape('setupClass%3A'), -category: 'private', -fn: function (aClass){ +selector: unescape('superclass%3Asubclass%3A'), +category: 'class creation', +fn: function (aClass, aString){ var self=this; -smalltalk.init(aClass);; +return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]); return self;}, -args: ["aClass"], -source: unescape('setupClass%3A%20aClass%0A%09%3Csmalltalk.init%28aClass%29%3B%3E'), -messageSends: [], +args: ["aClass", "aString"], +source: unescape('superclass%3A%20aClass%20subclass%3A%20aString%0A%09%5Eself%20superclass%3A%20aClass%20subclass%3A%20aString%20instanceVariableNames%3A%20%27%27%20package%3A%20nil'), +messageSends: ["superclass:subclass:instanceVariableNames:package:"], referencedClasses: [] }), smalltalk.ClassBuilder); @@ -768,49 +807,48 @@ referencedClasses: [] }), smalltalk.ClassBuilder); + + +smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel-Classes'); +smalltalk.ClassCategoryReader.comment=unescape('ClassCategoryReader%20represents%20a%20mechanism%20for%20retrieving%20class%20descriptions%20stored%20on%20a%20file.') smalltalk.addMethod( -unescape('_addSubclassOf_named_instanceVariableNames_package_'), +unescape('_class_category_'), smalltalk.method({ -selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'), -category: 'private', -fn: function (aClass, aString, aCollection, packageName){ +selector: unescape('class%3Acategory%3A'), +category: 'accessing', +fn: function (aClass, aString){ var self=this; -smalltalk.addClass(aString, aClass, aCollection, packageName); - return smalltalk[aString]; +(self['@class']=aClass); +(self['@category']=aString); return self;}, -args: ["aClass", "aString", "aCollection", "packageName"], -source: unescape('addSubclassOf%3A%20aClass%20named%3A%20aString%20instanceVariableNames%3A%20aCollection%20package%3A%20packageName%0A%09%3Csmalltalk.addClass%28aString%2C%20aClass%2C%20aCollection%2C%20packageName%29%3B%0A%09%20%20%20%20return%20smalltalk%5BaString%5D%3E'), +args: ["aClass", "aString"], +source: unescape('class%3A%20aClass%20category%3A%20aString%0A%09class%20%3A%3D%20aClass.%0A%09category%20%3A%3D%20aString'), messageSends: [], referencedClasses: [] }), -smalltalk.ClassBuilder); +smalltalk.ClassCategoryReader); smalltalk.addMethod( -unescape('_copyClass_named_'), +unescape('_compileMethod_'), smalltalk.method({ -selector: unescape('copyClass%3Anamed%3A'), +selector: unescape('compileMethod%3A'), category: 'private', -fn: function (aClass, aString){ +fn: function (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", [])])); -smalltalk.send(self, "_setupClass_", [newClass]); -smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(newClass, "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), newClass])]);return smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]); -smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(smalltalk.send(newClass, "_class", []), "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), smalltalk.send(newClass, "_class", [])])]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]); -smalltalk.send(self, "_setupClass_", [newClass]); -return newClass; +var method=nil; +var compiler=nil; +(method=smalltalk.send((compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])), "_load_forClass_", [aString, self['@class']])); +smalltalk.send(method, "_category_", [self['@category']]); +smalltalk.send(self['@class'], "_addCompiledMethod_", [method]); +smalltalk.send(compiler, "_setupClass_", [self['@class']]); return self;}, -args: ["aClass", "aString"], -source: unescape('copyClass%3A%20aClass%20named%3A%20aString%0A%09%7C%20newClass%20%7C%0A%0A%09newClass%20%3A%3D%20self%20%0A%09%09addSubclassOf%3A%20aClass%20superclass%0A%09%09named%3A%20aString%20%0A%09%09instanceVariableNames%3A%20aClass%20instanceVariableNames%20%0A%09%09package%3A%20aClass%20package%20name.%0A%0A%09self%20setupClass%3A%20newClass.%0A%0A%09aClass%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09newClass%20addCompiledMethod%3A%20%28Compiler%20new%20load%3A%20each%20source%20forClass%3A%20newClass%29.%0A%09%09%28newClass%20methodDictionary%20at%3A%20each%20selector%29%20category%3A%20each%20category%5D.%0A%0A%09aClass%20class%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09newClass%20class%20addCompiledMethod%3A%20%28Compiler%20new%20load%3A%20each%20source%20forClass%3A%20newClass%20class%29.%0A%09%09%28newClass%20class%20methodDictionary%20at%3A%20each%20selector%29%20category%3A%20each%20category%5D.%0A%0A%09self%20setupClass%3A%20newClass.%0A%09%5EnewClass'), -messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "superclass", "instanceVariableNames", "name", "package", "setupClass:", "do:", "values", "methodDictionary", "addCompiledMethod:", "load:forClass:", "new", "source", "category:", "at:", "selector", "category", "class"], +args: ["aString"], +source: unescape('compileMethod%3A%20aString%0A%09%7C%20method%20compiler%20%7C%0A%09method%20%3A%3D%20%28compiler%20%3A%3D%20Compiler%20new%29%20load%3A%20aString%20forClass%3A%20class.%0A%09method%20category%3A%20category.%0A%09class%20addCompiledMethod%3A%20method.%0A%09compiler%20setupClass%3A%20class.'), +messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:", "setupClass:"], referencedClasses: ["Compiler"] }), -smalltalk.ClassBuilder); - - +smalltalk.ClassCategoryReader); -smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel-Classes'); -smalltalk.ClassCategoryReader.comment=unescape('ClassCategoryReader%20represents%20a%20mechanism%20for%20retrieving%20class%20descriptions%20stored%20on%20a%20file.') smalltalk.addMethod( unescape('_initialize'), smalltalk.method({ @@ -828,23 +866,6 @@ referencedClasses: ["ChunkParser"] }), smalltalk.ClassCategoryReader); -smalltalk.addMethod( -unescape('_class_category_'), -smalltalk.method({ -selector: unescape('class%3Acategory%3A'), -category: 'accessing', -fn: function (aClass, aString){ -var self=this; -(self['@class']=aClass); -(self['@category']=aString); -return self;}, -args: ["aClass", "aString"], -source: unescape('class%3A%20aClass%20category%3A%20aString%0A%09class%20%3A%3D%20aClass.%0A%09category%20%3A%3D%20aString'), -messageSends: [], -referencedClasses: [] -}), -smalltalk.ClassCategoryReader); - smalltalk.addMethod( unescape('_scanFrom_'), smalltalk.method({ @@ -862,25 +883,6 @@ referencedClasses: [] }), smalltalk.ClassCategoryReader); -smalltalk.addMethod( -unescape('_compileMethod_'), -smalltalk.method({ -selector: unescape('compileMethod%3A'), -category: 'private', -fn: function (aString){ -var self=this; -var method=nil; -(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self['@class']])); -smalltalk.send(method, "_category_", [self['@category']]); -smalltalk.send(self['@class'], "_addCompiledMethod_", [method]); -return self;}, -args: ["aString"], -source: unescape('compileMethod%3A%20aString%0A%09%7C%20method%20%7C%0A%09method%20%3A%3D%20Compiler%20new%20load%3A%20aString%20forClass%3A%20class.%0A%09method%20category%3A%20category.%0A%09class%20addCompiledMethod%3A%20method'), -messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:"], -referencedClasses: ["Compiler"] -}), -smalltalk.ClassCategoryReader); - smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel-Classes'); @@ -901,6 +903,23 @@ referencedClasses: [] }), smalltalk.ClassCommentReader); +smalltalk.addMethod( +unescape('_initialize'), +smalltalk.method({ +selector: unescape('initialize'), +category: 'initialization', +fn: function (){ +var self=this; +smalltalk.send(self, "_initialize", [], smalltalk.Object); +(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", [])); +return self;}, +args: [], +source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'), +messageSends: ["initialize", "new"], +referencedClasses: ["ChunkParser"] +}), +smalltalk.ClassCommentReader); + smalltalk.addMethod( unescape('_scanFrom_'), smalltalk.method({ @@ -919,23 +938,6 @@ referencedClasses: [] }), smalltalk.ClassCommentReader); -smalltalk.addMethod( -unescape('_initialize'), -smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', -fn: function (){ -var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.Object); -(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", [])); -return self;}, -args: [], -source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'), -messageSends: ["initialize", "new"], -referencedClasses: ["ChunkParser"] -}), -smalltalk.ClassCommentReader); - smalltalk.addMethod( unescape('_setComment_'), smalltalk.method({ @@ -954,3 +956,140 @@ smalltalk.ClassCommentReader); +smalltalk.addClass('ClassSorterNode', smalltalk.Object, ['theClass', 'level', 'nodes'], 'Kernel-Classes'); +smalltalk.addMethod( +unescape('_getNodesFrom_'), +smalltalk.method({ +selector: unescape('getNodesFrom%3A'), +category: 'accessing', +fn: function (aCollection){ +var self=this; +var children=nil; +var others=nil; +(children=[]); +(others=[]); +smalltalk.send(aCollection, "_do_", [(function(each){return ((($receiver = smalltalk.send(smalltalk.send(each, "_superclass", []), "__eq", [smalltalk.send(self, "_theClass", [])])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(children, "_add_", [each]);})() : (function(){return smalltalk.send(others, "_add_", [each]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return smalltalk.send(children, "_add_", [each]);}), (function(){return smalltalk.send(others, "_add_", [each]);})]));})]); +(self['@nodes']=smalltalk.send(children, "_collect_", [(function(each){return smalltalk.send((smalltalk.ClassSorterNode || ClassSorterNode), "_on_classes_level_", [each, others, ((($receiver = smalltalk.send(self, "_level", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})])); +return self;}, +args: ["aCollection"], +source: unescape('getNodesFrom%3A%20aCollection%0A%09%7C%20children%20others%20%7C%0A%09children%20%3A%3D%20%23%28%29.%0A%09others%20%3A%3D%20%23%28%29.%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%28each%20superclass%20%3D%20self%20theClass%29%0A%09%09%09ifTrue%3A%20%5Bchildren%20add%3A%20each%5D%0A%09%09%09ifFalse%3A%20%5Bothers%20add%3A%20each%5D%5D.%0A%09nodes%3A%3D%20children%20collect%3A%20%5B%3Aeach%20%7C%0A%09%09ClassSorterNode%20on%3A%20each%20classes%3A%20others%20level%3A%20self%20level%20+%201%5D'), +messageSends: ["do:", "ifTrue:ifFalse:", unescape("%3D"), "superclass", "theClass", "add:", "collect:", "on:classes:level:", unescape("+"), "level"], +referencedClasses: ["ClassSorterNode"] +}), +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_level'), +smalltalk.method({ +selector: unescape('level'), +category: 'accessing', +fn: function (){ +var self=this; +return self['@level']; +return self;}, +args: [], +source: unescape('level%0A%09%5Elevel'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_level_'), +smalltalk.method({ +selector: unescape('level%3A'), +category: 'accessing', +fn: function (anInteger){ +var self=this; +(self['@level']=anInteger); +return self;}, +args: ["anInteger"], +source: unescape('level%3A%20anInteger%0A%09level%20%3A%3D%20anInteger'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_nodes'), +smalltalk.method({ +selector: unescape('nodes'), +category: 'accessing', +fn: function (){ +var self=this; +return self['@nodes']; +return self;}, +args: [], +source: unescape('nodes%0A%09%5Enodes'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_theClass'), +smalltalk.method({ +selector: unescape('theClass'), +category: 'accessing', +fn: function (){ +var self=this; +return self['@theClass']; +return self;}, +args: [], +source: unescape('theClass%0A%09%5EtheClass'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_theClass_'), +smalltalk.method({ +selector: unescape('theClass%3A'), +category: 'accessing', +fn: function (aClass){ +var self=this; +(self['@theClass']=aClass); +return self;}, +args: ["aClass"], +source: unescape('theClass%3A%20aClass%0A%09theClass%20%3A%3D%20aClass'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.ClassSorterNode); + +smalltalk.addMethod( +unescape('_traverseClassesWith_'), +smalltalk.method({ +selector: unescape('traverseClassesWith%3A'), +category: 'visiting', +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]);})]); +return self;}, +args: ["aCollection"], +source: unescape('traverseClassesWith%3A%20aCollection%0A%09%22sort%20classes%20alphabetically%20Issue%20%23143%22%0A%0A%09aCollection%20add%3A%20self%20theClass.%0A%09%28self%20nodes%20sorted%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20theClass%20name%20%3C%3D%20b%20theClass%20name%20%5D%29%20do%3A%20%5B%3AaNode%20%7C%0A%09%09aNode%20traverseClassesWith%3A%20aCollection%20%5D.'), +messageSends: ["add:", "theClass", "do:", "sorted:", "nodes", unescape("%3C%3D"), "name", "traverseClassesWith:"], +referencedClasses: [] +}), +smalltalk.ClassSorterNode); + + +smalltalk.addMethod( +unescape('_on_classes_level_'), +smalltalk.method({ +selector: unescape('on%3Aclasses%3Alevel%3A'), +category: 'instance creation', +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;}, +args: ["aClass", "aCollection", "anInteger"], +source: unescape('on%3A%20aClass%20classes%3A%20aCollection%20level%3A%20anInteger%0A%09%5Eself%20new%0A%09%09theClass%3A%20aClass%3B%0A%09%09level%3A%20anInteger%3B%0A%09%09getNodesFrom%3A%20aCollection%3B%0A%09%09yourself'), +messageSends: ["theClass:", "level:", "getNodesFrom:", "yourself", "new"], +referencedClasses: [] +}), +smalltalk.ClassSorterNode.klass); + + diff --git a/amber/src/js/Kernel-Collections.deploy.js b/amber/src/js/Kernel-Collections.deploy.js index ebb1621f202..ff9981ceb09 100644 --- a/amber/src/js/Kernel-Collections.deploy.js +++ b/amber/src/js/Kernel-Collections.deploy.js @@ -12,34 +12,36 @@ return self;} smalltalk.Association); smalltalk.addMethod( -unescape('_key_'), +unescape('_key'), smalltalk.method({ -selector: unescape('key%3A'), -fn: function (aKey) { +selector: unescape('key'), +fn: function () { var self=this; -(self['@key']=aKey); +return self['@key']; return self;} }), smalltalk.Association); smalltalk.addMethod( -unescape('_key'), +unescape('_key_'), smalltalk.method({ -selector: unescape('key'), -fn: function () { +selector: unescape('key%3A'), +fn: function (aKey) { var self=this; -return self['@key']; +(self['@key']=aKey); return self;} }), smalltalk.Association); smalltalk.addMethod( -unescape('_value_'), +unescape('_storeOn_'), smalltalk.method({ -selector: unescape('value%3A'), -fn: function (aValue) { +selector: unescape('storeOn%3A'), +fn: function (aStream) { var self=this; -(self['@value']=aValue); +smalltalk.send(self['@key'], "_storeOn_", [aStream]); +smalltalk.send(aStream, "_nextPutAll_", [unescape("-%3E")]); +smalltalk.send(self['@value'], "_storeOn_", [aStream]); return self;} }), smalltalk.Association); @@ -56,14 +58,12 @@ return self;} smalltalk.Association); smalltalk.addMethod( -unescape('_storeOn_'), +unescape('_value_'), smalltalk.method({ -selector: unescape('storeOn%3A'), -fn: function (aStream) { +selector: unescape('value%3A'), +fn: function (aValue) { var self=this; -smalltalk.send(self['@key'], "_storeOn_", [aStream]); -smalltalk.send(aStream, "_nextPutAll_", [unescape("-%3E")]); -smalltalk.send(self['@value'], "_storeOn_", [aStream]); +(self['@value']=aValue); return self;} }), smalltalk.Association); @@ -81,139 +81,158 @@ return self;} smalltalk.Association.klass); -smalltalk.addClass('Stream', smalltalk.Object, ['collection', 'position', 'streamSize'], 'Kernel-Collections'); +smalltalk.addClass('Collection', smalltalk.Object, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_collection'), +unescape('__comma'), smalltalk.method({ -selector: unescape('collection'), -fn: function () { +selector: unescape('%2C'), +fn: function (aCollection) { var self=this; -return self['@collection']; +return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_copy", [])); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_setCollection_'), +unescape('_add_'), smalltalk.method({ -selector: unescape('setCollection%3A'), +selector: unescape('add%3A'), +fn: function (anObject) { +var self=this; +smalltalk.send(self, "_subclassResponsibility", []); +return self;} +}), +smalltalk.Collection); + +smalltalk.addMethod( +unescape('_addAll_'), +smalltalk.method({ +selector: unescape('addAll%3A'), fn: function (aCollection) { var self=this; -(self['@collection']=aCollection); +smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(self, "_add_", [each]);})]); +return aCollection; return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_position'), +unescape('_asArray'), smalltalk.method({ -selector: unescape('position'), +selector: unescape('asArray'), fn: function () { var self=this; -return (($receiver = self['@position']) == nil || $receiver == undefined) ? (function(){return (self['@position']=(0));})() : $receiver; +return smalltalk.send((smalltalk.Array || Array), "_withAll_", [self]); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_position_'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('position%3A'), -fn: function (anInteger) { +selector: unescape('asJSON'), +fn: function (){ var self=this; -(self['@position']=anInteger); +return smalltalk.send(smalltalk.send(self, "_asArray", []), "_collect_", [(function(each){return smalltalk.send(each, "_asJSON", []);})]); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_streamSize'), +unescape('_asOrderedCollection'), smalltalk.method({ -selector: unescape('streamSize'), +selector: unescape('asOrderedCollection'), fn: function () { var self=this; -return self['@streamSize']; +return smalltalk.send(self, "_asArray", []); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_setStreamSize_'), +unescape('_asSet'), smalltalk.method({ -selector: unescape('setStreamSize%3A'), -fn: function (anInteger) { +selector: unescape('asSet'), +fn: function () { var self=this; -(self['@streamSize']=anInteger); +return smalltalk.send((smalltalk.Set || Set), "_withAll_", [self]); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_contents'), +unescape('_collect_'), smalltalk.method({ -selector: unescape('contents'), -fn: function () { +selector: unescape('collect%3A'), +fn: function (aBlock) { var self=this; -return smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [(1), smalltalk.send(self, "_streamSize", [])]); +var newCollection=nil; +(newCollection=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_do_", [(function(each){return smalltalk.send(newCollection, "_add_", [smalltalk.send(aBlock, "_value_", [each])]);})]); +return newCollection; return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_size'), +unescape('_copyWith_'), smalltalk.method({ -selector: unescape('size'), -fn: function () { +selector: unescape('copyWith%3A'), +fn: function (anObject) { var self=this; -return smalltalk.send(self, "_streamSize", []); +return (function($rec){smalltalk.send($rec, "_add_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_copy", [])); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_reset'), +unescape('_copyWithAll_'), smalltalk.method({ -selector: unescape('reset'), -fn: function () { +selector: unescape('copyWithAll%3A'), +fn: function (aCollection) { var self=this; -smalltalk.send(self, "_position_", [(0)]); +return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_copy", [])); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_close'), +unescape('_copyWithoutAll_'), smalltalk.method({ -selector: unescape('close'), -fn: function () { +selector: unescape('copyWithoutAll%3A'), +fn: function (aCollection) { var self=this; - +return smalltalk.send(self, "_reject_", [(function(each){return smalltalk.send(aCollection, "_includes_", [each]);})]); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_flush'), +unescape('_detect_'), smalltalk.method({ -selector: unescape('flush'), -fn: function () { +selector: unescape('detect%3A'), +fn: function (aBlock) { var self=this; - +return smalltalk.send(self, "_detect_ifNone_", [aBlock, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_resetContents'), +unescape('_detect_ifNone_'), smalltalk.method({ -selector: unescape('resetContents'), -fn: function () { +selector: unescape('detect%3AifNone%3A'), +fn: function (aBlock, anotherBlock) { var self=this; -smalltalk.send(self, "_reset", []); -smalltalk.send(self, "_setStreamSize_", [(0)]); + + for(var i = 0; i < self.length; i++) + if(aBlock(self[i])) + return self[i]; + return anotherBlock(); + ; return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( unescape('_do_'), @@ -221,216 +240,197 @@ smalltalk.method({ selector: unescape('do%3A'), fn: function (aBlock) { var self=this; -(function(){while(!(function(){return smalltalk.send(self, "_atEnd", []);})()) {(function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_next", [])]);})()}})(); +for(var i=0;i<self.length;i++){aBlock(self[i]);}; return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_setToEnd'), +unescape('_do_separatedBy_'), smalltalk.method({ -selector: unescape('setToEnd'), -fn: function () { +selector: unescape('do%3AseparatedBy%3A'), +fn: function (aBlock, anotherBlock) { var self=this; -smalltalk.send(self, "_position_", [smalltalk.send(self, "_size", [])]); +var first=nil; +(first=true); +smalltalk.send(self, "_do_", [(function(each){((($receiver = first).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (first=false);})() : (function(){return smalltalk.send(anotherBlock, "_value", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (first=false);}), (function(){return smalltalk.send(anotherBlock, "_value", []);})]));return smalltalk.send(aBlock, "_value_", [each]);})]); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_skip_'), +unescape('_errorNotFound'), smalltalk.method({ -selector: unescape('skip%3A'), -fn: function (anInteger) { +selector: unescape('errorNotFound'), +fn: function () { var self=this; -smalltalk.send(self, "_position_", [smalltalk.send(((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +anInteger : smalltalk.send($receiver, "__plus", [anInteger])), "_min_max_", [smalltalk.send(self, "_size", []), (0)])]); +smalltalk.send(self, "_error_", ["Object is not in the collection"]); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_next'), +unescape('_ifEmpty_'), smalltalk.method({ -selector: unescape('next'), -fn: function () { +selector: unescape('ifEmpty%3A'), +fn: function (aBlock){ var self=this; -return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return nil;})() : (function(){smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);return smalltalk.send(self['@collection'], "_at_", [smalltalk.send(self, "_position", [])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return nil;}), (function(){smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);return smalltalk.send(self['@collection'], "_at_", [smalltalk.send(self, "_position", [])]);})])); +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;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_next_'), +unescape('_ifNotEmpty_'), smalltalk.method({ -selector: unescape('next%3A'), -fn: function (anInteger) { +selector: unescape('ifNotEmpty%3A'), +fn: function (aBlock) { var self=this; -var tempCollection=nil; -(tempCollection=smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_class", []), "_new", [])); -smalltalk.send(anInteger, "_timesRepeat_", [(function(){return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(tempCollection, "_add_", [smalltalk.send(self, "_next", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(tempCollection, "_add_", [smalltalk.send(self, "_next", [])]);})]));})]); -return tempCollection; +smalltalk.send(smalltalk.send(self, "_notEmpty", []), "_ifTrue_", [aBlock]); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_nextPut_'), +unescape('_includes_'), smalltalk.method({ -selector: unescape('nextPut%3A'), +selector: unescape('includes%3A'), fn: function (anObject) { var self=this; -smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]); -smalltalk.send(smalltalk.send(self, "_collection", []), "_at_put_", [smalltalk.send(self, "_position", []), anObject]); -smalltalk.send(self, "_setStreamSize_", [smalltalk.send(smalltalk.send(self, "_streamSize", []), "_max_", [smalltalk.send(self, "_position", [])])]); + + var i = self.length; + while (i--) { + if (smalltalk.send(self[i], "__eq", [anObject])) {return true;} + } + return false + ; return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_nextPutAll_'), +unescape('_inject_into_'), smalltalk.method({ -selector: unescape('nextPutAll%3A'), -fn: function (aCollection) { +selector: unescape('inject%3Ainto%3A'), +fn: function (anObject, aBlock) { var self=this; -smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(self, "_nextPut_", [each]);})]); +var result=nil; +(result=anObject); +smalltalk.send(self, "_do_", [(function(each){return (result=smalltalk.send(aBlock, "_value_value_", [result, each]));})]); +return result; return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_peek'), +unescape('_isEmpty'), smalltalk.method({ -selector: unescape('peek'), +selector: unescape('isEmpty'), fn: function () { var self=this; -return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_collection", []), "_at_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_collection", []), "_at_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})])); -return self;} -}), -smalltalk.Stream); - -smalltalk.addMethod( -unescape('_atEnd'), -smalltalk.method({ -selector: unescape('atEnd'), -fn: function () { -var self=this; -return smalltalk.send(smalltalk.send(self, "_position", []), "__eq", [smalltalk.send(self, "_size", [])]); +return smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [(0)]); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_atStart'), +unescape('_notEmpty'), smalltalk.method({ -selector: unescape('atStart'), +selector: unescape('notEmpty'), fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_position", []), "__eq", [(0)]); +return smalltalk.send(smalltalk.send(self, "_isEmpty", []), "_not", []); return self;} }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_isEmpty'), +unescape('_readStream'), smalltalk.method({ -selector: unescape('isEmpty'), +selector: unescape('readStream'), fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [(0)]); -return self;} -}), -smalltalk.Stream); - - -smalltalk.addMethod( -unescape('_on_'), -smalltalk.method({ -selector: unescape('on%3A'), -fn: function (aCollection) { -var self=this; -return (function($rec){smalltalk.send($rec, "_setCollection_", [aCollection]);smalltalk.send($rec, "_setStreamSize_", [smalltalk.send(aCollection, "_size", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return smalltalk.send(self, "_stream", []); return self;} }), -smalltalk.Stream.klass); - +smalltalk.Collection); -smalltalk.addClass('RegularExpression', smalltalk.Object, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_compile_'), +unescape('_reject_'), smalltalk.method({ -selector: unescape('compile%3A'), -fn: function (aString) { +selector: unescape('reject%3A'), +fn: function (aBlock) { var self=this; -return self.compile(aString); +return smalltalk.send(self, "_select_", [(function(each){return smalltalk.send(smalltalk.send(aBlock, "_value_", [each]), "__eq", [false]);})]); return self;} }), -smalltalk.RegularExpression); +smalltalk.Collection); smalltalk.addMethod( -unescape('_exec_'), +unescape('_remove_'), smalltalk.method({ -selector: unescape('exec%3A'), -fn: function (aString) { +selector: unescape('remove%3A'), +fn: function (anObject) { var self=this; -return self.exec(aString) || nil; +return smalltalk.send(self, "_remove_ifAbsent_", [anObject, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); return self;} }), -smalltalk.RegularExpression); +smalltalk.Collection); smalltalk.addMethod( -unescape('_test_'), +unescape('_remove_ifAbsent_'), smalltalk.method({ -selector: unescape('test%3A'), -fn: function (aString) { +selector: unescape('remove%3AifAbsent%3A'), +fn: function (anObject, aBlock) { var self=this; -return self.test(aString); +smalltalk.send(self, "_subclassResponsibility", []); return self;} }), -smalltalk.RegularExpression); - +smalltalk.Collection); smalltalk.addMethod( -unescape('_fromString_flag_'), +unescape('_select_'), smalltalk.method({ -selector: unescape('fromString%3Aflag%3A'), -fn: function (aString, anotherString) { +selector: unescape('select%3A'), +fn: function (aBlock) { var self=this; -return new RegExp(aString, anotherString); +var stream=nil; +(stream=smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_new", []), "_writeStream", [])); +smalltalk.send(self, "_do_", [(function(each){return ((($receiver = smalltalk.send(aBlock, "_value_", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(stream, "_nextPut_", [each]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(stream, "_nextPut_", [each]);})]));})]); +return smalltalk.send(stream, "_contents", []); return self;} }), -smalltalk.RegularExpression.klass); +smalltalk.Collection); smalltalk.addMethod( -unescape('_fromString_'), +unescape('_size'), smalltalk.method({ -selector: unescape('fromString%3A'), -fn: function (aString) { +selector: unescape('size'), +fn: function () { var self=this; -return smalltalk.send(self, "_fromString_flag_", [aString, ""]); +smalltalk.send(self, "_subclassResponsibility", []); return self;} }), -smalltalk.RegularExpression.klass); - +smalltalk.Collection); -smalltalk.addClass('Collection', smalltalk.Object, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_size'), +unescape('_stream'), smalltalk.method({ -selector: unescape('size'), +selector: unescape('stream'), fn: function () { var self=this; -smalltalk.send(self, "_subclassResponsibility", []); +return smalltalk.send(smalltalk.send(self, "_streamClass", []), "_on_", [self]); return self;} }), smalltalk.Collection); smalltalk.addMethod( -unescape('_readStream'), +unescape('_streamClass'), smalltalk.method({ -selector: unescape('readStream'), +selector: unescape('streamClass'), fn: function () { var self=this; -return smalltalk.send(self, "_stream", []); +return smalltalk.send(smalltalk.send(self, "_class", []), "_streamClass", []); return self;} }), smalltalk.Collection); @@ -446,16 +446,17 @@ return self;} }), smalltalk.Collection); + smalltalk.addMethod( -unescape('_stream'), +unescape('_new_'), smalltalk.method({ -selector: unescape('stream'), -fn: function () { +selector: unescape('new%3A'), +fn: function (anInteger) { var self=this; -return smalltalk.send(smalltalk.send(self, "_streamClass", []), "_on_", [self]); +return smalltalk.send(self, "_new", []); return self;} }), -smalltalk.Collection); +smalltalk.Collection.klass); smalltalk.addMethod( unescape('_streamClass'), @@ -463,607 +464,655 @@ smalltalk.method({ selector: unescape('streamClass'), fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_class", []), "_streamClass", []); +return (smalltalk.Stream || Stream); return self;} }), -smalltalk.Collection); +smalltalk.Collection.klass); smalltalk.addMethod( -unescape('_add_'), +unescape('_with_'), smalltalk.method({ -selector: unescape('add%3A'), +selector: unescape('with%3A'), fn: function (anObject) { var self=this; -smalltalk.send(self, "_subclassResponsibility", []); +return (function($rec){smalltalk.send($rec, "_add_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;} }), -smalltalk.Collection); +smalltalk.Collection.klass); smalltalk.addMethod( -unescape('_addAll_'), +unescape('_with_with_'), smalltalk.method({ -selector: unescape('addAll%3A'), -fn: function (aCollection) { +selector: unescape('with%3Awith%3A'), +fn: function (anObject, anotherObject) { var self=this; -smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(self, "_add_", [each]);})]); -return aCollection; +return (function($rec){smalltalk.send($rec, "_add_", [anObject]);smalltalk.send($rec, "_add_", [anotherObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;} }), -smalltalk.Collection); +smalltalk.Collection.klass); smalltalk.addMethod( -unescape('__comma'), +unescape('_with_with_with_'), smalltalk.method({ -selector: unescape('%2C'), -fn: function (aCollection) { +selector: unescape('with%3Awith%3Awith%3A'), +fn: function (firstObject, secondObject, thirdObject) { var self=this; -return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_copy", [])); +return (function($rec){smalltalk.send($rec, "_add_", [firstObject]);smalltalk.send($rec, "_add_", [secondObject]);smalltalk.send($rec, "_add_", [thirdObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;} }), -smalltalk.Collection); +smalltalk.Collection.klass); smalltalk.addMethod( -unescape('_copyWith_'), +unescape('_withAll_'), smalltalk.method({ -selector: unescape('copyWith%3A'), -fn: function (anObject) { +selector: unescape('withAll%3A'), +fn: function (aCollection) { var self=this; -return (function($rec){smalltalk.send($rec, "_add_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_copy", [])); +return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;} }), -smalltalk.Collection); +smalltalk.Collection.klass); + +smalltalk.addClass('HashedCollection', smalltalk.Collection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_copyWithAll_'), +unescape('__comma'), smalltalk.method({ -selector: unescape('copyWithAll%3A'), +selector: unescape('%2C'), fn: function (aCollection) { var self=this; -return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_copy", [])); +smalltalk.send(self, "_shouldNotImplement", []); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_asArray'), +unescape('__eq'), smalltalk.method({ -selector: unescape('asArray'), -fn: function () { +selector: unescape('%3D'), +fn: function (aHashedCollection) { var self=this; -return smalltalk.send((smalltalk.Array || Array), "_withAll_", [self]); -return self;} +try{((($receiver = smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aHashedCollection, "_class", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); +((($receiver = smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [smalltalk.send(aHashedCollection, "_size", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); +(function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return smalltalk.send(smalltalk.send(self, "_associations", []), "__eq", [smalltalk.send(aHashedCollection, "_associations", [])])}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_do_'), +unescape('_add_'), smalltalk.method({ -selector: unescape('do%3A'), -fn: function (aBlock) { +selector: unescape('add%3A'), +fn: function (anAssociation) { var self=this; -for(var i=0;i<self.length;i++){aBlock(self[i]);}; +smalltalk.send(self, "_at_put_", [smalltalk.send(anAssociation, "_key", []), smalltalk.send(anAssociation, "_value", [])]); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_collect_'), +unescape('_addAll_'), smalltalk.method({ -selector: unescape('collect%3A'), -fn: function (aBlock) { +selector: unescape('addAll%3A'), +fn: function (aHashedCollection) { var self=this; -var newCollection=nil; -(newCollection=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_do_", [(function(each){return smalltalk.send(newCollection, "_add_", [smalltalk.send(aBlock, "_value_", [each])]);})]); -return newCollection; +smalltalk.send(self, "_addAll_", [smalltalk.send(aHashedCollection, "_associations", [])], smalltalk.Collection); +return aHashedCollection; return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_detect_'), +unescape('_asDictionary'), smalltalk.method({ -selector: unescape('detect%3A'), -fn: function (aBlock) { +selector: unescape('asDictionary'), +fn: function () { var self=this; -return smalltalk.send(self, "_detect_ifNone_", [aBlock, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); +return smalltalk.send((smalltalk.Dictionary || Dictionary), "_fromPairs_", [smalltalk.send(self, "_associations", [])]); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_detect_ifNone_'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('detect%3AifNone%3A'), -fn: function (aBlock, anotherBlock) { +selector: unescape('asJSON'), +fn: function (){ var self=this; - - for(var i = 0; i < self.length; i++) - if(aBlock(self[i])) - return self[i]; - return anotherBlock(); - ; +var c=nil; +(c=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(c, "_at_put_", [key, smalltalk.send(value, "_asJSON", [])]);})]); +return c; return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_do_separatedBy_'), +unescape('_associations'), smalltalk.method({ -selector: unescape('do%3AseparatedBy%3A'), -fn: function (aBlock, anotherBlock) { +selector: unescape('associations'), +fn: function () { var self=this; -var first=nil; -(first=true); -smalltalk.send(self, "_do_", [(function(each){((($receiver = first).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (first=false);})() : (function(){return smalltalk.send(anotherBlock, "_value", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (first=false);}), (function(){return smalltalk.send(anotherBlock, "_value", []);})]));return smalltalk.send(aBlock, "_value_", [each]);})]); +var associations=nil; +(associations=[]); +smalltalk.send(smalltalk.send(self, "_keys", []), "_do_", [(function(each){return smalltalk.send(associations, "_add_", [smalltalk.send((smalltalk.Association || Association), "_key_value_", [each, smalltalk.send(self, "_at_", [each])])]);})]); +return associations; return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_inject_into_'), +unescape('_associationsDo_'), smalltalk.method({ -selector: unescape('inject%3Ainto%3A'), -fn: function (anObject, aBlock) { +selector: unescape('associationsDo%3A'), +fn: function (aBlock) { var self=this; -var result=nil; -(result=anObject); -smalltalk.send(self, "_do_", [(function(each){return (result=smalltalk.send(aBlock, "_value_value_", [result, each]));})]); -return result; +smalltalk.send(smalltalk.send(self, "_associations", []), "_do_", [aBlock]); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_reject_'), +unescape('_at_'), smalltalk.method({ -selector: unescape('reject%3A'), -fn: function (aBlock) { +selector: unescape('at%3A'), +fn: function (aKey) { var self=this; -return smalltalk.send(self, "_select_", [(function(each){return smalltalk.send(smalltalk.send(aBlock, "_value_", [each]), "__eq", [false]);})]); +return smalltalk.send(self, "_at_ifAbsent_", [aKey, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_select_'), +unescape('_at_ifAbsent_'), smalltalk.method({ -selector: unescape('select%3A'), -fn: function (aBlock) { +selector: unescape('at%3AifAbsent%3A'), +fn: function (aKey, aBlock) { var self=this; -var stream=nil; -(stream=smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_new", []), "_writeStream", [])); -smalltalk.send(self, "_do_", [(function(each){return ((($receiver = smalltalk.send(aBlock, "_value_", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(stream, "_nextPut_", [each]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(stream, "_nextPut_", [each]);})]));})]); -return smalltalk.send(stream, "_contents", []); +return smalltalk.send(smalltalk.send(self, "_includesKey_", [aKey]), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_basicAt_", [aKey]);}), aBlock]); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_errorNotFound'), +unescape('_at_ifAbsentPut_'), smalltalk.method({ -selector: unescape('errorNotFound'), -fn: function () { +selector: unescape('at%3AifAbsentPut%3A'), +fn: function (aKey, aBlock) { var self=this; -smalltalk.send(self, "_error_", ["Object is not in the collection"]); +return smalltalk.send(self, "_at_ifAbsent_", [aKey, (function(){return smalltalk.send(self, "_at_put_", [aKey, smalltalk.send(aBlock, "_value", [])]);})]); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_includes_'), +unescape('_at_ifPresent_'), smalltalk.method({ -selector: unescape('includes%3A'), -fn: function (anObject) { +selector: unescape('at%3AifPresent%3A'), +fn: function (aKey, aBlock) { var self=this; +return (($receiver = smalltalk.send(self, "_basicAt_", [aKey])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_at_", [aKey])]);})() : nil; +return self;} +}), +smalltalk.HashedCollection); - var i = self.length; - while (i--) { - if (smalltalk.send(self[i], "__eq", [anObject])) {return true;} - } - return false - ; +smalltalk.addMethod( +unescape('_at_ifPresent_ifAbsent_'), +smalltalk.method({ +selector: unescape('at%3AifPresent%3AifAbsent%3A'), +fn: function (aKey, aBlock, anotherBlock) { +var self=this; +return smalltalk.send(smalltalk.send(self, "_basicAt_", [aKey]), "_ifNil_ifNotNil_", [anotherBlock, (function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_at_", [aKey])]);})]); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_notEmpty'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('notEmpty'), -fn: function () { +selector: unescape('at%3Aput%3A'), +fn: function (aKey, aValue) { var self=this; -return smalltalk.send(smalltalk.send(self, "_isEmpty", []), "_not", []); +return smalltalk.send(self, "_basicAt_put_", [aKey, aValue]); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_isEmpty'), +unescape('_collect_'), smalltalk.method({ -selector: unescape('isEmpty'), -fn: function () { +selector: unescape('collect%3A'), +fn: function (aBlock) { var self=this; -return smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [(0)]); +var newDict=nil; +(newDict=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(newDict, "_at_put_", [key, smalltalk.send(aBlock, "_value_", [value])]);})]); +return newDict; return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_remove_'), +unescape('_copyFrom_to_'), smalltalk.method({ -selector: unescape('remove%3A'), -fn: function (anObject) { +selector: unescape('copyFrom%3Ato%3A'), +fn: function (anIndex, anotherIndex) { var self=this; -return smalltalk.send(self, "_remove_ifAbsent_", [anObject, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); +smalltalk.send(self, "_shouldNotImplement", []); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_asSet'), +unescape('_deepCopy'), smalltalk.method({ -selector: unescape('asSet'), +selector: unescape('deepCopy'), fn: function () { var self=this; -return smalltalk.send((smalltalk.Set || Set), "_withAll_", [self]); +var copy=nil; +(copy=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(copy, "_at_put_", [smalltalk.send(each, "_key", []), smalltalk.send(smalltalk.send(each, "_value", []), "_deepCopy", [])]);})]); +return copy; return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_ifNotEmpty_'), +unescape('_detect_ifNone_'), smalltalk.method({ -selector: unescape('ifNotEmpty%3A'), -fn: function (aBlock) { +selector: unescape('detect%3AifNone%3A'), +fn: function (aBlock, anotherBlock) { var self=this; -smalltalk.send(smalltalk.send(self, "_notEmpty", []), "_ifTrue_", [aBlock]); +return smalltalk.send(smalltalk.send(self, "_values", []), "_detect_ifNone_", [aBlock, anotherBlock]); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_ifEmpty_'), +unescape('_do_'), smalltalk.method({ -selector: unescape('ifEmpty%3A'), -fn: function (aBlock){ +selector: unescape('do%3A'), +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;})])); +smalltalk.send(smalltalk.send(self, "_values", []), "_do_", [aBlock]); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_copyWithoutAll_'), +unescape('_includes_'), smalltalk.method({ -selector: unescape('copyWithoutAll%3A'), -fn: function (aCollection) { +selector: unescape('includes%3A'), +fn: function (anObject) { var self=this; -return smalltalk.send(self, "_reject_", [(function(each){return smalltalk.send(aCollection, "_includes_", [each]);})]); +return smalltalk.send(smalltalk.send(self, "_values", []), "_includes_", [anObject]); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_remove_ifAbsent_'), +unescape('_includesKey_'), smalltalk.method({ -selector: unescape('remove%3AifAbsent%3A'), -fn: function (anObject, aBlock) { +selector: unescape('includesKey%3A'), +fn: function (aKey) { var self=this; -smalltalk.send(self, "_subclassResponsibility", []); +return self.hasOwnProperty(aKey); return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_asOrderedCollection'), +unescape('_keys'), smalltalk.method({ -selector: unescape('asOrderedCollection'), +selector: unescape('keys'), fn: function () { var self=this; -return smalltalk.send(self, "_asArray", []); + + var keys = []; + for(var i in self) { + if(self.hasOwnProperty(i)) { + keys.push(i); + } + }; + return keys; + ; return self;} }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_keysAndValuesDo_'), smalltalk.method({ -selector: unescape('asJSON'), -fn: function (){ +selector: unescape('keysAndValuesDo%3A'), +fn: function (aBlock) { var self=this; -return smalltalk.send(smalltalk.send(self, "_asArray", []), "_collect_", [(function(each){return smalltalk.send(each, "_asJSON", []);})]); +smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(aBlock, "_value_value_", [smalltalk.send(each, "_key", []), smalltalk.send(each, "_value", [])]);})]); return self;} }), -smalltalk.Collection); - +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_streamClass'), +unescape('_printString'), smalltalk.method({ -selector: unescape('streamClass'), +selector: unescape('printString'), fn: function () { var self=this; -return (smalltalk.Stream || Stream); +return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(aStream){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Collection)]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);})(aStream);smalltalk.send(smalltalk.send(self, "_associations", []), "_do_separatedBy_", [(function(anAssociation){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(anAssociation, "_key", []), "_printString", [])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%20-%3E%20")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(anAssociation, "_value", []), "_printString", [])]);})(aStream);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%20%2C%20")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [unescape("%29")]);})]); return self;} }), -smalltalk.Collection.klass); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_with_'), +unescape('_remove_ifAbsent_'), smalltalk.method({ -selector: unescape('with%3A'), -fn: function (anObject) { +selector: unescape('remove%3AifAbsent%3A'), +fn: function (aKey, aBlock) { var self=this; -return (function($rec){smalltalk.send($rec, "_add_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return smalltalk.send(self, "_removeKey_ifAbsent_", [aKey, aBlock]); return self;} }), -smalltalk.Collection.klass); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_with_with_'), +unescape('_removeKey_'), smalltalk.method({ -selector: unescape('with%3Awith%3A'), -fn: function (anObject, anotherObject) { +selector: unescape('removeKey%3A'), +fn: function (aKey){ var self=this; -return (function($rec){smalltalk.send($rec, "_add_", [anObject]);smalltalk.send($rec, "_add_", [anotherObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return smalltalk.send(self, "_remove_", [aKey]); return self;} }), -smalltalk.Collection.klass); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_with_with_with_'), +unescape('_removeKey_ifAbsent_'), smalltalk.method({ -selector: unescape('with%3Awith%3Awith%3A'), -fn: function (firstObject, secondObject, thirdObject) { +selector: unescape('removeKey%3AifAbsent%3A'), +fn: function (aKey, aBlock) { var self=this; -return (function($rec){smalltalk.send($rec, "_add_", [firstObject]);smalltalk.send($rec, "_add_", [secondObject]);smalltalk.send($rec, "_add_", [thirdObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return ((($receiver = smalltalk.send(self, "_includesKey_", [aKey])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(aBlock, "_value", []);})() : (function(){return smalltalk.send(self, "_basicDelete_", [aKey]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(aBlock, "_value", []);}), (function(){return smalltalk.send(self, "_basicDelete_", [aKey]);})])); return self;} }), -smalltalk.Collection.klass); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_withAll_'), +unescape('_select_'), smalltalk.method({ -selector: unescape('withAll%3A'), -fn: function (aCollection) { +selector: unescape('select%3A'), +fn: function (aBlock) { var self=this; -return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +var newDict=nil; +(newDict=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return ((($receiver = smalltalk.send(aBlock, "_value_", [value])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(newDict, "_at_put_", [key, value]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(newDict, "_at_put_", [key, value]);})]));})]); +return newDict; return self;} }), -smalltalk.Collection.klass); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_new_'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('new%3A'), -fn: function (anInteger) { +selector: unescape('shallowCopy'), +fn: function () { var self=this; -return smalltalk.send(self, "_new", []); +var copy=nil; +(copy=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(copy, "_at_put_", [smalltalk.send(each, "_key", []), smalltalk.send(each, "_value", [])]);})]); +return copy; return self;} }), -smalltalk.Collection.klass); - +smalltalk.HashedCollection); -smalltalk.addClass('SequenceableCollection', smalltalk.Collection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_at_'), +unescape('_size'), smalltalk.method({ -selector: unescape('at%3A'), -fn: function (anIndex) { +selector: unescape('size'), +fn: function () { var self=this; -return smalltalk.send(self, "_at_ifAbsent_", [anIndex, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); +return smalltalk.send(smalltalk.send(self, "_keys", []), "_size", []); return self;} }), -smalltalk.SequenceableCollection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_at_ifAbsent_'), +unescape('_storeOn_'), smalltalk.method({ -selector: unescape('at%3AifAbsent%3A'), -fn: function (anIndex, aBlock) { +selector: unescape('storeOn%3A'), +fn: function (aStream) { var self=this; -smalltalk.send(self, "_subclassResponsibility", []); +smalltalk.send(aStream, "_nextPutAll_", [unescape("%23%7B")]); +smalltalk.send(smalltalk.send(self, "_associations", []), "_do_separatedBy_", [(function(each){return smalltalk.send(each, "_storeOn_", [aStream]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [". "]);})]); +smalltalk.send(aStream, "_nextPutAll_", [unescape("%7D")]); return self;} }), -smalltalk.SequenceableCollection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_values'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), -fn: function (anIndex, anObject) { +selector: unescape('values'), +fn: function () { var self=this; -smalltalk.send(self, "_subclassResponsibility", []); +return smalltalk.send(smalltalk.send(self, "_keys", []), "_collect_", [(function(each){return smalltalk.send(self, "_at_", [each]);})]); return self;} }), -smalltalk.SequenceableCollection); +smalltalk.HashedCollection); + smalltalk.addMethod( -unescape('_copyFrom_to_'), +unescape('_fromPairs_'), smalltalk.method({ -selector: unescape('copyFrom%3Ato%3A'), -fn: function (anIndex, anotherIndex) { +selector: unescape('fromPairs%3A'), +fn: function (aCollection) { var self=this; -var range=nil; -var newCollection=nil; -(range=smalltalk.send(anIndex, "_to_", [anotherIndex])); -(newCollection=smalltalk.send(smalltalk.send(self, "_class", []), "_new_", [smalltalk.send(range, "_size", [])])); -smalltalk.send(range, "_withIndexDo_", [(function(each, i){return smalltalk.send(newCollection, "_at_put_", [i, smalltalk.send(self, "_at_", [each])]);})]); -return newCollection; +var dict=nil; +(dict=smalltalk.send(self, "_new", [])); +smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(dict, "_add_", [each]);})]); +return dict; return self;} }), -smalltalk.SequenceableCollection); +smalltalk.HashedCollection.klass); + +smalltalk.addClass('Dictionary', smalltalk.HashedCollection, ['keys', 'values'], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_first'), +unescape('_asHashedCollection'), smalltalk.method({ -selector: unescape('first'), +selector: unescape('asHashedCollection'), fn: function () { var self=this; -return smalltalk.send(self, "_at_", [(1)]); +return smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_fromPairs_", [smalltalk.send(self, "_associations", [])]); return self;} }), -smalltalk.SequenceableCollection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_fourth'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('fourth'), -fn: function () { +selector: unescape('asJSON'), +fn: function (){ var self=this; -return smalltalk.send(self, "_at_", [(4)]); +return smalltalk.send(smalltalk.send(self, "_asHashedCollection", []), "_asJSON", []); return self;} }), -smalltalk.SequenceableCollection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_last'), +unescape('_at_ifAbsent_'), smalltalk.method({ -selector: unescape('last'), -fn: function () { +selector: unescape('at%3AifAbsent%3A'), +fn: function (aKey, aBlock) { var self=this; -return smalltalk.send(self, "_at_", [smalltalk.send(self, "_size", [])]); + + var index; + for(var i=0;i<self['@keys'].length;i++){ + if(self['@keys'][i].__eq(aKey)) {index = i;} + }; + if(typeof index === 'undefined') { + return aBlock(); + } else { + return self['@values'][index]; + } + ; return self;} }), -smalltalk.SequenceableCollection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_second'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('second'), -fn: function () { +selector: unescape('at%3Aput%3A'), +fn: function (aKey, aValue) { var self=this; -return smalltalk.send(self, "_at_", [(2)]); + + var index = self['@keys'].indexOf(aKey); + if(index === -1) { + self['@values'].push(aValue); + self['@keys'].push(aKey); + } else { + self['@values'][index] = aValue; + }; + + return aValue; + ; return self;} }), -smalltalk.SequenceableCollection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_third'), +unescape('_includesKey_'), smalltalk.method({ -selector: unescape('third'), -fn: function () { +selector: unescape('includesKey%3A'), +fn: function (aKey) { var self=this; -return smalltalk.send(self, "_at_", [(3)]); +return smalltalk.send(self['@keys'], "_includes_", [aKey]); return self;} }), -smalltalk.SequenceableCollection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_removeLast'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('removeLast'), +selector: unescape('initialize'), fn: function () { var self=this; -smalltalk.send(self, "_remove_", [smalltalk.send(self, "_last", [])]); +smalltalk.send(self, "_initialize", [], smalltalk.HashedCollection); +(self['@keys']=[]); +(self['@values']=[]); return self;} }), -smalltalk.SequenceableCollection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_addLast_'), +unescape('_keys'), smalltalk.method({ -selector: unescape('addLast%3A'), -fn: function (anObject) { +selector: unescape('keys'), +fn: function () { var self=this; -smalltalk.send(self, "_add_", [anObject]); +return smalltalk.send(self['@keys'], "_copy", []); return self;} }), -smalltalk.SequenceableCollection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_withIndexDo_'), +unescape('_removeKey_ifAbsent_'), smalltalk.method({ -selector: unescape('withIndexDo%3A'), -fn: function (aBlock) { +selector: unescape('removeKey%3AifAbsent%3A'), +fn: function (aKey, aBlock){ var self=this; -for(var i=0;i<self.length;i++){aBlock(self[i], i+1);}; + + var index = self['@keys'].indexOf(aKey); + if(index === -1) { + return aBlock() + } else { + var value; + self['@keys'].splice(index, 1); + value = self['@values'].splice(index, 1); + return value[0]; + }; + ; return self;} }), -smalltalk.SequenceableCollection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_allButFirst'), +unescape('_values'), smalltalk.method({ -selector: unescape('allButFirst'), +selector: unescape('values'), fn: function () { var self=this; -return smalltalk.send(self, "_copyFrom_to_", [(2), smalltalk.send(self, "_size", [])]); +return smalltalk.send(self['@values'], "_copy", []); return self;} }), -smalltalk.SequenceableCollection); +smalltalk.Dictionary); + + +smalltalk.addClass('SequenceableCollection', smalltalk.Collection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_allButLast'), +unescape('__eq'), smalltalk.method({ -selector: unescape('allButLast'), -fn: function () { +selector: unescape('%3D'), +fn: function (aCollection) { var self=this; -return smalltalk.send(self, "_copyFrom_to_", [(1), ((($receiver = smalltalk.send(self, "_size", [])).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)]))]); -return self;} +try{((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aCollection, "_class", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [smalltalk.send(aCollection, "_size", [])]);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); +smalltalk.send(self, "_withIndexDo_", [(function(each, i){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_at_", [i]), "__eq", [each])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})]));})]); +(function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return true}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}} }), smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_indexOf_'), +unescape('_addLast_'), smalltalk.method({ -selector: unescape('indexOf%3A'), +selector: unescape('addLast%3A'), fn: function (anObject) { var self=this; -return smalltalk.send(self, "_indexOf_ifAbsent_", [anObject, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); +smalltalk.send(self, "_add_", [anObject]); return self;} }), smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_indexOf_ifAbsent_'), +unescape('_allButFirst'), smalltalk.method({ -selector: unescape('indexOf%3AifAbsent%3A'), -fn: function (anObject, aBlock) { +selector: unescape('allButFirst'), +fn: function () { var self=this; - - for(var i=0;i<self.length;i++){ - if(self[i].__eq(anObject)) {return i+1} - } - return aBlock(); - ; +return smalltalk.send(self, "_copyFrom_to_", [(2), smalltalk.send(self, "_size", [])]); return self;} }), smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_indexOf_startingAt_ifAbsent_'), +unescape('_allButLast'), smalltalk.method({ -selector: unescape('indexOf%3AstartingAt%3AifAbsent%3A'), -fn: function (anObject, start, aBlock) { +selector: unescape('allButLast'), +fn: function () { var self=this; - - for(var i=start-1;i<self.length;i++){ - if(self[i].__eq(anObject)) {return i+1} - } - return aBlock(); - ; +return smalltalk.send(self, "_copyFrom_to_", [(1), ((($receiver = smalltalk.send(self, "_size", [])).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)]))]); return self;} }), smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_indexOf_startingAt_'), +unescape('_at_'), smalltalk.method({ -selector: unescape('indexOf%3AstartingAt%3A'), -fn: function (anObject, start) { +selector: unescape('at%3A'), +fn: function (anIndex) { var self=this; -return smalltalk.send(self, "_indexOf_startingAt_ifAbsent_", [anObject, start, (function(){return (0);})]); +return smalltalk.send(self, "_at_ifAbsent_", [anIndex, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); return self;} }), smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_reversed'), +unescape('_at_ifAbsent_'), smalltalk.method({ -selector: unescape('reversed'), -fn: function () { +selector: unescape('at%3AifAbsent%3A'), +fn: function (anIndex, aBlock) { var self=this; smalltalk.send(self, "_subclassResponsibility", []); return self;} @@ -1071,39 +1120,38 @@ return self;} smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_atRandom'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('atRandom'), -fn: function () { +selector: unescape('at%3Aput%3A'), +fn: function (anIndex, anObject) { var self=this; -return smalltalk.send(self, "_at_", [smalltalk.send(smalltalk.send(self, "_size", []), "_atRandom", [])]); +smalltalk.send(self, "_subclassResponsibility", []); return self;} }), smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('__eq'), +unescape('_atRandom'), smalltalk.method({ -selector: unescape('%3D'), -fn: function (aCollection) { +selector: unescape('atRandom'), +fn: function () { var self=this; -try{((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aCollection, "_class", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [smalltalk.send(aCollection, "_size", [])]);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); -smalltalk.send(self, "_withIndexDo_", [(function(each, i){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_at_", [i]), "__eq", [each])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})]));})]); -(function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return true}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}} +return smalltalk.send(self, "_at_", [smalltalk.send(smalltalk.send(self, "_size", []), "_atRandom", [])]); +return self;} }), smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_shallowCopy'), +unescape('_copyFrom_to_'), smalltalk.method({ -selector: unescape('shallowCopy'), -fn: function () { +selector: unescape('copyFrom%3Ato%3A'), +fn: function (anIndex, anotherIndex) { var self=this; +var range=nil; var newCollection=nil; -(newCollection=smalltalk.send(smalltalk.send(self, "_class", []), "_new_", [smalltalk.send(self, "_size", [])])); -smalltalk.send(self, "_withIndexDo_", [(function(each, index){return smalltalk.send(newCollection, "_at_put_", [index, each]);})]); +(range=smalltalk.send(anIndex, "_to_", [anotherIndex])); +(newCollection=smalltalk.send(smalltalk.send(self, "_class", []), "_new_", [smalltalk.send(range, "_size", [])])); +smalltalk.send(range, "_withIndexDo_", [(function(each, i){return smalltalk.send(newCollection, "_at_put_", [i, smalltalk.send(self, "_at_", [each])]);})]); return newCollection; return self;} }), @@ -1124,17 +1172,12 @@ return self;} smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_printString'), +unescape('_first'), smalltalk.method({ -selector: unescape('printString'), +selector: unescape('first'), fn: function () { var self=this; -var str=nil; -(str=smalltalk.send("", "_writeStream", [])); -smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.Collection), "__comma", [unescape("%20%28")])]); -smalltalk.send(self, "_do_separatedBy_", [(function(each){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(each, "_printString", [])]);}), (function(){return smalltalk.send(str, "_nextPutAll_", [" "]);})]); -smalltalk.send(str, "_nextPutAll_", [unescape("%29")]); -return smalltalk.send(str, "_contents", []); +return smalltalk.send(self, "_at_", [(1)]); return self;} }), smalltalk.SequenceableCollection); @@ -1150,74 +1193,81 @@ return self;} }), smalltalk.SequenceableCollection); - - -smalltalk.addClass('CharacterArray', smalltalk.SequenceableCollection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_fourth'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), -fn: function (anIndex, anObject) { +selector: unescape('fourth'), +fn: function () { var self=this; -smalltalk.send(self, "_errorReadOnly", []); +return smalltalk.send(self, "_at_", [(4)]); return self;} }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_add_'), +unescape('_indexOf_'), smalltalk.method({ -selector: unescape('add%3A'), +selector: unescape('indexOf%3A'), fn: function (anObject) { var self=this; -smalltalk.send(self, "_errorReadOnly", []); +return smalltalk.send(self, "_indexOf_ifAbsent_", [anObject, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); return self;} }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('__comma'), +unescape('_indexOf_ifAbsent_'), smalltalk.method({ -selector: unescape('%2C'), -fn: function (aString) { +selector: unescape('indexOf%3AifAbsent%3A'), +fn: function (anObject, aBlock) { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "__comma", [smalltalk.send(aString, "_asString", [])]); + + for(var i=0;i<self.length;i++){ + if(self[i].__eq(anObject)) {return i+1} + } + return aBlock(); + ; return self;} }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_asString'), +unescape('_indexOf_startingAt_'), smalltalk.method({ -selector: unescape('asString'), -fn: function () { +selector: unescape('indexOf%3AstartingAt%3A'), +fn: function (anObject, start) { var self=this; -return smalltalk.send(self, "_subclassResponsibility", []); +return smalltalk.send(self, "_indexOf_startingAt_ifAbsent_", [anObject, start, (function(){return (0);})]); return self;} }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_asNumber'), +unescape('_indexOf_startingAt_ifAbsent_'), smalltalk.method({ -selector: unescape('asNumber'), -fn: function () { +selector: unescape('indexOf%3AstartingAt%3AifAbsent%3A'), +fn: function (anObject, start, aBlock) { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "_asNumber", []); + + for(var i=start-1;i<self.length;i++){ + if(self[i].__eq(anObject)) {return i+1} + } + return aBlock(); + ; return self;} }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_errorReadOnly'), +unescape('_last'), smalltalk.method({ -selector: unescape('errorReadOnly'), +selector: unescape('last'), fn: function () { var self=this; -smalltalk.send(self, "_error_", [unescape("Object%20is%20read-only")]); +return smalltalk.send(self, "_at_", [smalltalk.send(self, "_size", [])]); return self;} }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( unescape('_printString'), @@ -1225,92 +1275,109 @@ smalltalk.method({ selector: unescape('printString'), fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "_printString", []); +var str=nil; +(str=smalltalk.send("", "_writeStream", [])); +smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.Collection), "__comma", [unescape("%20%28")])]); +smalltalk.send(self, "_do_separatedBy_", [(function(each){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(each, "_printString", [])]);}), (function(){return smalltalk.send(str, "_nextPutAll_", [" "]);})]); +smalltalk.send(str, "_nextPutAll_", [unescape("%29")]); +return smalltalk.send(str, "_contents", []); return self;} }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_remove_'), +unescape('_removeLast'), smalltalk.method({ -selector: unescape('remove%3A'), -fn: function (anObject) { +selector: unescape('removeLast'), +fn: function () { var self=this; -smalltalk.send(self, "_errorReadOnly", []); +smalltalk.send(self, "_remove_", [smalltalk.send(self, "_last", [])]); return self;} }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_asUppercase'), +unescape('_reversed'), smalltalk.method({ -selector: unescape('asUppercase'), +selector: unescape('reversed'), fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [smalltalk.send(smalltalk.send(self, "_asString", []), "_asUppercase", [])]); +smalltalk.send(self, "_subclassResponsibility", []); return self;} }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_asSymbol'), +unescape('_second'), smalltalk.method({ -selector: unescape('asSymbol'), +selector: unescape('second'), fn: function () { var self=this; -return smalltalk.send(self, "_subclassResponsibility", []); +return smalltalk.send(self, "_at_", [(2)]); return self;} }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_asLowercase'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('asLowercase'), +selector: unescape('shallowCopy'), fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [smalltalk.send(smalltalk.send(self, "_asString", []), "_asLowercase", [])]); +var newCollection=nil; +(newCollection=smalltalk.send(smalltalk.send(self, "_class", []), "_new_", [smalltalk.send(self, "_size", [])])); +smalltalk.send(self, "_withIndexDo_", [(function(each, index){return smalltalk.send(newCollection, "_at_put_", [index, each]);})]); +return newCollection; return self;} }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); +smalltalk.addMethod( +unescape('_third'), +smalltalk.method({ +selector: unescape('third'), +fn: function () { +var self=this; +return smalltalk.send(self, "_at_", [(3)]); +return self;} +}), +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_fromString_'), +unescape('_withIndexDo_'), smalltalk.method({ -selector: unescape('fromString%3A'), -fn: function (aString) { +selector: unescape('withIndexDo%3A'), +fn: function (aBlock) { var self=this; -smalltalk.send(self, "_subclassResponsibility", []); +for(var i=0;i<self.length;i++){aBlock(self[i], i+1);}; return self;} }), -smalltalk.CharacterArray.klass); +smalltalk.SequenceableCollection); -smalltalk.addClass('String', smalltalk.CharacterArray, [], 'Kernel-Collections'); + +smalltalk.addClass('Array', smalltalk.SequenceableCollection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('__eq'), +unescape('_add_'), smalltalk.method({ -selector: unescape('%3D'), -fn: function (aString) { +selector: unescape('add%3A'), +fn: function (anObject) { var self=this; -try{((($receiver = smalltalk.send(smalltalk.send(aString, "_class", []), "__eq", [smalltalk.send(self, "_class", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); -return String(self) === String(aString); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}} +self.push(anObject); return anObject;; +return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_size'), +unescape('_asJavascript'), smalltalk.method({ -selector: unescape('size'), +selector: unescape('asJavascript'), fn: function () { var self=this; -return self.length; +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.String); +smalltalk.Array); smalltalk.addMethod( unescape('_at_ifAbsent_'), @@ -1318,1397 +1385,1426 @@ smalltalk.method({ selector: unescape('at%3AifAbsent%3A'), fn: function (anIndex, aBlock) { var self=this; -return self[anIndex - 1] || aBlock(); + + var value = self[anIndex - 1]; + if(value === undefined) { + return aBlock(); + } else { + return value; + } + ; return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_escaped'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('escaped'), -fn: function () { +selector: unescape('at%3Aput%3A'), +fn: function (anIndex, anObject) { var self=this; -return escape(self); +return self[anIndex - 1] = anObject; return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_unescaped'), +unescape('_join_'), smalltalk.method({ -selector: unescape('unescaped'), -fn: function () { +selector: unescape('join%3A'), +fn: function (aString) { var self=this; -return unescape(self); +return self.join(aString); return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('__comma'), +unescape('_remove_'), smalltalk.method({ -selector: unescape('%2C'), -fn: function (aString) { +selector: unescape('remove%3A'), +fn: function (anObject) { var self=this; -return self + aString; + + for(var i=0;i<self.length;i++) { + if(self[i] == anObject) { + self.splice(i,1); + break; + } + } + ; return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_copyFrom_to_'), +unescape('_removeFrom_to_'), smalltalk.method({ -selector: unescape('copyFrom%3Ato%3A'), -fn: function (anIndex, anotherIndex) { +selector: unescape('removeFrom%3Ato%3A'), +fn: function (aNumber, anotherNumber) { var self=this; -return self.substring(anIndex - 1, anotherIndex); +self.splice(aNumber - 1,anotherNumber - 1); return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_shallowCopy'), +unescape('_reversed'), smalltalk.method({ -selector: unescape('shallowCopy'), +selector: unescape('reversed'), fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [self]); +return self._copy().reverse(); return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_size'), smalltalk.method({ -selector: unescape('deepCopy'), +selector: unescape('size'), fn: function () { var self=this; -return smalltalk.send(self, "_shallowCopy", []); +return self.length; return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_asSelector'), +unescape('_sort'), smalltalk.method({ -selector: unescape('asSelector'), +selector: unescape('sort'), fn: function () { var self=this; -var selector=nil; -(selector=smalltalk.send("_", "__comma", [self])); -(selector=smalltalk.send(selector, "_replace_with_", [":", "_"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B+%5D"), "_plus"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("-"), "_minus"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B*%5D"), "_star"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B/%5D"), "_slash"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%3E"), "_gt"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%3C"), "_lt"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%3D"), "_eq"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%2C"), "_comma"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B@%5D"), "_at"])); -return selector; +return smalltalk.send(self, "_basicPerform_", ["sort"]); return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_asJavascript'), +unescape('_sort_'), smalltalk.method({ -selector: unescape('asJavascript'), -fn: function () { +selector: unescape('sort%3A'), +fn: function (aBlock) { var self=this; - if(self.search(/^[a-zA-Z0-9_:.$ ]*$/) == -1) - return "unescape(\"" + escape(self) + "\")"; - else - return "\"" + self + "\""; + return self.sort(function(a, b) { + if(aBlock(a,b)) {return -1} else {return 1} + }) ; return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_replace_with_'), +unescape('_sorted'), smalltalk.method({ -selector: unescape('replace%3Awith%3A'), -fn: function (aString, anotherString) { +selector: unescape('sorted'), +fn: function () { var self=this; -return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_flag_", [aString, "g"]), anotherString]); +return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort", []); return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_replaceRegexp_with_'), +unescape('_sorted_'), smalltalk.method({ -selector: unescape('replaceRegexp%3Awith%3A'), -fn: function (aRegexp, aString) { +selector: unescape('sorted%3A'), +fn: function (aBlock) { var self=this; -return self.replace(aRegexp, aString); +return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort_", [aBlock]); return self;} }), -smalltalk.String); +smalltalk.Array); + smalltalk.addMethod( -unescape('_tokenize_'), +unescape('_new_'), smalltalk.method({ -selector: unescape('tokenize%3A'), -fn: function (aString) { +selector: unescape('new%3A'), +fn: function (anInteger) { var self=this; -return self.split(aString); +return new Array(anInteger); return self;} }), -smalltalk.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_match_'), +unescape('_with_'), smalltalk.method({ -selector: unescape('match%3A'), -fn: function (aRegexp) { +selector: unescape('with%3A'), +fn: function (anObject) { var self=this; -return self.search(aRegexp) != -1; +return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(1)])); return self;} }), -smalltalk.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_asString'), +unescape('_with_with_'), smalltalk.method({ -selector: unescape('asString'), -fn: function () { +selector: unescape('with%3Awith%3A'), +fn: function (anObject, anObject2) { var self=this; -return self; +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.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_asNumber'), +unescape('_with_with_with_'), smalltalk.method({ -selector: unescape('asNumber'), -fn: function () { +selector: unescape('with%3Awith%3Awith%3A'), +fn: function (anObject, anObject2, anObject3) { var self=this; -return Number(self); +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.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_printString'), +unescape('_withAll_'), smalltalk.method({ -selector: unescape('printString'), -fn: function () { +selector: unescape('withAll%3A'), +fn: function (aCollection) { var self=this; -return smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [self]), "__comma", [unescape("%27")]); +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.String); +smalltalk.Array.klass); + +smalltalk.addClass('Array', smalltalk.SequenceableCollection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_printNl'), +unescape('_add_'), smalltalk.method({ -selector: unescape('printNl'), -fn: function () { +selector: unescape('add%3A'), +fn: function (anObject) { var self=this; -console.log(self); +self.push(anObject); return anObject;; return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_isString'), +unescape('_asJavascript'), smalltalk.method({ -selector: unescape('isString'), +selector: unescape('asJavascript'), fn: function () { var self=this; -return true; +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.String); +smalltalk.Array); smalltalk.addMethod( -unescape('__gt'), +unescape('_at_ifAbsent_'), smalltalk.method({ -selector: unescape('%3E'), -fn: function (aString) { +selector: unescape('at%3AifAbsent%3A'), +fn: function (anIndex, aBlock) { var self=this; -return String(self) > aString._asString(); -return self;} -}), -smalltalk.String); -smalltalk.addMethod( -unescape('__lt'), -smalltalk.method({ -selector: unescape('%3C'), -fn: function (aString) { -var self=this; -return String(self) < aString._asString(); + var value = self[anIndex - 1]; + if(value === undefined) { + return aBlock(); + } else { + return value; + } + ; return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('__gt_eq'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('%3E%3D'), -fn: function (aString) { +selector: unescape('at%3Aput%3A'), +fn: function (anIndex, anObject) { var self=this; -return String(self) >= aString._asString(); +return self[anIndex - 1] = anObject; return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('__lt_eq'), +unescape('_join_'), smalltalk.method({ -selector: unescape('%3C%3D'), +selector: unescape('join%3A'), fn: function (aString) { var self=this; -return String(self) <= aString._asString(); +return self.join(aString); return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_trimLeft_'), +unescape('_remove_'), smalltalk.method({ -selector: unescape('trimLeft%3A'), -fn: function (separators) { +selector: unescape('remove%3A'), +fn: function (anObject) { var self=this; -return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_flag_", [smalltalk.send(smalltalk.send(unescape("%5E%5B"), "__comma", [separators]), "__comma", [unescape("%5D+")]), "g"]), ""]); + + for(var i=0;i<self.length;i++) { + if(self[i] == anObject) { + self.splice(i,1); + break; + } + } + ; return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_trimRight_'), +unescape('_removeFrom_to_'), smalltalk.method({ -selector: unescape('trimRight%3A'), -fn: function (separators) { +selector: unescape('removeFrom%3Ato%3A'), +fn: function (aNumber, anotherNumber) { var self=this; -return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_flag_", [smalltalk.send(smalltalk.send(unescape("%5B"), "__comma", [separators]), "__comma", [unescape("%5D+%24")]), "g"]), ""]); +self.splice(aNumber - 1,anotherNumber - 1); return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_trimLeft'), +unescape('_reversed'), smalltalk.method({ -selector: unescape('trimLeft'), +selector: unescape('reversed'), fn: function () { var self=this; -return smalltalk.send(self, "_trimLeft_", [unescape("%5Cs")]); +return self._copy().reverse(); return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_trimRight'), +unescape('_size'), smalltalk.method({ -selector: unescape('trimRight'), +selector: unescape('size'), fn: function () { var self=this; -return smalltalk.send(self, "_trimRight_", [unescape("%5Cs")]); +return self.length; return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_trimBoth'), +unescape('_sort'), smalltalk.method({ -selector: unescape('trimBoth'), +selector: unescape('sort'), fn: function () { var self=this; -return smalltalk.send(self, "_trimBoth_", [unescape("%5Cs")]); +return smalltalk.send(self, "_basicPerform_", ["sort"]); return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_trimBoth_'), +unescape('_sort_'), smalltalk.method({ -selector: unescape('trimBoth%3A'), -fn: function (separators) { +selector: unescape('sort%3A'), +fn: function (aBlock) { var self=this; -return smalltalk.send(smalltalk.send(self, "_trimLeft_", [separators]), "_trimRight_", [separators]); + + return self.sort(function(a, b) { + if(aBlock(a,b)) {return -1} else {return 1} + }) + ; return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_asLowercase'), +unescape('_sorted'), smalltalk.method({ -selector: unescape('asLowercase'), +selector: unescape('sorted'), fn: function () { var self=this; -return self.toLowerCase(); +return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort", []); return self;} }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_asUppercase'), +unescape('_sorted_'), smalltalk.method({ -selector: unescape('asUppercase'), -fn: function () { +selector: unescape('sorted%3A'), +fn: function (aBlock) { var self=this; -return self.toUpperCase(); +return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort_", [aBlock]); return self;} }), -smalltalk.String); +smalltalk.Array); + smalltalk.addMethod( -unescape('_join_'), +unescape('_new_'), smalltalk.method({ -selector: unescape('join%3A'), -fn: function (aCollection) { +selector: unescape('new%3A'), +fn: function (anInteger) { var self=this; -return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){return smalltalk.send(aCollection, "_do_separatedBy_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(each, "_asString", [])]);}), (function(){return smalltalk.send(stream, "_nextPutAll_", [self]);})]);})]); +return new Array(anInteger); return self;} }), -smalltalk.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_includesSubString_'), +unescape('_with_'), smalltalk.method({ -selector: unescape('includesSubString%3A'), -fn: function (subString) { +selector: unescape('with%3A'), +fn: function (anObject) { var self=this; - return self.indexOf(subString) != -1 ; +return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(1)])); return self;} }), -smalltalk.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_asciiValue'), +unescape('_with_with_'), smalltalk.method({ -selector: unescape('asciiValue'), -fn: function () { +selector: unescape('with%3Awith%3A'), +fn: function (anObject, anObject2) { var self=this; -return self.charCodeAt(0);; +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.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_lineIndicesDo_'), +unescape('_with_with_with_'), smalltalk.method({ -selector: unescape('lineIndicesDo%3A'), -fn: function (aBlock) { +selector: unescape('with%3Awith%3Awith%3A'), +fn: function (anObject, anObject2, anObject3) { var self=this; -try{var cr=nil; -var lf=nil; -var start=nil; -var sz=nil; -var nextLF=nil; -var nextCR=nil; -(start=(1)); -(sz=smalltalk.send(self, "_size", [])); -(cr=smalltalk.send((smalltalk.String || String), "_cr", [])); -(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, (1)])); -(lf=smalltalk.send((smalltalk.String || String), "_lf", [])); -(nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, (1)])); -(function(){while((function(){return ((($receiver = start).klass === smalltalk.Number) ? $receiver <=sz : smalltalk.send($receiver, "__lt_eq", [sz]));})()) {(function(){((($receiver = smalltalk.send(smalltalk.send(nextLF, "__eq", [(0)]), "_and_", [(function(){return smalltalk.send(nextCR, "__eq", [(0)]);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, sz, sz]);return (function(){throw({name: 'stReturn', selector: '_lineIndicesDo_', fn: function(){return self}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, sz, sz]);return (function(){throw({name: 'stReturn', selector: '_lineIndicesDo_', fn: function(){return self}})})();})]));return ((($receiver = smalltalk.send(smalltalk.send(nextCR, "__eq", [(0)]), "_or_", [(function(){return smalltalk.send((0) < nextLF, "_and_", [(function(){return ((($receiver = nextLF).klass === smalltalk.Number) ? $receiver <nextCR : smalltalk.send($receiver, "__lt", [nextCR]));})]);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextLF).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));})() : (function(){return ((($receiver = smalltalk.send((1) + nextCR, "__eq", [nextLF])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));})() : (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));}), (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextLF).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));}), (function(){return ((($receiver = smalltalk.send((1) + nextCR, "__eq", [nextLF])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));})() : (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));}), (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})]));})]));})()}})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_lineIndicesDo_'){return e.fn()} throw(e)}} +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.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_linesDo_'), +unescape('_withAll_'), smalltalk.method({ -selector: unescape('linesDo%3A'), -fn: function (aBlock) { +selector: unescape('withAll%3A'), +fn: function (aCollection) { var self=this; -smalltalk.send(self, "_lineIndicesDo_", [(function(start, endWithoutDelimiters, end){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_copyFrom_to_", [start, endWithoutDelimiters])]);})]); +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.String); +smalltalk.Array.klass); + +smalltalk.addClass('CharacterArray', smalltalk.SequenceableCollection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_lines'), +unescape('__comma'), smalltalk.method({ -selector: unescape('lines'), -fn: function () { +selector: unescape('%2C'), +fn: function (aString) { var self=this; -var lines=nil; -(lines=smalltalk.send((smalltalk.Array || Array), "_new", [])); -smalltalk.send(self, "_linesDo_", [(function(aLine){return smalltalk.send(lines, "_add_", [aLine]);})]); -return lines; +return smalltalk.send(smalltalk.send(self, "_asString", []), "__comma", [smalltalk.send(aString, "_asString", [])]); return self;} }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_lineNumber_'), +unescape('_add_'), smalltalk.method({ -selector: unescape('lineNumber%3A'), -fn: function (anIndex) { +selector: unescape('add%3A'), +fn: function (anObject) { var self=this; -try{var lineCount=nil; -(lineCount=(0)); -smalltalk.send(self, "_lineIndicesDo_", [(function(start, endWithoutDelimiters, end){return ((($receiver = smalltalk.send((lineCount=((($receiver = lineCount).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))), "__eq", [anIndex])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_lineNumber_', fn: function(){return smalltalk.send(self, "_copyFrom_to_", [start, endWithoutDelimiters])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_lineNumber_', fn: function(){return smalltalk.send(self, "_copyFrom_to_", [start, endWithoutDelimiters])}})})();})]));})]); -(function(){throw({name: 'stReturn', selector: '_lineNumber_', fn: function(){return nil}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_lineNumber_'){return e.fn()} throw(e)}} +smalltalk.send(self, "_errorReadOnly", []); +return self;} }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_reversed'), +unescape('_asLowercase'), smalltalk.method({ -selector: unescape('reversed'), +selector: unescape('asLowercase'), fn: function () { var self=this; -return self.split("").reverse().join(""); +return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [smalltalk.send(smalltalk.send(self, "_asString", []), "_asLowercase", [])]); return self;} }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_asJavaScriptSelector'), +unescape('_asNumber'), smalltalk.method({ -selector: unescape('asJavaScriptSelector'), +selector: unescape('asNumber'), fn: function () { var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(self, "_asSelector", []), "_replace_with_", [unescape("%5E_"), ""]), "_replace_with_", [unescape("_.*"), ""]); +return smalltalk.send(smalltalk.send(self, "_asString", []), "_asNumber", []); return self;} }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_asSymbol'), +unescape('_asString'), smalltalk.method({ -selector: unescape('asSymbol'), +selector: unescape('asString'), fn: function () { var self=this; -return smalltalk.send((smalltalk.Symbol || Symbol), "_lookup_", [self]); +return smalltalk.send(self, "_subclassResponsibility", []); return self;} }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_asSymbol'), smalltalk.method({ -selector: unescape('asJSON'), -fn: function (){ +selector: unescape('asSymbol'), +fn: function () { var self=this; -return self; +return smalltalk.send(self, "_subclassResponsibility", []); return self;} }), -smalltalk.String); - +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_streamClass'), +unescape('_asUppercase'), smalltalk.method({ -selector: unescape('streamClass'), +selector: unescape('asUppercase'), fn: function () { var self=this; -return (smalltalk.StringStream || StringStream); +return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [smalltalk.send(smalltalk.send(self, "_asString", []), "_asUppercase", [])]); return self;} }), -smalltalk.String.klass); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_fromString_'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('fromString%3A'), -fn: function (aString) { +selector: unescape('at%3Aput%3A'), +fn: function (anIndex, anObject) { var self=this; -return new self.fn(aString); +smalltalk.send(self, "_errorReadOnly", []); return self;} }), -smalltalk.String.klass); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_cr'), +unescape('_errorReadOnly'), smalltalk.method({ -selector: unescape('cr'), +selector: unescape('errorReadOnly'), fn: function () { var self=this; -return '\r'; +smalltalk.send(self, "_error_", [unescape("Object%20is%20read-only")]); return self;} }), -smalltalk.String.klass); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_lf'), +unescape('_printString'), smalltalk.method({ -selector: unescape('lf'), +selector: unescape('printString'), fn: function () { var self=this; -return '\n'; +return smalltalk.send(smalltalk.send(self, "_asString", []), "_printString", []); return self;} }), -smalltalk.String.klass); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_space'), +unescape('_remove_'), smalltalk.method({ -selector: unescape('space'), -fn: function () { +selector: unescape('remove%3A'), +fn: function (anObject) { var self=this; -return ' '; +smalltalk.send(self, "_errorReadOnly", []); return self;} }), -smalltalk.String.klass); +smalltalk.CharacterArray); + smalltalk.addMethod( -unescape('_tab'), +unescape('_fromString_'), smalltalk.method({ -selector: unescape('tab'), -fn: function () { +selector: unescape('fromString%3A'), +fn: function (aString) { var self=this; -return '\t'; +smalltalk.send(self, "_subclassResponsibility", []); return self;} }), -smalltalk.String.klass); +smalltalk.CharacterArray.klass); + +smalltalk.addClass('String', smalltalk.CharacterArray, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_crlf'), +unescape('__comma'), smalltalk.method({ -selector: unescape('crlf'), -fn: function () { +selector: unescape('%2C'), +fn: function (aString) { var self=this; -return '\r\n'; +return self + aString; return self;} }), -smalltalk.String.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_streamContents_'), +unescape('__lt'), smalltalk.method({ -selector: unescape('streamContents%3A'), -fn: function (blockWithArg) { +selector: unescape('%3C'), +fn: function (aString) { var self=this; -var stream=nil; -(stream=smalltalk.send(smalltalk.send(self, "_streamClass", []), "_on_", [smalltalk.send((smalltalk.String || String), "_new", [])])); -smalltalk.send(blockWithArg, "_value_", [stream]); -return smalltalk.send(stream, "_contents", []); +return String(self) < aString._asString(); return self;} }), -smalltalk.String.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_value_'), +unescape('__lt_eq'), smalltalk.method({ -selector: unescape('value%3A'), -fn: function (aUTFCharCode) { +selector: unescape('%3C%3D'), +fn: function (aString) { var self=this; -return String.fromCharCode(aUTFCharCode);; +return String(self) <= aString._asString(); return self;} }), -smalltalk.String.klass); - +smalltalk.String); -smalltalk.addClass('Symbol', smalltalk.CharacterArray, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_at_ifAbsent_'), +unescape('__eq'), smalltalk.method({ -selector: unescape('at%3AifAbsent%3A'), -fn: function (anIndex, aBlock) { +selector: unescape('%3D'), +fn: function (aString) { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "_at_ifAbsent_", [anIndex, aBlock]); -return self;} +try{((($receiver = smalltalk.send(smalltalk.send(aString, "_class", []), "__eq", [smalltalk.send(self, "_class", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); +return String(self) === String(aString); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_asString'), +unescape('__gt'), smalltalk.method({ -selector: unescape('asString'), -fn: function () { +selector: unescape('%3E'), +fn: function (aString) { var self=this; -return self.value; +return String(self) > aString._asString(); return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_printString'), +unescape('__gt_eq'), smalltalk.method({ -selector: unescape('printString'), -fn: function () { +selector: unescape('%3E%3D'), +fn: function (aString) { var self=this; -return smalltalk.send(unescape("%23"), "__comma", [smalltalk.send(self, "_asString", [])]); +return String(self) >= aString._asString(); return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_size'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('size'), -fn: function () { +selector: unescape('asJSON'), +fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "_size", []); +return self; return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_asSymbol'), +unescape('_asJavaScriptSelector'), smalltalk.method({ -selector: unescape('asSymbol'), +selector: unescape('asJavaScriptSelector'), fn: function () { var self=this; -return self; +return smalltalk.send(smalltalk.send(smalltalk.send(self, "_asSelector", []), "_replace_with_", [unescape("%5E_"), ""]), "_replace_with_", [unescape("_.*"), ""]); return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_copyFrom_to_'), +unescape('_asJavascript'), smalltalk.method({ -selector: unescape('copyFrom%3Ato%3A'), -fn: function (anIndex, anotherIndex) { +selector: unescape('asJavascript'), +fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [smalltalk.send(smalltalk.send(self, "_asString", []), "_copyFrom_to_", [anIndex, anotherIndex])]); + + if(self.search(/^[a-zA-Z0-9_:.$ ]*$/) == -1) + return "unescape(\"" + escape(self) + "\")"; + else + return "\"" + self + "\""; + ; return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_asLowercase'), smalltalk.method({ -selector: unescape('deepCopy'), +selector: unescape('asLowercase'), fn: function () { var self=this; -return self; +return self.toLowerCase(); return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('__lt'), +unescape('_asNumber'), smalltalk.method({ -selector: unescape('%3C'), -fn: function (aSymbol) { +selector: unescape('asNumber'), +fn: function () { var self=this; -return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver <smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__lt", [smalltalk.send(aSymbol, "_asString", [])])); +return Number(self); return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('__lt_eq'), +unescape('_asSelector'), smalltalk.method({ -selector: unescape('%3C%3D'), -fn: function (aSymbol) { +selector: unescape('asSelector'), +fn: function () { var self=this; -return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver <=smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__lt_eq", [smalltalk.send(aSymbol, "_asString", [])])); +var selector=nil; +(selector=smalltalk.send("_", "__comma", [self])); +(selector=smalltalk.send(selector, "_replace_with_", [":", "_"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B+%5D"), "_plus"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("-"), "_minus"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B*%5D"), "_star"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B/%5D"), "_slash"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%3E"), "_gt"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%3C"), "_lt"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%3D"), "_eq"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%2C"), "_comma"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B@%5D"), "_at"])); +return selector; return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('__gt_eq'), +unescape('_asString'), smalltalk.method({ -selector: unescape('%3E%3D'), -fn: function (aSymbol) { +selector: unescape('asString'), +fn: function () { var self=this; -return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver >=smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__gt_eq", [smalltalk.send(aSymbol, "_asString", [])])); +return self; return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('__eq'), +unescape('_asSymbol'), smalltalk.method({ -selector: unescape('%3D'), -fn: function (aSymbol) { +selector: unescape('asSymbol'), +fn: function () { var self=this; -try{((($receiver = smalltalk.send(smalltalk.send(aSymbol, "_class", []), "__eq", [smalltalk.send(self, "_class", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); -(function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return smalltalk.send(smalltalk.send(self, "_asString", []), "__eq", [smalltalk.send(aSymbol, "_asString", [])])}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}} +return smalltalk.send((smalltalk.Symbol || Symbol), "_lookup_", [self]); +return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_isSymbol'), +unescape('_asUppercase'), smalltalk.method({ -selector: unescape('isSymbol'), +selector: unescape('asUppercase'), fn: function () { var self=this; -return true; +return self.toUpperCase(); return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_asJavascript'), +unescape('_asciiValue'), smalltalk.method({ -selector: unescape('asJavascript'), +selector: unescape('asciiValue'), fn: function () { var self=this; -return smalltalk.send(smalltalk.send(unescape("smalltalk.symbolFor%28%22"), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%22%29")]); +return self.charCodeAt(0);; return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('__gt'), +unescape('_at_ifAbsent_'), smalltalk.method({ -selector: unescape('%3E'), -fn: function (aSymbol) { +selector: unescape('at%3AifAbsent%3A'), +fn: function (anIndex, aBlock) { var self=this; -return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver >smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__gt", [smalltalk.send(aSymbol, "_asString", [])])); +return self[anIndex - 1] || aBlock(); return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_shallowCopy'), +unescape('_copyFrom_to_'), smalltalk.method({ -selector: unescape('shallowCopy'), -fn: function () { +selector: unescape('copyFrom%3Ato%3A'), +fn: function (anIndex, anotherIndex) { var self=this; -return self; +return self.substring(anIndex - 1, anotherIndex); return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_asSelector'), +unescape('_deepCopy'), smalltalk.method({ -selector: unescape('asSelector'), +selector: unescape('deepCopy'), fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "_asSelector", []); +return smalltalk.send(self, "_shallowCopy", []); return self;} }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_escaped'), smalltalk.method({ -selector: unescape('asJSON'), -fn: function (){ +selector: unescape('escaped'), +fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "_asJSON", []); +return escape(self); return self;} }), -smalltalk.Symbol); - +smalltalk.String); smalltalk.addMethod( -unescape('_lookup_'), +unescape('_includesSubString_'), smalltalk.method({ -selector: unescape('lookup%3A'), -fn: function (aString) { +selector: unescape('includesSubString%3A'), +fn: function (subString) { var self=this; -return smalltalk.symbolFor(aString);; + return self.indexOf(subString) != -1 ; return self;} }), -smalltalk.Symbol.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_basicNew'), +unescape('_isString'), smalltalk.method({ -selector: unescape('basicNew'), +selector: unescape('isString'), fn: function () { var self=this; -smalltalk.send(self, "_shouldNotImplement", []); +return true; return self;} }), -smalltalk.Symbol.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_fromString_'), +unescape('_join_'), smalltalk.method({ -selector: unescape('fromString%3A'), -fn: function (aString) { +selector: unescape('join%3A'), +fn: function (aCollection) { var self=this; -return smalltalk.send(self, "_lookup_", [aString]); +return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){return smalltalk.send(aCollection, "_do_separatedBy_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(each, "_asString", [])]);}), (function(){return smalltalk.send(stream, "_nextPutAll_", [self]);})]);})]); return self;} }), -smalltalk.Symbol.klass); - +smalltalk.String); -smalltalk.addClass('Array', smalltalk.SequenceableCollection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_size'), +unescape('_lineIndicesDo_'), smalltalk.method({ -selector: unescape('size'), -fn: function () { +selector: unescape('lineIndicesDo%3A'), +fn: function (aBlock) { var self=this; -return self.length; -return self;} +try{var cr=nil; +var lf=nil; +var start=nil; +var sz=nil; +var nextLF=nil; +var nextCR=nil; +(start=(1)); +(sz=smalltalk.send(self, "_size", [])); +(cr=smalltalk.send((smalltalk.String || String), "_cr", [])); +(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, (1)])); +(lf=smalltalk.send((smalltalk.String || String), "_lf", [])); +(nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, (1)])); +(function(){while((function(){return ((($receiver = start).klass === smalltalk.Number) ? $receiver <=sz : smalltalk.send($receiver, "__lt_eq", [sz]));})()) {(function(){((($receiver = smalltalk.send(smalltalk.send(nextLF, "__eq", [(0)]), "_and_", [(function(){return smalltalk.send(nextCR, "__eq", [(0)]);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, sz, sz]);return (function(){throw({name: 'stReturn', selector: '_lineIndicesDo_', fn: function(){return self}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, sz, sz]);return (function(){throw({name: 'stReturn', selector: '_lineIndicesDo_', fn: function(){return self}})})();})]));return ((($receiver = smalltalk.send(smalltalk.send(nextCR, "__eq", [(0)]), "_or_", [(function(){return smalltalk.send((0) < nextLF, "_and_", [(function(){return ((($receiver = nextLF).klass === smalltalk.Number) ? $receiver <nextCR : smalltalk.send($receiver, "__lt", [nextCR]));})]);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextLF).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));})() : (function(){return ((($receiver = smalltalk.send((1) + nextCR, "__eq", [nextLF])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));})() : (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));}), (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextLF).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));}), (function(){return ((($receiver = smalltalk.send((1) + nextCR, "__eq", [nextLF])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));})() : (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));}), (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})]));})]));})()}})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_lineIndicesDo_'){return e.fn()} throw(e)}} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_lineNumber_'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), -fn: function (anIndex, anObject) { +selector: unescape('lineNumber%3A'), +fn: function (anIndex) { var self=this; -return self[anIndex - 1] = anObject; -return self;} +try{var lineCount=nil; +(lineCount=(0)); +smalltalk.send(self, "_lineIndicesDo_", [(function(start, endWithoutDelimiters, end){return ((($receiver = smalltalk.send((lineCount=((($receiver = lineCount).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))), "__eq", [anIndex])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_lineNumber_', fn: function(){return smalltalk.send(self, "_copyFrom_to_", [start, endWithoutDelimiters])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_lineNumber_', fn: function(){return smalltalk.send(self, "_copyFrom_to_", [start, endWithoutDelimiters])}})})();})]));})]); +(function(){throw({name: 'stReturn', selector: '_lineNumber_', fn: function(){return nil}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_lineNumber_'){return e.fn()} throw(e)}} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_at_ifAbsent_'), +unescape('_lines'), smalltalk.method({ -selector: unescape('at%3AifAbsent%3A'), -fn: function (anIndex, aBlock) { +selector: unescape('lines'), +fn: function () { var self=this; - - var value = self[anIndex - 1]; - if(value === undefined) { - return aBlock(); - } else { - return value; - } - ; +var lines=nil; +(lines=smalltalk.send((smalltalk.Array || Array), "_new", [])); +smalltalk.send(self, "_linesDo_", [(function(aLine){return smalltalk.send(lines, "_add_", [aLine]);})]); +return lines; return self;} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_add_'), +unescape('_linesDo_'), smalltalk.method({ -selector: unescape('add%3A'), -fn: function (anObject) { +selector: unescape('linesDo%3A'), +fn: function (aBlock) { var self=this; -self.push(anObject); return anObject;; +smalltalk.send(self, "_lineIndicesDo_", [(function(start, endWithoutDelimiters, end){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_copyFrom_to_", [start, endWithoutDelimiters])]);})]); return self;} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_join_'), +unescape('_match_'), smalltalk.method({ -selector: unescape('join%3A'), -fn: function (aString) { +selector: unescape('match%3A'), +fn: function (aRegexp) { var self=this; -return self.join(aString); +return self.search(aRegexp) != -1; return self;} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_asJavascript'), +unescape('_printNl'), smalltalk.method({ -selector: unescape('asJavascript'), +selector: unescape('printNl'), 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")]); +console.log(self); return self;} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_sort'), +unescape('_printString'), smalltalk.method({ -selector: unescape('sort'), +selector: unescape('printString'), fn: function () { var self=this; -return smalltalk.send(self, "_basicPerform_", ["sort"]); +return smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [self]), "__comma", [unescape("%27")]); return self;} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_sort_'), +unescape('_replace_with_'), smalltalk.method({ -selector: unescape('sort%3A'), -fn: function (aBlock) { +selector: unescape('replace%3Awith%3A'), +fn: function (aString, anotherString) { var self=this; - - return self.sort(function(a, b) { - if(aBlock(a,b)) {return -1} else {return 1} - }) - ; +return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_flag_", [aString, "g"]), anotherString]); return self;} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_remove_'), +unescape('_replaceRegexp_with_'), smalltalk.method({ -selector: unescape('remove%3A'), -fn: function (anObject) { +selector: unescape('replaceRegexp%3Awith%3A'), +fn: function (aRegexp, aString) { var self=this; - - for(var i=0;i<self.length;i++) { - if(self[i] == anObject) { - self.splice(i,1); - break; - } - } - ; +return self.replace(aRegexp, aString); return self;} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_sorted'), +unescape('_reversed'), smalltalk.method({ -selector: unescape('sorted'), +selector: unescape('reversed'), fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort", []); +return self.split("").reverse().join(""); return self;} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_sorted_'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('sorted%3A'), -fn: function (aBlock) { +selector: unescape('shallowCopy'), +fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort_", [aBlock]); +return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [self]); return self;} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_removeFrom_to_'), +unescape('_size'), smalltalk.method({ -selector: unescape('removeFrom%3Ato%3A'), -fn: function (aNumber, anotherNumber) { +selector: unescape('size'), +fn: function () { var self=this; -self.splice(aNumber - 1,anotherNumber - 1); +return self.length; return self;} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_reversed'), +unescape('_tokenize_'), smalltalk.method({ -selector: unescape('reversed'), -fn: function () { +selector: unescape('tokenize%3A'), +fn: function (aString) { var self=this; -return self._copy().reverse(); +return self.split(aString); return self;} }), -smalltalk.Array); - +smalltalk.String); smalltalk.addMethod( -unescape('_new_'), +unescape('_trimBoth'), smalltalk.method({ -selector: unescape('new%3A'), -fn: function (anInteger) { +selector: unescape('trimBoth'), +fn: function () { var self=this; -return new Array(anInteger); +return smalltalk.send(self, "_trimBoth_", [unescape("%5Cs")]); return self;} }), -smalltalk.Array.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_with_'), +unescape('_trimBoth_'), smalltalk.method({ -selector: unescape('with%3A'), -fn: function (anObject) { +selector: unescape('trimBoth%3A'), +fn: function (separators) { var self=this; -return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(1)])); +return smalltalk.send(smalltalk.send(self, "_trimLeft_", [separators]), "_trimRight_", [separators]); return self;} }), -smalltalk.Array.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_with_with_'), +unescape('_trimLeft'), smalltalk.method({ -selector: unescape('with%3Awith%3A'), -fn: function (anObject, anObject2) { +selector: unescape('trimLeft'), +fn: function () { 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 smalltalk.send(self, "_trimLeft_", [unescape("%5Cs")]); return self;} }), -smalltalk.Array.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_with_with_with_'), +unescape('_trimLeft_'), smalltalk.method({ -selector: unescape('with%3Awith%3Awith%3A'), -fn: function (anObject, anObject2, anObject3) { +selector: unescape('trimLeft%3A'), +fn: function (separators) { 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 smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_flag_", [smalltalk.send(smalltalk.send(unescape("%5E%5B"), "__comma", [separators]), "__comma", [unescape("%5D+")]), "g"]), ""]); return self;} }), -smalltalk.Array.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_withAll_'), +unescape('_trimRight'), smalltalk.method({ -selector: unescape('withAll%3A'), -fn: function (aCollection) { +selector: unescape('trimRight'), +fn: function () { 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 smalltalk.send(self, "_trimRight_", [unescape("%5Cs")]); return self;} }), -smalltalk.Array.klass); - +smalltalk.String); -smalltalk.addClass('Array', smalltalk.SequenceableCollection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_size'), +unescape('_trimRight_'), smalltalk.method({ -selector: unescape('size'), -fn: function () { +selector: unescape('trimRight%3A'), +fn: function (separators) { var self=this; -return self.length; +return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_flag_", [smalltalk.send(smalltalk.send(unescape("%5B"), "__comma", [separators]), "__comma", [unescape("%5D+%24")]), "g"]), ""]); return self;} }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_unescaped'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), -fn: function (anIndex, anObject) { +selector: unescape('unescaped'), +fn: function () { var self=this; -return self[anIndex - 1] = anObject; +return unescape(self); return self;} }), -smalltalk.Array); +smalltalk.String); + smalltalk.addMethod( -unescape('_at_ifAbsent_'), +unescape('_cr'), smalltalk.method({ -selector: unescape('at%3AifAbsent%3A'), -fn: function (anIndex, aBlock) { +selector: unescape('cr'), +fn: function () { var self=this; - - var value = self[anIndex - 1]; - if(value === undefined) { - return aBlock(); - } else { - return value; - } - ; +return '\r'; return self;} }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_add_'), +unescape('_crlf'), smalltalk.method({ -selector: unescape('add%3A'), -fn: function (anObject) { +selector: unescape('crlf'), +fn: function () { var self=this; -self.push(anObject); return anObject;; +return '\r\n'; return self;} }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_join_'), +unescape('_fromString_'), smalltalk.method({ -selector: unescape('join%3A'), +selector: unescape('fromString%3A'), fn: function (aString) { var self=this; -return self.join(aString); +return new self.fn(aString); return self;} }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_asJavascript'), +unescape('_lf'), smalltalk.method({ -selector: unescape('asJavascript'), +selector: unescape('lf'), 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 '\n'; return self;} }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_sort'), +unescape('_space'), smalltalk.method({ -selector: unescape('sort'), +selector: unescape('space'), fn: function () { var self=this; -return smalltalk.send(self, "_basicPerform_", ["sort"]); +return ' '; return self;} }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_sort_'), +unescape('_streamClass'), smalltalk.method({ -selector: unescape('sort%3A'), -fn: function (aBlock) { +selector: unescape('streamClass'), +fn: function () { var self=this; - - return self.sort(function(a, b) { - if(aBlock(a,b)) {return -1} else {return 1} - }) - ; +return (smalltalk.StringStream || StringStream); return self;} }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_remove_'), +unescape('_streamContents_'), smalltalk.method({ -selector: unescape('remove%3A'), -fn: function (anObject) { +selector: unescape('streamContents%3A'), +fn: function (blockWithArg) { var self=this; - - for(var i=0;i<self.length;i++) { - if(self[i] == anObject) { - self.splice(i,1); - break; - } - } - ; +var stream=nil; +(stream=smalltalk.send(smalltalk.send(self, "_streamClass", []), "_on_", [smalltalk.send((smalltalk.String || String), "_new", [])])); +smalltalk.send(blockWithArg, "_value_", [stream]); +return smalltalk.send(stream, "_contents", []); return self;} }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_sorted'), +unescape('_tab'), smalltalk.method({ -selector: unescape('sorted'), +selector: unescape('tab'), fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort", []); +return '\t'; return self;} }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_sorted_'), +unescape('_value_'), smalltalk.method({ -selector: unescape('sorted%3A'), -fn: function (aBlock) { +selector: unescape('value%3A'), +fn: function (aUTFCharCode) { var self=this; -return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort_", [aBlock]); +return String.fromCharCode(aUTFCharCode);; return self;} }), -smalltalk.Array); +smalltalk.String.klass); -smalltalk.addMethod( -unescape('_removeFrom_to_'), + +smalltalk.addClass('Symbol', smalltalk.CharacterArray, [], 'Kernel-Collections'); +smalltalk.addMethod( +unescape('__lt'), smalltalk.method({ -selector: unescape('removeFrom%3Ato%3A'), -fn: function (aNumber, anotherNumber) { +selector: unescape('%3C'), +fn: function (aSymbol) { var self=this; -self.splice(aNumber - 1,anotherNumber - 1); +return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver <smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__lt", [smalltalk.send(aSymbol, "_asString", [])])); return self;} }), -smalltalk.Array); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_reversed'), +unescape('__lt_eq'), smalltalk.method({ -selector: unescape('reversed'), -fn: function () { +selector: unescape('%3C%3D'), +fn: function (aSymbol) { var self=this; -return self._copy().reverse(); +return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver <=smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__lt_eq", [smalltalk.send(aSymbol, "_asString", [])])); return self;} }), -smalltalk.Array); +smalltalk.Symbol); +smalltalk.addMethod( +unescape('__eq'), +smalltalk.method({ +selector: unescape('%3D'), +fn: function (aSymbol) { +var self=this; +try{((($receiver = smalltalk.send(smalltalk.send(aSymbol, "_class", []), "__eq", [smalltalk.send(self, "_class", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); +(function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return smalltalk.send(smalltalk.send(self, "_asString", []), "__eq", [smalltalk.send(aSymbol, "_asString", [])])}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}} +}), +smalltalk.Symbol); smalltalk.addMethod( -unescape('_new_'), +unescape('__gt'), smalltalk.method({ -selector: unescape('new%3A'), -fn: function (anInteger) { +selector: unescape('%3E'), +fn: function (aSymbol) { var self=this; -return new Array(anInteger); +return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver >smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__gt", [smalltalk.send(aSymbol, "_asString", [])])); return self;} }), -smalltalk.Array.klass); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_with_'), +unescape('__gt_eq'), smalltalk.method({ -selector: unescape('with%3A'), -fn: function (anObject) { +selector: unescape('%3E%3D'), +fn: function (aSymbol) { var self=this; -return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(1)])); +return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver >=smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__gt_eq", [smalltalk.send(aSymbol, "_asString", [])])); return self;} }), -smalltalk.Array.klass); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_with_with_'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('with%3Awith%3A'), -fn: function (anObject, anObject2) { +selector: unescape('asJSON'), +fn: function (){ 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 smalltalk.send(smalltalk.send(self, "_asString", []), "_asJSON", []); return self;} }), -smalltalk.Array.klass); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_with_with_with_'), +unescape('_asJavascript'), smalltalk.method({ -selector: unescape('with%3Awith%3Awith%3A'), -fn: function (anObject, anObject2, anObject3) { +selector: unescape('asJavascript'), +fn: function () { 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 smalltalk.send(smalltalk.send(unescape("smalltalk.symbolFor%28%22"), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%22%29")]); return self;} }), -smalltalk.Array.klass); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_withAll_'), +unescape('_asSelector'), smalltalk.method({ -selector: unescape('withAll%3A'), -fn: function (aCollection) { +selector: unescape('asSelector'), +fn: function () { 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 smalltalk.send(smalltalk.send(self, "_asString", []), "_asSelector", []); return self;} }), -smalltalk.Array.klass); +smalltalk.Symbol); +smalltalk.addMethod( +unescape('_asString'), +smalltalk.method({ +selector: unescape('asString'), +fn: function () { +var self=this; +return self.value; +return self;} +}), +smalltalk.Symbol); -smalltalk.addClass('StringStream', smalltalk.Stream, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_next_'), +unescape('_asSymbol'), smalltalk.method({ -selector: unescape('next%3A'), -fn: function (anInteger) { +selector: unescape('asSymbol'), +fn: function () { var self=this; -var tempCollection=nil; -(tempCollection=smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_class", []), "_new", [])); -smalltalk.send(anInteger, "_timesRepeat_", [(function(){return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (tempCollection=smalltalk.send(tempCollection, "__comma", [smalltalk.send(self, "_next", [])]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (tempCollection=smalltalk.send(tempCollection, "__comma", [smalltalk.send(self, "_next", [])]));})]));})]); -return tempCollection; +return self; return self;} }), -smalltalk.StringStream); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_nextPut_'), +unescape('_at_ifAbsent_'), smalltalk.method({ -selector: unescape('nextPut%3A'), -fn: function (aString) { +selector: unescape('at%3AifAbsent%3A'), +fn: function (anIndex, aBlock) { var self=this; -smalltalk.send(self, "_nextPutAll_", [aString]); +return smalltalk.send(smalltalk.send(self, "_asString", []), "_at_ifAbsent_", [anIndex, aBlock]); return self;} }), -smalltalk.StringStream); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_nextPutAll_'), +unescape('_copyFrom_to_'), smalltalk.method({ -selector: unescape('nextPutAll%3A'), -fn: function (aString) { +selector: unescape('copyFrom%3Ato%3A'), +fn: function (anIndex, anotherIndex) { var self=this; -smalltalk.send(self, "_setCollection_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [(1), smalltalk.send(self, "_position", [])]), "__comma", [aString]), "__comma", [smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [((($receiver = ((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))).klass === smalltalk.Number) ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])])), smalltalk.send(smalltalk.send(self, "_collection", []), "_size", [])])])]); -smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])]))]); -smalltalk.send(self, "_setStreamSize_", [smalltalk.send(smalltalk.send(self, "_streamSize", []), "_max_", [smalltalk.send(self, "_position", [])])]); +return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [smalltalk.send(smalltalk.send(self, "_asString", []), "_copyFrom_to_", [anIndex, anotherIndex])]); return self;} }), -smalltalk.StringStream); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_cr'), +unescape('_deepCopy'), smalltalk.method({ -selector: unescape('cr'), +selector: unescape('deepCopy'), fn: function () { var self=this; -return smalltalk.send(self, "_nextPutAll_", [smalltalk.send((smalltalk.String || String), "_cr", [])]); +return self; return self;} }), -smalltalk.StringStream); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_crlf'), +unescape('_isSymbol'), smalltalk.method({ -selector: unescape('crlf'), +selector: unescape('isSymbol'), fn: function () { var self=this; -return smalltalk.send(self, "_nextPutAll_", [smalltalk.send((smalltalk.String || String), "_crlf", [])]); +return true; return self;} }), -smalltalk.StringStream); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_lf'), +unescape('_printString'), smalltalk.method({ -selector: unescape('lf'), +selector: unescape('printString'), fn: function () { var self=this; -return smalltalk.send(self, "_nextPutAll_", [smalltalk.send((smalltalk.String || String), "_lf", [])]); +return smalltalk.send(unescape("%23"), "__comma", [smalltalk.send(self, "_asString", [])]); return self;} }), -smalltalk.StringStream); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_space'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('space'), +selector: unescape('shallowCopy'), fn: function () { var self=this; -smalltalk.send(self, "_nextPut_", [" "]); +return self; return self;} }), -smalltalk.StringStream); +smalltalk.Symbol); +smalltalk.addMethod( +unescape('_size'), +smalltalk.method({ +selector: unescape('size'), +fn: function () { +var self=this; +return smalltalk.send(smalltalk.send(self, "_asString", []), "_size", []); +return self;} +}), +smalltalk.Symbol); -smalltalk.addClass('Set', smalltalk.Collection, ['elements'], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_add_'), +unescape('_basicNew'), smalltalk.method({ -selector: unescape('add%3A'), -fn: function (anObject) { +selector: unescape('basicNew'), +fn: function () { var self=this; +smalltalk.send(self, "_shouldNotImplement", []); +return self;} +}), +smalltalk.Symbol.klass); - var found; - for(var i=0; i < self['@elements'].length; i++) { - if(anObject == self['@elements'][i]) { - found = true; - break; - } - } - if(!found) {self['@elements'].push(anObject)} - ; +smalltalk.addMethod( +unescape('_fromString_'), +smalltalk.method({ +selector: unescape('fromString%3A'), +fn: function (aString) { +var self=this; +return smalltalk.send(self, "_lookup_", [aString]); return self;} }), -smalltalk.Set); +smalltalk.Symbol.klass); smalltalk.addMethod( -unescape('_remove_'), +unescape('_lookup_'), smalltalk.method({ -selector: unescape('remove%3A'), -fn: function (anObject) { +selector: unescape('lookup%3A'), +fn: function (aString) { var self=this; -smalltalk.send(self['@elements'], "_remove_", [anObject]); +return smalltalk.symbolFor(aString);; return self;} }), -smalltalk.Set); +smalltalk.Symbol.klass); + +smalltalk.addClass('Set', smalltalk.Collection, ['elements'], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_initialize'), +unescape('__eq'), smalltalk.method({ -selector: unescape('initialize'), -fn: function () { +selector: unescape('%3D'), +fn: function (aCollection) { var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.Collection); -(self['@elements']=[]); +return smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aCollection, "_class", [])]), "_and_", [(function(){return smalltalk.send(self['@elements'], "__eq", [smalltalk.send(aCollection, "_asArray", [])]);})]); return self;} }), smalltalk.Set); smalltalk.addMethod( -unescape('_size'), +unescape('_add_'), smalltalk.method({ -selector: unescape('size'), -fn: function () { +selector: unescape('add%3A'), +fn: function (anObject) { var self=this; -return smalltalk.send(self['@elements'], "_size", []); + + var found; + for(var i=0; i < self['@elements'].length; i++) { + if(anObject == self['@elements'][i]) { + found = true; + break; + } + } + if(!found) {self['@elements'].push(anObject)} + ; return self;} }), smalltalk.Set); @@ -2758,563 +2854,468 @@ return self;} smalltalk.Set); smalltalk.addMethod( -unescape('__eq'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('%3D'), -fn: function (aCollection) { +selector: unescape('initialize'), +fn: function () { var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aCollection, "_class", [])]), "_and_", [(function(){return smalltalk.send(self['@elements'], "__eq", [smalltalk.send(aCollection, "_asArray", [])]);})]); +smalltalk.send(self, "_initialize", [], smalltalk.Collection); +(self['@elements']=[]); return self;} }), smalltalk.Set); smalltalk.addMethod( -unescape('_select_'), +unescape('_remove_'), smalltalk.method({ -selector: unescape('select%3A'), -fn: function (aBlock) { +selector: unescape('remove%3A'), +fn: function (anObject) { var self=this; -var collection=nil; -(collection=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_do_", [(function(each){return ((($receiver = smalltalk.send(aBlock, "_value_", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(collection, "_add_", [each]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(collection, "_add_", [each]);})]));})]); -return collection; +smalltalk.send(self['@elements'], "_remove_", [anObject]); return self;} }), smalltalk.Set); - - -smalltalk.addClass('HashedCollection', smalltalk.Collection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_size'), +unescape('_select_'), smalltalk.method({ -selector: unescape('size'), -fn: function () { +selector: unescape('select%3A'), +fn: function (aBlock) { var self=this; -return smalltalk.send(smalltalk.send(self, "_keys", []), "_size", []); +var collection=nil; +(collection=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_do_", [(function(each){return ((($receiver = smalltalk.send(aBlock, "_value_", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(collection, "_add_", [each]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(collection, "_add_", [each]);})]));})]); +return collection; return self;} }), -smalltalk.HashedCollection); +smalltalk.Set); smalltalk.addMethod( -unescape('_associations'), +unescape('_size'), smalltalk.method({ -selector: unescape('associations'), +selector: unescape('size'), fn: function () { var self=this; -var associations=nil; -(associations=[]); -smalltalk.send(smalltalk.send(self, "_keys", []), "_do_", [(function(each){return smalltalk.send(associations, "_add_", [smalltalk.send((smalltalk.Association || Association), "_key_value_", [each, smalltalk.send(self, "_at_", [each])])]);})]); -return associations; +return smalltalk.send(self['@elements'], "_size", []); return self;} }), -smalltalk.HashedCollection); +smalltalk.Set); -smalltalk.addMethod( -unescape('_keys'), -smalltalk.method({ -selector: unescape('keys'), -fn: function () { -var self=this; - var keys = []; - for(var i in self) { - if(self.hasOwnProperty(i)) { - keys.push(i); - } - }; - return keys; - ; -return self;} -}), -smalltalk.HashedCollection); +smalltalk.addClass('RegularExpression', smalltalk.Object, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_values'), +unescape('_compile_'), smalltalk.method({ -selector: unescape('values'), -fn: function () { +selector: unescape('compile%3A'), +fn: function (aString) { var self=this; -return smalltalk.send(smalltalk.send(self, "_keys", []), "_collect_", [(function(each){return smalltalk.send(self, "_at_", [each]);})]); +return self.compile(aString); return self;} }), -smalltalk.HashedCollection); +smalltalk.RegularExpression); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_exec_'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), -fn: function (aKey, aValue) { +selector: unescape('exec%3A'), +fn: function (aString) { var self=this; -return smalltalk.send(self, "_basicAt_put_", [aKey, aValue]); +return self.exec(aString) || nil; return self;} }), -smalltalk.HashedCollection); +smalltalk.RegularExpression); smalltalk.addMethod( -unescape('_at_ifAbsent_'), +unescape('_test_'), smalltalk.method({ -selector: unescape('at%3AifAbsent%3A'), -fn: function (aKey, aBlock) { +selector: unescape('test%3A'), +fn: function (aString) { var self=this; -return smalltalk.send(smalltalk.send(self, "_includesKey_", [aKey]), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_basicAt_", [aKey]);}), aBlock]); +return self.test(aString); return self;} }), -smalltalk.HashedCollection); +smalltalk.RegularExpression); + smalltalk.addMethod( -unescape('_at_ifAbsentPut_'), +unescape('_fromString_'), smalltalk.method({ -selector: unescape('at%3AifAbsentPut%3A'), -fn: function (aKey, aBlock) { +selector: unescape('fromString%3A'), +fn: function (aString) { var self=this; -return smalltalk.send(self, "_at_ifAbsent_", [aKey, (function(){return smalltalk.send(self, "_at_put_", [aKey, smalltalk.send(aBlock, "_value", [])]);})]); +return smalltalk.send(self, "_fromString_flag_", [aString, ""]); return self;} }), -smalltalk.HashedCollection); +smalltalk.RegularExpression.klass); smalltalk.addMethod( -unescape('_at_ifPresent_'), +unescape('_fromString_flag_'), smalltalk.method({ -selector: unescape('at%3AifPresent%3A'), -fn: function (aKey, aBlock) { +selector: unescape('fromString%3Aflag%3A'), +fn: function (aString, anotherString) { var self=this; -return (($receiver = smalltalk.send(self, "_basicAt_", [aKey])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_at_", [aKey])]);})() : nil; +return new RegExp(aString, anotherString); return self;} }), -smalltalk.HashedCollection); +smalltalk.RegularExpression.klass); + +smalltalk.addClass('Stream', smalltalk.Object, ['collection', 'position', 'streamSize'], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_at_ifPresent_ifAbsent_'), +unescape('_atEnd'), smalltalk.method({ -selector: unescape('at%3AifPresent%3AifAbsent%3A'), -fn: function (aKey, aBlock, anotherBlock) { +selector: unescape('atEnd'), +fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_basicAt_", [aKey]), "_ifNil_ifNotNil_", [anotherBlock, (function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_at_", [aKey])]);})]); +return smalltalk.send(smalltalk.send(self, "_position", []), "__eq", [smalltalk.send(self, "_size", [])]); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_at_'), +unescape('_atStart'), smalltalk.method({ -selector: unescape('at%3A'), -fn: function (aKey) { +selector: unescape('atStart'), +fn: function () { var self=this; -return smalltalk.send(self, "_at_ifAbsent_", [aKey, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); +return smalltalk.send(smalltalk.send(self, "_position", []), "__eq", [(0)]); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_add_'), +unescape('_close'), smalltalk.method({ -selector: unescape('add%3A'), -fn: function (anAssociation) { +selector: unescape('close'), +fn: function () { var self=this; -smalltalk.send(self, "_at_put_", [smalltalk.send(anAssociation, "_key", []), smalltalk.send(anAssociation, "_value", [])]); + return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_addAll_'), +unescape('_collection'), smalltalk.method({ -selector: unescape('addAll%3A'), -fn: function (aHashedCollection) { +selector: unescape('collection'), +fn: function () { var self=this; -smalltalk.send(self, "_addAll_", [smalltalk.send(aHashedCollection, "_associations", [])], smalltalk.Collection); -return aHashedCollection; +return self['@collection']; return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_removeKey_'), +unescape('_contents'), smalltalk.method({ -selector: unescape('removeKey%3A'), -fn: function (aKey) { +selector: unescape('contents'), +fn: function () { var self=this; -smalltalk.send(self, "_remove_", [aKey]); +return smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [(1), smalltalk.send(self, "_streamSize", [])]); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_remove_ifAbsent_'), +unescape('_do_'), smalltalk.method({ -selector: unescape('remove%3AifAbsent%3A'), -fn: function (aKey, aBlock) { +selector: unescape('do%3A'), +fn: function (aBlock) { var self=this; -return smalltalk.send(self, "_removeKey_ifAbsent_", [aKey, aBlock]); +(function(){while(!(function(){return smalltalk.send(self, "_atEnd", []);})()) {(function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_next", [])]);})()}})(); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_removeKey_ifAbsent_'), +unescape('_flush'), smalltalk.method({ -selector: unescape('removeKey%3AifAbsent%3A'), -fn: function (aKey, aBlock) { +selector: unescape('flush'), +fn: function () { var self=this; -return ((($receiver = smalltalk.send(self, "_includesKey_", [aKey])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(aBlock, "_value", []);})() : (function(){return smalltalk.send(self, "_basicDelete_", [aKey]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(aBlock, "_value", []);}), (function(){return smalltalk.send(self, "_basicDelete_", [aKey]);})])); + return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('__eq'), +unescape('_isEmpty'), smalltalk.method({ -selector: unescape('%3D'), -fn: function (aHashedCollection) { +selector: unescape('isEmpty'), +fn: function () { var self=this; -try{((($receiver = smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aHashedCollection, "_class", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); -((($receiver = smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [smalltalk.send(aHashedCollection, "_size", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); -(function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return smalltalk.send(smalltalk.send(self, "_associations", []), "__eq", [smalltalk.send(aHashedCollection, "_associations", [])])}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}} +return smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [(0)]); +return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_shallowCopy'), +unescape('_next'), smalltalk.method({ -selector: unescape('shallowCopy'), +selector: unescape('next'), fn: function () { var self=this; -var copy=nil; -(copy=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(copy, "_at_put_", [smalltalk.send(each, "_key", []), smalltalk.send(each, "_value", [])]);})]); -return copy; +return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return nil;})() : (function(){smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);return smalltalk.send(self['@collection'], "_at_", [smalltalk.send(self, "_position", [])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return nil;}), (function(){smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);return smalltalk.send(self['@collection'], "_at_", [smalltalk.send(self, "_position", [])]);})])); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('__comma'), +unescape('_next_'), smalltalk.method({ -selector: unescape('%2C'), -fn: function (aCollection) { +selector: unescape('next%3A'), +fn: function (anInteger) { var self=this; -smalltalk.send(self, "_shouldNotImplement", []); +var tempCollection=nil; +(tempCollection=smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_class", []), "_new", [])); +smalltalk.send(anInteger, "_timesRepeat_", [(function(){return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(tempCollection, "_add_", [smalltalk.send(self, "_next", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(tempCollection, "_add_", [smalltalk.send(self, "_next", [])]);})]));})]); +return tempCollection; return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_copyFrom_to_'), +unescape('_nextPut_'), smalltalk.method({ -selector: unescape('copyFrom%3Ato%3A'), -fn: function (anIndex, anotherIndex) { +selector: unescape('nextPut%3A'), +fn: function (anObject) { var self=this; -smalltalk.send(self, "_shouldNotImplement", []); +smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]); +smalltalk.send(smalltalk.send(self, "_collection", []), "_at_put_", [smalltalk.send(self, "_position", []), anObject]); +smalltalk.send(self, "_setStreamSize_", [smalltalk.send(smalltalk.send(self, "_streamSize", []), "_max_", [smalltalk.send(self, "_position", [])])]); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_nextPutAll_'), smalltalk.method({ -selector: unescape('deepCopy'), -fn: function () { +selector: unescape('nextPutAll%3A'), +fn: function (aCollection) { var self=this; -var copy=nil; -(copy=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(copy, "_at_put_", [smalltalk.send(each, "_key", []), smalltalk.send(smalltalk.send(each, "_value", []), "_deepCopy", [])]);})]); -return copy; +smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(self, "_nextPut_", [each]);})]); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_associationsDo_'), +unescape('_peek'), smalltalk.method({ -selector: unescape('associationsDo%3A'), -fn: function (aBlock) { +selector: unescape('peek'), +fn: function () { var self=this; -smalltalk.send(smalltalk.send(self, "_associations", []), "_do_", [aBlock]); +return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_collection", []), "_at_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_collection", []), "_at_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})])); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_keysAndValuesDo_'), +unescape('_position'), smalltalk.method({ -selector: unescape('keysAndValuesDo%3A'), -fn: function (aBlock) { +selector: unescape('position'), +fn: function () { var self=this; -smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(aBlock, "_value_value_", [smalltalk.send(each, "_key", []), smalltalk.send(each, "_value", [])]);})]); +return (($receiver = self['@position']) == nil || $receiver == undefined) ? (function(){return (self['@position']=(0));})() : $receiver; return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_do_'), +unescape('_position_'), smalltalk.method({ -selector: unescape('do%3A'), -fn: function (aBlock) { +selector: unescape('position%3A'), +fn: function (anInteger) { var self=this; -smalltalk.send(smalltalk.send(self, "_values", []), "_do_", [aBlock]); +(self['@position']=anInteger); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_select_'), +unescape('_reset'), smalltalk.method({ -selector: unescape('select%3A'), -fn: function (aBlock) { +selector: unescape('reset'), +fn: function () { var self=this; -var newDict=nil; -(newDict=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return ((($receiver = smalltalk.send(aBlock, "_value_", [value])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(newDict, "_at_put_", [key, value]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(newDict, "_at_put_", [key, value]);})]));})]); -return newDict; +smalltalk.send(self, "_position_", [(0)]); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_collect_'), +unescape('_resetContents'), smalltalk.method({ -selector: unescape('collect%3A'), -fn: function (aBlock) { +selector: unescape('resetContents'), +fn: function () { var self=this; -var newDict=nil; -(newDict=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(newDict, "_at_put_", [key, smalltalk.send(aBlock, "_value_", [value])]);})]); -return newDict; +smalltalk.send(self, "_reset", []); +smalltalk.send(self, "_setStreamSize_", [(0)]); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_detect_ifNone_'), +unescape('_setCollection_'), smalltalk.method({ -selector: unescape('detect%3AifNone%3A'), -fn: function (aBlock, anotherBlock) { +selector: unescape('setCollection%3A'), +fn: function (aCollection) { var self=this; -return smalltalk.send(smalltalk.send(self, "_values", []), "_detect_ifNone_", [aBlock, anotherBlock]); +(self['@collection']=aCollection); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_includes_'), +unescape('_setStreamSize_'), smalltalk.method({ -selector: unescape('includes%3A'), -fn: function (anObject) { +selector: unescape('setStreamSize%3A'), +fn: function (anInteger) { var self=this; -return smalltalk.send(smalltalk.send(self, "_values", []), "_includes_", [anObject]); +(self['@streamSize']=anInteger); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_printString'), +unescape('_setToEnd'), smalltalk.method({ -selector: unescape('printString'), +selector: unescape('setToEnd'), fn: function () { var self=this; -return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(aStream){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Collection)]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);})(aStream);smalltalk.send(smalltalk.send(self, "_associations", []), "_do_separatedBy_", [(function(anAssociation){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(anAssociation, "_key", []), "_printString", [])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%20-%3E%20")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(anAssociation, "_value", []), "_printString", [])]);})(aStream);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%20%2C%20")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [unescape("%29")]);})]); +smalltalk.send(self, "_position_", [smalltalk.send(self, "_size", [])]); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_storeOn_'), +unescape('_size'), smalltalk.method({ -selector: unescape('storeOn%3A'), -fn: function (aStream) { +selector: unescape('size'), +fn: function () { var self=this; -smalltalk.send(aStream, "_nextPutAll_", [unescape("%23%7B")]); -smalltalk.send(smalltalk.send(self, "_associations", []), "_do_separatedBy_", [(function(each){return smalltalk.send(each, "_storeOn_", [aStream]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [". "]);})]); -smalltalk.send(aStream, "_nextPutAll_", [unescape("%7D")]); +return smalltalk.send(self, "_streamSize", []); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_includesKey_'), +unescape('_skip_'), smalltalk.method({ -selector: unescape('includesKey%3A'), -fn: function (aKey) { +selector: unescape('skip%3A'), +fn: function (anInteger) { var self=this; -return self.hasOwnProperty(aKey); +smalltalk.send(self, "_position_", [smalltalk.send(((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +anInteger : smalltalk.send($receiver, "__plus", [anInteger])), "_min_max_", [smalltalk.send(self, "_size", []), (0)])]); return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_asDictionary'), +unescape('_streamSize'), smalltalk.method({ -selector: unescape('asDictionary'), +selector: unescape('streamSize'), fn: function () { var self=this; -return smalltalk.send((smalltalk.Dictionary || Dictionary), "_fromPairs_", [smalltalk.send(self, "_associations", [])]); -return self;} -}), -smalltalk.HashedCollection); - -smalltalk.addMethod( -unescape('_asJSON'), -smalltalk.method({ -selector: unescape('asJSON'), -fn: function (){ -var self=this; -var c=nil; -(c=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(c, "_at_put_", [key, smalltalk.send(value, "_asJSON", [])]);})]); -return c; +return self['@streamSize']; return self;} }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_fromPairs_'), +unescape('_on_'), smalltalk.method({ -selector: unescape('fromPairs%3A'), +selector: unescape('on%3A'), fn: function (aCollection) { var self=this; -var dict=nil; -(dict=smalltalk.send(self, "_new", [])); -smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(dict, "_add_", [each]);})]); -return dict; +return (function($rec){smalltalk.send($rec, "_setCollection_", [aCollection]);smalltalk.send($rec, "_setStreamSize_", [smalltalk.send(aCollection, "_size", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;} }), -smalltalk.HashedCollection.klass); - +smalltalk.Stream.klass); -smalltalk.addClass('Dictionary', smalltalk.HashedCollection, ['keys', 'values'], 'Kernel-Collections'); -smalltalk.addMethod( -unescape('_at_ifAbsent_'), -smalltalk.method({ -selector: unescape('at%3AifAbsent%3A'), -fn: function (aKey, aBlock) { -var self=this; - - var index; - for(var i=0;i<self['@keys'].length;i++){ - if(self['@keys'][i].__eq(aKey)) {index = i;} - }; - if(typeof index === 'undefined') { - return aBlock(); - } else { - return self['@values'][index]; - } - ; -return self;} -}), -smalltalk.Dictionary); +smalltalk.addClass('StringStream', smalltalk.Stream, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_keys'), +unescape('_cr'), smalltalk.method({ -selector: unescape('keys'), +selector: unescape('cr'), fn: function () { var self=this; -return smalltalk.send(self['@keys'], "_copy", []); +return smalltalk.send(self, "_nextPutAll_", [smalltalk.send((smalltalk.String || String), "_cr", [])]); return self;} }), -smalltalk.Dictionary); +smalltalk.StringStream); smalltalk.addMethod( -unescape('_values'), +unescape('_crlf'), smalltalk.method({ -selector: unescape('values'), +selector: unescape('crlf'), fn: function () { var self=this; -return smalltalk.send(self['@values'], "_copy", []); +return smalltalk.send(self, "_nextPutAll_", [smalltalk.send((smalltalk.String || String), "_crlf", [])]); return self;} }), -smalltalk.Dictionary); +smalltalk.StringStream); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_lf'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), -fn: function (aKey, aValue) { +selector: unescape('lf'), +fn: function () { var self=this; - - var index = self['@keys'].indexOf(aKey); - if(index === -1) { - self['@values'].push(aValue); - self['@keys'].push(aKey); - } else { - self['@values'][index] = aValue; - }; - - return aValue; - ; +return smalltalk.send(self, "_nextPutAll_", [smalltalk.send((smalltalk.String || String), "_lf", [])]); return self;} }), -smalltalk.Dictionary); +smalltalk.StringStream); smalltalk.addMethod( -unescape('_removeKey_ifAbsent_'), +unescape('_next_'), smalltalk.method({ -selector: unescape('removeKey%3AifAbsent%3A'), -fn: function (aKey, aBlock) { +selector: unescape('next%3A'), +fn: function (anInteger) { var self=this; - - var index = self['@keys'].indexOf(aKey); - if(index === -1) { - return aBlock() - } else { - self['@keys'].splice(i, 1); - self['@values'].splice(i, 1); - return aKey - }; - ; +var tempCollection=nil; +(tempCollection=smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_class", []), "_new", [])); +smalltalk.send(anInteger, "_timesRepeat_", [(function(){return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (tempCollection=smalltalk.send(tempCollection, "__comma", [smalltalk.send(self, "_next", [])]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (tempCollection=smalltalk.send(tempCollection, "__comma", [smalltalk.send(self, "_next", [])]));})]));})]); +return tempCollection; return self;} }), -smalltalk.Dictionary); +smalltalk.StringStream); smalltalk.addMethod( -unescape('_initialize'), +unescape('_nextPut_'), smalltalk.method({ -selector: unescape('initialize'), -fn: function () { +selector: unescape('nextPut%3A'), +fn: function (aString) { var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.HashedCollection); -(self['@keys']=[]); -(self['@values']=[]); +smalltalk.send(self, "_nextPutAll_", [aString]); return self;} }), -smalltalk.Dictionary); +smalltalk.StringStream); smalltalk.addMethod( -unescape('_includesKey_'), +unescape('_nextPutAll_'), smalltalk.method({ -selector: unescape('includesKey%3A'), -fn: function (aKey) { +selector: unescape('nextPutAll%3A'), +fn: function (aString) { var self=this; -return smalltalk.send(self['@keys'], "_includes_", [aKey]); +smalltalk.send(self, "_setCollection_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [(1), smalltalk.send(self, "_position", [])]), "__comma", [aString]), "__comma", [smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [((($receiver = ((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))).klass === smalltalk.Number) ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])])), smalltalk.send(smalltalk.send(self, "_collection", []), "_size", [])])])]); +smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])]))]); +smalltalk.send(self, "_setStreamSize_", [smalltalk.send(smalltalk.send(self, "_streamSize", []), "_max_", [smalltalk.send(self, "_position", [])])]); return self;} }), -smalltalk.Dictionary); +smalltalk.StringStream); smalltalk.addMethod( -unescape('_asHashedCollection'), +unescape('_space'), smalltalk.method({ -selector: unescape('asHashedCollection'), +selector: unescape('space'), fn: function () { var self=this; -return smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_fromPairs_", [smalltalk.send(self, "_associations", [])]); -return self;} -}), -smalltalk.Dictionary); - -smalltalk.addMethod( -unescape('_asJSON'), -smalltalk.method({ -selector: unescape('asJSON'), -fn: function (){ -var self=this; -return smalltalk.send(smalltalk.send(self, "_asHashedCollection", []), "_asJSON", []); +smalltalk.send(self, "_nextPut_", [" "]); return self;} }), -smalltalk.Dictionary); +smalltalk.StringStream); diff --git a/amber/src/js/Kernel-Collections.js b/amber/src/js/Kernel-Collections.js index a5f8de61e49..94475532767 100644 --- a/amber/src/js/Kernel-Collections.js +++ b/amber/src/js/Kernel-Collections.js @@ -17,49 +17,51 @@ referencedClasses: [] smalltalk.Association); smalltalk.addMethod( -unescape('_key_'), +unescape('_key'), smalltalk.method({ -selector: unescape('key%3A'), +selector: unescape('key'), category: 'accessing', -fn: function (aKey) { +fn: function () { var self=this; -(self['@key']=aKey); +return self['@key']; return self;}, -args: ["aKey"], -source: unescape('key%3A%20aKey%0A%09key%20%3A%3D%20aKey'), +args: [], +source: unescape('key%0A%09%5Ekey'), messageSends: [], referencedClasses: [] }), smalltalk.Association); smalltalk.addMethod( -unescape('_key'), +unescape('_key_'), smalltalk.method({ -selector: unescape('key'), +selector: unescape('key%3A'), category: 'accessing', -fn: function () { +fn: function (aKey) { var self=this; -return self['@key']; +(self['@key']=aKey); return self;}, -args: [], -source: unescape('key%0A%09%5Ekey'), +args: ["aKey"], +source: unescape('key%3A%20aKey%0A%09key%20%3A%3D%20aKey'), messageSends: [], referencedClasses: [] }), smalltalk.Association); smalltalk.addMethod( -unescape('_value_'), +unescape('_storeOn_'), smalltalk.method({ -selector: unescape('value%3A'), -category: 'accessing', -fn: function (aValue) { +selector: unescape('storeOn%3A'), +category: 'comparing', +fn: function (aStream) { var self=this; -(self['@value']=aValue); +smalltalk.send(self['@key'], "_storeOn_", [aStream]); +smalltalk.send(aStream, "_nextPutAll_", [unescape("-%3E")]); +smalltalk.send(self['@value'], "_storeOn_", [aStream]); return self;}, -args: ["aValue"], -source: unescape('value%3A%20aValue%0A%09value%20%3A%3D%20aValue'), -messageSends: [], +args: ["aStream"], +source: unescape('storeOn%3A%20aStream%0A%09%22Store%20in%20the%20format%20%28key-%3Evalue%29%22%0A%0A%09%22aStream%20nextPutAll%3A%20%27%28%27.%22%0A%09key%20storeOn%3A%20aStream.%0A%09aStream%20nextPutAll%3A%20%27-%3E%27.%0A%09value%20storeOn%3A%20aStream.%0A%09%22aStream%20nextPutAll%3A%20%27%29%27%22'), +messageSends: ["storeOn:", "nextPutAll:"], referencedClasses: [] }), smalltalk.Association); @@ -81,19 +83,17 @@ referencedClasses: [] smalltalk.Association); smalltalk.addMethod( -unescape('_storeOn_'), +unescape('_value_'), smalltalk.method({ -selector: unescape('storeOn%3A'), -category: 'comparing', -fn: function (aStream) { +selector: unescape('value%3A'), +category: 'accessing', +fn: function (aValue) { var self=this; -smalltalk.send(self['@key'], "_storeOn_", [aStream]); -smalltalk.send(aStream, "_nextPutAll_", [unescape("-%3E")]); -smalltalk.send(self['@value'], "_storeOn_", [aStream]); +(self['@value']=aValue); return self;}, -args: ["aStream"], -source: unescape('storeOn%3A%20aStream%0A%09%22Store%20in%20the%20format%20%28key-%3Evalue%29%22%0A%0A%09%22aStream%20nextPutAll%3A%20%27%28%27.%22%0A%09key%20storeOn%3A%20aStream.%0A%09aStream%20nextPutAll%3A%20%27-%3E%27.%0A%09value%20storeOn%3A%20aStream.%0A%09%22aStream%20nextPutAll%3A%20%27%29%27%22'), -messageSends: ["storeOn:", "nextPutAll:"], +args: ["aValue"], +source: unescape('value%3A%20aValue%0A%09value%20%3A%3D%20aValue'), +messageSends: [], referencedClasses: [] }), smalltalk.Association); @@ -116,364 +116,346 @@ referencedClasses: [] smalltalk.Association.klass); -smalltalk.addClass('Stream', smalltalk.Object, ['collection', 'position', 'streamSize'], 'Kernel-Collections'); -smalltalk.addMethod( -unescape('_collection'), -smalltalk.method({ -selector: unescape('collection'), -category: 'accessing', -fn: function () { -var self=this; -return self['@collection']; -return self;}, -args: [], -source: unescape('collection%0A%09%5Ecollection'), -messageSends: [], -referencedClasses: [] -}), -smalltalk.Stream); - +smalltalk.addClass('Collection', smalltalk.Object, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_setCollection_'), +unescape('__comma'), smalltalk.method({ -selector: unescape('setCollection%3A'), -category: 'accessing', +selector: unescape('%2C'), +category: 'copying', fn: function (aCollection) { var self=this; -(self['@collection']=aCollection); +return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_copy", [])); return self;}, args: ["aCollection"], -source: unescape('setCollection%3A%20aCollection%0A%09collection%20%3A%3D%20aCollection'), -messageSends: [], +source: unescape('%2C%20aCollection%0A%09%5Eself%20copy%20%0A%09%20%20%20%20addAll%3A%20aCollection%3B%20%0A%09%20%20%20%20yourself'), +messageSends: ["addAll:", "yourself", "copy"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_position'), +unescape('_add_'), smalltalk.method({ -selector: unescape('position'), -category: 'accessing', -fn: function () { +selector: unescape('add%3A'), +category: 'adding/removing', +fn: function (anObject) { var self=this; -return (($receiver = self['@position']) == nil || $receiver == undefined) ? (function(){return (self['@position']=(0));})() : $receiver; +smalltalk.send(self, "_subclassResponsibility", []); return self;}, -args: [], -source: unescape('position%0A%09%5Eposition%20ifNil%3A%20%5Bposition%20%3A%3D%200%5D'), -messageSends: ["ifNil:"], +args: ["anObject"], +source: unescape('add%3A%20anObject%0A%09self%20subclassResponsibility'), +messageSends: ["subclassResponsibility"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_position_'), +unescape('_addAll_'), smalltalk.method({ -selector: unescape('position%3A'), -category: 'accessing', -fn: function (anInteger) { +selector: unescape('addAll%3A'), +category: 'adding/removing', +fn: function (aCollection) { var self=this; -(self['@position']=anInteger); +smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(self, "_add_", [each]);})]); +return aCollection; return self;}, -args: ["anInteger"], -source: unescape('position%3A%20anInteger%0A%09position%20%3A%3D%20anInteger'), -messageSends: [], +args: ["aCollection"], +source: unescape('addAll%3A%20aCollection%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20add%3A%20each%5D.%0A%09%5EaCollection'), +messageSends: ["do:", "add:"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_streamSize'), +unescape('_asArray'), smalltalk.method({ -selector: unescape('streamSize'), -category: 'accessing', +selector: unescape('asArray'), +category: 'converting', fn: function () { var self=this; -return self['@streamSize']; +return smalltalk.send((smalltalk.Array || Array), "_withAll_", [self]); return self;}, args: [], -source: unescape('streamSize%0A%09%5EstreamSize'), -messageSends: [], -referencedClasses: [] +source: unescape('asArray%0A%09%5EArray%20withAll%3A%20self'), +messageSends: ["withAll:"], +referencedClasses: ["Array"] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_setStreamSize_'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('setStreamSize%3A'), -category: 'accessing', -fn: function (anInteger) { +selector: unescape('asJSON'), +category: 'converting', +fn: function (){ var self=this; -(self['@streamSize']=anInteger); +return smalltalk.send(smalltalk.send(self, "_asArray", []), "_collect_", [(function(each){return smalltalk.send(each, "_asJSON", []);})]); return self;}, -args: ["anInteger"], -source: unescape('setStreamSize%3A%20anInteger%0A%09streamSize%20%3A%3D%20anInteger'), -messageSends: [], +args: [], +source: unescape('asJSON%0A%09%5Eself%20asArray%20collect%3A%20%5B%3Aeach%20%7C%20each%20asJSON%5D'), +messageSends: ["collect:", "asArray", "asJSON"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_contents'), +unescape('_asOrderedCollection'), smalltalk.method({ -selector: unescape('contents'), -category: 'accessing', +selector: unescape('asOrderedCollection'), +category: 'converting', fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [(1), smalltalk.send(self, "_streamSize", [])]); +return smalltalk.send(self, "_asArray", []); return self;}, args: [], -source: unescape('contents%0A%09%5Eself%20collection%0A%09%20%20%20%20copyFrom%3A%201%20%0A%09%20%20%20%20to%3A%20self%20streamSize'), -messageSends: ["copyFrom:to:", "collection", "streamSize"], +source: unescape('asOrderedCollection%0A%09%5Eself%20asArray'), +messageSends: ["asArray"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_size'), +unescape('_asSet'), smalltalk.method({ -selector: unescape('size'), -category: 'accessing', +selector: unescape('asSet'), +category: 'converting', fn: function () { var self=this; -return smalltalk.send(self, "_streamSize", []); +return smalltalk.send((smalltalk.Set || Set), "_withAll_", [self]); return self;}, args: [], -source: unescape('size%0A%09%5Eself%20streamSize'), -messageSends: ["streamSize"], -referencedClasses: [] +source: unescape('asSet%0A%09%5ESet%20withAll%3A%20self'), +messageSends: ["withAll:"], +referencedClasses: ["Set"] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_reset'), +unescape('_collect_'), smalltalk.method({ -selector: unescape('reset'), -category: 'actions', -fn: function () { +selector: unescape('collect%3A'), +category: 'enumerating', +fn: function (aBlock) { var self=this; -smalltalk.send(self, "_position_", [(0)]); +var newCollection=nil; +(newCollection=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_do_", [(function(each){return smalltalk.send(newCollection, "_add_", [smalltalk.send(aBlock, "_value_", [each])]);})]); +return newCollection; return self;}, -args: [], -source: unescape('reset%0A%09self%20position%3A%200'), -messageSends: ["position:"], +args: ["aBlock"], +source: unescape('collect%3A%20aBlock%0A%09%7C%20newCollection%20%7C%0A%09newCollection%20%3A%3D%20self%20class%20new.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20newCollection%20add%3A%20%28aBlock%20value%3A%20each%29%5D.%0A%09%5EnewCollection'), +messageSends: ["new", "class", "do:", "add:", "value:"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_close'), +unescape('_copyWith_'), smalltalk.method({ -selector: unescape('close'), -category: 'actions', -fn: function () { +selector: unescape('copyWith%3A'), +category: 'copying', +fn: function (anObject) { var self=this; - +return (function($rec){smalltalk.send($rec, "_add_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_copy", [])); return self;}, -args: [], -source: unescape('close'), -messageSends: [], +args: ["anObject"], +source: unescape('copyWith%3A%20anObject%0A%09%5Eself%20copy%20add%3A%20anObject%3B%20yourself'), +messageSends: ["add:", "yourself", "copy"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_flush'), +unescape('_copyWithAll_'), smalltalk.method({ -selector: unescape('flush'), -category: 'actions', -fn: function () { +selector: unescape('copyWithAll%3A'), +category: 'copying', +fn: function (aCollection) { var self=this; - +return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_copy", [])); return self;}, -args: [], -source: unescape('flush'), -messageSends: [], +args: ["aCollection"], +source: unescape('copyWithAll%3A%20aCollection%0A%09%5Eself%20copy%20addAll%3A%20aCollection%3B%20yourself'), +messageSends: ["addAll:", "yourself", "copy"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_resetContents'), +unescape('_copyWithoutAll_'), smalltalk.method({ -selector: unescape('resetContents'), -category: 'actions', -fn: function () { -var self=this; -smalltalk.send(self, "_reset", []); -smalltalk.send(self, "_setStreamSize_", [(0)]); +selector: unescape('copyWithoutAll%3A'), +category: 'copying', +fn: function (aCollection) { +var self=this; +return smalltalk.send(self, "_reject_", [(function(each){return smalltalk.send(aCollection, "_includes_", [each]);})]); return self;}, -args: [], -source: unescape('resetContents%0A%09self%20reset.%0A%09self%20setStreamSize%3A%200'), -messageSends: ["reset", "setStreamSize:"], +args: ["aCollection"], +source: unescape('copyWithoutAll%3A%20aCollection%0A%09%22Answer%20a%20copy%20of%20the%20receiver%20that%20does%20not%20contain%20any%20elements%20%0A%09equal%20to%20those%20in%20aCollection.%22%0A%0A%09%5E%20self%20reject%3A%20%5B%3Aeach%20%7C%20aCollection%20includes%3A%20each%5D'), +messageSends: ["reject:", "includes:"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_do_'), +unescape('_detect_'), smalltalk.method({ -selector: unescape('do%3A'), +selector: unescape('detect%3A'), category: 'enumerating', fn: function (aBlock) { var self=this; -(function(){while(!(function(){return smalltalk.send(self, "_atEnd", []);})()) {(function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_next", [])]);})()}})(); +return smalltalk.send(self, "_detect_ifNone_", [aBlock, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); return self;}, args: ["aBlock"], -source: unescape('do%3A%20aBlock%0A%09%5Bself%20atEnd%5D%20whileFalse%3A%20%5BaBlock%20value%3A%20self%20next%5D'), -messageSends: ["whileFalse:", "atEnd", "value:", "next"], +source: unescape('detect%3A%20aBlock%0A%09%5Eself%20detect%3A%20aBlock%20ifNone%3A%20%5Bself%20errorNotFound%5D'), +messageSends: ["detect:ifNone:", "errorNotFound"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_setToEnd'), +unescape('_detect_ifNone_'), smalltalk.method({ -selector: unescape('setToEnd'), -category: 'positioning', -fn: function () { +selector: unescape('detect%3AifNone%3A'), +category: 'enumerating', +fn: function (aBlock, anotherBlock) { var self=this; -smalltalk.send(self, "_position_", [smalltalk.send(self, "_size", [])]); -return self;}, -args: [], -source: unescape('setToEnd%0A%09self%20position%3A%20self%20size'), -messageSends: ["position:", "size"], -referencedClasses: [] -}), -smalltalk.Stream); -smalltalk.addMethod( -unescape('_skip_'), -smalltalk.method({ -selector: unescape('skip%3A'), -category: 'positioning', -fn: function (anInteger) { -var self=this; -smalltalk.send(self, "_position_", [smalltalk.send(((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +anInteger : smalltalk.send($receiver, "__plus", [anInteger])), "_min_max_", [smalltalk.send(self, "_size", []), (0)])]); + for(var i = 0; i < self.length; i++) + if(aBlock(self[i])) + return self[i]; + return anotherBlock(); + ; return self;}, -args: ["anInteger"], -source: unescape('skip%3A%20anInteger%0A%09self%20position%3A%20%28%28self%20position%20+%20anInteger%29%20min%3A%20self%20size%20max%3A%200%29'), -messageSends: ["position:", "min:max:", unescape("+"), "position", "size"], +args: ["aBlock", "anotherBlock"], +source: unescape('detect%3A%20aBlock%20ifNone%3A%20anotherBlock%0A%09%3C%0A%09%09for%28var%20i%20%3D%200%3B%20i%20%3C%20self.length%3B%20i++%29%0A%09%09%09if%28aBlock%28self%5Bi%5D%29%29%0A%09%09%09%09return%20self%5Bi%5D%3B%0A%09%09return%20anotherBlock%28%29%3B%0A%09%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_next'), +unescape('_do_'), smalltalk.method({ -selector: unescape('next'), -category: 'reading', -fn: function () { +selector: unescape('do%3A'), +category: 'enumerating', +fn: function (aBlock) { var self=this; -return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return nil;})() : (function(){smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);return smalltalk.send(self['@collection'], "_at_", [smalltalk.send(self, "_position", [])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return nil;}), (function(){smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);return smalltalk.send(self['@collection'], "_at_", [smalltalk.send(self, "_position", [])]);})])); +for(var i=0;i<self.length;i++){aBlock(self[i]);}; return self;}, -args: [], -source: unescape('next%0A%09%5Eself%20atEnd%20%0A%09%09ifTrue%3A%20%5Bnil%5D%0A%09%09ifFalse%3A%20%5B%0A%09%09%09self%20position%3A%20self%20position%20+%201.%20%0A%09%09%09collection%20at%3A%20self%20position%5D'), -messageSends: ["ifTrue:ifFalse:", "atEnd", "position:", unescape("+"), "position", "at:"], +args: ["aBlock"], +source: unescape('do%3A%20aBlock%0A%09%3Cfor%28var%20i%3D0%3Bi%3Cself.length%3Bi++%29%7BaBlock%28self%5Bi%5D%29%3B%7D%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_next_'), +unescape('_do_separatedBy_'), smalltalk.method({ -selector: unescape('next%3A'), -category: 'reading', -fn: function (anInteger) { +selector: unescape('do%3AseparatedBy%3A'), +category: 'enumerating', +fn: function (aBlock, anotherBlock) { var self=this; -var tempCollection=nil; -(tempCollection=smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_class", []), "_new", [])); -smalltalk.send(anInteger, "_timesRepeat_", [(function(){return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(tempCollection, "_add_", [smalltalk.send(self, "_next", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(tempCollection, "_add_", [smalltalk.send(self, "_next", [])]);})]));})]); -return tempCollection; +var first=nil; +(first=true); +smalltalk.send(self, "_do_", [(function(each){((($receiver = first).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (first=false);})() : (function(){return smalltalk.send(anotherBlock, "_value", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (first=false);}), (function(){return smalltalk.send(anotherBlock, "_value", []);})]));return smalltalk.send(aBlock, "_value_", [each]);})]); return self;}, -args: ["anInteger"], -source: unescape('next%3A%20anInteger%0A%09%7C%20tempCollection%20%7C%0A%09tempCollection%20%3A%3D%20self%20collection%20class%20new.%0A%09anInteger%20timesRepeat%3A%20%5B%0A%09%20%20%20%20self%20atEnd%20ifFalse%3A%20%5B%0A%09%09tempCollection%20add%3A%20self%20next%5D%5D.%0A%09%5EtempCollection'), -messageSends: ["new", "class", "collection", "timesRepeat:", "ifFalse:", "atEnd", "add:", "next"], +args: ["aBlock", "anotherBlock"], +source: unescape('do%3A%20aBlock%20separatedBy%3A%20anotherBlock%0A%09%7C%20first%20%7C%0A%09first%20%3A%3D%20true.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20first%0A%09%09ifTrue%3A%20%5Bfirst%20%3A%3D%20false%5D%0A%09%09ifFalse%3A%20%5BanotherBlock%20value%5D.%0A%09%20%20%20%20aBlock%20value%3A%20each%5D'), +messageSends: ["do:", "ifTrue:ifFalse:", "value", "value:"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_nextPut_'), +unescape('_errorNotFound'), smalltalk.method({ -selector: unescape('nextPut%3A'), -category: 'writing', -fn: function (anObject) { +selector: unescape('errorNotFound'), +category: 'error handling', +fn: function () { var self=this; -smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]); -smalltalk.send(smalltalk.send(self, "_collection", []), "_at_put_", [smalltalk.send(self, "_position", []), anObject]); -smalltalk.send(self, "_setStreamSize_", [smalltalk.send(smalltalk.send(self, "_streamSize", []), "_max_", [smalltalk.send(self, "_position", [])])]); +smalltalk.send(self, "_error_", ["Object is not in the collection"]); return self;}, -args: ["anObject"], -source: unescape('nextPut%3A%20anObject%0A%09self%20position%3A%20self%20position%20+%201.%0A%09self%20collection%20at%3A%20self%20position%20put%3A%20anObject.%0A%09self%20setStreamSize%3A%20%28self%20streamSize%20max%3A%20self%20position%29'), -messageSends: ["position:", unescape("+"), "position", "at:put:", "collection", "setStreamSize:", "max:", "streamSize"], +args: [], +source: unescape('errorNotFound%0A%09self%20error%3A%20%27Object%20is%20not%20in%20the%20collection%27'), +messageSends: ["error:"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_nextPutAll_'), +unescape('_ifEmpty_'), smalltalk.method({ -selector: unescape('nextPutAll%3A'), -category: 'writing', -fn: function (aCollection) { +selector: unescape('ifEmpty%3A'), +category: 'testing', +fn: function (aBlock){ var self=this; -smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(self, "_nextPut_", [each]);})]); +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;}, -args: ["aCollection"], -source: unescape('nextPutAll%3A%20aCollection%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20nextPut%3A%20each%5D'), -messageSends: ["do:", "nextPut:"], +args: ["aBlock"], +source: unescape('ifEmpty%3A%20aBlock%0A%09%22Evaluate%20the%20given%20block%20with%20the%20receiver%20as%20argument%2C%20answering%20its%20value%20if%20the%20receiver%20is%20empty%2C%20otherwise%20answer%20the%20receiver.%20Note%20that%20the%20fact%20that%20this%20method%20returns%20its%20argument%20in%20case%20the%20receiver%20is%20not%20empty%20allows%20one%20to%20write%20expressions%20like%20the%20following%20ones%3A%20self%20classifyMethodAs%3A%20%0A%09%09%28myProtocol%20ifEmpty%3A%20%5B%27As%20yet%20unclassified%27%5D%29%22%0A%09%5E%20self%20isEmpty%20%0A%09%09ifTrue%3A%20%5B%20aBlock%20value%20%5D%0A%09%09ifFalse%3A%20%5B%20self%20%5D'), +messageSends: ["ifTrue:ifFalse:", "isEmpty", "value"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_peek'), +unescape('_ifNotEmpty_'), smalltalk.method({ -selector: unescape('peek'), -category: 'reading', -fn: function () { +selector: unescape('ifNotEmpty%3A'), +category: 'testing', +fn: function (aBlock) { var self=this; -return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_collection", []), "_at_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_collection", []), "_at_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})])); +smalltalk.send(smalltalk.send(self, "_notEmpty", []), "_ifTrue_", [aBlock]); return self;}, -args: [], -source: unescape('peek%0A%09%5Eself%20atEnd%20ifFalse%3A%20%5B%0A%09%20%20%20%20self%20collection%20at%3A%20self%20position%20+%201%5D'), -messageSends: ["ifFalse:", "atEnd", "at:", "collection", unescape("+"), "position"], +args: ["aBlock"], +source: unescape('ifNotEmpty%3A%20aBlock%0A%09self%20notEmpty%20ifTrue%3A%20aBlock.'), +messageSends: ["ifTrue:", "notEmpty"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_atEnd'), +unescape('_includes_'), smalltalk.method({ -selector: unescape('atEnd'), +selector: unescape('includes%3A'), category: 'testing', -fn: function () { +fn: function (anObject) { var self=this; -return smalltalk.send(smalltalk.send(self, "_position", []), "__eq", [smalltalk.send(self, "_size", [])]); + + var i = self.length; + while (i--) { + if (smalltalk.send(self[i], "__eq", [anObject])) {return true;} + } + return false + ; return self;}, -args: [], -source: unescape('atEnd%0A%09%5Eself%20position%20%3D%20self%20size'), -messageSends: [unescape("%3D"), "position", "size"], +args: ["anObject"], +source: unescape('includes%3A%20anObject%0A%09%3C%0A%09%09var%20i%20%3D%20self.length%3B%0A%09%09while%20%28i--%29%20%7B%0A%09%09%09if%20%28smalltalk.send%28self%5Bi%5D%2C%20%22__eq%22%2C%20%5BanObject%5D%29%29%20%7Breturn%20true%3B%7D%09%0A%09%09%7D%0A%09%09return%20false%0A%09%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( -unescape('_atStart'), +unescape('_inject_into_'), smalltalk.method({ -selector: unescape('atStart'), -category: 'testing', -fn: function () { +selector: unescape('inject%3Ainto%3A'), +category: 'enumerating', +fn: function (anObject, aBlock) { var self=this; -return smalltalk.send(smalltalk.send(self, "_position", []), "__eq", [(0)]); +var result=nil; +(result=anObject); +smalltalk.send(self, "_do_", [(function(each){return (result=smalltalk.send(aBlock, "_value_value_", [result, each]));})]); +return result; return self;}, -args: [], -source: unescape('atStart%0A%09%5Eself%20position%20%3D%200'), -messageSends: [unescape("%3D"), "position"], +args: ["anObject", "aBlock"], +source: unescape('inject%3A%20anObject%20into%3A%20aBlock%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%20anObject.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%20%20%20%20result%20%3A%3D%20aBlock%20value%3A%20result%20value%3A%20each%5D.%0A%09%5Eresult'), +messageSends: ["do:", "value:value:"], referencedClasses: [] }), -smalltalk.Stream); +smalltalk.Collection); smalltalk.addMethod( unescape('_isEmpty'), @@ -489,110 +471,107 @@ source: unescape('isEmpty%0A%09%5Eself%20size%20%3D%200'), messageSends: [unescape("%3D"), "size"], referencedClasses: [] }), -smalltalk.Stream); - +smalltalk.Collection); smalltalk.addMethod( -unescape('_on_'), +unescape('_notEmpty'), smalltalk.method({ -selector: unescape('on%3A'), -category: 'instance creation', -fn: function (aCollection) { +selector: unescape('notEmpty'), +category: 'testing', +fn: function () { var self=this; -return (function($rec){smalltalk.send($rec, "_setCollection_", [aCollection]);smalltalk.send($rec, "_setStreamSize_", [smalltalk.send(aCollection, "_size", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return smalltalk.send(smalltalk.send(self, "_isEmpty", []), "_not", []); return self;}, -args: ["aCollection"], -source: unescape('on%3A%20aCollection%0A%09%20%20%20%20%5Eself%20new%20%0A%09%09setCollection%3A%20aCollection%3B%0A%09%09setStreamSize%3A%20aCollection%20size%3B%0A%09%09yourself'), -messageSends: ["setCollection:", "setStreamSize:", "size", "yourself", "new"], +args: [], +source: unescape('notEmpty%0A%09%5Eself%20isEmpty%20not'), +messageSends: ["not", "isEmpty"], referencedClasses: [] }), -smalltalk.Stream.klass); - +smalltalk.Collection); -smalltalk.addClass('RegularExpression', smalltalk.Object, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_compile_'), +unescape('_readStream'), smalltalk.method({ -selector: unescape('compile%3A'), -category: 'evaluating', -fn: function (aString) { +selector: unescape('readStream'), +category: 'accessing', +fn: function () { var self=this; -return self.compile(aString); +return smalltalk.send(self, "_stream", []); return self;}, -args: ["aString"], -source: unescape('compile%3A%20aString%0A%09%3Creturn%20self.compile%28aString%29%3E'), -messageSends: [], +args: [], +source: unescape('readStream%0A%09%5Eself%20stream'), +messageSends: ["stream"], referencedClasses: [] }), -smalltalk.RegularExpression); +smalltalk.Collection); smalltalk.addMethod( -unescape('_exec_'), +unescape('_reject_'), smalltalk.method({ -selector: unescape('exec%3A'), -category: 'evaluating', -fn: function (aString) { +selector: unescape('reject%3A'), +category: 'enumerating', +fn: function (aBlock) { var self=this; -return self.exec(aString) || nil; +return smalltalk.send(self, "_select_", [(function(each){return smalltalk.send(smalltalk.send(aBlock, "_value_", [each]), "__eq", [false]);})]); return self;}, -args: ["aString"], -source: unescape('exec%3A%20aString%0A%09%3Creturn%20self.exec%28aString%29%20%7C%7C%20nil%3E'), -messageSends: [], +args: ["aBlock"], +source: unescape('reject%3A%20aBlock%0A%09%5Eself%20select%3A%20%5B%3Aeach%20%7C%20%28aBlock%20value%3A%20each%29%20%3D%20false%5D'), +messageSends: ["select:", unescape("%3D"), "value:"], referencedClasses: [] }), -smalltalk.RegularExpression); +smalltalk.Collection); smalltalk.addMethod( -unescape('_test_'), +unescape('_remove_'), smalltalk.method({ -selector: unescape('test%3A'), -category: 'evaluating', -fn: function (aString) { +selector: unescape('remove%3A'), +category: 'adding/removing', +fn: function (anObject) { var self=this; -return self.test(aString); +return smalltalk.send(self, "_remove_ifAbsent_", [anObject, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); return self;}, -args: ["aString"], -source: unescape('test%3A%20aString%0A%09%3Creturn%20self.test%28aString%29%3E'), -messageSends: [], +args: ["anObject"], +source: unescape('remove%3A%20anObject%0A%20%20%20%20%5Eself%20remove%3A%20anObject%20ifAbsent%3A%20%5Bself%20errorNotFound%5D'), +messageSends: ["remove:ifAbsent:", "errorNotFound"], referencedClasses: [] }), -smalltalk.RegularExpression); - +smalltalk.Collection); smalltalk.addMethod( -unescape('_fromString_flag_'), +unescape('_remove_ifAbsent_'), smalltalk.method({ -selector: unescape('fromString%3Aflag%3A'), -category: 'instance creation', -fn: function (aString, anotherString) { +selector: unescape('remove%3AifAbsent%3A'), +category: 'adding/removing', +fn: function (anObject, aBlock) { var self=this; -return new RegExp(aString, anotherString); +smalltalk.send(self, "_subclassResponsibility", []); return self;}, -args: ["aString", "anotherString"], -source: unescape('fromString%3A%20aString%20flag%3A%20anotherString%0A%09%3Creturn%20new%20RegExp%28aString%2C%20anotherString%29%3E'), -messageSends: [], +args: ["anObject", "aBlock"], +source: unescape('remove%3A%20anObject%20ifAbsent%3A%20aBlock%0A%20%20%20%20self%20subclassResponsibility'), +messageSends: ["subclassResponsibility"], referencedClasses: [] }), -smalltalk.RegularExpression.klass); +smalltalk.Collection); smalltalk.addMethod( -unescape('_fromString_'), +unescape('_select_'), smalltalk.method({ -selector: unescape('fromString%3A'), -category: 'instance creation', -fn: function (aString) { +selector: unescape('select%3A'), +category: 'enumerating', +fn: function (aBlock) { var self=this; -return smalltalk.send(self, "_fromString_flag_", [aString, ""]); +var stream=nil; +(stream=smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_new", []), "_writeStream", [])); +smalltalk.send(self, "_do_", [(function(each){return ((($receiver = smalltalk.send(aBlock, "_value_", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(stream, "_nextPut_", [each]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(stream, "_nextPut_", [each]);})]));})]); +return smalltalk.send(stream, "_contents", []); return self;}, -args: ["aString"], -source: unescape('fromString%3A%20aString%0A%09%20%20%20%20%5Eself%20fromString%3A%20aString%20flag%3A%20%27%27'), -messageSends: ["fromString:flag:"], +args: ["aBlock"], +source: unescape('select%3A%20aBlock%0A%09%7C%20stream%20%7C%0A%09stream%20%3A%3D%20self%20class%20new%20writeStream.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20%28aBlock%20value%3A%20each%29%20ifTrue%3A%20%5B%0A%09%09stream%20nextPut%3A%20each%5D%5D.%0A%09%5Estream%20contents'), +messageSends: ["writeStream", "new", "class", "do:", "ifTrue:", "value:", "nextPut:", "contents"], referencedClasses: [] }), -smalltalk.RegularExpression.klass); - +smalltalk.Collection); -smalltalk.addClass('Collection', smalltalk.Object, [], 'Kernel-Collections'); smalltalk.addMethod( unescape('_size'), smalltalk.method({ @@ -610,17 +589,33 @@ referencedClasses: [] smalltalk.Collection); smalltalk.addMethod( -unescape('_readStream'), +unescape('_stream'), smalltalk.method({ -selector: unescape('readStream'), +selector: unescape('stream'), category: 'accessing', fn: function () { var self=this; -return smalltalk.send(self, "_stream", []); +return smalltalk.send(smalltalk.send(self, "_streamClass", []), "_on_", [self]); return self;}, args: [], -source: unescape('readStream%0A%09%5Eself%20stream'), -messageSends: ["stream"], +source: unescape('stream%0A%09%5Eself%20streamClass%20on%3A%20self'), +messageSends: ["on:", "streamClass"], +referencedClasses: [] +}), +smalltalk.Collection); + +smalltalk.addMethod( +unescape('_streamClass'), +smalltalk.method({ +selector: unescape('streamClass'), +category: 'accessing', +fn: function () { +var self=this; +return smalltalk.send(smalltalk.send(self, "_class", []), "_streamClass", []); +return self;}, +args: [], +source: unescape('streamClass%0A%09%5Eself%20class%20streamClass'), +messageSends: ["streamClass", "class"], referencedClasses: [] }), smalltalk.Collection); @@ -641,21 +636,22 @@ referencedClasses: [] }), smalltalk.Collection); + smalltalk.addMethod( -unescape('_stream'), +unescape('_new_'), smalltalk.method({ -selector: unescape('stream'), -category: 'accessing', -fn: function () { +selector: unescape('new%3A'), +category: 'instance creation', +fn: function (anInteger) { var self=this; -return smalltalk.send(smalltalk.send(self, "_streamClass", []), "_on_", [self]); +return smalltalk.send(self, "_new", []); return self;}, -args: [], -source: unescape('stream%0A%09%5Eself%20streamClass%20on%3A%20self'), -messageSends: ["on:", "streamClass"], +args: ["anInteger"], +source: unescape('new%3A%20anInteger%0A%09%5Eself%20new'), +messageSends: ["new"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.Collection.klass); smalltalk.addMethod( unescape('_streamClass'), @@ -664,162 +660,369 @@ selector: unescape('streamClass'), category: 'accessing', fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_class", []), "_streamClass", []); +return (smalltalk.Stream || Stream); return self;}, args: [], -source: unescape('streamClass%0A%09%5Eself%20class%20streamClass'), -messageSends: ["streamClass", "class"], -referencedClasses: [] +source: unescape('streamClass%0A%09%20%20%20%20%5EStream'), +messageSends: [], +referencedClasses: ["Stream"] }), -smalltalk.Collection); +smalltalk.Collection.klass); smalltalk.addMethod( -unescape('_add_'), +unescape('_with_'), smalltalk.method({ -selector: unescape('add%3A'), -category: 'adding/removing', +selector: unescape('with%3A'), +category: 'instance creation', fn: function (anObject) { var self=this; -smalltalk.send(self, "_subclassResponsibility", []); +return (function($rec){smalltalk.send($rec, "_add_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, args: ["anObject"], -source: unescape('add%3A%20anObject%0A%09self%20subclassResponsibility'), -messageSends: ["subclassResponsibility"], +source: unescape('with%3A%20anObject%0A%09%20%20%20%20%5Eself%20new%0A%09%09add%3A%20anObject%3B%0A%09%09yourself'), +messageSends: ["add:", "yourself", "new"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.Collection.klass); smalltalk.addMethod( -unescape('_addAll_'), +unescape('_with_with_'), smalltalk.method({ -selector: unescape('addAll%3A'), -category: 'adding/removing', -fn: function (aCollection) { +selector: unescape('with%3Awith%3A'), +category: 'instance creation', +fn: function (anObject, anotherObject) { var self=this; -smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(self, "_add_", [each]);})]); -return aCollection; +return (function($rec){smalltalk.send($rec, "_add_", [anObject]);smalltalk.send($rec, "_add_", [anotherObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, -args: ["aCollection"], -source: unescape('addAll%3A%20aCollection%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20add%3A%20each%5D.%0A%09%5EaCollection'), -messageSends: ["do:", "add:"], +args: ["anObject", "anotherObject"], +source: unescape('with%3A%20anObject%20with%3A%20anotherObject%0A%09%20%20%20%20%5Eself%20new%0A%09%09add%3A%20anObject%3B%0A%09%09add%3A%20anotherObject%3B%0A%09%09yourself'), +messageSends: ["add:", "yourself", "new"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.Collection.klass); smalltalk.addMethod( -unescape('__comma'), +unescape('_with_with_with_'), smalltalk.method({ -selector: unescape('%2C'), -category: 'copying', -fn: function (aCollection) { +selector: unescape('with%3Awith%3Awith%3A'), +category: 'instance creation', +fn: function (firstObject, secondObject, thirdObject) { var self=this; -return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_copy", [])); +return (function($rec){smalltalk.send($rec, "_add_", [firstObject]);smalltalk.send($rec, "_add_", [secondObject]);smalltalk.send($rec, "_add_", [thirdObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, -args: ["aCollection"], -source: unescape('%2C%20aCollection%0A%09%5Eself%20copy%20%0A%09%20%20%20%20addAll%3A%20aCollection%3B%20%0A%09%20%20%20%20yourself'), -messageSends: ["addAll:", "yourself", "copy"], +args: ["firstObject", "secondObject", "thirdObject"], +source: unescape('with%3A%20firstObject%20with%3A%20secondObject%20with%3A%20thirdObject%0A%09%20%20%20%20%5Eself%20new%0A%09%09add%3A%20firstObject%3B%0A%09%09add%3A%20secondObject%3B%0A%09%09add%3A%20thirdObject%3B%0A%09%09yourself'), +messageSends: ["add:", "yourself", "new"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.Collection.klass); smalltalk.addMethod( -unescape('_copyWith_'), +unescape('_withAll_'), smalltalk.method({ -selector: unescape('copyWith%3A'), -category: 'copying', -fn: function (anObject) { +selector: unescape('withAll%3A'), +category: 'instance creation', +fn: function (aCollection) { var self=this; -return (function($rec){smalltalk.send($rec, "_add_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_copy", [])); +return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, -args: ["anObject"], -source: unescape('copyWith%3A%20anObject%0A%09%5Eself%20copy%20add%3A%20anObject%3B%20yourself'), -messageSends: ["add:", "yourself", "copy"], +args: ["aCollection"], +source: unescape('withAll%3A%20aCollection%0A%09%20%20%20%20%5Eself%20new%0A%09%09addAll%3A%20aCollection%3B%0A%09%09yourself'), +messageSends: ["addAll:", "yourself", "new"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.Collection.klass); + +smalltalk.addClass('HashedCollection', smalltalk.Collection, [], 'Kernel-Collections'); +smalltalk.HashedCollection.comment=unescape('A%20HashedCollection%20is%20a%20traditional%20JavaScript%20object%2C%20or%20a%20Smalltalk%20Dictionary.%0A%0AUnlike%20a%20Dictionary%2C%20it%20can%20only%20have%20strings%20as%20keys.') smalltalk.addMethod( -unescape('_copyWithAll_'), +unescape('__comma'), smalltalk.method({ -selector: unescape('copyWithAll%3A'), +selector: unescape('%2C'), category: 'copying', fn: function (aCollection) { var self=this; -return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_copy", [])); +smalltalk.send(self, "_shouldNotImplement", []); return self;}, args: ["aCollection"], -source: unescape('copyWithAll%3A%20aCollection%0A%09%5Eself%20copy%20addAll%3A%20aCollection%3B%20yourself'), -messageSends: ["addAll:", "yourself", "copy"], +source: unescape('%2C%20aCollection%0A%09self%20shouldNotImplement'), +messageSends: ["shouldNotImplement"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_asArray'), +unescape('__eq'), smalltalk.method({ -selector: unescape('asArray'), -category: 'converting', -fn: function () { +selector: unescape('%3D'), +category: 'comparing', +fn: function (aHashedCollection) { var self=this; -return smalltalk.send((smalltalk.Array || Array), "_withAll_", [self]); -return self;}, -args: [], -source: unescape('asArray%0A%09%5EArray%20withAll%3A%20self'), -messageSends: ["withAll:"], -referencedClasses: ["Array"] +try{((($receiver = smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aHashedCollection, "_class", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); +((($receiver = smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [smalltalk.send(aHashedCollection, "_size", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); +(function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return smalltalk.send(smalltalk.send(self, "_associations", []), "__eq", [smalltalk.send(aHashedCollection, "_associations", [])])}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}}, +args: ["aHashedCollection"], +source: unescape('%3D%20aHashedCollection%0A%09self%20class%20%3D%20aHashedCollection%20class%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09self%20size%20%3D%20aHashedCollection%20size%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09%5Eself%20associations%20%3D%20aHashedCollection%20associations'), +messageSends: ["ifFalse:", unescape("%3D"), "class", "size", "associations"], +referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_do_'), +unescape('_add_'), smalltalk.method({ -selector: unescape('do%3A'), -category: 'enumerating', -fn: function (aBlock) { +selector: unescape('add%3A'), +category: 'adding/removing', +fn: function (anAssociation) { var self=this; -for(var i=0;i<self.length;i++){aBlock(self[i]);}; +smalltalk.send(self, "_at_put_", [smalltalk.send(anAssociation, "_key", []), smalltalk.send(anAssociation, "_value", [])]); return self;}, -args: ["aBlock"], -source: unescape('do%3A%20aBlock%0A%09%3Cfor%28var%20i%3D0%3Bi%3Cself.length%3Bi++%29%7BaBlock%28self%5Bi%5D%29%3B%7D%3E'), -messageSends: [], +args: ["anAssociation"], +source: unescape('add%3A%20anAssociation%0A%09self%20at%3A%20anAssociation%20key%20put%3A%20anAssociation%20value'), +messageSends: ["at:put:", "key", "value"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_collect_'), +unescape('_addAll_'), smalltalk.method({ -selector: unescape('collect%3A'), -category: 'enumerating', -fn: function (aBlock) { -var self=this; -var newCollection=nil; -(newCollection=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_do_", [(function(each){return smalltalk.send(newCollection, "_add_", [smalltalk.send(aBlock, "_value_", [each])]);})]); -return newCollection; +selector: unescape('addAll%3A'), +category: 'adding/removing', +fn: function (aHashedCollection) { +var self=this; +smalltalk.send(self, "_addAll_", [smalltalk.send(aHashedCollection, "_associations", [])], smalltalk.Collection); +return aHashedCollection; +return self;}, +args: ["aHashedCollection"], +source: unescape('addAll%3A%20aHashedCollection%0A%09super%20addAll%3A%20aHashedCollection%20associations.%0A%09%5EaHashedCollection'), +messageSends: ["addAll:", "associations"], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_asDictionary'), +smalltalk.method({ +selector: unescape('asDictionary'), +category: 'converting', +fn: function () { +var self=this; +return smalltalk.send((smalltalk.Dictionary || Dictionary), "_fromPairs_", [smalltalk.send(self, "_associations", [])]); +return self;}, +args: [], +source: unescape('asDictionary%0A%09%5EDictionary%20fromPairs%3A%20self%20associations'), +messageSends: ["fromPairs:", "associations"], +referencedClasses: ["Dictionary"] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_asJSON'), +smalltalk.method({ +selector: unescape('asJSON'), +category: 'converting', +fn: function (){ +var self=this; +var c=nil; +(c=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(c, "_at_put_", [key, smalltalk.send(value, "_asJSON", [])]);})]); +return c; +return self;}, +args: [], +source: unescape('asJSON%0A%09%7C%20c%20%7C%0A%09c%20%3A%3D%20self%20class%20new.%0A%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%09c%20at%3A%20key%20put%3A%20value%20asJSON%5D.%0A%09%5Ec'), +messageSends: ["new", "class", "keysAndValuesDo:", "at:put:", "asJSON"], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_associations'), +smalltalk.method({ +selector: unescape('associations'), +category: 'accessing', +fn: function () { +var self=this; +var associations=nil; +(associations=[]); +smalltalk.send(smalltalk.send(self, "_keys", []), "_do_", [(function(each){return smalltalk.send(associations, "_add_", [smalltalk.send((smalltalk.Association || Association), "_key_value_", [each, smalltalk.send(self, "_at_", [each])])]);})]); +return associations; +return self;}, +args: [], +source: unescape('associations%0A%09%7C%20associations%20%7C%0A%09associations%20%3A%3D%20%23%28%29.%0A%09self%20keys%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20associations%20add%3A%20%28Association%20key%3A%20each%20value%3A%20%28self%20at%3A%20each%29%29%5D.%0A%09%5Eassociations'), +messageSends: ["do:", "keys", "add:", "key:value:", "at:"], +referencedClasses: ["Association"] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_associationsDo_'), +smalltalk.method({ +selector: unescape('associationsDo%3A'), +category: 'enumerating', +fn: function (aBlock) { +var self=this; +smalltalk.send(smalltalk.send(self, "_associations", []), "_do_", [aBlock]); return self;}, args: ["aBlock"], -source: unescape('collect%3A%20aBlock%0A%09%7C%20newCollection%20%7C%0A%09newCollection%20%3A%3D%20self%20class%20new.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20newCollection%20add%3A%20%28aBlock%20value%3A%20each%29%5D.%0A%09%5EnewCollection'), -messageSends: ["new", "class", "do:", "add:", "value:"], +source: unescape('associationsDo%3A%20aBlock%0A%09self%20associations%20do%3A%20aBlock'), +messageSends: ["do:", "associations"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_detect_'), +unescape('_at_'), smalltalk.method({ -selector: unescape('detect%3A'), +selector: unescape('at%3A'), +category: 'accessing', +fn: function (aKey) { +var self=this; +return smalltalk.send(self, "_at_ifAbsent_", [aKey, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); +return self;}, +args: ["aKey"], +source: unescape('at%3A%20aKey%0A%09%5Eself%20at%3A%20aKey%20ifAbsent%3A%20%5Bself%20errorNotFound%5D'), +messageSends: ["at:ifAbsent:", "errorNotFound"], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_at_ifAbsent_'), +smalltalk.method({ +selector: unescape('at%3AifAbsent%3A'), +category: 'accessing', +fn: function (aKey, aBlock) { +var self=this; +return smalltalk.send(smalltalk.send(self, "_includesKey_", [aKey]), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_basicAt_", [aKey]);}), aBlock]); +return self;}, +args: ["aKey", "aBlock"], +source: unescape('at%3A%20aKey%20ifAbsent%3A%20aBlock%0A%09%5E%28self%20includesKey%3A%20aKey%29%0A%09%09ifTrue%3A%20%5Bself%20basicAt%3A%20aKey%5D%0A%09%09ifFalse%3A%20aBlock'), +messageSends: ["ifTrue:ifFalse:", "includesKey:", "basicAt:"], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_at_ifAbsentPut_'), +smalltalk.method({ +selector: unescape('at%3AifAbsentPut%3A'), +category: 'accessing', +fn: function (aKey, aBlock) { +var self=this; +return smalltalk.send(self, "_at_ifAbsent_", [aKey, (function(){return smalltalk.send(self, "_at_put_", [aKey, smalltalk.send(aBlock, "_value", [])]);})]); +return self;}, +args: ["aKey", "aBlock"], +source: unescape('at%3A%20aKey%20ifAbsentPut%3A%20aBlock%0A%09%5Eself%20at%3A%20aKey%20ifAbsent%3A%20%5B%0A%09%20%20%20%20self%20at%3A%20aKey%20put%3A%20aBlock%20value%5D'), +messageSends: ["at:ifAbsent:", "at:put:", "value"], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_at_ifPresent_'), +smalltalk.method({ +selector: unescape('at%3AifPresent%3A'), +category: 'accessing', +fn: function (aKey, aBlock) { +var self=this; +return (($receiver = smalltalk.send(self, "_basicAt_", [aKey])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_at_", [aKey])]);})() : nil; +return self;}, +args: ["aKey", "aBlock"], +source: unescape('at%3A%20aKey%20ifPresent%3A%20aBlock%0A%09%5E%28self%20basicAt%3A%20aKey%29%20ifNotNil%3A%20%5BaBlock%20value%3A%20%28self%20at%3A%20aKey%29%5D'), +messageSends: ["ifNotNil:", "basicAt:", "value:", "at:"], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_at_ifPresent_ifAbsent_'), +smalltalk.method({ +selector: unescape('at%3AifPresent%3AifAbsent%3A'), +category: 'accessing', +fn: function (aKey, aBlock, anotherBlock) { +var self=this; +return smalltalk.send(smalltalk.send(self, "_basicAt_", [aKey]), "_ifNil_ifNotNil_", [anotherBlock, (function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_at_", [aKey])]);})]); +return self;}, +args: ["aKey", "aBlock", "anotherBlock"], +source: unescape('at%3A%20aKey%20ifPresent%3A%20aBlock%20ifAbsent%3A%20anotherBlock%0A%09%5E%28self%20basicAt%3A%20aKey%29%0A%09%20%20%20%20ifNil%3A%20anotherBlock%0A%09%20%20%20%20ifNotNil%3A%20%5BaBlock%20value%3A%20%28self%20at%3A%20aKey%29%5D'), +messageSends: ["ifNil:ifNotNil:", "basicAt:", "value:", "at:"], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_at_put_'), +smalltalk.method({ +selector: unescape('at%3Aput%3A'), +category: 'accessing', +fn: function (aKey, aValue) { +var self=this; +return smalltalk.send(self, "_basicAt_put_", [aKey, aValue]); +return self;}, +args: ["aKey", "aValue"], +source: unescape('at%3A%20aKey%20put%3A%20aValue%0A%09%5Eself%20basicAt%3A%20aKey%20put%3A%20aValue'), +messageSends: ["basicAt:put:"], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_collect_'), +smalltalk.method({ +selector: unescape('collect%3A'), category: 'enumerating', fn: function (aBlock) { var self=this; -return smalltalk.send(self, "_detect_ifNone_", [aBlock, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); +var newDict=nil; +(newDict=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(newDict, "_at_put_", [key, smalltalk.send(aBlock, "_value_", [value])]);})]); +return newDict; return self;}, args: ["aBlock"], -source: unescape('detect%3A%20aBlock%0A%09%5Eself%20detect%3A%20aBlock%20ifNone%3A%20%5Bself%20errorNotFound%5D'), -messageSends: ["detect:ifNone:", "errorNotFound"], +source: unescape('collect%3A%20aBlock%0A%09%7C%20newDict%20%7C%0A%09newDict%20%3A%3D%20self%20class%20new.%0A%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%20%20%20%20newDict%20at%3A%20key%20put%3A%20%28aBlock%20value%3A%20value%29%5D.%0A%09%5EnewDict'), +messageSends: ["new", "class", "keysAndValuesDo:", "at:put:", "value:"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_copyFrom_to_'), +smalltalk.method({ +selector: unescape('copyFrom%3Ato%3A'), +category: 'copying', +fn: function (anIndex, anotherIndex) { +var self=this; +smalltalk.send(self, "_shouldNotImplement", []); +return self;}, +args: ["anIndex", "anotherIndex"], +source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09self%20shouldNotImplement'), +messageSends: ["shouldNotImplement"], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_deepCopy'), +smalltalk.method({ +selector: unescape('deepCopy'), +category: 'copying', +fn: function () { +var self=this; +var copy=nil; +(copy=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(copy, "_at_put_", [smalltalk.send(each, "_key", []), smalltalk.send(smalltalk.send(each, "_value", []), "_deepCopy", [])]);})]); +return copy; +return self;}, +args: [], +source: unescape('deepCopy%0A%09%7C%20copy%20%7C%0A%09copy%20%3A%3D%20self%20class%20new.%0A%09self%20associationsDo%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20copy%20at%3A%20each%20key%20%20put%3A%20each%20value%20deepCopy%5D.%0A%09%5Ecopy'), +messageSends: ["new", "class", "associationsDo:", "at:put:", "key", "deepCopy", "value"], +referencedClasses: [] +}), +smalltalk.HashedCollection); smalltalk.addMethod( unescape('_detect_ifNone_'), @@ -828,72 +1031,166 @@ selector: unescape('detect%3AifNone%3A'), category: 'enumerating', fn: function (aBlock, anotherBlock) { var self=this; - - for(var i = 0; i < self.length; i++) - if(aBlock(self[i])) - return self[i]; - return anotherBlock(); - ; +return smalltalk.send(smalltalk.send(self, "_values", []), "_detect_ifNone_", [aBlock, anotherBlock]); return self;}, args: ["aBlock", "anotherBlock"], -source: unescape('detect%3A%20aBlock%20ifNone%3A%20anotherBlock%0A%09%3C%0A%09%09for%28var%20i%20%3D%200%3B%20i%20%3C%20self.length%3B%20i++%29%0A%09%09%09if%28aBlock%28self%5Bi%5D%29%29%0A%09%09%09%09return%20self%5Bi%5D%3B%0A%09%09return%20anotherBlock%28%29%3B%0A%09%3E'), -messageSends: [], +source: unescape('detect%3A%20aBlock%20ifNone%3A%20anotherBlock%0A%09%5Eself%20values%20detect%3A%20aBlock%20ifNone%3A%20anotherBlock'), +messageSends: ["detect:ifNone:", "values"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_do_separatedBy_'), +unescape('_do_'), smalltalk.method({ -selector: unescape('do%3AseparatedBy%3A'), +selector: unescape('do%3A'), category: 'enumerating', -fn: function (aBlock, anotherBlock) { +fn: function (aBlock) { var self=this; -var first=nil; -(first=true); -smalltalk.send(self, "_do_", [(function(each){((($receiver = first).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (first=false);})() : (function(){return smalltalk.send(anotherBlock, "_value", []);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (first=false);}), (function(){return smalltalk.send(anotherBlock, "_value", []);})]));return smalltalk.send(aBlock, "_value_", [each]);})]); +smalltalk.send(smalltalk.send(self, "_values", []), "_do_", [aBlock]); return self;}, -args: ["aBlock", "anotherBlock"], -source: unescape('do%3A%20aBlock%20separatedBy%3A%20anotherBlock%0A%09%7C%20first%20%7C%0A%09first%20%3A%3D%20true.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20first%0A%09%09ifTrue%3A%20%5Bfirst%20%3A%3D%20false%5D%0A%09%09ifFalse%3A%20%5BanotherBlock%20value%5D.%0A%09%20%20%20%20aBlock%20value%3A%20each%5D'), -messageSends: ["do:", "ifTrue:ifFalse:", "value", "value:"], +args: ["aBlock"], +source: unescape('do%3A%20aBlock%0A%09self%20values%20do%3A%20aBlock'), +messageSends: ["do:", "values"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_inject_into_'), +unescape('_includes_'), smalltalk.method({ -selector: unescape('inject%3Ainto%3A'), +selector: unescape('includes%3A'), category: 'enumerating', -fn: function (anObject, aBlock) { +fn: function (anObject) { var self=this; -var result=nil; -(result=anObject); -smalltalk.send(self, "_do_", [(function(each){return (result=smalltalk.send(aBlock, "_value_value_", [result, each]));})]); -return result; +return smalltalk.send(smalltalk.send(self, "_values", []), "_includes_", [anObject]); return self;}, -args: ["anObject", "aBlock"], -source: unescape('inject%3A%20anObject%20into%3A%20aBlock%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%20anObject.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%20%20%20%20result%20%3A%3D%20aBlock%20value%3A%20result%20value%3A%20each%5D.%0A%09%5Eresult'), -messageSends: ["do:", "value:value:"], +args: ["anObject"], +source: unescape('includes%3A%20anObject%0A%09%5Eself%20values%20includes%3A%20anObject'), +messageSends: ["includes:", "values"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_reject_'), +unescape('_includesKey_'), smalltalk.method({ -selector: unescape('reject%3A'), +selector: unescape('includesKey%3A'), +category: 'testing', +fn: function (aKey) { +var self=this; +return self.hasOwnProperty(aKey); +return self;}, +args: ["aKey"], +source: unescape('includesKey%3A%20aKey%0A%09%3Creturn%20self.hasOwnProperty%28aKey%29%3E'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_keys'), +smalltalk.method({ +selector: unescape('keys'), +category: 'accessing', +fn: function () { +var self=this; + + var keys = []; + for(var i in self) { + if(self.hasOwnProperty(i)) { + keys.push(i); + } + }; + return keys; + ; +return self;}, +args: [], +source: unescape('keys%0A%09%3C%0A%09%09var%20keys%20%3D%20%5B%5D%3B%0A%09%09for%28var%20i%20in%20self%29%20%7B%0A%09%09%09if%28self.hasOwnProperty%28i%29%29%20%7B%0A%09%09%09%09keys.push%28i%29%3B%0A%09%09%09%7D%0A%09%09%7D%3B%0A%09%09return%20keys%3B%0A%09%3E'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_keysAndValuesDo_'), +smalltalk.method({ +selector: unescape('keysAndValuesDo%3A'), category: 'enumerating', fn: function (aBlock) { var self=this; -return smalltalk.send(self, "_select_", [(function(each){return smalltalk.send(smalltalk.send(aBlock, "_value_", [each]), "__eq", [false]);})]); +smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(aBlock, "_value_value_", [smalltalk.send(each, "_key", []), smalltalk.send(each, "_value", [])]);})]); return self;}, args: ["aBlock"], -source: unescape('reject%3A%20aBlock%0A%09%5Eself%20select%3A%20%5B%3Aeach%20%7C%20%28aBlock%20value%3A%20each%29%20%3D%20false%5D'), -messageSends: ["select:", unescape("%3D"), "value:"], +source: unescape('keysAndValuesDo%3A%20aBlock%0A%09self%20associationsDo%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20aBlock%20value%3A%20each%20key%20value%3A%20each%20value%5D'), +messageSends: ["associationsDo:", "value:value:", "key", "value"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_printString'), +smalltalk.method({ +selector: unescape('printString'), +category: 'printing', +fn: function () { +var self=this; +return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(aStream){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Collection)]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);})(aStream);smalltalk.send(smalltalk.send(self, "_associations", []), "_do_separatedBy_", [(function(anAssociation){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(anAssociation, "_key", []), "_printString", [])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%20-%3E%20")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(anAssociation, "_value", []), "_printString", [])]);})(aStream);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%20%2C%20")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [unescape("%29")]);})]); +return self;}, +args: [], +source: unescape('printString%0A%09%5EString%20streamContents%3A%20%5B%3AaStream%7C%20%20%0A%09%09aStream%20%0A%09%09%09nextPutAll%3A%20super%20printString%3B%0A%09%09%09nextPutAll%3A%20%27%28%27.%0A%09%09%09%09self%20associations%20%0A%09%09%09%09%09do%3A%20%5B%3AanAssociation%7C%20%20%0A%09%09%09%09%09%09aStream%20%0A%09%09%09%09%09%09%09nextPutAll%3A%20anAssociation%20key%20printString%3B%0A%09%09%09%09%09%09%09%09nextPutAll%3A%20%27%20-%3E%20%27%3B%0A%09%09%09%09%09%09%09%09nextPutAll%3A%20anAssociation%20value%20printString%5D%0A%09%09%09%09%09%09%09separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%20%2C%20%27%5D.%0A%09%09%09%09%09%09aStream%20nextPutAll%3A%20%27%29%27%5D'), +messageSends: ["streamContents:", "nextPutAll:", "printString", "do:separatedBy:", "associations", "key", "value"], +referencedClasses: ["String"] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_remove_ifAbsent_'), +smalltalk.method({ +selector: unescape('remove%3AifAbsent%3A'), +category: 'adding/removing', +fn: function (aKey, aBlock) { +var self=this; +return smalltalk.send(self, "_removeKey_ifAbsent_", [aKey, aBlock]); +return self;}, +args: ["aKey", "aBlock"], +source: unescape('remove%3A%20aKey%20ifAbsent%3A%20aBlock%0A%20%20%20%20%5Eself%20removeKey%3A%20aKey%20ifAbsent%3A%20aBlock'), +messageSends: ["removeKey:ifAbsent:"], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_removeKey_'), +smalltalk.method({ +selector: unescape('removeKey%3A'), +category: 'adding/removing', +fn: function (aKey){ +var self=this; +return smalltalk.send(self, "_remove_", [aKey]); +return self;}, +args: ["aKey"], +source: unescape('removeKey%3A%20aKey%0A%20%20%20%20%5Eself%20remove%3A%20aKey'), +messageSends: ["remove:"], +referencedClasses: [] +}), +smalltalk.HashedCollection); + +smalltalk.addMethod( +unescape('_removeKey_ifAbsent_'), +smalltalk.method({ +selector: unescape('removeKey%3AifAbsent%3A'), +category: 'adding/removing', +fn: function (aKey, aBlock) { +var self=this; +return ((($receiver = smalltalk.send(self, "_includesKey_", [aKey])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(aBlock, "_value", []);})() : (function(){return smalltalk.send(self, "_basicDelete_", [aKey]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(aBlock, "_value", []);}), (function(){return smalltalk.send(self, "_basicDelete_", [aKey]);})])); +return self;}, +args: ["aKey", "aBlock"], +source: unescape('removeKey%3A%20aKey%20ifAbsent%3A%20aBlock%0A%09%5E%28self%20includesKey%3A%20aKey%29%20%0A%09%09ifFalse%3A%20%5BaBlock%20value%5D%0A%09%09ifTrue%3A%20%5Bself%20basicDelete%3A%20aKey%5D'), +messageSends: ["ifFalse:ifTrue:", "includesKey:", "value", "basicDelete:"], +referencedClasses: [] +}), +smalltalk.HashedCollection); smalltalk.addMethod( unescape('_select_'), @@ -902,315 +1199,355 @@ selector: unescape('select%3A'), category: 'enumerating', fn: function (aBlock) { var self=this; -var stream=nil; -(stream=smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_new", []), "_writeStream", [])); -smalltalk.send(self, "_do_", [(function(each){return ((($receiver = smalltalk.send(aBlock, "_value_", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(stream, "_nextPut_", [each]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(stream, "_nextPut_", [each]);})]));})]); -return smalltalk.send(stream, "_contents", []); +var newDict=nil; +(newDict=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return ((($receiver = smalltalk.send(aBlock, "_value_", [value])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(newDict, "_at_put_", [key, value]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(newDict, "_at_put_", [key, value]);})]));})]); +return newDict; return self;}, args: ["aBlock"], -source: unescape('select%3A%20aBlock%0A%09%7C%20stream%20%7C%0A%09stream%20%3A%3D%20self%20class%20new%20writeStream.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20%28aBlock%20value%3A%20each%29%20ifTrue%3A%20%5B%0A%09%09stream%20nextPut%3A%20each%5D%5D.%0A%09%5Estream%20contents'), -messageSends: ["writeStream", "new", "class", "do:", "ifTrue:", "value:", "nextPut:", "contents"], +source: unescape('select%3A%20aBlock%0A%09%7C%20newDict%20%7C%0A%09newDict%20%3A%3D%20self%20class%20new.%0A%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%20%20%20%20%28aBlock%20value%3A%20value%29%20ifTrue%3A%20%5BnewDict%20at%3A%20key%20put%3A%20value%5D%5D.%0A%09%5EnewDict'), +messageSends: ["new", "class", "keysAndValuesDo:", "ifTrue:", "value:", "at:put:"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_errorNotFound'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('errorNotFound'), -category: 'error handling', +selector: unescape('shallowCopy'), +category: 'copying', fn: function () { var self=this; -smalltalk.send(self, "_error_", ["Object is not in the collection"]); +var copy=nil; +(copy=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(copy, "_at_put_", [smalltalk.send(each, "_key", []), smalltalk.send(each, "_value", [])]);})]); +return copy; return self;}, args: [], -source: unescape('errorNotFound%0A%09self%20error%3A%20%27Object%20is%20not%20in%20the%20collection%27'), -messageSends: ["error:"], +source: unescape('shallowCopy%0A%09%7C%20copy%20%7C%0A%09copy%20%3A%3D%20self%20class%20new.%0A%09self%20associationsDo%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20copy%20at%3A%20each%20key%20%20put%3A%20each%20value%5D.%0A%09%5Ecopy'), +messageSends: ["new", "class", "associationsDo:", "at:put:", "key", "value"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_includes_'), +unescape('_size'), smalltalk.method({ -selector: unescape('includes%3A'), -category: 'testing', -fn: function (anObject) { +selector: unescape('size'), +category: 'accessing', +fn: function () { var self=this; - - var i = self.length; - while (i--) { - if (smalltalk.send(self[i], "__eq", [anObject])) {return true;} - } - return false - ; +return smalltalk.send(smalltalk.send(self, "_keys", []), "_size", []); return self;}, -args: ["anObject"], -source: unescape('includes%3A%20anObject%0A%09%3C%0A%09%09var%20i%20%3D%20self.length%3B%0A%09%09while%20%28i--%29%20%7B%0A%09%09%09if%20%28smalltalk.send%28self%5Bi%5D%2C%20%22__eq%22%2C%20%5BanObject%5D%29%29%20%7Breturn%20true%3B%7D%09%0A%09%09%7D%0A%09%09return%20false%0A%09%3E'), -messageSends: [], +args: [], +source: unescape('size%0A%09%5Eself%20keys%20size'), +messageSends: ["size", "keys"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_notEmpty'), +unescape('_storeOn_'), smalltalk.method({ -selector: unescape('notEmpty'), -category: 'testing', -fn: function () { +selector: unescape('storeOn%3A'), +category: 'printing', +fn: function (aStream) { var self=this; -return smalltalk.send(smalltalk.send(self, "_isEmpty", []), "_not", []); +smalltalk.send(aStream, "_nextPutAll_", [unescape("%23%7B")]); +smalltalk.send(smalltalk.send(self, "_associations", []), "_do_separatedBy_", [(function(each){return smalltalk.send(each, "_storeOn_", [aStream]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [". "]);})]); +smalltalk.send(aStream, "_nextPutAll_", [unescape("%7D")]); return self;}, -args: [], -source: unescape('notEmpty%0A%09%5Eself%20isEmpty%20not'), -messageSends: ["not", "isEmpty"], +args: ["aStream"], +source: unescape('storeOn%3A%20aStream%0A%09aStream%20nextPutAll%3A%20%27%23%7B%27.%0A%09self%20associations%0A%09%09do%3A%20%5B%3Aeach%20%7C%20each%20storeOn%3A%20aStream%5D%0A%09%09separatedBy%3A%20%5B%20aStream%20nextPutAll%3A%20%27.%20%27%5D.%0A%09aStream%20nextPutAll%3A%20%27%7D%27'), +messageSends: ["nextPutAll:", "do:separatedBy:", "associations", "storeOn:"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); smalltalk.addMethod( -unescape('_isEmpty'), +unescape('_values'), smalltalk.method({ -selector: unescape('isEmpty'), -category: 'testing', +selector: unescape('values'), +category: 'accessing', fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [(0)]); +return smalltalk.send(smalltalk.send(self, "_keys", []), "_collect_", [(function(each){return smalltalk.send(self, "_at_", [each]);})]); return self;}, args: [], -source: unescape('isEmpty%0A%09%5Eself%20size%20%3D%200'), -messageSends: [unescape("%3D"), "size"], +source: unescape('values%0A%09%5Eself%20keys%20collect%3A%20%5B%3Aeach%20%7C%20self%20at%3A%20each%5D'), +messageSends: ["collect:", "keys", "at:"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection); + smalltalk.addMethod( -unescape('_remove_'), +unescape('_fromPairs_'), smalltalk.method({ -selector: unescape('remove%3A'), -category: 'adding/removing', -fn: function (anObject) { +selector: unescape('fromPairs%3A'), +category: 'instance creation', +fn: function (aCollection) { var self=this; -return smalltalk.send(self, "_remove_ifAbsent_", [anObject, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); +var dict=nil; +(dict=smalltalk.send(self, "_new", [])); +smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(dict, "_add_", [each]);})]); +return dict; return self;}, -args: ["anObject"], -source: unescape('remove%3A%20anObject%0A%20%20%20%20%5Eself%20remove%3A%20anObject%20ifAbsent%3A%20%5Bself%20errorNotFound%5D'), -messageSends: ["remove:ifAbsent:", "errorNotFound"], +args: ["aCollection"], +source: unescape('fromPairs%3A%20aCollection%0A%09%7C%20dict%20%7C%0A%09dict%20%3A%3D%20self%20new.%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%20dict%20add%3A%20each%5D.%0A%09%5Edict'), +messageSends: ["new", "do:", "add:"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.HashedCollection.klass); + +smalltalk.addClass('Dictionary', smalltalk.HashedCollection, ['keys', 'values'], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_asSet'), +unescape('_asHashedCollection'), smalltalk.method({ -selector: unescape('asSet'), +selector: unescape('asHashedCollection'), category: 'converting', fn: function () { var self=this; -return smalltalk.send((smalltalk.Set || Set), "_withAll_", [self]); +return smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_fromPairs_", [smalltalk.send(self, "_associations", [])]); return self;}, args: [], -source: unescape('asSet%0A%09%5ESet%20withAll%3A%20self'), -messageSends: ["withAll:"], -referencedClasses: ["Set"] +source: unescape('asHashedCollection%0A%09%5EHashedCollection%20fromPairs%3A%20self%20associations'), +messageSends: ["fromPairs:", "associations"], +referencedClasses: ["HashedCollection"] }), -smalltalk.Collection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_ifNotEmpty_'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('ifNotEmpty%3A'), -category: 'testing', -fn: function (aBlock) { +selector: unescape('asJSON'), +category: 'converting', +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_notEmpty", []), "_ifTrue_", [aBlock]); +return smalltalk.send(smalltalk.send(self, "_asHashedCollection", []), "_asJSON", []); return self;}, -args: ["aBlock"], -source: unescape('ifNotEmpty%3A%20aBlock%0A%09self%20notEmpty%20ifTrue%3A%20aBlock.'), -messageSends: ["ifTrue:", "notEmpty"], +args: [], +source: unescape('asJSON%0A%09%5Eself%20asHashedCollection%20asJSON'), +messageSends: ["asJSON", "asHashedCollection"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_ifEmpty_'), +unescape('_at_ifAbsent_'), smalltalk.method({ -selector: unescape('ifEmpty%3A'), -category: 'testing', -fn: function (aBlock){ +selector: unescape('at%3AifAbsent%3A'), +category: 'accessing', +fn: function (aKey, 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;})])); + + var index; + for(var i=0;i<self['@keys'].length;i++){ + if(self['@keys'][i].__eq(aKey)) {index = i;} + }; + if(typeof index === 'undefined') { + return aBlock(); + } else { + return self['@values'][index]; + } + ; return self;}, -args: ["aBlock"], -source: unescape('ifEmpty%3A%20aBlock%0A%09%22Evaluate%20the%20given%20block%20with%20the%20receiver%20as%20argument%2C%20answering%20its%20value%20if%20the%20receiver%20is%20empty%2C%20otherwise%20answer%20the%20receiver.%20Note%20that%20the%20fact%20that%20this%20method%20returns%20its%20argument%20in%20case%20the%20receiver%20is%20not%20empty%20allows%20one%20to%20write%20expressions%20like%20the%20following%20ones%3A%20self%20classifyMethodAs%3A%20%0A%09%09%28myProtocol%20ifEmpty%3A%20%5B%27As%20yet%20unclassified%27%5D%29%22%0A%09%5E%20self%20isEmpty%20%0A%09%09ifTrue%3A%20%5B%20aBlock%20value%20%5D%0A%09%09ifFalse%3A%20%5B%20self%20%5D'), -messageSends: ["ifTrue:ifFalse:", "isEmpty", "value"], +args: ["aKey", "aBlock"], +source: unescape('at%3A%20aKey%20ifAbsent%3A%20aBlock%0A%09%3C%0A%09%09var%20index%3B%0A%09%09for%28var%20i%3D0%3Bi%3Cself%5B%27@keys%27%5D.length%3Bi++%29%7B%0A%09%09%09if%28self%5B%27@keys%27%5D%5Bi%5D.__eq%28aKey%29%29%20%7Bindex%20%3D%20i%3B%7D%0A%09%09%7D%3B%0A%09%09if%28typeof%20index%20%3D%3D%3D%20%27undefined%27%29%20%7B%0A%09%09%09return%20aBlock%28%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09return%20self%5B%27@values%27%5D%5Bindex%5D%3B%0A%09%09%7D%0A%09%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_copyWithoutAll_'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('copyWithoutAll%3A'), -category: 'copying', -fn: function (aCollection) { +selector: unescape('at%3Aput%3A'), +category: 'accessing', +fn: function (aKey, aValue) { var self=this; -return smalltalk.send(self, "_reject_", [(function(each){return smalltalk.send(aCollection, "_includes_", [each]);})]); + + var index = self['@keys'].indexOf(aKey); + if(index === -1) { + self['@values'].push(aValue); + self['@keys'].push(aKey); + } else { + self['@values'][index] = aValue; + }; + + return aValue; + ; return self;}, -args: ["aCollection"], -source: unescape('copyWithoutAll%3A%20aCollection%0A%09%22Answer%20a%20copy%20of%20the%20receiver%20that%20does%20not%20contain%20any%20elements%20%0A%09equal%20to%20those%20in%20aCollection.%22%0A%0A%09%5E%20self%20reject%3A%20%5B%3Aeach%20%7C%20aCollection%20includes%3A%20each%5D'), -messageSends: ["reject:", "includes:"], +args: ["aKey", "aValue"], +source: unescape('at%3A%20aKey%20put%3A%20aValue%0A%09%3C%0A%09%09var%20index%20%3D%20self%5B%27@keys%27%5D.indexOf%28aKey%29%3B%0A%09%09if%28index%20%3D%3D%3D%20-1%29%20%7B%0A%09%09%09self%5B%27@values%27%5D.push%28aValue%29%3B%0A%09%09%09self%5B%27@keys%27%5D.push%28aKey%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09self%5B%27@values%27%5D%5Bindex%5D%20%3D%20aValue%3B%0A%09%09%7D%3B%0A%0A%09%09return%20aValue%3B%0A%09%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_remove_ifAbsent_'), +unescape('_includesKey_'), smalltalk.method({ -selector: unescape('remove%3AifAbsent%3A'), -category: 'adding/removing', -fn: function (anObject, aBlock) { +selector: unescape('includesKey%3A'), +category: 'testing', +fn: function (aKey) { var self=this; -smalltalk.send(self, "_subclassResponsibility", []); +return smalltalk.send(self['@keys'], "_includes_", [aKey]); return self;}, -args: ["anObject", "aBlock"], -source: unescape('remove%3A%20anObject%20ifAbsent%3A%20aBlock%0A%20%20%20%20self%20subclassResponsibility'), -messageSends: ["subclassResponsibility"], +args: ["aKey"], +source: unescape('includesKey%3A%20aKey%0A%09%5Ekeys%20includes%3A%20aKey'), +messageSends: ["includes:"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_asOrderedCollection'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('asOrderedCollection'), -category: 'converting', +selector: unescape('initialize'), +category: 'initialization', fn: function () { var self=this; -return smalltalk.send(self, "_asArray", []); +smalltalk.send(self, "_initialize", [], smalltalk.HashedCollection); +(self['@keys']=[]); +(self['@values']=[]); return self;}, args: [], -source: unescape('asOrderedCollection%0A%09%5Eself%20asArray'), -messageSends: ["asArray"], +source: unescape('initialize%0A%09super%20initialize.%0A%09keys%20%3A%3D%20%23%28%29.%0A%09values%20%3A%3D%20%23%28%29'), +messageSends: ["initialize"], referencedClasses: [] }), -smalltalk.Collection); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_keys'), smalltalk.method({ -selector: unescape('asJSON'), -category: 'converting', -fn: function (){ +selector: unescape('keys'), +category: 'accessing', +fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_asArray", []), "_collect_", [(function(each){return smalltalk.send(each, "_asJSON", []);})]); +return smalltalk.send(self['@keys'], "_copy", []); return self;}, args: [], -source: unescape('asJSON%0A%09%5Eself%20asArray%20collect%3A%20%5B%3Aeach%20%7C%20each%20asJSON%5D'), -messageSends: ["collect:", "asArray", "asJSON"], +source: unescape('keys%0A%09%5Ekeys%20copy'), +messageSends: ["copy"], referencedClasses: [] }), -smalltalk.Collection); - +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_streamClass'), +unescape('_removeKey_ifAbsent_'), smalltalk.method({ -selector: unescape('streamClass'), -category: 'accessing', -fn: function () { +selector: unescape('removeKey%3AifAbsent%3A'), +category: 'adding/removing', +fn: function (aKey, aBlock){ var self=this; -return (smalltalk.Stream || Stream); + + var index = self['@keys'].indexOf(aKey); + if(index === -1) { + return aBlock() + } else { + var value; + self['@keys'].splice(index, 1); + value = self['@values'].splice(index, 1); + return value[0]; + }; + ; return self;}, -args: [], -source: unescape('streamClass%0A%09%20%20%20%20%5EStream'), +args: ["aKey", "aBlock"], +source: unescape('removeKey%3A%20aKey%20ifAbsent%3A%20aBlock%0A%20%20%20%20%3C%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20index%20%3D%20self%5B%27@keys%27%5D.indexOf%28aKey%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%28index%20%3D%3D%3D%20-1%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20aBlock%28%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20value%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5B%27@keys%27%5D.splice%28index%2C%201%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%20%3D%20self%5B%27@values%27%5D.splice%28index%2C%201%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20value%5B0%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%3E'), messageSends: [], -referencedClasses: ["Stream"] +referencedClasses: [] }), -smalltalk.Collection.klass); +smalltalk.Dictionary); smalltalk.addMethod( -unescape('_with_'), +unescape('_values'), smalltalk.method({ -selector: unescape('with%3A'), -category: 'instance creation', -fn: function (anObject) { +selector: unescape('values'), +category: 'accessing', +fn: function () { var self=this; -return (function($rec){smalltalk.send($rec, "_add_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return smalltalk.send(self['@values'], "_copy", []); return self;}, -args: ["anObject"], -source: unescape('with%3A%20anObject%0A%09%20%20%20%20%5Eself%20new%0A%09%09add%3A%20anObject%3B%0A%09%09yourself'), -messageSends: ["add:", "yourself", "new"], +args: [], +source: unescape('values%0A%09%5Evalues%20copy'), +messageSends: ["copy"], referencedClasses: [] }), -smalltalk.Collection.klass); +smalltalk.Dictionary); + + +smalltalk.addClass('SequenceableCollection', smalltalk.Collection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_with_with_'), +unescape('__eq'), smalltalk.method({ -selector: unescape('with%3Awith%3A'), -category: 'instance creation', -fn: function (anObject, anotherObject) { +selector: unescape('%3D'), +category: 'comparing', +fn: function (aCollection) { var self=this; -return (function($rec){smalltalk.send($rec, "_add_", [anObject]);smalltalk.send($rec, "_add_", [anotherObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); -return self;}, -args: ["anObject", "anotherObject"], -source: unescape('with%3A%20anObject%20with%3A%20anotherObject%0A%09%20%20%20%20%5Eself%20new%0A%09%09add%3A%20anObject%3B%0A%09%09add%3A%20anotherObject%3B%0A%09%09yourself'), -messageSends: ["add:", "yourself", "new"], +try{((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aCollection, "_class", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [smalltalk.send(aCollection, "_size", [])]);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); +smalltalk.send(self, "_withIndexDo_", [(function(each, i){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_at_", [i]), "__eq", [each])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})]));})]); +(function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return true}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}}, +args: ["aCollection"], +source: unescape('%3D%20aCollection%0A%09%28self%20class%20%3D%20aCollection%20class%20and%3A%20%5B%0A%09%09self%20size%20%3D%20aCollection%20size%5D%29%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09self%20withIndexDo%3A%20%5B%3Aeach%20%3Ai%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28aCollection%20at%3A%20i%29%20%3D%20each%20ifFalse%3A%20%5B%5Efalse%5D%5D.%0A%09%5Etrue'), +messageSends: ["ifFalse:", "and:", unescape("%3D"), "class", "size", "withIndexDo:", "at:"], referencedClasses: [] }), -smalltalk.Collection.klass); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_with_with_with_'), +unescape('_addLast_'), smalltalk.method({ -selector: unescape('with%3Awith%3Awith%3A'), -category: 'instance creation', -fn: function (firstObject, secondObject, thirdObject) { +selector: unescape('addLast%3A'), +category: 'adding', +fn: function (anObject) { var self=this; -return (function($rec){smalltalk.send($rec, "_add_", [firstObject]);smalltalk.send($rec, "_add_", [secondObject]);smalltalk.send($rec, "_add_", [thirdObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +smalltalk.send(self, "_add_", [anObject]); return self;}, -args: ["firstObject", "secondObject", "thirdObject"], -source: unescape('with%3A%20firstObject%20with%3A%20secondObject%20with%3A%20thirdObject%0A%09%20%20%20%20%5Eself%20new%0A%09%09add%3A%20firstObject%3B%0A%09%09add%3A%20secondObject%3B%0A%09%09add%3A%20thirdObject%3B%0A%09%09yourself'), -messageSends: ["add:", "yourself", "new"], +args: ["anObject"], +source: unescape('addLast%3A%20anObject%0A%09self%20add%3A%20anObject'), +messageSends: ["add:"], referencedClasses: [] }), -smalltalk.Collection.klass); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_withAll_'), +unescape('_allButFirst'), smalltalk.method({ -selector: unescape('withAll%3A'), -category: 'instance creation', -fn: function (aCollection) { +selector: unescape('allButFirst'), +category: 'accessing', +fn: function () { var self=this; -return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return smalltalk.send(self, "_copyFrom_to_", [(2), smalltalk.send(self, "_size", [])]); return self;}, -args: ["aCollection"], -source: unescape('withAll%3A%20aCollection%0A%09%20%20%20%20%5Eself%20new%0A%09%09addAll%3A%20aCollection%3B%0A%09%09yourself'), -messageSends: ["addAll:", "yourself", "new"], +args: [], +source: unescape('allButFirst%0A%09%5Eself%20copyFrom%3A%202%20to%3A%20self%20size'), +messageSends: ["copyFrom:to:", "size"], referencedClasses: [] }), -smalltalk.Collection.klass); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_new_'), +unescape('_allButLast'), smalltalk.method({ -selector: unescape('new%3A'), -category: 'instance creation', -fn: function (anInteger) { +selector: unescape('allButLast'), +category: 'accessing', +fn: function () { var self=this; -return smalltalk.send(self, "_new", []); +return smalltalk.send(self, "_copyFrom_to_", [(1), ((($receiver = smalltalk.send(self, "_size", [])).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)]))]); return self;}, -args: ["anInteger"], -source: unescape('new%3A%20anInteger%0A%09%5Eself%20new'), -messageSends: ["new"], +args: [], +source: unescape('allButLast%0A%09%5Eself%20copyFrom%3A%201%20to%3A%20self%20size%20-%201'), +messageSends: ["copyFrom:to:", unescape("-"), "size"], referencedClasses: [] }), -smalltalk.Collection.klass); - +smalltalk.SequenceableCollection); -smalltalk.addClass('SequenceableCollection', smalltalk.Collection, [], 'Kernel-Collections'); smalltalk.addMethod( unescape('_at_'), smalltalk.method({ @@ -1259,6 +1596,22 @@ referencedClasses: [] }), smalltalk.SequenceableCollection); +smalltalk.addMethod( +unescape('_atRandom'), +smalltalk.method({ +selector: unescape('atRandom'), +category: 'accessing', +fn: function () { +var self=this; +return smalltalk.send(self, "_at_", [smalltalk.send(smalltalk.send(self, "_size", []), "_atRandom", [])]); +return self;}, +args: [], +source: unescape('atRandom%0A%09%5E%20self%20at%3A%20self%20size%20atRandom'), +messageSends: ["at:", "atRandom", "size"], +referencedClasses: [] +}), +smalltalk.SequenceableCollection); + smalltalk.addMethod( unescape('_copyFrom_to_'), smalltalk.method({ @@ -1281,165 +1634,72 @@ referencedClasses: [] smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_first'), +unescape('_deepCopy'), smalltalk.method({ -selector: unescape('first'), -category: 'accessing', +selector: unescape('deepCopy'), +category: 'copying', fn: function () { var self=this; -return smalltalk.send(self, "_at_", [(1)]); +var newCollection=nil; +(newCollection=smalltalk.send(smalltalk.send(self, "_class", []), "_new_", [smalltalk.send(self, "_size", [])])); +smalltalk.send(self, "_withIndexDo_", [(function(each, index){return smalltalk.send(newCollection, "_at_put_", [index, smalltalk.send(each, "_deepCopy", [])]);})]); +return newCollection; return self;}, args: [], -source: unescape('first%0A%09%5Eself%20at%3A%201'), -messageSends: ["at:"], +source: unescape('deepCopy%0A%09%7C%20newCollection%20%7C%0A%09newCollection%20%3A%3D%20self%20class%20new%3A%20self%20size.%0A%09self%20withIndexDo%3A%20%5B%3Aeach%20%3Aindex%20%7C%20%0A%09%09newCollection%20at%3A%20index%20put%3A%20each%20deepCopy%5D.%0A%09%5EnewCollection'), +messageSends: ["new:", "class", "size", "withIndexDo:", "at:put:", "deepCopy"], referencedClasses: [] }), smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_fourth'), +unescape('_first'), smalltalk.method({ -selector: unescape('fourth'), +selector: unescape('first'), category: 'accessing', fn: function () { var self=this; -return smalltalk.send(self, "_at_", [(4)]); +return smalltalk.send(self, "_at_", [(1)]); return self;}, args: [], -source: unescape('fourth%0A%09%5Eself%20at%3A%204'), +source: unescape('first%0A%09%5Eself%20at%3A%201'), messageSends: ["at:"], referencedClasses: [] }), smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_last'), -smalltalk.method({ -selector: unescape('last'), -category: 'accessing', -fn: function () { -var self=this; -return smalltalk.send(self, "_at_", [smalltalk.send(self, "_size", [])]); -return self;}, -args: [], -source: unescape('last%0A%09%5Eself%20at%3A%20self%20size'), -messageSends: ["at:", "size"], -referencedClasses: [] -}), -smalltalk.SequenceableCollection); - -smalltalk.addMethod( -unescape('_second'), +unescape('_first_'), smalltalk.method({ -selector: unescape('second'), +selector: unescape('first%3A'), category: 'accessing', -fn: function () { +fn: function (n){ var self=this; -return smalltalk.send(self, "_at_", [(2)]); +return smalltalk.send(self, "_copyFrom_to_", [(1), n]); return self;}, -args: [], -source: unescape('second%0A%09%5Eself%20at%3A%202'), -messageSends: ["at:"], +args: ["n"], +source: unescape('first%3A%20n%0A%09%22Answer%20the%20first%20n%20elements%20of%20the%20receiver.%0A%09Raise%20an%20error%20if%20there%20are%20not%20enough%20elements.%22%0A%0A%09%5E%20self%20copyFrom%3A%201%20to%3A%20n'), +messageSends: ["copyFrom:to:"], referencedClasses: [] }), smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_third'), +unescape('_fourth'), smalltalk.method({ -selector: unescape('third'), +selector: unescape('fourth'), category: 'accessing', fn: function () { var self=this; -return smalltalk.send(self, "_at_", [(3)]); +return smalltalk.send(self, "_at_", [(4)]); return self;}, args: [], -source: unescape('third%0A%09%5Eself%20at%3A%203'), +source: unescape('fourth%0A%09%5Eself%20at%3A%204'), messageSends: ["at:"], referencedClasses: [] }), smalltalk.SequenceableCollection); -smalltalk.addMethod( -unescape('_removeLast'), -smalltalk.method({ -selector: unescape('removeLast'), -category: 'adding', -fn: function () { -var self=this; -smalltalk.send(self, "_remove_", [smalltalk.send(self, "_last", [])]); -return self;}, -args: [], -source: unescape('removeLast%0A%09self%20remove%3A%20self%20last'), -messageSends: ["remove:", "last"], -referencedClasses: [] -}), -smalltalk.SequenceableCollection); - -smalltalk.addMethod( -unescape('_addLast_'), -smalltalk.method({ -selector: unescape('addLast%3A'), -category: 'adding', -fn: function (anObject) { -var self=this; -smalltalk.send(self, "_add_", [anObject]); -return self;}, -args: ["anObject"], -source: unescape('addLast%3A%20anObject%0A%09self%20add%3A%20anObject'), -messageSends: ["add:"], -referencedClasses: [] -}), -smalltalk.SequenceableCollection); - -smalltalk.addMethod( -unescape('_withIndexDo_'), -smalltalk.method({ -selector: unescape('withIndexDo%3A'), -category: 'enumerating', -fn: function (aBlock) { -var self=this; -for(var i=0;i<self.length;i++){aBlock(self[i], i+1);}; -return self;}, -args: ["aBlock"], -source: unescape('withIndexDo%3A%20aBlock%0A%09%3Cfor%28var%20i%3D0%3Bi%3Cself.length%3Bi++%29%7BaBlock%28self%5Bi%5D%2C%20i+1%29%3B%7D%3E'), -messageSends: [], -referencedClasses: [] -}), -smalltalk.SequenceableCollection); - -smalltalk.addMethod( -unescape('_allButFirst'), -smalltalk.method({ -selector: unescape('allButFirst'), -category: 'accessing', -fn: function () { -var self=this; -return smalltalk.send(self, "_copyFrom_to_", [(2), smalltalk.send(self, "_size", [])]); -return self;}, -args: [], -source: unescape('allButFirst%0A%09%5Eself%20copyFrom%3A%202%20to%3A%20self%20size'), -messageSends: ["copyFrom:to:", "size"], -referencedClasses: [] -}), -smalltalk.SequenceableCollection); - -smalltalk.addMethod( -unescape('_allButLast'), -smalltalk.method({ -selector: unescape('allButLast'), -category: 'accessing', -fn: function () { -var self=this; -return smalltalk.send(self, "_copyFrom_to_", [(1), ((($receiver = smalltalk.send(self, "_size", [])).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)]))]); -return self;}, -args: [], -source: unescape('allButLast%0A%09%5Eself%20copyFrom%3A%201%20to%3A%20self%20size%20-%201'), -messageSends: ["copyFrom:to:", unescape("-"), "size"], -referencedClasses: [] -}), -smalltalk.SequenceableCollection); - smalltalk.addMethod( unescape('_indexOf_'), smalltalk.method({ @@ -1477,27 +1737,6 @@ referencedClasses: [] }), smalltalk.SequenceableCollection); -smalltalk.addMethod( -unescape('_indexOf_startingAt_ifAbsent_'), -smalltalk.method({ -selector: unescape('indexOf%3AstartingAt%3AifAbsent%3A'), -category: 'accessing', -fn: function (anObject, start, aBlock) { -var self=this; - - for(var i=start-1;i<self.length;i++){ - if(self[i].__eq(anObject)) {return i+1} - } - return aBlock(); - ; -return self;}, -args: ["anObject", "start", "aBlock"], -source: unescape('indexOf%3A%20anObject%20startingAt%3A%20start%20ifAbsent%3A%20aBlock%0A%09%3C%0A%09%09for%28var%20i%3Dstart-1%3Bi%3Cself.length%3Bi++%29%7B%0A%09%09%09if%28self%5Bi%5D.__eq%28anObject%29%29%20%7Breturn%20i+1%7D%0A%09%09%7D%0A%09%09return%20aBlock%28%29%3B%0A%09%3E'), -messageSends: [], -referencedClasses: [] -}), -smalltalk.SequenceableCollection); - smalltalk.addMethod( unescape('_indexOf_startingAt_'), smalltalk.method({ @@ -1515,90 +1754,38 @@ referencedClasses: [] smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_reversed'), -smalltalk.method({ -selector: unescape('reversed'), -category: 'converting', -fn: function () { -var self=this; -smalltalk.send(self, "_subclassResponsibility", []); -return self;}, -args: [], -source: unescape('reversed%0A%09self%20subclassResponsibility'), -messageSends: ["subclassResponsibility"], -referencedClasses: [] -}), -smalltalk.SequenceableCollection); - -smalltalk.addMethod( -unescape('_atRandom'), +unescape('_indexOf_startingAt_ifAbsent_'), smalltalk.method({ -selector: unescape('atRandom'), +selector: unescape('indexOf%3AstartingAt%3AifAbsent%3A'), category: 'accessing', -fn: function () { -var self=this; -return smalltalk.send(self, "_at_", [smalltalk.send(smalltalk.send(self, "_size", []), "_atRandom", [])]); -return self;}, -args: [], -source: unescape('atRandom%0A%09%5E%20self%20at%3A%20self%20size%20atRandom'), -messageSends: ["at:", "atRandom", "size"], -referencedClasses: [] -}), -smalltalk.SequenceableCollection); - -smalltalk.addMethod( -unescape('__eq'), -smalltalk.method({ -selector: unescape('%3D'), -category: 'comparing', -fn: function (aCollection) { +fn: function (anObject, start, aBlock) { var self=this; -try{((($receiver = smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aCollection, "_class", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [smalltalk.send(aCollection, "_size", [])]);})])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); -smalltalk.send(self, "_withIndexDo_", [(function(each, i){return ((($receiver = smalltalk.send(smalltalk.send(aCollection, "_at_", [i]), "__eq", [each])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})]));})]); -(function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return true}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}}, -args: ["aCollection"], -source: unescape('%3D%20aCollection%0A%09%28self%20class%20%3D%20aCollection%20class%20and%3A%20%5B%0A%09%09self%20size%20%3D%20aCollection%20size%5D%29%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09self%20withIndexDo%3A%20%5B%3Aeach%20%3Ai%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28aCollection%20at%3A%20i%29%20%3D%20each%20ifFalse%3A%20%5B%5Efalse%5D%5D.%0A%09%5Etrue'), -messageSends: ["ifFalse:", "and:", unescape("%3D"), "class", "size", "withIndexDo:", "at:"], -referencedClasses: [] -}), -smalltalk.SequenceableCollection); -smalltalk.addMethod( -unescape('_shallowCopy'), -smalltalk.method({ -selector: unescape('shallowCopy'), -category: 'copying', -fn: function () { -var self=this; -var newCollection=nil; -(newCollection=smalltalk.send(smalltalk.send(self, "_class", []), "_new_", [smalltalk.send(self, "_size", [])])); -smalltalk.send(self, "_withIndexDo_", [(function(each, index){return smalltalk.send(newCollection, "_at_put_", [index, each]);})]); -return newCollection; + for(var i=start-1;i<self.length;i++){ + if(self[i].__eq(anObject)) {return i+1} + } + return aBlock(); + ; return self;}, -args: [], -source: unescape('shallowCopy%0A%09%7C%20newCollection%20%7C%0A%09newCollection%20%3A%3D%20self%20class%20new%3A%20self%20size.%0A%09self%20withIndexDo%3A%20%5B%20%3Aeach%20%3Aindex%20%7C%20%0A%09%09newCollection%20at%3A%20index%20put%3A%20each%5D.%0A%09%5EnewCollection'), -messageSends: ["new:", "class", "size", "withIndexDo:", "at:put:"], +args: ["anObject", "start", "aBlock"], +source: unescape('indexOf%3A%20anObject%20startingAt%3A%20start%20ifAbsent%3A%20aBlock%0A%09%3C%0A%09%09for%28var%20i%3Dstart-1%3Bi%3Cself.length%3Bi++%29%7B%0A%09%09%09if%28self%5Bi%5D.__eq%28anObject%29%29%20%7Breturn%20i+1%7D%0A%09%09%7D%0A%09%09return%20aBlock%28%29%3B%0A%09%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_last'), smalltalk.method({ -selector: unescape('deepCopy'), -category: 'copying', +selector: unescape('last'), +category: 'accessing', fn: function () { var self=this; -var newCollection=nil; -(newCollection=smalltalk.send(smalltalk.send(self, "_class", []), "_new_", [smalltalk.send(self, "_size", [])])); -smalltalk.send(self, "_withIndexDo_", [(function(each, index){return smalltalk.send(newCollection, "_at_put_", [index, smalltalk.send(each, "_deepCopy", [])]);})]); -return newCollection; +return smalltalk.send(self, "_at_", [smalltalk.send(self, "_size", [])]); return self;}, args: [], -source: unescape('deepCopy%0A%09%7C%20newCollection%20%7C%0A%09newCollection%20%3A%3D%20self%20class%20new%3A%20self%20size.%0A%09self%20withIndexDo%3A%20%5B%3Aeach%20%3Aindex%20%7C%20%0A%09%09newCollection%20at%3A%20index%20put%3A%20each%20deepCopy%5D.%0A%09%5EnewCollection'), -messageSends: ["new:", "class", "size", "withIndexDo:", "at:put:", "deepCopy"], +source: unescape('last%0A%09%5Eself%20at%3A%20self%20size'), +messageSends: ["at:", "size"], referencedClasses: [] }), smalltalk.SequenceableCollection); @@ -1625,962 +1812,907 @@ referencedClasses: [] smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_first_'), -smalltalk.method({ -selector: unescape('first%3A'), -category: 'accessing', -fn: function (n){ -var self=this; -return smalltalk.send(self, "_copyFrom_to_", [(1), n]); -return self;}, -args: ["n"], -source: unescape('first%3A%20n%0A%09%22Answer%20the%20first%20n%20elements%20of%20the%20receiver.%0A%09Raise%20an%20error%20if%20there%20are%20not%20enough%20elements.%22%0A%0A%09%5E%20self%20copyFrom%3A%201%20to%3A%20n'), -messageSends: ["copyFrom:to:"], -referencedClasses: [] -}), -smalltalk.SequenceableCollection); - - - -smalltalk.addClass('CharacterArray', smalltalk.SequenceableCollection, [], 'Kernel-Collections'); -smalltalk.addMethod( -unescape('_at_put_'), -smalltalk.method({ -selector: unescape('at%3Aput%3A'), -category: 'accessing', -fn: function (anIndex, anObject) { -var self=this; -smalltalk.send(self, "_errorReadOnly", []); -return self;}, -args: ["anIndex", "anObject"], -source: unescape('at%3A%20anIndex%20put%3A%20anObject%0A%09self%20errorReadOnly'), -messageSends: ["errorReadOnly"], -referencedClasses: [] -}), -smalltalk.CharacterArray); - -smalltalk.addMethod( -unescape('_add_'), +unescape('_removeLast'), smalltalk.method({ -selector: unescape('add%3A'), +selector: unescape('removeLast'), category: 'adding', -fn: function (anObject) { -var self=this; -smalltalk.send(self, "_errorReadOnly", []); -return self;}, -args: ["anObject"], -source: unescape('add%3A%20anObject%0A%09self%20errorReadOnly'), -messageSends: ["errorReadOnly"], -referencedClasses: [] -}), -smalltalk.CharacterArray); - -smalltalk.addMethod( -unescape('__comma'), -smalltalk.method({ -selector: unescape('%2C'), -category: 'copying', -fn: function (aString) { +fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "__comma", [smalltalk.send(aString, "_asString", [])]); +smalltalk.send(self, "_remove_", [smalltalk.send(self, "_last", [])]); return self;}, -args: ["aString"], -source: unescape('%2C%20aString%0A%09%5Eself%20asString%2C%20aString%20asString'), -messageSends: [unescape("%2C"), "asString"], +args: [], +source: unescape('removeLast%0A%09self%20remove%3A%20self%20last'), +messageSends: ["remove:", "last"], referencedClasses: [] }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_asString'), +unescape('_reversed'), smalltalk.method({ -selector: unescape('asString'), +selector: unescape('reversed'), category: 'converting', fn: function () { var self=this; -return smalltalk.send(self, "_subclassResponsibility", []); +smalltalk.send(self, "_subclassResponsibility", []); return self;}, args: [], -source: unescape('asString%0A%09%5Eself%20subclassResponsibility'), +source: unescape('reversed%0A%09self%20subclassResponsibility'), messageSends: ["subclassResponsibility"], referencedClasses: [] }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_asNumber'), +unescape('_second'), smalltalk.method({ -selector: unescape('asNumber'), -category: 'converting', +selector: unescape('second'), +category: 'accessing', fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "_asNumber", []); +return smalltalk.send(self, "_at_", [(2)]); return self;}, args: [], -source: unescape('asNumber%0A%09%5Eself%20asString%20asNumber'), -messageSends: ["asNumber", "asString"], +source: unescape('second%0A%09%5Eself%20at%3A%202'), +messageSends: ["at:"], referencedClasses: [] }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_errorReadOnly'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('errorReadOnly'), -category: 'error handling', +selector: unescape('shallowCopy'), +category: 'copying', fn: function () { var self=this; -smalltalk.send(self, "_error_", [unescape("Object%20is%20read-only")]); +var newCollection=nil; +(newCollection=smalltalk.send(smalltalk.send(self, "_class", []), "_new_", [smalltalk.send(self, "_size", [])])); +smalltalk.send(self, "_withIndexDo_", [(function(each, index){return smalltalk.send(newCollection, "_at_put_", [index, each]);})]); +return newCollection; return self;}, args: [], -source: unescape('errorReadOnly%0A%09self%20error%3A%20%27Object%20is%20read-only%27'), -messageSends: ["error:"], +source: unescape('shallowCopy%0A%09%7C%20newCollection%20%7C%0A%09newCollection%20%3A%3D%20self%20class%20new%3A%20self%20size.%0A%09self%20withIndexDo%3A%20%5B%20%3Aeach%20%3Aindex%20%7C%20%0A%09%09newCollection%20at%3A%20index%20put%3A%20each%5D.%0A%09%5EnewCollection'), +messageSends: ["new:", "class", "size", "withIndexDo:", "at:put:"], referencedClasses: [] }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_printString'), +unescape('_third'), smalltalk.method({ -selector: unescape('printString'), -category: 'printing', +selector: unescape('third'), +category: 'accessing', fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "_printString", []); +return smalltalk.send(self, "_at_", [(3)]); return self;}, args: [], -source: unescape('printString%0A%09%5Eself%20asString%20printString'), -messageSends: ["printString", "asString"], +source: unescape('third%0A%09%5Eself%20at%3A%203'), +messageSends: ["at:"], referencedClasses: [] }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); smalltalk.addMethod( -unescape('_remove_'), +unescape('_withIndexDo_'), smalltalk.method({ -selector: unescape('remove%3A'), -category: 'adding', -fn: function (anObject) { +selector: unescape('withIndexDo%3A'), +category: 'enumerating', +fn: function (aBlock) { var self=this; -smalltalk.send(self, "_errorReadOnly", []); +for(var i=0;i<self.length;i++){aBlock(self[i], i+1);}; return self;}, -args: ["anObject"], -source: unescape('remove%3A%20anObject%0A%09self%20errorReadOnly'), -messageSends: ["errorReadOnly"], +args: ["aBlock"], +source: unescape('withIndexDo%3A%20aBlock%0A%09%3Cfor%28var%20i%3D0%3Bi%3Cself.length%3Bi++%29%7BaBlock%28self%5Bi%5D%2C%20i+1%29%3B%7D%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.CharacterArray); +smalltalk.SequenceableCollection); + + +smalltalk.addClass('Array', smalltalk.SequenceableCollection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_asUppercase'), +unescape('_add_'), smalltalk.method({ -selector: unescape('asUppercase'), -category: 'converting', -fn: function () { +selector: unescape('add%3A'), +category: 'adding/removing', +fn: function (anObject) { var self=this; -return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [smalltalk.send(smalltalk.send(self, "_asString", []), "_asUppercase", [])]); +self.push(anObject); return anObject;; return self;}, -args: [], -source: unescape('asUppercase%0A%09%5Eself%20class%20fromString%3A%20self%20asString%20asUppercase'), -messageSends: ["fromString:", "class", "asUppercase", "asString"], +args: ["anObject"], +source: unescape('add%3A%20anObject%0A%09%3Cself.push%28anObject%29%3B%20return%20anObject%3B%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.CharacterArray); +smalltalk.Array); smalltalk.addMethod( -unescape('_asSymbol'), +unescape('_asJavascript'), smalltalk.method({ -selector: unescape('asSymbol'), +selector: unescape('asJavascript'), category: 'converting', fn: function () { var self=this; -return smalltalk.send(self, "_subclassResponsibility", []); +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('asSymbol%0A%09%5Eself%20subclassResponsibility'), -messageSends: ["subclassResponsibility"], +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.CharacterArray); +smalltalk.Array); smalltalk.addMethod( -unescape('_asLowercase'), +unescape('_at_ifAbsent_'), smalltalk.method({ -selector: unescape('asLowercase'), -category: 'converting', -fn: function () { +selector: unescape('at%3AifAbsent%3A'), +category: 'accessing', +fn: function (anIndex, aBlock) { var self=this; -return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [smalltalk.send(smalltalk.send(self, "_asString", []), "_asLowercase", [])]); + + var value = self[anIndex - 1]; + if(value === undefined) { + return aBlock(); + } else { + return value; + } + ; return self;}, -args: [], -source: unescape('asLowercase%0A%09%5Eself%20class%20fromString%3A%20self%20asString%20asLowercase'), -messageSends: ["fromString:", "class", "asLowercase", "asString"], +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.CharacterArray); - +smalltalk.Array); smalltalk.addMethod( -unescape('_fromString_'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('fromString%3A'), -category: 'instance creation', -fn: function (aString) { +selector: unescape('at%3Aput%3A'), +category: 'accessing', +fn: function (anIndex, anObject) { var self=this; -smalltalk.send(self, "_subclassResponsibility", []); +return self[anIndex - 1] = anObject; return self;}, -args: ["aString"], -source: unescape('fromString%3A%20aString%0A%09self%20subclassResponsibility'), -messageSends: ["subclassResponsibility"], +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.CharacterArray.klass); - +smalltalk.Array); -smalltalk.addClass('String', smalltalk.CharacterArray, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('__eq'), +unescape('_join_'), smalltalk.method({ -selector: unescape('%3D'), -category: 'comparing', +selector: unescape('join%3A'), +category: 'enumerating', fn: function (aString) { var self=this; -try{((($receiver = smalltalk.send(smalltalk.send(aString, "_class", []), "__eq", [smalltalk.send(self, "_class", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); -return String(self) === String(aString); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}}, -args: ["aString"], -source: unescape('%3D%20aString%0A%09aString%20class%20%3D%20self%20class%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09%3Creturn%20String%28self%29%20%3D%3D%3D%20String%28aString%29%3E'), -messageSends: ["ifFalse:", unescape("%3D"), "class"], -referencedClasses: [] -}), -smalltalk.String); - -smalltalk.addMethod( -unescape('_size'), -smalltalk.method({ -selector: unescape('size'), -category: 'accessing', -fn: function () { -var self=this; -return self.length; +return self.join(aString); return self;}, -args: [], -source: unescape('size%0A%09%3Creturn%20self.length%3E'), +args: ["aString"], +source: unescape('join%3A%20aString%0A%09%3Creturn%20self.join%28aString%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_at_ifAbsent_'), +unescape('_remove_'), smalltalk.method({ -selector: unescape('at%3AifAbsent%3A'), -category: 'accessing', -fn: function (anIndex, aBlock) { +selector: unescape('remove%3A'), +category: 'adding/removing', +fn: function (anObject) { var self=this; -return self[anIndex - 1] || aBlock(); + + for(var i=0;i<self.length;i++) { + if(self[i] == anObject) { + self.splice(i,1); + break; + } + } + ; return self;}, -args: ["anIndex", "aBlock"], -source: unescape('at%3A%20anIndex%20ifAbsent%3A%20aBlock%0A%09%3Creturn%20self%5BanIndex%20-%201%5D%20%7C%7C%20aBlock%28%29%3E'), +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.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_escaped'), +unescape('_removeFrom_to_'), smalltalk.method({ -selector: unescape('escaped'), -category: 'accessing', -fn: function () { +selector: unescape('removeFrom%3Ato%3A'), +category: 'adding/removing', +fn: function (aNumber, anotherNumber) { var self=this; -return escape(self); +self.splice(aNumber - 1,anotherNumber - 1); return self;}, -args: [], -source: unescape('escaped%0A%09%3Creturn%20escape%28self%29%3E'), +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.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_unescaped'), +unescape('_reversed'), smalltalk.method({ -selector: unescape('unescaped'), -category: 'accessing', +selector: unescape('reversed'), +category: 'converting', fn: function () { var self=this; -return unescape(self); +return self._copy().reverse(); return self;}, args: [], -source: unescape('unescaped%0A%09%3Creturn%20unescape%28self%29%3E'), +source: unescape('reversed%0A%09%3Creturn%20self._copy%28%29.reverse%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('__comma'), +unescape('_size'), smalltalk.method({ -selector: unescape('%2C'), -category: 'copying', -fn: function (aString) { +selector: unescape('size'), +category: 'accessing', +fn: function () { var self=this; -return self + aString; +return self.length; return self;}, -args: ["aString"], -source: unescape('%2C%20aString%0A%09%3Creturn%20self%20+%20aString%3E'), +args: [], +source: unescape('size%0A%09%3Creturn%20self.length%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_copyFrom_to_'), +unescape('_sort'), smalltalk.method({ -selector: unescape('copyFrom%3Ato%3A'), -category: 'copying', -fn: function (anIndex, anotherIndex) { +selector: unescape('sort'), +category: 'enumerating', +fn: function () { var self=this; -return self.substring(anIndex - 1, anotherIndex); +return smalltalk.send(self, "_basicPerform_", ["sort"]); return self;}, -args: ["anIndex", "anotherIndex"], -source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09%3Creturn%20self.substring%28anIndex%20-%201%2C%20anotherIndex%29%3E'), -messageSends: [], +args: [], +source: unescape('sort%0A%20%20%20%20%5Eself%20basicPerform%3A%20%27sort%27'), +messageSends: ["basicPerform:"], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_shallowCopy'), +unescape('_sort_'), smalltalk.method({ -selector: unescape('shallowCopy'), -category: 'copying', -fn: function () { +selector: unescape('sort%3A'), +category: 'enumerating', +fn: function (aBlock) { var self=this; -return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [self]); + + return self.sort(function(a, b) { + if(aBlock(a,b)) {return -1} else {return 1} + }) + ; return self;}, -args: [], -source: unescape('shallowCopy%0A%09%5Eself%20class%20fromString%3A%20self'), -messageSends: ["fromString:", "class"], +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.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_sorted'), smalltalk.method({ -selector: unescape('deepCopy'), -category: 'copying', +selector: unescape('sorted'), +category: 'enumerating', fn: function () { var self=this; -return smalltalk.send(self, "_shallowCopy", []); +return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort", []); return self;}, args: [], -source: unescape('deepCopy%0A%09%5Eself%20shallowCopy'), -messageSends: ["shallowCopy"], +source: unescape('sorted%0A%09%5Eself%20copy%20sort'), +messageSends: ["sort", "copy"], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_asSelector'), +unescape('_sorted_'), smalltalk.method({ -selector: unescape('asSelector'), -category: 'converting', -fn: function () { +selector: unescape('sorted%3A'), +category: 'enumerating', +fn: function (aBlock) { var self=this; -var selector=nil; -(selector=smalltalk.send("_", "__comma", [self])); -(selector=smalltalk.send(selector, "_replace_with_", [":", "_"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B+%5D"), "_plus"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("-"), "_minus"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B*%5D"), "_star"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B/%5D"), "_slash"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%3E"), "_gt"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%3C"), "_lt"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%3D"), "_eq"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%2C"), "_comma"])); -(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B@%5D"), "_at"])); -return selector; +return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort_", [aBlock]); return self;}, -args: [], -source: unescape('asSelector%0A%09%22If%20you%20change%20this%20method%2C%20change%20smalltalk.convertSelector%20too%20%28see%20js/boot.js%20file%29%22%0A%0A%09%7C%20selector%20%7C%0A%09selector%20%3A%3D%20%27_%27%2C%20self.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%3A%27%20with%3A%20%27_%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B+%5D%27%20with%3A%20%27_plus%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27-%27%20with%3A%20%27_minus%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B*%5D%27%20with%3A%20%27_star%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B/%5D%27%20with%3A%20%27_slash%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%3E%27%20with%3A%20%27_gt%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%3C%27%20with%3A%20%27_lt%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%3D%27%20with%3A%20%27_eq%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%2C%27%20with%3A%20%27_comma%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B@%5D%27%20with%3A%20%27_at%27.%0A%09%5Eselector'), -messageSends: [unescape("%2C"), "replace:with:"], +args: ["aBlock"], +source: unescape('sorted%3A%20aBlock%0A%09%5Eself%20copy%20sort%3A%20aBlock'), +messageSends: ["sort:", "copy"], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); + smalltalk.addMethod( -unescape('_asJavascript'), +unescape('_new_'), smalltalk.method({ -selector: unescape('asJavascript'), -category: 'converting', -fn: function () { +selector: unescape('new%3A'), +category: 'instance creation', +fn: function (anInteger) { var self=this; - - if(self.search(/^[a-zA-Z0-9_:.$ ]*$/) == -1) - return "unescape(\"" + escape(self) + "\")"; - else - return "\"" + self + "\""; - ; +return new Array(anInteger); return self;}, -args: [], -source: unescape('asJavascript%0A%09%3C%0A%09%09if%28self.search%28/%5E%5Ba-zA-Z0-9_%3A.%24%20%5D*%24/%29%20%3D%3D%20-1%29%0A%09%09%09return%20%22unescape%28%5C%22%22%20+%20escape%28self%29%20+%20%22%5C%22%29%22%3B%0A%09%09else%0A%09%09%09return%20%22%5C%22%22%20+%20self%20+%20%22%5C%22%22%3B%0A%09%3E'), +args: ["anInteger"], +source: unescape('new%3A%20anInteger%0A%09%3Creturn%20new%20Array%28anInteger%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_replace_with_'), +unescape('_with_'), smalltalk.method({ -selector: unescape('replace%3Awith%3A'), -category: 'regular expressions', -fn: function (aString, anotherString) { +selector: unescape('with%3A'), +category: 'instance creation', +fn: function (anObject) { var self=this; -return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_flag_", [aString, "g"]), anotherString]); +return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(1)])); return self;}, -args: ["aString", "anotherString"], -source: unescape('replace%3A%20aString%20with%3A%20anotherString%0A%09%5Eself%20replaceRegexp%3A%20%28RegularExpression%20fromString%3A%20aString%20flag%3A%20%27g%27%29%20with%3A%20anotherString'), -messageSends: ["replaceRegexp:with:", "fromString:flag:"], -referencedClasses: ["RegularExpression"] +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.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_replaceRegexp_with_'), +unescape('_with_with_'), smalltalk.method({ -selector: unescape('replaceRegexp%3Awith%3A'), -category: 'regular expressions', -fn: function (aRegexp, aString) { +selector: unescape('with%3Awith%3A'), +category: 'instance creation', +fn: function (anObject, anObject2) { var self=this; -return self.replace(aRegexp, aString); +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: ["aRegexp", "aString"], -source: unescape('replaceRegexp%3A%20aRegexp%20with%3A%20aString%0A%09%3Creturn%20self.replace%28aRegexp%2C%20aString%29%3E'), -messageSends: [], +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.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_tokenize_'), +unescape('_with_with_with_'), smalltalk.method({ -selector: unescape('tokenize%3A'), -category: 'converting', -fn: function (aString) { +selector: unescape('with%3Awith%3Awith%3A'), +category: 'instance creation', +fn: function (anObject, anObject2, anObject3) { var self=this; -return self.split(aString); +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: ["aString"], -source: unescape('tokenize%3A%20aString%0A%09%3Creturn%20self.split%28aString%29%3E'), -messageSends: [], +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.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_match_'), +unescape('_withAll_'), smalltalk.method({ -selector: unescape('match%3A'), -category: 'regular expressions', -fn: function (aRegexp) { +selector: unescape('withAll%3A'), +category: 'instance creation', +fn: function (aCollection) { var self=this; -return self.search(aRegexp) != -1; +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: ["aRegexp"], -source: unescape('match%3A%20aRegexp%0A%09%3Creturn%20self.search%28aRegexp%29%20%21%3D%20-1%3E'), -messageSends: [], +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.String); +smalltalk.Array.klass); + +smalltalk.addClass('Array', smalltalk.SequenceableCollection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_asString'), +unescape('_add_'), smalltalk.method({ -selector: unescape('asString'), -category: 'converting', -fn: function () { +selector: unescape('add%3A'), +category: 'adding/removing', +fn: function (anObject) { var self=this; -return self; +self.push(anObject); return anObject;; return self;}, -args: [], -source: unescape('asString%0A%09%5Eself'), +args: ["anObject"], +source: unescape('add%3A%20anObject%0A%09%3Cself.push%28anObject%29%3B%20return%20anObject%3B%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_asNumber'), +unescape('_asJavascript'), smalltalk.method({ -selector: unescape('asNumber'), +selector: unescape('asJavascript'), category: 'converting', fn: function () { var self=this; -return Number(self); +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('asNumber%0A%09%3Creturn%20Number%28self%29%3E'), -messageSends: [], +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.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_printString'), +unescape('_at_ifAbsent_'), smalltalk.method({ -selector: unescape('printString'), -category: 'printing', -fn: function () { +selector: unescape('at%3AifAbsent%3A'), +category: 'accessing', +fn: function (anIndex, aBlock) { var self=this; -return smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [self]), "__comma", [unescape("%27")]); + + var value = self[anIndex - 1]; + if(value === undefined) { + return aBlock(); + } else { + return value; + } + ; return self;}, -args: [], -source: unescape('printString%0A%09%5E%27%27%27%27%2C%20self%2C%20%27%27%27%27'), -messageSends: [unescape("%2C")], +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.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_printNl'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('printNl'), -category: 'printing', -fn: function () { +selector: unescape('at%3Aput%3A'), +category: 'accessing', +fn: function (anIndex, anObject) { var self=this; -console.log(self); +return self[anIndex - 1] = anObject; return self;}, -args: [], -source: unescape('printNl%0A%09%3Cconsole.log%28self%29%3E'), +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.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_isString'), +unescape('_join_'), smalltalk.method({ -selector: unescape('isString'), -category: 'testing', -fn: function () { +selector: unescape('join%3A'), +category: 'enumerating', +fn: function (aString) { var self=this; -return true; +return self.join(aString); return self;}, -args: [], -source: unescape('isString%0A%09%5Etrue'), +args: ["aString"], +source: unescape('join%3A%20aString%0A%09%3Creturn%20self.join%28aString%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('__gt'), +unescape('_remove_'), smalltalk.method({ -selector: unescape('%3E'), -category: 'comparing', -fn: function (aString) { +selector: unescape('remove%3A'), +category: 'adding/removing', +fn: function (anObject) { var self=this; -return String(self) > aString._asString(); + + for(var i=0;i<self.length;i++) { + if(self[i] == anObject) { + self.splice(i,1); + break; + } + } + ; return self;}, -args: ["aString"], -source: unescape('%3E%20aString%0A%09%3Creturn%20String%28self%29%20%3E%3E%20aString._asString%28%29%3E'), +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.String); +smalltalk.Array); smalltalk.addMethod( -unescape('__lt'), +unescape('_removeFrom_to_'), smalltalk.method({ -selector: unescape('%3C'), -category: 'comparing', -fn: function (aString) { +selector: unescape('removeFrom%3Ato%3A'), +category: 'adding/removing', +fn: function (aNumber, anotherNumber) { var self=this; -return String(self) < aString._asString(); +self.splice(aNumber - 1,anotherNumber - 1); return self;}, -args: ["aString"], -source: unescape('%3C%20aString%0A%09%3Creturn%20String%28self%29%20%3C%20aString._asString%28%29%3E'), +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.String); +smalltalk.Array); smalltalk.addMethod( -unescape('__gt_eq'), +unescape('_reversed'), smalltalk.method({ -selector: unescape('%3E%3D'), -category: 'comparing', -fn: function (aString) { +selector: unescape('reversed'), +category: 'converting', +fn: function () { var self=this; -return String(self) >= aString._asString(); +return self._copy().reverse(); return self;}, -args: ["aString"], -source: unescape('%3E%3D%20aString%0A%09%3Creturn%20String%28self%29%20%3E%3E%3D%20aString._asString%28%29%3E'), +args: [], +source: unescape('reversed%0A%09%3Creturn%20self._copy%28%29.reverse%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('__lt_eq'), +unescape('_size'), smalltalk.method({ -selector: unescape('%3C%3D'), -category: 'comparing', -fn: function (aString) { +selector: unescape('size'), +category: 'accessing', +fn: function () { var self=this; -return String(self) <= aString._asString(); +return self.length; return self;}, -args: ["aString"], -source: unescape('%3C%3D%20aString%0A%09%3Creturn%20String%28self%29%20%3C%3D%20aString._asString%28%29%3E'), +args: [], +source: unescape('size%0A%09%3Creturn%20self.length%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_trimLeft_'), +unescape('_sort'), smalltalk.method({ -selector: unescape('trimLeft%3A'), -category: 'regular expressions', -fn: function (separators) { +selector: unescape('sort'), +category: 'enumerating', +fn: function () { var self=this; -return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_flag_", [smalltalk.send(smalltalk.send(unescape("%5E%5B"), "__comma", [separators]), "__comma", [unescape("%5D+")]), "g"]), ""]); +return smalltalk.send(self, "_basicPerform_", ["sort"]); return self;}, -args: ["separators"], -source: unescape('trimLeft%3A%20separators%0A%0A%09%5Eself%20replaceRegexp%3A%20%28RegularExpression%20fromString%3A%20%27%5E%5B%27%2C%20separators%2C%20%27%5D+%27%20flag%3A%20%27g%27%29%20with%3A%20%27%27'), -messageSends: ["replaceRegexp:with:", "fromString:flag:", unescape("%2C")], -referencedClasses: ["RegularExpression"] +args: [], +source: unescape('sort%0A%20%20%20%20%5Eself%20basicPerform%3A%20%27sort%27'), +messageSends: ["basicPerform:"], +referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_trimRight_'), +unescape('_sort_'), smalltalk.method({ -selector: unescape('trimRight%3A'), -category: 'regular expressions', -fn: function (separators) { +selector: unescape('sort%3A'), +category: 'enumerating', +fn: function (aBlock) { var self=this; -return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_flag_", [smalltalk.send(smalltalk.send(unescape("%5B"), "__comma", [separators]), "__comma", [unescape("%5D+%24")]), "g"]), ""]); + + return self.sort(function(a, b) { + if(aBlock(a,b)) {return -1} else {return 1} + }) + ; return self;}, -args: ["separators"], -source: unescape('trimRight%3A%20separators%0A%0A%09%5Eself%20replaceRegexp%3A%20%28RegularExpression%20fromString%3A%20%27%5B%27%2C%20separators%2C%20%27%5D+%24%27%20flag%3A%20%27g%27%29%20with%3A%20%27%27'), -messageSends: ["replaceRegexp:with:", "fromString:flag:", unescape("%2C")], -referencedClasses: ["RegularExpression"] +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.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_trimLeft'), +unescape('_sorted'), smalltalk.method({ -selector: unescape('trimLeft'), -category: 'regular expressions', +selector: unescape('sorted'), +category: 'enumerating', fn: function () { var self=this; -return smalltalk.send(self, "_trimLeft_", [unescape("%5Cs")]); +return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort", []); return self;}, args: [], -source: unescape('trimLeft%0A%09%5Eself%20trimLeft%3A%20%27%5Cs%27'), -messageSends: ["trimLeft:"], +source: unescape('sorted%0A%09%5Eself%20copy%20sort'), +messageSends: ["sort", "copy"], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); smalltalk.addMethod( -unescape('_trimRight'), +unescape('_sorted_'), smalltalk.method({ -selector: unescape('trimRight'), -category: 'regular expressions', -fn: function () { +selector: unescape('sorted%3A'), +category: 'enumerating', +fn: function (aBlock) { var self=this; -return smalltalk.send(self, "_trimRight_", [unescape("%5Cs")]); +return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort_", [aBlock]); return self;}, -args: [], -source: unescape('trimRight%0A%09%5Eself%20trimRight%3A%20%27%5Cs%27'), -messageSends: ["trimRight:"], +args: ["aBlock"], +source: unescape('sorted%3A%20aBlock%0A%09%5Eself%20copy%20sort%3A%20aBlock'), +messageSends: ["sort:", "copy"], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array); + smalltalk.addMethod( -unescape('_trimBoth'), +unescape('_new_'), smalltalk.method({ -selector: unescape('trimBoth'), -category: 'regular expressions', -fn: function () { +selector: unescape('new%3A'), +category: 'instance creation', +fn: function (anInteger) { var self=this; -return smalltalk.send(self, "_trimBoth_", [unescape("%5Cs")]); +return new Array(anInteger); return self;}, -args: [], -source: unescape('trimBoth%0A%09%5Eself%20trimBoth%3A%20%27%5Cs%27'), -messageSends: ["trimBoth:"], +args: ["anInteger"], +source: unescape('new%3A%20anInteger%0A%09%3Creturn%20new%20Array%28anInteger%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_trimBoth_'), -smalltalk.method({ -selector: unescape('trimBoth%3A'), -category: 'regular expressions', -fn: function (separators) { +unescape('_with_'), +smalltalk.method({ +selector: unescape('with%3A'), +category: 'instance creation', +fn: function (anObject) { var self=this; -return smalltalk.send(smalltalk.send(self, "_trimLeft_", [separators]), "_trimRight_", [separators]); +return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(1)])); return self;}, -args: ["separators"], -source: unescape('trimBoth%3A%20separators%0A%0A%09%5E%28self%20trimLeft%3A%20separators%29%20trimRight%3A%20separators'), -messageSends: ["trimRight:", "trimLeft:"], +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.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_asLowercase'), +unescape('_with_with_'), smalltalk.method({ -selector: unescape('asLowercase'), -category: 'converting', -fn: function () { +selector: unescape('with%3Awith%3A'), +category: 'instance creation', +fn: function (anObject, anObject2) { var self=this; -return self.toLowerCase(); +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: [], -source: unescape('asLowercase%0A%09%3Creturn%20self.toLowerCase%28%29%3E'), -messageSends: [], +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.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_asUppercase'), +unescape('_with_with_with_'), smalltalk.method({ -selector: unescape('asUppercase'), -category: 'converting', -fn: function () { +selector: unescape('with%3Awith%3Awith%3A'), +category: 'instance creation', +fn: function (anObject, anObject2, anObject3) { var self=this; -return self.toUpperCase(); +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: [], -source: unescape('asUppercase%0A%09%3Creturn%20self.toUpperCase%28%29%3E'), -messageSends: [], +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.String); +smalltalk.Array.klass); smalltalk.addMethod( -unescape('_join_'), +unescape('_withAll_'), smalltalk.method({ -selector: unescape('join%3A'), -category: 'split join', +selector: unescape('withAll%3A'), +category: 'instance creation', fn: function (aCollection) { var self=this; -return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){return smalltalk.send(aCollection, "_do_separatedBy_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(each, "_asString", [])]);}), (function(){return smalltalk.send(stream, "_nextPutAll_", [self]);})]);})]); +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('join%3A%20aCollection%20%0A%09%5E%20String%0A%09%09streamContents%3A%20%5B%3Astream%20%7C%20aCollection%0A%09%09%09%09do%3A%20%5B%3Aeach%20%7C%20stream%20nextPutAll%3A%20each%20asString%5D%20%0A%09%09%09%09separatedBy%3A%20%5Bstream%20nextPutAll%3A%20self%5D%5D'), -messageSends: ["streamContents:", "do:separatedBy:", "nextPutAll:", "asString"], -referencedClasses: ["String"] +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.String); +smalltalk.Array.klass); + +smalltalk.addClass('CharacterArray', smalltalk.SequenceableCollection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_includesSubString_'), +unescape('__comma'), smalltalk.method({ -selector: unescape('includesSubString%3A'), -category: 'testing', -fn: function (subString) { +selector: unescape('%2C'), +category: 'copying', +fn: function (aString) { var self=this; - return self.indexOf(subString) != -1 ; +return smalltalk.send(smalltalk.send(self, "_asString", []), "__comma", [smalltalk.send(aString, "_asString", [])]); return self;}, -args: ["subString"], -source: unescape('includesSubString%3A%20subString%0A%09%3C%20return%20self.indexOf%28subString%29%20%21%3D%20-1%20%3E'), -messageSends: [], +args: ["aString"], +source: unescape('%2C%20aString%0A%09%5Eself%20asString%2C%20aString%20asString'), +messageSends: [unescape("%2C"), "asString"], referencedClasses: [] }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_asciiValue'), +unescape('_add_'), smalltalk.method({ -selector: unescape('asciiValue'), -category: 'accessing', -fn: function () { +selector: unescape('add%3A'), +category: 'adding', +fn: function (anObject) { var self=this; -return self.charCodeAt(0);; +smalltalk.send(self, "_errorReadOnly", []); return self;}, -args: [], -source: unescape('asciiValue%0A%09%3Creturn%20self.charCodeAt%280%29%3B%3E'), -messageSends: [], +args: ["anObject"], +source: unescape('add%3A%20anObject%0A%09self%20errorReadOnly'), +messageSends: ["errorReadOnly"], referencedClasses: [] }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_lineIndicesDo_'), +unescape('_asLowercase'), smalltalk.method({ -selector: unescape('lineIndicesDo%3A'), -category: 'split join', -fn: function (aBlock) { +selector: unescape('asLowercase'), +category: 'converting', +fn: function () { var self=this; -try{var cr=nil; -var lf=nil; -var start=nil; -var sz=nil; -var nextLF=nil; -var nextCR=nil; -(start=(1)); -(sz=smalltalk.send(self, "_size", [])); -(cr=smalltalk.send((smalltalk.String || String), "_cr", [])); -(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, (1)])); -(lf=smalltalk.send((smalltalk.String || String), "_lf", [])); -(nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, (1)])); -(function(){while((function(){return ((($receiver = start).klass === smalltalk.Number) ? $receiver <=sz : smalltalk.send($receiver, "__lt_eq", [sz]));})()) {(function(){((($receiver = smalltalk.send(smalltalk.send(nextLF, "__eq", [(0)]), "_and_", [(function(){return smalltalk.send(nextCR, "__eq", [(0)]);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, sz, sz]);return (function(){throw({name: 'stReturn', selector: '_lineIndicesDo_', fn: function(){return self}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, sz, sz]);return (function(){throw({name: 'stReturn', selector: '_lineIndicesDo_', fn: function(){return self}})})();})]));return ((($receiver = smalltalk.send(smalltalk.send(nextCR, "__eq", [(0)]), "_or_", [(function(){return smalltalk.send((0) < nextLF, "_and_", [(function(){return ((($receiver = nextLF).klass === smalltalk.Number) ? $receiver <nextCR : smalltalk.send($receiver, "__lt", [nextCR]));})]);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextLF).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));})() : (function(){return ((($receiver = smalltalk.send((1) + nextCR, "__eq", [nextLF])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));})() : (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));}), (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextLF).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));}), (function(){return ((($receiver = smalltalk.send((1) + nextCR, "__eq", [nextLF])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));})() : (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));}), (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})]));})]));})()}})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_lineIndicesDo_'){return e.fn()} throw(e)}}, -args: ["aBlock"], -source: unescape('lineIndicesDo%3A%20aBlock%0A%09%22execute%20aBlock%20with%203%20arguments%20for%20each%20line%3A%0A%09-%20start%20index%20of%20line%0A%09-%20end%20index%20of%20line%20without%20line%20delimiter%0A%09-%20end%20index%20of%20line%20including%20line%20delimiter%28s%29%20CR%2C%20LF%20or%20CRLF%22%0A%09%0A%09%7C%20cr%20lf%20start%20sz%20nextLF%20nextCR%20%7C%0A%09start%20%3A%3D%201.%0A%09sz%20%3A%3D%20self%20size.%0A%09cr%20%3A%3D%20String%20cr.%0A%09nextCR%20%3A%3D%20self%20indexOf%3A%20cr%20startingAt%3A%201.%0A%09lf%20%3A%3D%20String%20lf.%0A%09nextLF%20%3A%3D%20self%20indexOf%3A%20lf%20startingAt%3A%201.%0A%09%5B%20start%20%3C%3D%20sz%20%5D%20whileTrue%3A%20%5B%0A%09%09%28nextLF%20%3D%200%20and%3A%20%5B%20nextCR%20%3D%200%20%5D%29%0A%09%09%09ifTrue%3A%20%5B%20%22No%20more%20CR%2C%20nor%20LF%2C%20the%20string%20is%20over%22%0A%09%09%09%09%09aBlock%20value%3A%20start%20value%3A%20sz%20value%3A%20sz.%0A%09%09%09%09%09%5Eself%20%5D.%0A%09%09%28nextCR%20%3D%200%20or%3A%20%5B%200%20%3C%20nextLF%20and%3A%20%5B%20nextLF%20%3C%20nextCR%20%5D%20%5D%29%0A%09%09%09ifTrue%3A%20%5B%20%22Found%20a%20LF%22%0A%09%09%09%09%09aBlock%20value%3A%20start%20value%3A%20nextLF%20-%201%20value%3A%20nextLF.%0A%09%09%09%09%09start%20%3A%3D%201%20+%20nextLF.%0A%09%09%09%09%09nextLF%20%3A%3D%20self%20indexOf%3A%20lf%20startingAt%3A%20start%20%5D%0A%09%09%09ifFalse%3A%20%5B%201%20+%20nextCR%20%3D%20nextLF%0A%09%09%09%09ifTrue%3A%20%5B%20%22Found%20a%20CR-LF%20pair%22%0A%09%09%09%09%09aBlock%20value%3A%20start%20value%3A%20nextCR%20-%201%20value%3A%20nextLF.%0A%09%09%09%09%09start%20%3A%3D%201%20+%20nextLF.%0A%09%09%09%09%09nextCR%20%3A%3D%20self%20indexOf%3A%20cr%20startingAt%3A%20start.%0A%09%09%09%09%09nextLF%20%3A%3D%20self%20indexOf%3A%20lf%20startingAt%3A%20start%20%5D%0A%09%09%09%09ifFalse%3A%20%5B%20%22Found%20a%20CR%22%0A%09%09%09%09%09aBlock%20value%3A%20start%20value%3A%20nextCR%20-%201%20value%3A%20nextCR.%0A%09%09%09%09%09start%20%3A%3D%201%20+%20nextCR.%0A%09%09%09%09%09nextCR%20%3A%3D%20self%20indexOf%3A%20cr%20startingAt%3A%20start%20%5D%5D%5D'), -messageSends: ["size", "cr", "indexOf:startingAt:", "lf", "whileTrue:", unescape("%3C%3D"), "ifTrue:", "and:", unescape("%3D"), "value:value:value:", "ifTrue:ifFalse:", "or:", unescape("%3C"), unescape("-"), unescape("+")], -referencedClasses: ["String"] +return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [smalltalk.send(smalltalk.send(self, "_asString", []), "_asLowercase", [])]); +return self;}, +args: [], +source: unescape('asLowercase%0A%09%5Eself%20class%20fromString%3A%20self%20asString%20asLowercase'), +messageSends: ["fromString:", "class", "asLowercase", "asString"], +referencedClasses: [] }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_linesDo_'), +unescape('_asNumber'), smalltalk.method({ -selector: unescape('linesDo%3A'), -category: 'split join', -fn: function (aBlock) { +selector: unescape('asNumber'), +category: 'converting', +fn: function () { var self=this; -smalltalk.send(self, "_lineIndicesDo_", [(function(start, endWithoutDelimiters, end){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_copyFrom_to_", [start, endWithoutDelimiters])]);})]); +return smalltalk.send(smalltalk.send(self, "_asString", []), "_asNumber", []); return self;}, -args: ["aBlock"], -source: unescape('linesDo%3A%20aBlock%0A%09%22Execute%20aBlock%20with%20each%20line%20in%20this%20string.%20The%20terminating%20line%0A%09delimiters%20CR%2C%20LF%20or%20CRLF%20pairs%20are%20not%20included%20in%20what%20is%20passed%20to%20aBlock%22%0A%0A%09self%20lineIndicesDo%3A%20%5B%3Astart%20%3AendWithoutDelimiters%20%3Aend%20%7C%0A%09%09aBlock%20value%3A%20%28self%20copyFrom%3A%20start%20to%3A%20endWithoutDelimiters%29%5D'), -messageSends: ["lineIndicesDo:", "value:", "copyFrom:to:"], +args: [], +source: unescape('asNumber%0A%09%5Eself%20asString%20asNumber'), +messageSends: ["asNumber", "asString"], referencedClasses: [] }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_lines'), +unescape('_asString'), smalltalk.method({ -selector: unescape('lines'), -category: 'split join', +selector: unescape('asString'), +category: 'converting', fn: function () { var self=this; -var lines=nil; -(lines=smalltalk.send((smalltalk.Array || Array), "_new", [])); -smalltalk.send(self, "_linesDo_", [(function(aLine){return smalltalk.send(lines, "_add_", [aLine]);})]); -return lines; +return smalltalk.send(self, "_subclassResponsibility", []); return self;}, args: [], -source: unescape('lines%0A%09%22Answer%20an%20array%20of%20lines%20composing%20this%20receiver%20without%20the%20line%20ending%20delimiters.%22%0A%0A%09%7C%20lines%20%7C%0A%09lines%20%3A%3D%20Array%20new.%0A%09self%20linesDo%3A%20%5B%3AaLine%20%7C%20lines%20add%3A%20aLine%5D.%0A%09%5Elines'), -messageSends: ["new", "linesDo:", "add:"], -referencedClasses: ["Array"] +source: unescape('asString%0A%09%5Eself%20subclassResponsibility'), +messageSends: ["subclassResponsibility"], +referencedClasses: [] }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_lineNumber_'), +unescape('_asSymbol'), smalltalk.method({ -selector: unescape('lineNumber%3A'), -category: 'split join', -fn: function (anIndex) { +selector: unescape('asSymbol'), +category: 'converting', +fn: function () { var self=this; -try{var lineCount=nil; -(lineCount=(0)); -smalltalk.send(self, "_lineIndicesDo_", [(function(start, endWithoutDelimiters, end){return ((($receiver = smalltalk.send((lineCount=((($receiver = lineCount).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))), "__eq", [anIndex])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_lineNumber_', fn: function(){return smalltalk.send(self, "_copyFrom_to_", [start, endWithoutDelimiters])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_lineNumber_', fn: function(){return smalltalk.send(self, "_copyFrom_to_", [start, endWithoutDelimiters])}})})();})]));})]); -(function(){throw({name: 'stReturn', selector: '_lineNumber_', fn: function(){return nil}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '_lineNumber_'){return e.fn()} throw(e)}}, -args: ["anIndex"], -source: unescape('lineNumber%3A%20anIndex%0A%09%22Answer%20a%20string%20containing%20the%20characters%20in%20the%20given%20line%20number.%22%0A%0A%09%7C%20lineCount%20%7C%0A%09lineCount%20%3A%3D%200.%0A%09self%20lineIndicesDo%3A%20%5B%3Astart%20%3AendWithoutDelimiters%20%3Aend%20%7C%0A%09%09%28lineCount%20%3A%3D%20lineCount%20+%201%29%20%3D%20anIndex%20ifTrue%3A%20%5B%5Eself%20copyFrom%3A%20start%20to%3A%20endWithoutDelimiters%5D%5D.%0A%09%5Enil'), -messageSends: ["lineIndicesDo:", "ifTrue:", unescape("%3D"), unescape("+"), "copyFrom:to:"], +return smalltalk.send(self, "_subclassResponsibility", []); +return self;}, +args: [], +source: unescape('asSymbol%0A%09%5Eself%20subclassResponsibility'), +messageSends: ["subclassResponsibility"], referencedClasses: [] }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_reversed'), +unescape('_asUppercase'), smalltalk.method({ -selector: unescape('reversed'), +selector: unescape('asUppercase'), category: 'converting', fn: function () { var self=this; -return self.split("").reverse().join(""); +return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [smalltalk.send(smalltalk.send(self, "_asString", []), "_asUppercase", [])]); return self;}, args: [], -source: unescape('reversed%0A%09%3Creturn%20self.split%28%22%22%29.reverse%28%29.join%28%22%22%29%3E'), -messageSends: [], +source: unescape('asUppercase%0A%09%5Eself%20class%20fromString%3A%20self%20asString%20asUppercase'), +messageSends: ["fromString:", "class", "asUppercase", "asString"], referencedClasses: [] }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_asJavaScriptSelector'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('asJavaScriptSelector'), -category: 'converting', -fn: function () { +selector: unescape('at%3Aput%3A'), +category: 'accessing', +fn: function (anIndex, anObject) { var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(self, "_asSelector", []), "_replace_with_", [unescape("%5E_"), ""]), "_replace_with_", [unescape("_.*"), ""]); +smalltalk.send(self, "_errorReadOnly", []); return self;}, -args: [], -source: unescape('asJavaScriptSelector%0A%09%5E%28self%20asSelector%20replace%3A%20%27%5E_%27%20with%3A%20%27%27%29%20replace%3A%20%27_.*%27%20with%3A%20%27%27.'), -messageSends: ["replace:with:", "asSelector"], +args: ["anIndex", "anObject"], +source: unescape('at%3A%20anIndex%20put%3A%20anObject%0A%09self%20errorReadOnly'), +messageSends: ["errorReadOnly"], referencedClasses: [] }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_asSymbol'), +unescape('_errorReadOnly'), smalltalk.method({ -selector: unescape('asSymbol'), -category: 'converting', +selector: unescape('errorReadOnly'), +category: 'error handling', fn: function () { var self=this; -return smalltalk.send((smalltalk.Symbol || Symbol), "_lookup_", [self]); +smalltalk.send(self, "_error_", [unescape("Object%20is%20read-only")]); return self;}, args: [], -source: unescape('asSymbol%0A%09%5ESymbol%20lookup%3A%20self'), -messageSends: ["lookup:"], -referencedClasses: ["Symbol"] +source: unescape('errorReadOnly%0A%09self%20error%3A%20%27Object%20is%20read-only%27'), +messageSends: ["error:"], +referencedClasses: [] }), -smalltalk.String); +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_printString'), smalltalk.method({ -selector: unescape('asJSON'), -category: 'converting', -fn: function (){ +selector: unescape('printString'), +category: 'printing', +fn: function () { var self=this; -return self; +return smalltalk.send(smalltalk.send(self, "_asString", []), "_printString", []); return self;}, args: [], -source: unescape('asJSON%0A%09%5Eself'), -messageSends: [], +source: unescape('printString%0A%09%5Eself%20asString%20printString'), +messageSends: ["printString", "asString"], referencedClasses: [] }), -smalltalk.String); - +smalltalk.CharacterArray); smalltalk.addMethod( -unescape('_streamClass'), +unescape('_remove_'), smalltalk.method({ -selector: unescape('streamClass'), -category: 'accessing', -fn: function () { +selector: unescape('remove%3A'), +category: 'adding', +fn: function (anObject) { var self=this; -return (smalltalk.StringStream || StringStream); +smalltalk.send(self, "_errorReadOnly", []); return self;}, -args: [], -source: unescape('streamClass%0A%09%20%20%20%20%5EStringStream'), -messageSends: [], -referencedClasses: ["StringStream"] +args: ["anObject"], +source: unescape('remove%3A%20anObject%0A%09self%20errorReadOnly'), +messageSends: ["errorReadOnly"], +referencedClasses: [] }), -smalltalk.String.klass); +smalltalk.CharacterArray); + smalltalk.addMethod( unescape('_fromString_'), @@ -2589,1271 +2721,1256 @@ selector: unescape('fromString%3A'), category: 'instance creation', fn: function (aString) { var self=this; -return new self.fn(aString); +smalltalk.send(self, "_subclassResponsibility", []); return self;}, args: ["aString"], -source: unescape('fromString%3A%20aString%0A%09%20%20%20%20%3Creturn%20new%20self.fn%28aString%29%3E'), -messageSends: [], +source: unescape('fromString%3A%20aString%0A%09self%20subclassResponsibility'), +messageSends: ["subclassResponsibility"], referencedClasses: [] }), -smalltalk.String.klass); +smalltalk.CharacterArray.klass); + +smalltalk.addClass('String', smalltalk.CharacterArray, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_cr'), +unescape('__comma'), smalltalk.method({ -selector: unescape('cr'), -category: 'accessing', -fn: function () { +selector: unescape('%2C'), +category: 'copying', +fn: function (aString) { var self=this; -return '\r'; +return self + aString; return self;}, -args: [], -source: unescape('cr%0A%09%3Creturn%20%27%5Cr%27%3E'), +args: ["aString"], +source: unescape('%2C%20aString%0A%09%3Creturn%20self%20+%20aString%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.String.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_lf'), +unescape('__lt'), smalltalk.method({ -selector: unescape('lf'), -category: 'accessing', -fn: function () { +selector: unescape('%3C'), +category: 'comparing', +fn: function (aString) { var self=this; -return '\n'; +return String(self) < aString._asString(); return self;}, -args: [], -source: unescape('lf%0A%09%3Creturn%20%27%5Cn%27%3E'), +args: ["aString"], +source: unescape('%3C%20aString%0A%09%3Creturn%20String%28self%29%20%3C%20aString._asString%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.String.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_space'), +unescape('__lt_eq'), smalltalk.method({ -selector: unescape('space'), -category: 'accessing', -fn: function () { +selector: unescape('%3C%3D'), +category: 'comparing', +fn: function (aString) { var self=this; -return ' '; +return String(self) <= aString._asString(); return self;}, -args: [], -source: unescape('space%0A%09%3Creturn%20%27%20%27%3E'), +args: ["aString"], +source: unescape('%3C%3D%20aString%0A%09%3Creturn%20String%28self%29%20%3C%3D%20aString._asString%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.String.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_tab'), +unescape('__eq'), smalltalk.method({ -selector: unescape('tab'), -category: 'accessing', -fn: function () { +selector: unescape('%3D'), +category: 'comparing', +fn: function (aString) { var self=this; -return '\t'; -return self;}, -args: [], -source: unescape('tab%0A%09%3Creturn%20%27%5Ct%27%3E'), -messageSends: [], +try{((($receiver = smalltalk.send(smalltalk.send(aString, "_class", []), "__eq", [smalltalk.send(self, "_class", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); +return String(self) === String(aString); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}}, +args: ["aString"], +source: unescape('%3D%20aString%0A%09aString%20class%20%3D%20self%20class%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09%3Creturn%20String%28self%29%20%3D%3D%3D%20String%28aString%29%3E'), +messageSends: ["ifFalse:", unescape("%3D"), "class"], referencedClasses: [] }), -smalltalk.String.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_crlf'), +unescape('__gt'), smalltalk.method({ -selector: unescape('crlf'), -category: 'accessing', -fn: function () { +selector: unescape('%3E'), +category: 'comparing', +fn: function (aString) { var self=this; -return '\r\n'; +return String(self) > aString._asString(); return self;}, -args: [], -source: unescape('crlf%0A%09%3Creturn%20%27%5Cr%5Cn%27%3E'), +args: ["aString"], +source: unescape('%3E%20aString%0A%09%3Creturn%20String%28self%29%20%3E%3E%20aString._asString%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.String.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_streamContents_'), +unescape('__gt_eq'), smalltalk.method({ -selector: unescape('streamContents%3A'), -category: 'instance creation', -fn: function (blockWithArg) { +selector: unescape('%3E%3D'), +category: 'comparing', +fn: function (aString) { var self=this; -var stream=nil; -(stream=smalltalk.send(smalltalk.send(self, "_streamClass", []), "_on_", [smalltalk.send((smalltalk.String || String), "_new", [])])); -smalltalk.send(blockWithArg, "_value_", [stream]); -return smalltalk.send(stream, "_contents", []); +return String(self) >= aString._asString(); return self;}, -args: ["blockWithArg"], -source: unescape('streamContents%3A%20blockWithArg%0A%09%7Cstream%7C%0A%09stream%20%3A%3D%20%28self%20streamClass%20on%3A%20String%20new%29.%0A%09blockWithArg%20value%3A%20stream.%0A%09%5E%20stream%20contents'), -messageSends: ["on:", "streamClass", "new", "value:", "contents"], -referencedClasses: ["String"] +args: ["aString"], +source: unescape('%3E%3D%20aString%0A%09%3Creturn%20String%28self%29%20%3E%3E%3D%20aString._asString%28%29%3E'), +messageSends: [], +referencedClasses: [] }), -smalltalk.String.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_value_'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('value%3A'), -category: 'instance creation', -fn: function (aUTFCharCode) { +selector: unescape('asJSON'), +category: 'converting', +fn: function (){ var self=this; -return String.fromCharCode(aUTFCharCode);; +return self; return self;}, -args: ["aUTFCharCode"], -source: unescape('value%3A%20aUTFCharCode%0A%0A%09%3Creturn%20String.fromCharCode%28aUTFCharCode%29%3B%3E'), +args: [], +source: unescape('asJSON%0A%09%5Eself'), messageSends: [], referencedClasses: [] }), -smalltalk.String.klass); +smalltalk.String); +smalltalk.addMethod( +unescape('_asJavaScriptSelector'), +smalltalk.method({ +selector: unescape('asJavaScriptSelector'), +category: 'converting', +fn: function () { +var self=this; +return smalltalk.send(smalltalk.send(smalltalk.send(self, "_asSelector", []), "_replace_with_", [unescape("%5E_"), ""]), "_replace_with_", [unescape("_.*"), ""]); +return self;}, +args: [], +source: unescape('asJavaScriptSelector%0A%09%5E%28self%20asSelector%20replace%3A%20%27%5E_%27%20with%3A%20%27%27%29%20replace%3A%20%27_.*%27%20with%3A%20%27%27.'), +messageSends: ["replace:with:", "asSelector"], +referencedClasses: [] +}), +smalltalk.String); -smalltalk.addClass('Symbol', smalltalk.CharacterArray, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_at_ifAbsent_'), +unescape('_asJavascript'), smalltalk.method({ -selector: unescape('at%3AifAbsent%3A'), -category: 'accessing', -fn: function (anIndex, aBlock) { +selector: unescape('asJavascript'), +category: 'converting', +fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "_at_ifAbsent_", [anIndex, aBlock]); + + if(self.search(/^[a-zA-Z0-9_:.$ ]*$/) == -1) + return "unescape(\"" + escape(self) + "\")"; + else + return "\"" + self + "\""; + ; return self;}, -args: ["anIndex", "aBlock"], -source: unescape('at%3A%20anIndex%20ifAbsent%3A%20aBlock%0A%09%5Eself%20asString%20at%3A%20anIndex%20ifAbsent%3A%20aBlock'), -messageSends: ["at:ifAbsent:", "asString"], +args: [], +source: unescape('asJavascript%0A%09%3C%0A%09%09if%28self.search%28/%5E%5Ba-zA-Z0-9_%3A.%24%20%5D*%24/%29%20%3D%3D%20-1%29%0A%09%09%09return%20%22unescape%28%5C%22%22%20+%20escape%28self%29%20+%20%22%5C%22%29%22%3B%0A%09%09else%0A%09%09%09return%20%22%5C%22%22%20+%20self%20+%20%22%5C%22%22%3B%0A%09%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_asString'), +unescape('_asLowercase'), smalltalk.method({ -selector: unescape('asString'), +selector: unescape('asLowercase'), category: 'converting', fn: function () { var self=this; -return self.value; +return self.toLowerCase(); return self;}, args: [], -source: unescape('asString%0A%09%3Creturn%20self.value%3E'), +source: unescape('asLowercase%0A%09%3Creturn%20self.toLowerCase%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_printString'), +unescape('_asNumber'), smalltalk.method({ -selector: unescape('printString'), -category: 'printing', +selector: unescape('asNumber'), +category: 'converting', fn: function () { var self=this; -return smalltalk.send(unescape("%23"), "__comma", [smalltalk.send(self, "_asString", [])]); +return Number(self); return self;}, args: [], -source: unescape('printString%0A%09%5E%27%23%27%2C%20self%20asString'), -messageSends: [unescape("%2C"), "asString"], +source: unescape('asNumber%0A%09%3Creturn%20Number%28self%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_size'), +unescape('_asSelector'), smalltalk.method({ -selector: unescape('size'), -category: 'accessing', +selector: unescape('asSelector'), +category: 'converting', fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "_size", []); +var selector=nil; +(selector=smalltalk.send("_", "__comma", [self])); +(selector=smalltalk.send(selector, "_replace_with_", [":", "_"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B+%5D"), "_plus"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("-"), "_minus"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B*%5D"), "_star"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B/%5D"), "_slash"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%3E"), "_gt"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%3C"), "_lt"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%3D"), "_eq"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%2C"), "_comma"])); +(selector=smalltalk.send(selector, "_replace_with_", [unescape("%5B@%5D"), "_at"])); +return selector; return self;}, args: [], -source: unescape('size%0A%09%5Eself%20asString%20size'), -messageSends: ["size", "asString"], +source: unescape('asSelector%0A%09%22If%20you%20change%20this%20method%2C%20change%20smalltalk.convertSelector%20too%20%28see%20js/boot.js%20file%29%22%0A%0A%09%7C%20selector%20%7C%0A%09selector%20%3A%3D%20%27_%27%2C%20self.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%3A%27%20with%3A%20%27_%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B+%5D%27%20with%3A%20%27_plus%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27-%27%20with%3A%20%27_minus%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B*%5D%27%20with%3A%20%27_star%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B/%5D%27%20with%3A%20%27_slash%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%3E%27%20with%3A%20%27_gt%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%3C%27%20with%3A%20%27_lt%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%3D%27%20with%3A%20%27_eq%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%2C%27%20with%3A%20%27_comma%27.%0A%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B@%5D%27%20with%3A%20%27_at%27.%0A%09%5Eselector'), +messageSends: [unescape("%2C"), "replace:with:"], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_asSymbol'), +unescape('_asString'), smalltalk.method({ -selector: unescape('asSymbol'), +selector: unescape('asString'), category: 'converting', fn: function () { var self=this; return self; return self;}, args: [], -source: unescape('asSymbol%0A%09%5Eself'), +source: unescape('asString%0A%09%5Eself'), messageSends: [], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_copyFrom_to_'), +unescape('_asSymbol'), smalltalk.method({ -selector: unescape('copyFrom%3Ato%3A'), -category: 'copying', -fn: function (anIndex, anotherIndex) { +selector: unescape('asSymbol'), +category: 'converting', +fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [smalltalk.send(smalltalk.send(self, "_asString", []), "_copyFrom_to_", [anIndex, anotherIndex])]); +return smalltalk.send((smalltalk.Symbol || Symbol), "_lookup_", [self]); return self;}, -args: ["anIndex", "anotherIndex"], -source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09%5Eself%20class%20fromString%3A%20%28self%20asString%20copyFrom%3A%20anIndex%20to%3A%20anotherIndex%29'), -messageSends: ["fromString:", "class", "copyFrom:to:", "asString"], -referencedClasses: [] +args: [], +source: unescape('asSymbol%0A%09%5ESymbol%20lookup%3A%20self'), +messageSends: ["lookup:"], +referencedClasses: ["Symbol"] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_asUppercase'), smalltalk.method({ -selector: unescape('deepCopy'), -category: 'copying', +selector: unescape('asUppercase'), +category: 'converting', fn: function () { var self=this; -return self; +return self.toUpperCase(); return self;}, args: [], -source: unescape('deepCopy%0A%09%5Eself'), +source: unescape('asUppercase%0A%09%3Creturn%20self.toUpperCase%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('__lt'), +unescape('_asciiValue'), smalltalk.method({ -selector: unescape('%3C'), -category: 'comparing', -fn: function (aSymbol) { +selector: unescape('asciiValue'), +category: 'accessing', +fn: function () { var self=this; -return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver <smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__lt", [smalltalk.send(aSymbol, "_asString", [])])); +return self.charCodeAt(0);; return self;}, -args: ["aSymbol"], -source: unescape('%3C%20aSymbol%0A%09%5Eself%20asString%20%3C%20aSymbol%20asString'), -messageSends: [unescape("%3C"), "asString"], +args: [], +source: unescape('asciiValue%0A%09%3Creturn%20self.charCodeAt%280%29%3B%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('__lt_eq'), +unescape('_at_ifAbsent_'), smalltalk.method({ -selector: unescape('%3C%3D'), -category: 'comparing', -fn: function (aSymbol) { +selector: unescape('at%3AifAbsent%3A'), +category: 'accessing', +fn: function (anIndex, aBlock) { var self=this; -return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver <=smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__lt_eq", [smalltalk.send(aSymbol, "_asString", [])])); +return self[anIndex - 1] || aBlock(); return self;}, -args: ["aSymbol"], -source: unescape('%3C%3D%20aSymbol%0A%09%5Eself%20asString%20%3C%3D%20aSymbol%20asString'), -messageSends: [unescape("%3C%3D"), "asString"], +args: ["anIndex", "aBlock"], +source: unescape('at%3A%20anIndex%20ifAbsent%3A%20aBlock%0A%09%3Creturn%20self%5BanIndex%20-%201%5D%20%7C%7C%20aBlock%28%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('__gt_eq'), +unescape('_copyFrom_to_'), smalltalk.method({ -selector: unescape('%3E%3D'), -category: 'comparing', -fn: function (aSymbol) { +selector: unescape('copyFrom%3Ato%3A'), +category: 'copying', +fn: function (anIndex, anotherIndex) { var self=this; -return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver >=smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__gt_eq", [smalltalk.send(aSymbol, "_asString", [])])); +return self.substring(anIndex - 1, anotherIndex); return self;}, -args: ["aSymbol"], -source: unescape('%3E%3D%20aSymbol%0A%09%5Eself%20asString%20%3E%3D%20aSymbol%20asString'), -messageSends: [unescape("%3E%3D"), "asString"], -referencedClasses: [] -}), -smalltalk.Symbol); - -smalltalk.addMethod( -unescape('__eq'), -smalltalk.method({ -selector: unescape('%3D'), -category: 'comparing', -fn: function (aSymbol) { -var self=this; -try{((($receiver = smalltalk.send(smalltalk.send(aSymbol, "_class", []), "__eq", [smalltalk.send(self, "_class", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); -(function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return smalltalk.send(smalltalk.send(self, "_asString", []), "__eq", [smalltalk.send(aSymbol, "_asString", [])])}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}}, -args: ["aSymbol"], -source: unescape('%3D%20aSymbol%0A%09aSymbol%20class%20%3D%20self%20class%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09%5Eself%20asString%20%3D%20aSymbol%20asString'), -messageSends: ["ifFalse:", unescape("%3D"), "class", "asString"], +args: ["anIndex", "anotherIndex"], +source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09%3Creturn%20self.substring%28anIndex%20-%201%2C%20anotherIndex%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_isSymbol'), +unescape('_deepCopy'), smalltalk.method({ -selector: unescape('isSymbol'), -category: 'printing', +selector: unescape('deepCopy'), +category: 'copying', fn: function () { var self=this; -return true; +return smalltalk.send(self, "_shallowCopy", []); return self;}, args: [], -source: unescape('isSymbol%0A%09%5Etrue'), -messageSends: [], +source: unescape('deepCopy%0A%09%5Eself%20shallowCopy'), +messageSends: ["shallowCopy"], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_asJavascript'), +unescape('_escaped'), smalltalk.method({ -selector: unescape('asJavascript'), -category: 'converting', +selector: unescape('escaped'), +category: 'accessing', fn: function () { var self=this; -return smalltalk.send(smalltalk.send(unescape("smalltalk.symbolFor%28%22"), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%22%29")]); +return escape(self); return self;}, args: [], -source: unescape('asJavascript%0A%09%5E%27smalltalk.symbolFor%28%22%27%2C%20self%20asString%2C%20%27%22%29%27'), -messageSends: [unescape("%2C"), "asString"], +source: unescape('escaped%0A%09%3Creturn%20escape%28self%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('__gt'), +unescape('_includesSubString_'), smalltalk.method({ -selector: unescape('%3E'), -category: 'comparing', -fn: function (aSymbol) { +selector: unescape('includesSubString%3A'), +category: 'testing', +fn: function (subString) { var self=this; -return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver >smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__gt", [smalltalk.send(aSymbol, "_asString", [])])); + return self.indexOf(subString) != -1 ; return self;}, -args: ["aSymbol"], -source: unescape('%3E%20aSymbol%0A%09%5Eself%20asString%20%3E%20aSymbol%20asString'), -messageSends: [unescape("%3E"), "asString"], +args: ["subString"], +source: unescape('includesSubString%3A%20subString%0A%09%3C%20return%20self.indexOf%28subString%29%20%21%3D%20-1%20%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_shallowCopy'), +unescape('_isString'), smalltalk.method({ -selector: unescape('shallowCopy'), -category: 'copying', +selector: unescape('isString'), +category: 'testing', fn: function () { var self=this; -return self; +return true; return self;}, args: [], -source: unescape('shallowCopy%0A%09%5Eself'), +source: unescape('isString%0A%09%5Etrue'), messageSends: [], referencedClasses: [] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_asSelector'), +unescape('_join_'), smalltalk.method({ -selector: unescape('asSelector'), -category: 'converting', -fn: function () { +selector: unescape('join%3A'), +category: 'split join', +fn: function (aCollection) { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "_asSelector", []); +return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(stream){return smalltalk.send(aCollection, "_do_separatedBy_", [(function(each){return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(each, "_asString", [])]);}), (function(){return smalltalk.send(stream, "_nextPutAll_", [self]);})]);})]); return self;}, -args: [], -source: unescape('asSelector%0A%09%5Eself%20asString%20asSelector'), -messageSends: ["asSelector", "asString"], -referencedClasses: [] +args: ["aCollection"], +source: unescape('join%3A%20aCollection%20%0A%09%5E%20String%0A%09%09streamContents%3A%20%5B%3Astream%20%7C%20aCollection%0A%09%09%09%09do%3A%20%5B%3Aeach%20%7C%20stream%20nextPutAll%3A%20each%20asString%5D%20%0A%09%09%09%09separatedBy%3A%20%5Bstream%20nextPutAll%3A%20self%5D%5D'), +messageSends: ["streamContents:", "do:separatedBy:", "nextPutAll:", "asString"], +referencedClasses: ["String"] }), -smalltalk.Symbol); +smalltalk.String); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_lineIndicesDo_'), smalltalk.method({ -selector: unescape('asJSON'), -category: 'converting', -fn: function (){ +selector: unescape('lineIndicesDo%3A'), +category: 'split join', +fn: function (aBlock) { var self=this; -return smalltalk.send(smalltalk.send(self, "_asString", []), "_asJSON", []); -return self;}, -args: [], -source: unescape('asJSON%0A%09%5Eself%20asString%20asJSON'), -messageSends: ["asJSON", "asString"], -referencedClasses: [] +try{var cr=nil; +var lf=nil; +var start=nil; +var sz=nil; +var nextLF=nil; +var nextCR=nil; +(start=(1)); +(sz=smalltalk.send(self, "_size", [])); +(cr=smalltalk.send((smalltalk.String || String), "_cr", [])); +(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, (1)])); +(lf=smalltalk.send((smalltalk.String || String), "_lf", [])); +(nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, (1)])); +(function(){while((function(){return ((($receiver = start).klass === smalltalk.Number) ? $receiver <=sz : smalltalk.send($receiver, "__lt_eq", [sz]));})()) {(function(){((($receiver = smalltalk.send(smalltalk.send(nextLF, "__eq", [(0)]), "_and_", [(function(){return smalltalk.send(nextCR, "__eq", [(0)]);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, sz, sz]);return (function(){throw({name: 'stReturn', selector: '_lineIndicesDo_', fn: function(){return self}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, sz, sz]);return (function(){throw({name: 'stReturn', selector: '_lineIndicesDo_', fn: function(){return self}})})();})]));return ((($receiver = smalltalk.send(smalltalk.send(nextCR, "__eq", [(0)]), "_or_", [(function(){return smalltalk.send((0) < nextLF, "_and_", [(function(){return ((($receiver = nextLF).klass === smalltalk.Number) ? $receiver <nextCR : smalltalk.send($receiver, "__lt", [nextCR]));})]);})])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextLF).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));})() : (function(){return ((($receiver = smalltalk.send((1) + nextCR, "__eq", [nextLF])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));})() : (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));}), (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextLF).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));}), (function(){return ((($receiver = smalltalk.send((1) + nextCR, "__eq", [nextLF])).klass === smalltalk.Boolean) ? ($receiver ? (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));})() : (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextLF]);(start=(1) + nextLF);(nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));return (nextLF=smalltalk.send(self, "_indexOf_startingAt_", [lf, start]));}), (function(){smalltalk.send(aBlock, "_value_value_value_", [start, ((($receiver = nextCR).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])), nextCR]);(start=(1) + nextCR);return (nextCR=smalltalk.send(self, "_indexOf_startingAt_", [cr, start]));})]));})]));})()}})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_lineIndicesDo_'){return e.fn()} throw(e)}}, +args: ["aBlock"], +source: unescape('lineIndicesDo%3A%20aBlock%0A%09%22execute%20aBlock%20with%203%20arguments%20for%20each%20line%3A%0A%09-%20start%20index%20of%20line%0A%09-%20end%20index%20of%20line%20without%20line%20delimiter%0A%09-%20end%20index%20of%20line%20including%20line%20delimiter%28s%29%20CR%2C%20LF%20or%20CRLF%22%0A%09%0A%09%7C%20cr%20lf%20start%20sz%20nextLF%20nextCR%20%7C%0A%09start%20%3A%3D%201.%0A%09sz%20%3A%3D%20self%20size.%0A%09cr%20%3A%3D%20String%20cr.%0A%09nextCR%20%3A%3D%20self%20indexOf%3A%20cr%20startingAt%3A%201.%0A%09lf%20%3A%3D%20String%20lf.%0A%09nextLF%20%3A%3D%20self%20indexOf%3A%20lf%20startingAt%3A%201.%0A%09%5B%20start%20%3C%3D%20sz%20%5D%20whileTrue%3A%20%5B%0A%09%09%28nextLF%20%3D%200%20and%3A%20%5B%20nextCR%20%3D%200%20%5D%29%0A%09%09%09ifTrue%3A%20%5B%20%22No%20more%20CR%2C%20nor%20LF%2C%20the%20string%20is%20over%22%0A%09%09%09%09%09aBlock%20value%3A%20start%20value%3A%20sz%20value%3A%20sz.%0A%09%09%09%09%09%5Eself%20%5D.%0A%09%09%28nextCR%20%3D%200%20or%3A%20%5B%200%20%3C%20nextLF%20and%3A%20%5B%20nextLF%20%3C%20nextCR%20%5D%20%5D%29%0A%09%09%09ifTrue%3A%20%5B%20%22Found%20a%20LF%22%0A%09%09%09%09%09aBlock%20value%3A%20start%20value%3A%20nextLF%20-%201%20value%3A%20nextLF.%0A%09%09%09%09%09start%20%3A%3D%201%20+%20nextLF.%0A%09%09%09%09%09nextLF%20%3A%3D%20self%20indexOf%3A%20lf%20startingAt%3A%20start%20%5D%0A%09%09%09ifFalse%3A%20%5B%201%20+%20nextCR%20%3D%20nextLF%0A%09%09%09%09ifTrue%3A%20%5B%20%22Found%20a%20CR-LF%20pair%22%0A%09%09%09%09%09aBlock%20value%3A%20start%20value%3A%20nextCR%20-%201%20value%3A%20nextLF.%0A%09%09%09%09%09start%20%3A%3D%201%20+%20nextLF.%0A%09%09%09%09%09nextCR%20%3A%3D%20self%20indexOf%3A%20cr%20startingAt%3A%20start.%0A%09%09%09%09%09nextLF%20%3A%3D%20self%20indexOf%3A%20lf%20startingAt%3A%20start%20%5D%0A%09%09%09%09ifFalse%3A%20%5B%20%22Found%20a%20CR%22%0A%09%09%09%09%09aBlock%20value%3A%20start%20value%3A%20nextCR%20-%201%20value%3A%20nextCR.%0A%09%09%09%09%09start%20%3A%3D%201%20+%20nextCR.%0A%09%09%09%09%09nextCR%20%3A%3D%20self%20indexOf%3A%20cr%20startingAt%3A%20start%20%5D%5D%5D'), +messageSends: ["size", "cr", "indexOf:startingAt:", "lf", "whileTrue:", unescape("%3C%3D"), "ifTrue:", "and:", unescape("%3D"), "value:value:value:", "ifTrue:ifFalse:", "or:", unescape("%3C"), unescape("-"), unescape("+")], +referencedClasses: ["String"] }), -smalltalk.Symbol); - +smalltalk.String); smalltalk.addMethod( -unescape('_lookup_'), +unescape('_lineNumber_'), smalltalk.method({ -selector: unescape('lookup%3A'), -category: 'instance creation', -fn: function (aString) { +selector: unescape('lineNumber%3A'), +category: 'split join', +fn: function (anIndex) { var self=this; -return smalltalk.symbolFor(aString);; -return self;}, -args: ["aString"], -source: unescape('lookup%3A%20aString%0A%09%3Creturn%20smalltalk.symbolFor%28aString%29%3B%3E'), -messageSends: [], +try{var lineCount=nil; +(lineCount=(0)); +smalltalk.send(self, "_lineIndicesDo_", [(function(start, endWithoutDelimiters, end){return ((($receiver = smalltalk.send((lineCount=((($receiver = lineCount).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))), "__eq", [anIndex])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '_lineNumber_', fn: function(){return smalltalk.send(self, "_copyFrom_to_", [start, endWithoutDelimiters])}})})();})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function(){throw({name: 'stReturn', selector: '_lineNumber_', fn: function(){return smalltalk.send(self, "_copyFrom_to_", [start, endWithoutDelimiters])}})})();})]));})]); +(function(){throw({name: 'stReturn', selector: '_lineNumber_', fn: function(){return nil}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '_lineNumber_'){return e.fn()} throw(e)}}, +args: ["anIndex"], +source: unescape('lineNumber%3A%20anIndex%0A%09%22Answer%20a%20string%20containing%20the%20characters%20in%20the%20given%20line%20number.%22%0A%0A%09%7C%20lineCount%20%7C%0A%09lineCount%20%3A%3D%200.%0A%09self%20lineIndicesDo%3A%20%5B%3Astart%20%3AendWithoutDelimiters%20%3Aend%20%7C%0A%09%09%28lineCount%20%3A%3D%20lineCount%20+%201%29%20%3D%20anIndex%20ifTrue%3A%20%5B%5Eself%20copyFrom%3A%20start%20to%3A%20endWithoutDelimiters%5D%5D.%0A%09%5Enil'), +messageSends: ["lineIndicesDo:", "ifTrue:", unescape("%3D"), unescape("+"), "copyFrom:to:"], referencedClasses: [] }), -smalltalk.Symbol.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_basicNew'), +unescape('_lines'), smalltalk.method({ -selector: unescape('basicNew'), -category: 'instance creation', +selector: unescape('lines'), +category: 'split join', fn: function () { var self=this; -smalltalk.send(self, "_shouldNotImplement", []); +var lines=nil; +(lines=smalltalk.send((smalltalk.Array || Array), "_new", [])); +smalltalk.send(self, "_linesDo_", [(function(aLine){return smalltalk.send(lines, "_add_", [aLine]);})]); +return lines; return self;}, args: [], -source: unescape('basicNew%0A%09self%20shouldNotImplement'), -messageSends: ["shouldNotImplement"], -referencedClasses: [] +source: unescape('lines%0A%09%22Answer%20an%20array%20of%20lines%20composing%20this%20receiver%20without%20the%20line%20ending%20delimiters.%22%0A%0A%09%7C%20lines%20%7C%0A%09lines%20%3A%3D%20Array%20new.%0A%09self%20linesDo%3A%20%5B%3AaLine%20%7C%20lines%20add%3A%20aLine%5D.%0A%09%5Elines'), +messageSends: ["new", "linesDo:", "add:"], +referencedClasses: ["Array"] }), -smalltalk.Symbol.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_fromString_'), +unescape('_linesDo_'), smalltalk.method({ -selector: unescape('fromString%3A'), -category: 'instance creation', -fn: function (aString) { +selector: unescape('linesDo%3A'), +category: 'split join', +fn: function (aBlock) { var self=this; -return smalltalk.send(self, "_lookup_", [aString]); +smalltalk.send(self, "_lineIndicesDo_", [(function(start, endWithoutDelimiters, end){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_copyFrom_to_", [start, endWithoutDelimiters])]);})]); return self;}, -args: ["aString"], -source: unescape('fromString%3A%20aString%0A%09%5Eself%20lookup%3A%20aString'), -messageSends: ["lookup:"], +args: ["aBlock"], +source: unescape('linesDo%3A%20aBlock%0A%09%22Execute%20aBlock%20with%20each%20line%20in%20this%20string.%20The%20terminating%20line%0A%09delimiters%20CR%2C%20LF%20or%20CRLF%20pairs%20are%20not%20included%20in%20what%20is%20passed%20to%20aBlock%22%0A%0A%09self%20lineIndicesDo%3A%20%5B%3Astart%20%3AendWithoutDelimiters%20%3Aend%20%7C%0A%09%09aBlock%20value%3A%20%28self%20copyFrom%3A%20start%20to%3A%20endWithoutDelimiters%29%5D'), +messageSends: ["lineIndicesDo:", "value:", "copyFrom:to:"], referencedClasses: [] }), -smalltalk.Symbol.klass); - +smalltalk.String); -smalltalk.addClass('Array', smalltalk.SequenceableCollection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_size'), +unescape('_match_'), smalltalk.method({ -selector: unescape('size'), -category: 'accessing', -fn: function () { +selector: unescape('match%3A'), +category: 'regular expressions', +fn: function (aRegexp) { var self=this; -return self.length; +return self.search(aRegexp) != -1; return self;}, -args: [], -source: unescape('size%0A%09%3Creturn%20self.length%3E'), +args: ["aRegexp"], +source: unescape('match%3A%20aRegexp%0A%09%3Creturn%20self.search%28aRegexp%29%20%21%3D%20-1%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_printNl'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), -category: 'accessing', -fn: function (anIndex, anObject) { +selector: unescape('printNl'), +category: 'printing', +fn: function () { var self=this; -return self[anIndex - 1] = anObject; +console.log(self); 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'), +args: [], +source: unescape('printNl%0A%09%3Cconsole.log%28self%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_at_ifAbsent_'), +unescape('_printString'), smalltalk.method({ -selector: unescape('at%3AifAbsent%3A'), -category: 'accessing', -fn: function (anIndex, aBlock) { +selector: unescape('printString'), +category: 'printing', +fn: function () { var self=this; - - var value = self[anIndex - 1]; - if(value === undefined) { - return aBlock(); - } else { - return value; - } - ; +return smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [self]), "__comma", [unescape("%27")]); 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: [], +args: [], +source: unescape('printString%0A%09%5E%27%27%27%27%2C%20self%2C%20%27%27%27%27'), +messageSends: [unescape("%2C")], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_add_'), +unescape('_replace_with_'), smalltalk.method({ -selector: unescape('add%3A'), -category: 'adding/removing', -fn: function (anObject) { +selector: unescape('replace%3Awith%3A'), +category: 'regular expressions', +fn: function (aString, anotherString) { var self=this; -self.push(anObject); return anObject;; +return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_flag_", [aString, "g"]), anotherString]); return self;}, -args: ["anObject"], -source: unescape('add%3A%20anObject%0A%09%3Cself.push%28anObject%29%3B%20return%20anObject%3B%3E'), -messageSends: [], -referencedClasses: [] +args: ["aString", "anotherString"], +source: unescape('replace%3A%20aString%20with%3A%20anotherString%0A%09%5Eself%20replaceRegexp%3A%20%28RegularExpression%20fromString%3A%20aString%20flag%3A%20%27g%27%29%20with%3A%20anotherString'), +messageSends: ["replaceRegexp:with:", "fromString:flag:"], +referencedClasses: ["RegularExpression"] }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_join_'), +unescape('_replaceRegexp_with_'), smalltalk.method({ -selector: unescape('join%3A'), -category: 'enumerating', -fn: function (aString) { +selector: unescape('replaceRegexp%3Awith%3A'), +category: 'regular expressions', +fn: function (aRegexp, aString) { var self=this; -return self.join(aString); +return self.replace(aRegexp, aString); return self;}, -args: ["aString"], -source: unescape('join%3A%20aString%0A%09%3Creturn%20self.join%28aString%29%3E'), +args: ["aRegexp", "aString"], +source: unescape('replaceRegexp%3A%20aRegexp%20with%3A%20aString%0A%09%3Creturn%20self.replace%28aRegexp%2C%20aString%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_asJavascript'), +unescape('_reversed'), smalltalk.method({ -selector: unescape('asJavascript'), +selector: unescape('reversed'), 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.split("").reverse().join(""); 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"], +source: unescape('reversed%0A%09%3Creturn%20self.split%28%22%22%29.reverse%28%29.join%28%22%22%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_sort'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('sort'), -category: 'enumerating', +selector: unescape('shallowCopy'), +category: 'copying', fn: function () { var self=this; -return smalltalk.send(self, "_basicPerform_", ["sort"]); +return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [self]); return self;}, args: [], -source: unescape('sort%0A%20%20%20%20%5Eself%20basicPerform%3A%20%27sort%27'), -messageSends: ["basicPerform:"], +source: unescape('shallowCopy%0A%09%5Eself%20class%20fromString%3A%20self'), +messageSends: ["fromString:", "class"], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_sort_'), +unescape('_size'), smalltalk.method({ -selector: unescape('sort%3A'), -category: 'enumerating', -fn: function (aBlock) { +selector: unescape('size'), +category: 'accessing', +fn: function () { var self=this; - - return self.sort(function(a, b) { - if(aBlock(a,b)) {return -1} else {return 1} - }) - ; +return self.length; 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'), +args: [], +source: unescape('size%0A%09%3Creturn%20self.length%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_remove_'), +unescape('_tokenize_'), smalltalk.method({ -selector: unescape('remove%3A'), -category: 'adding/removing', -fn: function (anObject) { +selector: unescape('tokenize%3A'), +category: 'converting', +fn: function (aString) { var self=this; - - for(var i=0;i<self.length;i++) { - if(self[i] == anObject) { - self.splice(i,1); - break; - } - } - ; +return self.split(aString); 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'), +args: ["aString"], +source: unescape('tokenize%3A%20aString%0A%09%3Creturn%20self.split%28aString%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_sorted'), +unescape('_trimBoth'), smalltalk.method({ -selector: unescape('sorted'), -category: 'enumerating', +selector: unescape('trimBoth'), +category: 'regular expressions', fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort", []); +return smalltalk.send(self, "_trimBoth_", [unescape("%5Cs")]); 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('_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: [], +source: unescape('trimBoth%0A%09%5Eself%20trimBoth%3A%20%27%5Cs%27'), +messageSends: ["trimBoth:"], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String); smalltalk.addMethod( -unescape('_reversed'), +unescape('_trimBoth_'), smalltalk.method({ -selector: unescape('reversed'), -category: 'converting', -fn: function () { +selector: unescape('trimBoth%3A'), +category: 'regular expressions', +fn: function (separators) { var self=this; -return self._copy().reverse(); +return smalltalk.send(smalltalk.send(self, "_trimLeft_", [separators]), "_trimRight_", [separators]); return self;}, -args: [], -source: unescape('reversed%0A%09%3Creturn%20self._copy%28%29.reverse%28%29%3E'), -messageSends: [], +args: ["separators"], +source: unescape('trimBoth%3A%20separators%0A%0A%09%5E%28self%20trimLeft%3A%20separators%29%20trimRight%3A%20separators'), +messageSends: ["trimRight:", "trimLeft:"], referencedClasses: [] }), -smalltalk.Array); - +smalltalk.String); smalltalk.addMethod( -unescape('_new_'), +unescape('_trimLeft'), smalltalk.method({ -selector: unescape('new%3A'), -category: 'instance creation', -fn: function (anInteger) { +selector: unescape('trimLeft'), +category: 'regular expressions', +fn: function () { var self=this; -return new Array(anInteger); +return smalltalk.send(self, "_trimLeft_", [unescape("%5Cs")]); return self;}, -args: ["anInteger"], -source: unescape('new%3A%20anInteger%0A%09%3Creturn%20new%20Array%28anInteger%29%3E'), -messageSends: [], +args: [], +source: unescape('trimLeft%0A%09%5Eself%20trimLeft%3A%20%27%5Cs%27'), +messageSends: ["trimLeft:"], referencedClasses: [] }), -smalltalk.Array.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_with_'), +unescape('_trimLeft_'), smalltalk.method({ -selector: unescape('with%3A'), -category: 'instance creation', -fn: function (anObject) { +selector: unescape('trimLeft%3A'), +category: 'regular expressions', +fn: function (separators) { var self=this; -return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(1)])); +return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_flag_", [smalltalk.send(smalltalk.send(unescape("%5E%5B"), "__comma", [separators]), "__comma", [unescape("%5D+")]), "g"]), ""]); 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: [] +args: ["separators"], +source: unescape('trimLeft%3A%20separators%0A%0A%09%5Eself%20replaceRegexp%3A%20%28RegularExpression%20fromString%3A%20%27%5E%5B%27%2C%20separators%2C%20%27%5D+%27%20flag%3A%20%27g%27%29%20with%3A%20%27%27'), +messageSends: ["replaceRegexp:with:", "fromString:flag:", unescape("%2C")], +referencedClasses: ["RegularExpression"] }), -smalltalk.Array.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_with_with_'), +unescape('_trimRight'), smalltalk.method({ -selector: unescape('with%3Awith%3A'), -category: 'instance creation', -fn: function (anObject, anObject2) { +selector: unescape('trimRight'), +category: 'regular expressions', +fn: function () { 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 smalltalk.send(self, "_trimRight_", [unescape("%5Cs")]); 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:"], +args: [], +source: unescape('trimRight%0A%09%5Eself%20trimRight%3A%20%27%5Cs%27'), +messageSends: ["trimRight:"], referencedClasses: [] }), -smalltalk.Array.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_with_with_with_'), +unescape('_trimRight_'), smalltalk.method({ -selector: unescape('with%3Awith%3Awith%3A'), -category: 'instance creation', -fn: function (anObject, anObject2, anObject3) { +selector: unescape('trimRight%3A'), +category: 'regular expressions', +fn: function (separators) { 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 smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send((smalltalk.RegularExpression || RegularExpression), "_fromString_flag_", [smalltalk.send(smalltalk.send(unescape("%5B"), "__comma", [separators]), "__comma", [unescape("%5D+%24")]), "g"]), ""]); 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: [] +args: ["separators"], +source: unescape('trimRight%3A%20separators%0A%0A%09%5Eself%20replaceRegexp%3A%20%28RegularExpression%20fromString%3A%20%27%5B%27%2C%20separators%2C%20%27%5D+%24%27%20flag%3A%20%27g%27%29%20with%3A%20%27%27'), +messageSends: ["replaceRegexp:with:", "fromString:flag:", unescape("%2C")], +referencedClasses: ["RegularExpression"] }), -smalltalk.Array.klass); +smalltalk.String); smalltalk.addMethod( -unescape('_withAll_'), +unescape('_unescaped'), smalltalk.method({ -selector: unescape('withAll%3A'), -category: 'instance creation', -fn: function (aCollection) { +selector: unescape('unescaped'), +category: 'accessing', +fn: function () { 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 unescape(self); 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:"], +args: [], +source: unescape('unescaped%0A%09%3Creturn%20unescape%28self%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Array.klass); +smalltalk.String); -smalltalk.addClass('Array', smalltalk.SequenceableCollection, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_size'), +unescape('_cr'), smalltalk.method({ -selector: unescape('size'), +selector: unescape('cr'), category: 'accessing', fn: function () { var self=this; -return self.length; +return '\r'; return self;}, args: [], -source: unescape('size%0A%09%3Creturn%20self.length%3E'), +source: unescape('cr%0A%09%3Creturn%20%27%5Cr%27%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_crlf'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), +selector: unescape('crlf'), category: 'accessing', -fn: function (anIndex, anObject) { +fn: function () { var self=this; -return self[anIndex - 1] = anObject; +return '\r\n'; 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'), +args: [], +source: unescape('crlf%0A%09%3Creturn%20%27%5Cr%5Cn%27%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_at_ifAbsent_'), +unescape('_fromString_'), smalltalk.method({ -selector: unescape('at%3AifAbsent%3A'), -category: 'accessing', -fn: function (anIndex, aBlock) { +selector: unescape('fromString%3A'), +category: 'instance creation', +fn: function (aString) { var self=this; - - var value = self[anIndex - 1]; - if(value === undefined) { - return aBlock(); - } else { - return value; - } - ; +return new self.fn(aString); 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'), +args: ["aString"], +source: unescape('fromString%3A%20aString%0A%09%20%20%20%20%3Creturn%20new%20self.fn%28aString%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_add_'), +unescape('_lf'), smalltalk.method({ -selector: unescape('add%3A'), -category: 'adding/removing', -fn: function (anObject) { +selector: unescape('lf'), +category: 'accessing', +fn: function () { var self=this; -self.push(anObject); return anObject;; +return '\n'; return self;}, -args: ["anObject"], -source: unescape('add%3A%20anObject%0A%09%3Cself.push%28anObject%29%3B%20return%20anObject%3B%3E'), +args: [], +source: unescape('lf%0A%09%3Creturn%20%27%5Cn%27%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_join_'), +unescape('_space'), smalltalk.method({ -selector: unescape('join%3A'), -category: 'enumerating', -fn: function (aString) { +selector: unescape('space'), +category: 'accessing', +fn: function () { var self=this; -return self.join(aString); +return ' '; return self;}, -args: ["aString"], -source: unescape('join%3A%20aString%0A%09%3Creturn%20self.join%28aString%29%3E'), +args: [], +source: unescape('space%0A%09%3Creturn%20%27%20%27%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_asJavascript'), +unescape('_streamClass'), smalltalk.method({ -selector: unescape('asJavascript'), -category: 'converting', +selector: unescape('streamClass'), +category: 'accessing', 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 (smalltalk.StringStream || StringStream); 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: [] +source: unescape('streamClass%0A%09%20%20%20%20%5EStringStream'), +messageSends: [], +referencedClasses: ["StringStream"] }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_sort'), +unescape('_streamContents_'), smalltalk.method({ -selector: unescape('sort'), -category: 'enumerating', +selector: unescape('streamContents%3A'), +category: 'instance creation', +fn: function (blockWithArg) { +var self=this; +var stream=nil; +(stream=smalltalk.send(smalltalk.send(self, "_streamClass", []), "_on_", [smalltalk.send((smalltalk.String || String), "_new", [])])); +smalltalk.send(blockWithArg, "_value_", [stream]); +return smalltalk.send(stream, "_contents", []); +return self;}, +args: ["blockWithArg"], +source: unescape('streamContents%3A%20blockWithArg%0A%09%7Cstream%7C%0A%09stream%20%3A%3D%20%28self%20streamClass%20on%3A%20String%20new%29.%0A%09blockWithArg%20value%3A%20stream.%0A%09%5E%20stream%20contents'), +messageSends: ["on:", "streamClass", "new", "value:", "contents"], +referencedClasses: ["String"] +}), +smalltalk.String.klass); + +smalltalk.addMethod( +unescape('_tab'), +smalltalk.method({ +selector: unescape('tab'), +category: 'accessing', fn: function () { var self=this; -return smalltalk.send(self, "_basicPerform_", ["sort"]); +return '\t'; return self;}, args: [], -source: unescape('sort%0A%20%20%20%20%5Eself%20basicPerform%3A%20%27sort%27'), -messageSends: ["basicPerform:"], +source: unescape('tab%0A%09%3Creturn%20%27%5Ct%27%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Array); +smalltalk.String.klass); smalltalk.addMethod( -unescape('_sort_'), +unescape('_value_'), smalltalk.method({ -selector: unescape('sort%3A'), -category: 'enumerating', -fn: function (aBlock) { +selector: unescape('value%3A'), +category: 'instance creation', +fn: function (aUTFCharCode) { var self=this; +return String.fromCharCode(aUTFCharCode);; +return self;}, +args: ["aUTFCharCode"], +source: unescape('value%3A%20aUTFCharCode%0A%0A%09%3Creturn%20String.fromCharCode%28aUTFCharCode%29%3B%3E'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.String.klass); - return self.sort(function(a, b) { - if(aBlock(a,b)) {return -1} else {return 1} - }) - ; + +smalltalk.addClass('Symbol', smalltalk.CharacterArray, [], 'Kernel-Collections'); +smalltalk.addMethod( +unescape('__lt'), +smalltalk.method({ +selector: unescape('%3C'), +category: 'comparing', +fn: function (aSymbol) { +var self=this; +return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver <smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__lt", [smalltalk.send(aSymbol, "_asString", [])])); 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: [], +args: ["aSymbol"], +source: unescape('%3C%20aSymbol%0A%09%5Eself%20asString%20%3C%20aSymbol%20asString'), +messageSends: [unescape("%3C"), "asString"], referencedClasses: [] }), -smalltalk.Array); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_remove_'), +unescape('__lt_eq'), smalltalk.method({ -selector: unescape('remove%3A'), -category: 'adding/removing', -fn: function (anObject) { +selector: unescape('%3C%3D'), +category: 'comparing', +fn: function (aSymbol) { var self=this; - - for(var i=0;i<self.length;i++) { - if(self[i] == anObject) { - self.splice(i,1); - break; - } - } - ; +return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver <=smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__lt_eq", [smalltalk.send(aSymbol, "_asString", [])])); 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: [], +args: ["aSymbol"], +source: unescape('%3C%3D%20aSymbol%0A%09%5Eself%20asString%20%3C%3D%20aSymbol%20asString'), +messageSends: [unescape("%3C%3D"), "asString"], referencedClasses: [] }), -smalltalk.Array); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_sorted'), +unescape('__eq'), smalltalk.method({ -selector: unescape('sorted'), -category: 'enumerating', -fn: function () { +selector: unescape('%3D'), +category: 'comparing', +fn: function (aSymbol) { 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"], +try{((($receiver = smalltalk.send(smalltalk.send(aSymbol, "_class", []), "__eq", [smalltalk.send(self, "_class", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); +(function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return smalltalk.send(smalltalk.send(self, "_asString", []), "__eq", [smalltalk.send(aSymbol, "_asString", [])])}})})(); +return self; +} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}}, +args: ["aSymbol"], +source: unescape('%3D%20aSymbol%0A%09aSymbol%20class%20%3D%20self%20class%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09%5Eself%20asString%20%3D%20aSymbol%20asString'), +messageSends: ["ifFalse:", unescape("%3D"), "class", "asString"], referencedClasses: [] }), -smalltalk.Array); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_sorted_'), +unescape('__gt'), smalltalk.method({ -selector: unescape('sorted%3A'), -category: 'enumerating', -fn: function (aBlock) { +selector: unescape('%3E'), +category: 'comparing', +fn: function (aSymbol) { var self=this; -return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort_", [aBlock]); +return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver >smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__gt", [smalltalk.send(aSymbol, "_asString", [])])); return self;}, -args: ["aBlock"], -source: unescape('sorted%3A%20aBlock%0A%09%5Eself%20copy%20sort%3A%20aBlock'), -messageSends: ["sort:", "copy"], +args: ["aSymbol"], +source: unescape('%3E%20aSymbol%0A%09%5Eself%20asString%20%3E%20aSymbol%20asString'), +messageSends: [unescape("%3E"), "asString"], referencedClasses: [] }), -smalltalk.Array); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_removeFrom_to_'), +unescape('__gt_eq'), smalltalk.method({ -selector: unescape('removeFrom%3Ato%3A'), -category: 'adding/removing', -fn: function (aNumber, anotherNumber) { +selector: unescape('%3E%3D'), +category: 'comparing', +fn: function (aSymbol) { var self=this; -self.splice(aNumber - 1,anotherNumber - 1); +return ((($receiver = smalltalk.send(self, "_asString", [])).klass === smalltalk.Number) ? $receiver >=smalltalk.send(aSymbol, "_asString", []) : smalltalk.send($receiver, "__gt_eq", [smalltalk.send(aSymbol, "_asString", [])])); 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: [], +args: ["aSymbol"], +source: unescape('%3E%3D%20aSymbol%0A%09%5Eself%20asString%20%3E%3D%20aSymbol%20asString'), +messageSends: [unescape("%3E%3D"), "asString"], referencedClasses: [] }), -smalltalk.Array); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_reversed'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('reversed'), +selector: unescape('asJSON'), category: 'converting', -fn: function () { +fn: function (){ var self=this; -return self._copy().reverse(); +return smalltalk.send(smalltalk.send(self, "_asString", []), "_asJSON", []); return self;}, args: [], -source: unescape('reversed%0A%09%3Creturn%20self._copy%28%29.reverse%28%29%3E'), -messageSends: [], +source: unescape('asJSON%0A%09%5Eself%20asString%20asJSON'), +messageSends: ["asJSON", "asString"], referencedClasses: [] }), -smalltalk.Array); - +smalltalk.Symbol); smalltalk.addMethod( -unescape('_new_'), +unescape('_asJavascript'), smalltalk.method({ -selector: unescape('new%3A'), -category: 'instance creation', -fn: function (anInteger) { +selector: unescape('asJavascript'), +category: 'converting', +fn: function () { var self=this; -return new Array(anInteger); +return smalltalk.send(smalltalk.send(unescape("smalltalk.symbolFor%28%22"), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%22%29")]); return self;}, -args: ["anInteger"], -source: unescape('new%3A%20anInteger%0A%09%3Creturn%20new%20Array%28anInteger%29%3E'), -messageSends: [], +args: [], +source: unescape('asJavascript%0A%09%5E%27smalltalk.symbolFor%28%22%27%2C%20self%20asString%2C%20%27%22%29%27'), +messageSends: [unescape("%2C"), "asString"], referencedClasses: [] }), -smalltalk.Array.klass); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_with_'), +unescape('_asSelector'), smalltalk.method({ -selector: unescape('with%3A'), -category: 'instance creation', -fn: function (anObject) { +selector: unescape('asSelector'), +category: 'converting', +fn: function () { var self=this; -return (function($rec){smalltalk.send($rec, "_at_put_", [(1), anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new_", [(1)])); +return smalltalk.send(smalltalk.send(self, "_asString", []), "_asSelector", []); 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:"], +args: [], +source: unescape('asSelector%0A%09%5Eself%20asString%20asSelector'), +messageSends: ["asSelector", "asString"], referencedClasses: [] }), -smalltalk.Array.klass); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_with_with_'), +unescape('_asString'), smalltalk.method({ -selector: unescape('with%3Awith%3A'), -category: 'instance creation', -fn: function (anObject, anObject2) { +selector: unescape('asString'), +category: 'converting', +fn: function () { 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.value; 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:"], +args: [], +source: unescape('asString%0A%09%3Creturn%20self.value%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Array.klass); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_with_with_with_'), +unescape('_asSymbol'), smalltalk.method({ -selector: unescape('with%3Awith%3Awith%3A'), -category: 'instance creation', -fn: function (anObject, anObject2, anObject3) { +selector: unescape('asSymbol'), +category: 'converting', +fn: function () { 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; 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:"], +args: [], +source: unescape('asSymbol%0A%09%5Eself'), +messageSends: [], referencedClasses: [] }), -smalltalk.Array.klass); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_withAll_'), +unescape('_at_ifAbsent_'), smalltalk.method({ -selector: unescape('withAll%3A'), -category: 'instance creation', -fn: function (aCollection) { +selector: unescape('at%3AifAbsent%3A'), +category: 'accessing', +fn: function (anIndex, aBlock) { 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 smalltalk.send(smalltalk.send(self, "_asString", []), "_at_ifAbsent_", [anIndex, aBlock]); 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:"], +args: ["anIndex", "aBlock"], +source: unescape('at%3A%20anIndex%20ifAbsent%3A%20aBlock%0A%09%5Eself%20asString%20at%3A%20anIndex%20ifAbsent%3A%20aBlock'), +messageSends: ["at:ifAbsent:", "asString"], referencedClasses: [] }), -smalltalk.Array.klass); - +smalltalk.Symbol); -smalltalk.addClass('StringStream', smalltalk.Stream, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_next_'), +unescape('_copyFrom_to_'), smalltalk.method({ -selector: unescape('next%3A'), -category: 'reading', -fn: function (anInteger) { +selector: unescape('copyFrom%3Ato%3A'), +category: 'copying', +fn: function (anIndex, anotherIndex) { var self=this; -var tempCollection=nil; -(tempCollection=smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_class", []), "_new", [])); -smalltalk.send(anInteger, "_timesRepeat_", [(function(){return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (tempCollection=smalltalk.send(tempCollection, "__comma", [smalltalk.send(self, "_next", [])]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (tempCollection=smalltalk.send(tempCollection, "__comma", [smalltalk.send(self, "_next", [])]));})]));})]); -return tempCollection; +return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [smalltalk.send(smalltalk.send(self, "_asString", []), "_copyFrom_to_", [anIndex, anotherIndex])]); return self;}, -args: ["anInteger"], -source: unescape('next%3A%20anInteger%0A%09%7C%20tempCollection%20%7C%0A%09tempCollection%20%3A%3D%20self%20collection%20class%20new.%0A%09anInteger%20timesRepeat%3A%20%5B%0A%09%20%20%20%20self%20atEnd%20ifFalse%3A%20%5B%0A%09%09tempCollection%20%3A%3D%20tempCollection%2C%20self%20next%5D%5D.%0A%09%5EtempCollection'), -messageSends: ["new", "class", "collection", "timesRepeat:", "ifFalse:", "atEnd", unescape("%2C"), "next"], +args: ["anIndex", "anotherIndex"], +source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09%5Eself%20class%20fromString%3A%20%28self%20asString%20copyFrom%3A%20anIndex%20to%3A%20anotherIndex%29'), +messageSends: ["fromString:", "class", "copyFrom:to:", "asString"], referencedClasses: [] }), -smalltalk.StringStream); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_nextPut_'), +unescape('_deepCopy'), smalltalk.method({ -selector: unescape('nextPut%3A'), -category: 'writing', -fn: function (aString) { +selector: unescape('deepCopy'), +category: 'copying', +fn: function () { var self=this; -smalltalk.send(self, "_nextPutAll_", [aString]); +return self; return self;}, -args: ["aString"], -source: unescape('nextPut%3A%20aString%0A%09self%20nextPutAll%3A%20aString'), -messageSends: ["nextPutAll:"], +args: [], +source: unescape('deepCopy%0A%09%5Eself'), +messageSends: [], referencedClasses: [] }), -smalltalk.StringStream); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_nextPutAll_'), +unescape('_isSymbol'), smalltalk.method({ -selector: unescape('nextPutAll%3A'), -category: 'writing', -fn: function (aString) { -var self=this; -smalltalk.send(self, "_setCollection_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [(1), smalltalk.send(self, "_position", [])]), "__comma", [aString]), "__comma", [smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [((($receiver = ((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))).klass === smalltalk.Number) ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])])), smalltalk.send(smalltalk.send(self, "_collection", []), "_size", [])])])]); -smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])]))]); -smalltalk.send(self, "_setStreamSize_", [smalltalk.send(smalltalk.send(self, "_streamSize", []), "_max_", [smalltalk.send(self, "_position", [])])]); +selector: unescape('isSymbol'), +category: 'printing', +fn: function () { +var self=this; +return true; return self;}, -args: ["aString"], -source: unescape('nextPutAll%3A%20aString%0A%09self%20setCollection%3A%20%0A%09%20%20%20%20%28self%20collection%20copyFrom%3A%201%20to%3A%20self%20position%29%2C%0A%09%20%20%20%20aString%2C%0A%09%20%20%20%20%28self%20collection%20copyFrom%3A%20%28self%20position%20+%201%20+%20aString%20size%29%20to%3A%20self%20collection%20size%29.%0A%09self%20position%3A%20self%20position%20+%20aString%20size.%0A%09self%20setStreamSize%3A%20%28self%20streamSize%20max%3A%20self%20position%29'), -messageSends: ["setCollection:", unescape("%2C"), "copyFrom:to:", "collection", "position", unescape("+"), "size", "position:", "setStreamSize:", "max:", "streamSize"], +args: [], +source: unescape('isSymbol%0A%09%5Etrue'), +messageSends: [], referencedClasses: [] }), -smalltalk.StringStream); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_cr'), +unescape('_printString'), smalltalk.method({ -selector: unescape('cr'), -category: 'writing', +selector: unescape('printString'), +category: 'printing', fn: function () { var self=this; -return smalltalk.send(self, "_nextPutAll_", [smalltalk.send((smalltalk.String || String), "_cr", [])]); +return smalltalk.send(unescape("%23"), "__comma", [smalltalk.send(self, "_asString", [])]); return self;}, args: [], -source: unescape('cr%0A%09%5Eself%20nextPutAll%3A%20String%20cr'), -messageSends: ["nextPutAll:", "cr"], -referencedClasses: ["String"] +source: unescape('printString%0A%09%5E%27%23%27%2C%20self%20asString'), +messageSends: [unescape("%2C"), "asString"], +referencedClasses: [] }), -smalltalk.StringStream); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_crlf'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('crlf'), -category: 'writing', +selector: unescape('shallowCopy'), +category: 'copying', fn: function () { var self=this; -return smalltalk.send(self, "_nextPutAll_", [smalltalk.send((smalltalk.String || String), "_crlf", [])]); +return self; return self;}, args: [], -source: unescape('crlf%0A%09%5Eself%20nextPutAll%3A%20String%20crlf'), -messageSends: ["nextPutAll:", "crlf"], -referencedClasses: ["String"] +source: unescape('shallowCopy%0A%09%5Eself'), +messageSends: [], +referencedClasses: [] }), -smalltalk.StringStream); +smalltalk.Symbol); smalltalk.addMethod( -unescape('_lf'), +unescape('_size'), smalltalk.method({ -selector: unescape('lf'), -category: 'writing', +selector: unescape('size'), +category: 'accessing', fn: function () { var self=this; -return smalltalk.send(self, "_nextPutAll_", [smalltalk.send((smalltalk.String || String), "_lf", [])]); +return smalltalk.send(smalltalk.send(self, "_asString", []), "_size", []); return self;}, args: [], -source: unescape('lf%0A%09%5Eself%20nextPutAll%3A%20String%20lf'), -messageSends: ["nextPutAll:", "lf"], -referencedClasses: ["String"] +source: unescape('size%0A%09%5Eself%20asString%20size'), +messageSends: ["size", "asString"], +referencedClasses: [] }), -smalltalk.StringStream); +smalltalk.Symbol); + smalltalk.addMethod( -unescape('_space'), +unescape('_basicNew'), smalltalk.method({ -selector: unescape('space'), -category: 'writing', +selector: unescape('basicNew'), +category: 'instance creation', fn: function () { var self=this; -smalltalk.send(self, "_nextPut_", [" "]); +smalltalk.send(self, "_shouldNotImplement", []); return self;}, args: [], -source: unescape('space%0A%09self%20nextPut%3A%20%27%20%27'), -messageSends: ["nextPut:"], +source: unescape('basicNew%0A%09self%20shouldNotImplement'), +messageSends: ["shouldNotImplement"], referencedClasses: [] }), -smalltalk.StringStream); - - +smalltalk.Symbol.klass); -smalltalk.addClass('Set', smalltalk.Collection, ['elements'], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_add_'), +unescape('_fromString_'), smalltalk.method({ -selector: unescape('add%3A'), -category: 'adding/removing', -fn: function (anObject) { +selector: unescape('fromString%3A'), +category: 'instance creation', +fn: function (aString) { var self=this; - - var found; - for(var i=0; i < self['@elements'].length; i++) { - if(anObject == self['@elements'][i]) { - found = true; - break; - } - } - if(!found) {self['@elements'].push(anObject)} - ; +return smalltalk.send(self, "_lookup_", [aString]); return self;}, -args: ["anObject"], -source: unescape('add%3A%20anObject%0A%09%3C%0A%09%09var%20found%3B%0A%09%09for%28var%20i%3D0%3B%20i%20%3C%20self%5B%27@elements%27%5D.length%3B%20i++%29%20%7B%0A%09%09%09if%28anObject%20%3D%3D%20self%5B%27@elements%27%5D%5Bi%5D%29%20%7B%0A%09%09%09%09found%20%3D%20true%3B%0A%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09if%28%21found%29%20%7Bself%5B%27@elements%27%5D.push%28anObject%29%7D%0A%09%3E'), -messageSends: [], +args: ["aString"], +source: unescape('fromString%3A%20aString%0A%09%5Eself%20lookup%3A%20aString'), +messageSends: ["lookup:"], referencedClasses: [] }), -smalltalk.Set); +smalltalk.Symbol.klass); smalltalk.addMethod( -unescape('_remove_'), +unescape('_lookup_'), smalltalk.method({ -selector: unescape('remove%3A'), -category: 'adding/removing', -fn: function (anObject) { +selector: unescape('lookup%3A'), +category: 'instance creation', +fn: function (aString) { var self=this; -smalltalk.send(self['@elements'], "_remove_", [anObject]); +return smalltalk.symbolFor(aString);; return self;}, -args: ["anObject"], -source: unescape('remove%3A%20anObject%0A%09elements%20remove%3A%20anObject'), -messageSends: ["remove:"], +args: ["aString"], +source: unescape('lookup%3A%20aString%0A%09%3Creturn%20smalltalk.symbolFor%28aString%29%3B%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Set); +smalltalk.Symbol.klass); + +smalltalk.addClass('Set', smalltalk.Collection, ['elements'], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_initialize'), +unescape('__eq'), smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', -fn: function () { +selector: unescape('%3D'), +category: 'comparing', +fn: function (aCollection) { var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.Collection); -(self['@elements']=[]); +return smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aCollection, "_class", [])]), "_and_", [(function(){return smalltalk.send(self['@elements'], "__eq", [smalltalk.send(aCollection, "_asArray", [])]);})]); return self;}, -args: [], -source: unescape('initialize%0A%09super%20initialize.%0A%09elements%20%3A%3D%20%23%28%29'), -messageSends: ["initialize"], +args: ["aCollection"], +source: unescape('%3D%20aCollection%0A%09%5Eself%20class%20%3D%20aCollection%20class%20and%3A%20%5B%0A%09%09elements%20%3D%20aCollection%20asArray%5D'), +messageSends: ["and:", unescape("%3D"), "class", "asArray"], referencedClasses: [] }), smalltalk.Set); smalltalk.addMethod( -unescape('_size'), +unescape('_add_'), smalltalk.method({ -selector: unescape('size'), -category: 'accessing', -fn: function () { +selector: unescape('add%3A'), +category: 'adding/removing', +fn: function (anObject) { var self=this; -return smalltalk.send(self['@elements'], "_size", []); + + var found; + for(var i=0; i < self['@elements'].length; i++) { + if(anObject == self['@elements'][i]) { + found = true; + break; + } + } + if(!found) {self['@elements'].push(anObject)} + ; return self;}, -args: [], -source: unescape('size%0A%09%5Eelements%20size'), -messageSends: ["size"], +args: ["anObject"], +source: unescape('add%3A%20anObject%0A%09%3C%0A%09%09var%20found%3B%0A%09%09for%28var%20i%3D0%3B%20i%20%3C%20self%5B%27@elements%27%5D.length%3B%20i++%29%20%7B%0A%09%09%09if%28anObject%20%3D%3D%20self%5B%27@elements%27%5D%5Bi%5D%29%20%7B%0A%09%09%09%09found%20%3D%20true%3B%0A%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09if%28%21found%29%20%7Bself%5B%27@elements%27%5D.push%28anObject%29%7D%0A%09%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.Set); @@ -3923,784 +4040,668 @@ referencedClasses: [] smalltalk.Set); smalltalk.addMethod( -unescape('__eq'), -smalltalk.method({ -selector: unescape('%3D'), -category: 'comparing', -fn: function (aCollection) { -var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aCollection, "_class", [])]), "_and_", [(function(){return smalltalk.send(self['@elements'], "__eq", [smalltalk.send(aCollection, "_asArray", [])]);})]); -return self;}, -args: ["aCollection"], -source: unescape('%3D%20aCollection%0A%09%5Eself%20class%20%3D%20aCollection%20class%20and%3A%20%5B%0A%09%09elements%20%3D%20aCollection%20asArray%5D'), -messageSends: ["and:", unescape("%3D"), "class", "asArray"], -referencedClasses: [] -}), -smalltalk.Set); - -smalltalk.addMethod( -unescape('_select_'), -smalltalk.method({ -selector: unescape('select%3A'), -category: 'enumerating', -fn: function (aBlock) { -var self=this; -var collection=nil; -(collection=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_do_", [(function(each){return ((($receiver = smalltalk.send(aBlock, "_value_", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(collection, "_add_", [each]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(collection, "_add_", [each]);})]));})]); -return collection; -return self;}, -args: ["aBlock"], -source: unescape('select%3A%20aBlock%0A%09%7C%20collection%20%7C%0A%09collection%20%3A%3D%20self%20class%20new.%20%0A%09self%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%28aBlock%20value%3A%20each%29%20ifTrue%3A%20%5B%0A%09%09%09collection%20add%3A%20each%5D%5D.%0A%09%5Ecollection'), -messageSends: ["new", "class", "do:", "ifTrue:", "value:", "add:"], -referencedClasses: [] -}), -smalltalk.Set); - - - -smalltalk.addClass('HashedCollection', smalltalk.Collection, [], 'Kernel-Collections'); -smalltalk.HashedCollection.comment=unescape('A%20HashedCollection%20is%20a%20traditional%20JavaScript%20object%2C%20or%20a%20Smalltalk%20Dictionary.%0A%0AUnlike%20a%20Dictionary%2C%20it%20can%20only%20have%20strings%20as%20keys.') -smalltalk.addMethod( -unescape('_size'), -smalltalk.method({ -selector: unescape('size'), -category: 'accessing', -fn: function () { -var self=this; -return smalltalk.send(smalltalk.send(self, "_keys", []), "_size", []); -return self;}, -args: [], -source: unescape('size%0A%09%5Eself%20keys%20size'), -messageSends: ["size", "keys"], -referencedClasses: [] -}), -smalltalk.HashedCollection); - -smalltalk.addMethod( -unescape('_associations'), -smalltalk.method({ -selector: unescape('associations'), -category: 'accessing', -fn: function () { -var self=this; -var associations=nil; -(associations=[]); -smalltalk.send(smalltalk.send(self, "_keys", []), "_do_", [(function(each){return smalltalk.send(associations, "_add_", [smalltalk.send((smalltalk.Association || Association), "_key_value_", [each, smalltalk.send(self, "_at_", [each])])]);})]); -return associations; -return self;}, -args: [], -source: unescape('associations%0A%09%7C%20associations%20%7C%0A%09associations%20%3A%3D%20%23%28%29.%0A%09self%20keys%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20associations%20add%3A%20%28Association%20key%3A%20each%20value%3A%20%28self%20at%3A%20each%29%29%5D.%0A%09%5Eassociations'), -messageSends: ["do:", "keys", "add:", "key:value:", "at:"], -referencedClasses: ["Association"] -}), -smalltalk.HashedCollection); - -smalltalk.addMethod( -unescape('_keys'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('keys'), -category: 'accessing', +selector: unescape('initialize'), +category: 'initialization', fn: function () { var self=this; - - var keys = []; - for(var i in self) { - if(self.hasOwnProperty(i)) { - keys.push(i); - } - }; - return keys; - ; +smalltalk.send(self, "_initialize", [], smalltalk.Collection); +(self['@elements']=[]); return self;}, args: [], -source: unescape('keys%0A%09%3C%0A%09%09var%20keys%20%3D%20%5B%5D%3B%0A%09%09for%28var%20i%20in%20self%29%20%7B%0A%09%09%09if%28self.hasOwnProperty%28i%29%29%20%7B%0A%09%09%09%09keys.push%28i%29%3B%0A%09%09%09%7D%0A%09%09%7D%3B%0A%09%09return%20keys%3B%0A%09%3E'), -messageSends: [], +source: unescape('initialize%0A%09super%20initialize.%0A%09elements%20%3A%3D%20%23%28%29'), +messageSends: ["initialize"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Set); smalltalk.addMethod( -unescape('_values'), +unescape('_remove_'), smalltalk.method({ -selector: unescape('values'), -category: 'accessing', -fn: function () { +selector: unescape('remove%3A'), +category: 'adding/removing', +fn: function (anObject) { var self=this; -return smalltalk.send(smalltalk.send(self, "_keys", []), "_collect_", [(function(each){return smalltalk.send(self, "_at_", [each]);})]); +smalltalk.send(self['@elements'], "_remove_", [anObject]); return self;}, -args: [], -source: unescape('values%0A%09%5Eself%20keys%20collect%3A%20%5B%3Aeach%20%7C%20self%20at%3A%20each%5D'), -messageSends: ["collect:", "keys", "at:"], +args: ["anObject"], +source: unescape('remove%3A%20anObject%0A%09elements%20remove%3A%20anObject'), +messageSends: ["remove:"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Set); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_select_'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), -category: 'accessing', -fn: function (aKey, aValue) { +selector: unescape('select%3A'), +category: 'enumerating', +fn: function (aBlock) { var self=this; -return smalltalk.send(self, "_basicAt_put_", [aKey, aValue]); +var collection=nil; +(collection=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); +smalltalk.send(self, "_do_", [(function(each){return ((($receiver = smalltalk.send(aBlock, "_value_", [each])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(collection, "_add_", [each]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(collection, "_add_", [each]);})]));})]); +return collection; return self;}, -args: ["aKey", "aValue"], -source: unescape('at%3A%20aKey%20put%3A%20aValue%0A%09%5Eself%20basicAt%3A%20aKey%20put%3A%20aValue'), -messageSends: ["basicAt:put:"], +args: ["aBlock"], +source: unescape('select%3A%20aBlock%0A%09%7C%20collection%20%7C%0A%09collection%20%3A%3D%20self%20class%20new.%20%0A%09self%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%28aBlock%20value%3A%20each%29%20ifTrue%3A%20%5B%0A%09%09%09collection%20add%3A%20each%5D%5D.%0A%09%5Ecollection'), +messageSends: ["new", "class", "do:", "ifTrue:", "value:", "add:"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Set); smalltalk.addMethod( -unescape('_at_ifAbsent_'), +unescape('_size'), smalltalk.method({ -selector: unescape('at%3AifAbsent%3A'), +selector: unescape('size'), category: 'accessing', -fn: function (aKey, aBlock) { +fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_includesKey_", [aKey]), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_basicAt_", [aKey]);}), aBlock]); +return smalltalk.send(self['@elements'], "_size", []); return self;}, -args: ["aKey", "aBlock"], -source: unescape('at%3A%20aKey%20ifAbsent%3A%20aBlock%0A%09%5E%28self%20includesKey%3A%20aKey%29%0A%09%09ifTrue%3A%20%5Bself%20basicAt%3A%20aKey%5D%0A%09%09ifFalse%3A%20aBlock'), -messageSends: ["ifTrue:ifFalse:", "includesKey:", "basicAt:"], +args: [], +source: unescape('size%0A%09%5Eelements%20size'), +messageSends: ["size"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Set); + + +smalltalk.addClass('RegularExpression', smalltalk.Object, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_at_ifAbsentPut_'), +unescape('_compile_'), smalltalk.method({ -selector: unescape('at%3AifAbsentPut%3A'), -category: 'accessing', -fn: function (aKey, aBlock) { +selector: unescape('compile%3A'), +category: 'evaluating', +fn: function (aString) { var self=this; -return smalltalk.send(self, "_at_ifAbsent_", [aKey, (function(){return smalltalk.send(self, "_at_put_", [aKey, smalltalk.send(aBlock, "_value", [])]);})]); +return self.compile(aString); return self;}, -args: ["aKey", "aBlock"], -source: unescape('at%3A%20aKey%20ifAbsentPut%3A%20aBlock%0A%09%5Eself%20at%3A%20aKey%20ifAbsent%3A%20%5B%0A%09%20%20%20%20self%20at%3A%20aKey%20put%3A%20aBlock%20value%5D'), -messageSends: ["at:ifAbsent:", "at:put:", "value"], +args: ["aString"], +source: unescape('compile%3A%20aString%0A%09%3Creturn%20self.compile%28aString%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.RegularExpression); smalltalk.addMethod( -unescape('_at_ifPresent_'), +unescape('_exec_'), smalltalk.method({ -selector: unescape('at%3AifPresent%3A'), -category: 'accessing', -fn: function (aKey, aBlock) { +selector: unescape('exec%3A'), +category: 'evaluating', +fn: function (aString) { var self=this; -return (($receiver = smalltalk.send(self, "_basicAt_", [aKey])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_at_", [aKey])]);})() : nil; +return self.exec(aString) || nil; return self;}, -args: ["aKey", "aBlock"], -source: unescape('at%3A%20aKey%20ifPresent%3A%20aBlock%0A%09%5E%28self%20basicAt%3A%20aKey%29%20ifNotNil%3A%20%5BaBlock%20value%3A%20%28self%20at%3A%20aKey%29%5D'), -messageSends: ["ifNotNil:", "basicAt:", "value:", "at:"], +args: ["aString"], +source: unescape('exec%3A%20aString%0A%09%3Creturn%20self.exec%28aString%29%20%7C%7C%20nil%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.RegularExpression); smalltalk.addMethod( -unescape('_at_ifPresent_ifAbsent_'), +unescape('_test_'), smalltalk.method({ -selector: unescape('at%3AifPresent%3AifAbsent%3A'), -category: 'accessing', -fn: function (aKey, aBlock, anotherBlock) { +selector: unescape('test%3A'), +category: 'evaluating', +fn: function (aString) { var self=this; -return smalltalk.send(smalltalk.send(self, "_basicAt_", [aKey]), "_ifNil_ifNotNil_", [anotherBlock, (function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_at_", [aKey])]);})]); +return self.test(aString); return self;}, -args: ["aKey", "aBlock", "anotherBlock"], -source: unescape('at%3A%20aKey%20ifPresent%3A%20aBlock%20ifAbsent%3A%20anotherBlock%0A%09%5E%28self%20basicAt%3A%20aKey%29%0A%09%20%20%20%20ifNil%3A%20anotherBlock%0A%09%20%20%20%20ifNotNil%3A%20%5BaBlock%20value%3A%20%28self%20at%3A%20aKey%29%5D'), -messageSends: ["ifNil:ifNotNil:", "basicAt:", "value:", "at:"], +args: ["aString"], +source: unescape('test%3A%20aString%0A%09%3Creturn%20self.test%28aString%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.RegularExpression); + smalltalk.addMethod( -unescape('_at_'), +unescape('_fromString_'), smalltalk.method({ -selector: unescape('at%3A'), -category: 'accessing', -fn: function (aKey) { +selector: unescape('fromString%3A'), +category: 'instance creation', +fn: function (aString) { var self=this; -return smalltalk.send(self, "_at_ifAbsent_", [aKey, (function(){return smalltalk.send(self, "_errorNotFound", []);})]); +return smalltalk.send(self, "_fromString_flag_", [aString, ""]); return self;}, -args: ["aKey"], -source: unescape('at%3A%20aKey%0A%09%5Eself%20at%3A%20aKey%20ifAbsent%3A%20%5Bself%20errorNotFound%5D'), -messageSends: ["at:ifAbsent:", "errorNotFound"], +args: ["aString"], +source: unescape('fromString%3A%20aString%0A%09%20%20%20%20%5Eself%20fromString%3A%20aString%20flag%3A%20%27%27'), +messageSends: ["fromString:flag:"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.RegularExpression.klass); smalltalk.addMethod( -unescape('_add_'), +unescape('_fromString_flag_'), smalltalk.method({ -selector: unescape('add%3A'), -category: 'adding/removing', -fn: function (anAssociation) { +selector: unescape('fromString%3Aflag%3A'), +category: 'instance creation', +fn: function (aString, anotherString) { var self=this; -smalltalk.send(self, "_at_put_", [smalltalk.send(anAssociation, "_key", []), smalltalk.send(anAssociation, "_value", [])]); +return new RegExp(aString, anotherString); return self;}, -args: ["anAssociation"], -source: unescape('add%3A%20anAssociation%0A%09self%20at%3A%20anAssociation%20key%20put%3A%20anAssociation%20value'), -messageSends: ["at:put:", "key", "value"], +args: ["aString", "anotherString"], +source: unescape('fromString%3A%20aString%20flag%3A%20anotherString%0A%09%3Creturn%20new%20RegExp%28aString%2C%20anotherString%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.RegularExpression.klass); + +smalltalk.addClass('Stream', smalltalk.Object, ['collection', 'position', 'streamSize'], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_addAll_'), +unescape('_atEnd'), smalltalk.method({ -selector: unescape('addAll%3A'), -category: 'adding/removing', -fn: function (aHashedCollection) { +selector: unescape('atEnd'), +category: 'testing', +fn: function () { var self=this; -smalltalk.send(self, "_addAll_", [smalltalk.send(aHashedCollection, "_associations", [])], smalltalk.Collection); -return aHashedCollection; +return smalltalk.send(smalltalk.send(self, "_position", []), "__eq", [smalltalk.send(self, "_size", [])]); return self;}, -args: ["aHashedCollection"], -source: unescape('addAll%3A%20aHashedCollection%0A%09super%20addAll%3A%20aHashedCollection%20associations.%0A%09%5EaHashedCollection'), -messageSends: ["addAll:", "associations"], +args: [], +source: unescape('atEnd%0A%09%5Eself%20position%20%3D%20self%20size'), +messageSends: [unescape("%3D"), "position", "size"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_removeKey_'), +unescape('_atStart'), smalltalk.method({ -selector: unescape('removeKey%3A'), -category: 'adding/removing', -fn: function (aKey) { +selector: unescape('atStart'), +category: 'testing', +fn: function () { var self=this; -smalltalk.send(self, "_remove_", [aKey]); +return smalltalk.send(smalltalk.send(self, "_position", []), "__eq", [(0)]); return self;}, -args: ["aKey"], -source: unescape('removeKey%3A%20aKey%0A%20%20%20%20self%20remove%3A%20aKey'), -messageSends: ["remove:"], +args: [], +source: unescape('atStart%0A%09%5Eself%20position%20%3D%200'), +messageSends: [unescape("%3D"), "position"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_remove_ifAbsent_'), +unescape('_close'), smalltalk.method({ -selector: unescape('remove%3AifAbsent%3A'), -category: 'adding/removing', -fn: function (aKey, aBlock) { +selector: unescape('close'), +category: 'actions', +fn: function () { var self=this; -return smalltalk.send(self, "_removeKey_ifAbsent_", [aKey, aBlock]); + return self;}, -args: ["aKey", "aBlock"], -source: unescape('remove%3A%20aKey%20ifAbsent%3A%20aBlock%0A%20%20%20%20%5Eself%20removeKey%3A%20aKey%20ifAbsent%3A%20aBlock'), -messageSends: ["removeKey:ifAbsent:"], +args: [], +source: unescape('close'), +messageSends: [], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_removeKey_ifAbsent_'), +unescape('_collection'), smalltalk.method({ -selector: unescape('removeKey%3AifAbsent%3A'), -category: 'adding/removing', -fn: function (aKey, aBlock) { +selector: unescape('collection'), +category: 'accessing', +fn: function () { var self=this; -return ((($receiver = smalltalk.send(self, "_includesKey_", [aKey])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(aBlock, "_value", []);})() : (function(){return smalltalk.send(self, "_basicDelete_", [aKey]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(aBlock, "_value", []);}), (function(){return smalltalk.send(self, "_basicDelete_", [aKey]);})])); +return self['@collection']; return self;}, -args: ["aKey", "aBlock"], -source: unescape('removeKey%3A%20aKey%20ifAbsent%3A%20aBlock%0A%09%5E%28self%20includesKey%3A%20aKey%29%20%0A%09%09ifFalse%3A%20%5BaBlock%20value%5D%0A%09%09ifTrue%3A%20%5Bself%20basicDelete%3A%20aKey%5D'), -messageSends: ["ifFalse:ifTrue:", "includesKey:", "value", "basicDelete:"], +args: [], +source: unescape('collection%0A%09%5Ecollection'), +messageSends: [], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('__eq'), +unescape('_contents'), smalltalk.method({ -selector: unescape('%3D'), -category: 'comparing', -fn: function (aHashedCollection) { +selector: unescape('contents'), +category: 'accessing', +fn: function () { var self=this; -try{((($receiver = smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aHashedCollection, "_class", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); -((($receiver = smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [smalltalk.send(aHashedCollection, "_size", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})])); -(function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return smalltalk.send(smalltalk.send(self, "_associations", []), "__eq", [smalltalk.send(aHashedCollection, "_associations", [])])}})})(); -return self; -} catch(e) {if(e.name === 'stReturn' && e.selector === '__eq'){return e.fn()} throw(e)}}, -args: ["aHashedCollection"], -source: unescape('%3D%20aHashedCollection%0A%09self%20class%20%3D%20aHashedCollection%20class%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09self%20size%20%3D%20aHashedCollection%20size%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09%5Eself%20associations%20%3D%20aHashedCollection%20associations'), -messageSends: ["ifFalse:", unescape("%3D"), "class", "size", "associations"], +return smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [(1), smalltalk.send(self, "_streamSize", [])]); +return self;}, +args: [], +source: unescape('contents%0A%09%5Eself%20collection%0A%09%20%20%20%20copyFrom%3A%201%20%0A%09%20%20%20%20to%3A%20self%20streamSize'), +messageSends: ["copyFrom:to:", "collection", "streamSize"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_shallowCopy'), +unescape('_do_'), smalltalk.method({ -selector: unescape('shallowCopy'), -category: 'copying', -fn: function () { +selector: unescape('do%3A'), +category: 'enumerating', +fn: function (aBlock) { var self=this; -var copy=nil; -(copy=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(copy, "_at_put_", [smalltalk.send(each, "_key", []), smalltalk.send(each, "_value", [])]);})]); -return copy; +(function(){while(!(function(){return smalltalk.send(self, "_atEnd", []);})()) {(function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_next", [])]);})()}})(); return self;}, -args: [], -source: unescape('shallowCopy%0A%09%7C%20copy%20%7C%0A%09copy%20%3A%3D%20self%20class%20new.%0A%09self%20associationsDo%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20copy%20at%3A%20each%20key%20%20put%3A%20each%20value%5D.%0A%09%5Ecopy'), -messageSends: ["new", "class", "associationsDo:", "at:put:", "key", "value"], +args: ["aBlock"], +source: unescape('do%3A%20aBlock%0A%09%5Bself%20atEnd%5D%20whileFalse%3A%20%5BaBlock%20value%3A%20self%20next%5D'), +messageSends: ["whileFalse:", "atEnd", "value:", "next"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('__comma'), +unescape('_flush'), smalltalk.method({ -selector: unescape('%2C'), -category: 'copying', -fn: function (aCollection) { +selector: unescape('flush'), +category: 'actions', +fn: function () { var self=this; -smalltalk.send(self, "_shouldNotImplement", []); + return self;}, -args: ["aCollection"], -source: unescape('%2C%20aCollection%0A%09self%20shouldNotImplement'), -messageSends: ["shouldNotImplement"], +args: [], +source: unescape('flush'), +messageSends: [], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_copyFrom_to_'), +unescape('_isEmpty'), smalltalk.method({ -selector: unescape('copyFrom%3Ato%3A'), -category: 'copying', -fn: function (anIndex, anotherIndex) { +selector: unescape('isEmpty'), +category: 'testing', +fn: function () { var self=this; -smalltalk.send(self, "_shouldNotImplement", []); +return smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [(0)]); return self;}, -args: ["anIndex", "anotherIndex"], -source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09self%20shouldNotImplement'), -messageSends: ["shouldNotImplement"], +args: [], +source: unescape('isEmpty%0A%09%5Eself%20size%20%3D%200'), +messageSends: [unescape("%3D"), "size"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_next'), smalltalk.method({ -selector: unescape('deepCopy'), -category: 'copying', +selector: unescape('next'), +category: 'reading', fn: function () { var self=this; -var copy=nil; -(copy=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(copy, "_at_put_", [smalltalk.send(each, "_key", []), smalltalk.send(smalltalk.send(each, "_value", []), "_deepCopy", [])]);})]); -return copy; +return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return nil;})() : (function(){smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);return smalltalk.send(self['@collection'], "_at_", [smalltalk.send(self, "_position", [])]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return nil;}), (function(){smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);return smalltalk.send(self['@collection'], "_at_", [smalltalk.send(self, "_position", [])]);})])); return self;}, args: [], -source: unescape('deepCopy%0A%09%7C%20copy%20%7C%0A%09copy%20%3A%3D%20self%20class%20new.%0A%09self%20associationsDo%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20copy%20at%3A%20each%20key%20%20put%3A%20each%20value%20deepCopy%5D.%0A%09%5Ecopy'), -messageSends: ["new", "class", "associationsDo:", "at:put:", "key", "deepCopy", "value"], +source: unescape('next%0A%09%5Eself%20atEnd%20%0A%09%09ifTrue%3A%20%5Bnil%5D%0A%09%09ifFalse%3A%20%5B%0A%09%09%09self%20position%3A%20self%20position%20+%201.%20%0A%09%09%09collection%20at%3A%20self%20position%5D'), +messageSends: ["ifTrue:ifFalse:", "atEnd", "position:", unescape("+"), "position", "at:"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_associationsDo_'), +unescape('_next_'), smalltalk.method({ -selector: unescape('associationsDo%3A'), -category: 'enumerating', -fn: function (aBlock) { +selector: unescape('next%3A'), +category: 'reading', +fn: function (anInteger) { var self=this; -smalltalk.send(smalltalk.send(self, "_associations", []), "_do_", [aBlock]); +var tempCollection=nil; +(tempCollection=smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_class", []), "_new", [])); +smalltalk.send(anInteger, "_timesRepeat_", [(function(){return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(tempCollection, "_add_", [smalltalk.send(self, "_next", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(tempCollection, "_add_", [smalltalk.send(self, "_next", [])]);})]));})]); +return tempCollection; return self;}, -args: ["aBlock"], -source: unescape('associationsDo%3A%20aBlock%0A%09self%20associations%20do%3A%20aBlock'), -messageSends: ["do:", "associations"], +args: ["anInteger"], +source: unescape('next%3A%20anInteger%0A%09%7C%20tempCollection%20%7C%0A%09tempCollection%20%3A%3D%20self%20collection%20class%20new.%0A%09anInteger%20timesRepeat%3A%20%5B%0A%09%20%20%20%20self%20atEnd%20ifFalse%3A%20%5B%0A%09%09tempCollection%20add%3A%20self%20next%5D%5D.%0A%09%5EtempCollection'), +messageSends: ["new", "class", "collection", "timesRepeat:", "ifFalse:", "atEnd", "add:", "next"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_keysAndValuesDo_'), +unescape('_nextPut_'), smalltalk.method({ -selector: unescape('keysAndValuesDo%3A'), -category: 'enumerating', -fn: function (aBlock) { +selector: unescape('nextPut%3A'), +category: 'writing', +fn: function (anObject) { var self=this; -smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(aBlock, "_value_value_", [smalltalk.send(each, "_key", []), smalltalk.send(each, "_value", [])]);})]); +smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]); +smalltalk.send(smalltalk.send(self, "_collection", []), "_at_put_", [smalltalk.send(self, "_position", []), anObject]); +smalltalk.send(self, "_setStreamSize_", [smalltalk.send(smalltalk.send(self, "_streamSize", []), "_max_", [smalltalk.send(self, "_position", [])])]); return self;}, -args: ["aBlock"], -source: unescape('keysAndValuesDo%3A%20aBlock%0A%09self%20associationsDo%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20aBlock%20value%3A%20each%20key%20value%3A%20each%20value%5D'), -messageSends: ["associationsDo:", "value:value:", "key", "value"], +args: ["anObject"], +source: unescape('nextPut%3A%20anObject%0A%09self%20position%3A%20self%20position%20+%201.%0A%09self%20collection%20at%3A%20self%20position%20put%3A%20anObject.%0A%09self%20setStreamSize%3A%20%28self%20streamSize%20max%3A%20self%20position%29'), +messageSends: ["position:", unescape("+"), "position", "at:put:", "collection", "setStreamSize:", "max:", "streamSize"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_do_'), +unescape('_nextPutAll_'), smalltalk.method({ -selector: unescape('do%3A'), -category: 'enumerating', -fn: function (aBlock) { +selector: unescape('nextPutAll%3A'), +category: 'writing', +fn: function (aCollection) { var self=this; -smalltalk.send(smalltalk.send(self, "_values", []), "_do_", [aBlock]); +smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(self, "_nextPut_", [each]);})]); return self;}, -args: ["aBlock"], -source: unescape('do%3A%20aBlock%0A%09self%20values%20do%3A%20aBlock'), -messageSends: ["do:", "values"], +args: ["aCollection"], +source: unescape('nextPutAll%3A%20aCollection%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20nextPut%3A%20each%5D'), +messageSends: ["do:", "nextPut:"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_select_'), +unescape('_peek'), smalltalk.method({ -selector: unescape('select%3A'), -category: 'enumerating', -fn: function (aBlock) { +selector: unescape('peek'), +category: 'reading', +fn: function () { var self=this; -var newDict=nil; -(newDict=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return ((($receiver = smalltalk.send(aBlock, "_value_", [value])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(newDict, "_at_put_", [key, value]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(newDict, "_at_put_", [key, value]);})]));})]); -return newDict; +return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(smalltalk.send(self, "_collection", []), "_at_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_collection", []), "_at_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))]);})])); return self;}, -args: ["aBlock"], -source: unescape('select%3A%20aBlock%0A%09%7C%20newDict%20%7C%0A%09newDict%20%3A%3D%20self%20class%20new.%0A%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%20%20%20%20%28aBlock%20value%3A%20value%29%20ifTrue%3A%20%5BnewDict%20at%3A%20key%20put%3A%20value%5D%5D.%0A%09%5EnewDict'), -messageSends: ["new", "class", "keysAndValuesDo:", "ifTrue:", "value:", "at:put:"], +args: [], +source: unescape('peek%0A%09%5Eself%20atEnd%20ifFalse%3A%20%5B%0A%09%20%20%20%20self%20collection%20at%3A%20self%20position%20+%201%5D'), +messageSends: ["ifFalse:", "atEnd", "at:", "collection", unescape("+"), "position"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_collect_'), +unescape('_position'), smalltalk.method({ -selector: unescape('collect%3A'), -category: 'enumerating', -fn: function (aBlock) { +selector: unescape('position'), +category: 'accessing', +fn: function () { var self=this; -var newDict=nil; -(newDict=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(newDict, "_at_put_", [key, smalltalk.send(aBlock, "_value_", [value])]);})]); -return newDict; +return (($receiver = self['@position']) == nil || $receiver == undefined) ? (function(){return (self['@position']=(0));})() : $receiver; return self;}, -args: ["aBlock"], -source: unescape('collect%3A%20aBlock%0A%09%7C%20newDict%20%7C%0A%09newDict%20%3A%3D%20self%20class%20new.%0A%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%20%20%20%20newDict%20at%3A%20key%20put%3A%20%28aBlock%20value%3A%20value%29%5D.%0A%09%5EnewDict'), -messageSends: ["new", "class", "keysAndValuesDo:", "at:put:", "value:"], +args: [], +source: unescape('position%0A%09%5Eposition%20ifNil%3A%20%5Bposition%20%3A%3D%200%5D'), +messageSends: ["ifNil:"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_detect_ifNone_'), +unescape('_position_'), smalltalk.method({ -selector: unescape('detect%3AifNone%3A'), -category: 'enumerating', -fn: function (aBlock, anotherBlock) { +selector: unescape('position%3A'), +category: 'accessing', +fn: function (anInteger) { var self=this; -return smalltalk.send(smalltalk.send(self, "_values", []), "_detect_ifNone_", [aBlock, anotherBlock]); +(self['@position']=anInteger); return self;}, -args: ["aBlock", "anotherBlock"], -source: unescape('detect%3A%20aBlock%20ifNone%3A%20anotherBlock%0A%09%5Eself%20values%20detect%3A%20aBlock%20ifNone%3A%20anotherBlock'), -messageSends: ["detect:ifNone:", "values"], +args: ["anInteger"], +source: unescape('position%3A%20anInteger%0A%09position%20%3A%3D%20anInteger'), +messageSends: [], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_includes_'), +unescape('_reset'), smalltalk.method({ -selector: unescape('includes%3A'), -category: 'enumerating', -fn: function (anObject) { +selector: unescape('reset'), +category: 'actions', +fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_values", []), "_includes_", [anObject]); +smalltalk.send(self, "_position_", [(0)]); return self;}, -args: ["anObject"], -source: unescape('includes%3A%20anObject%0A%09%5Eself%20values%20includes%3A%20anObject'), -messageSends: ["includes:", "values"], +args: [], +source: unescape('reset%0A%09self%20position%3A%200'), +messageSends: ["position:"], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_printString'), +unescape('_resetContents'), smalltalk.method({ -selector: unescape('printString'), -category: 'printing', +selector: unescape('resetContents'), +category: 'actions', fn: function () { var self=this; -return smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(aStream){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Collection)]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);})(aStream);smalltalk.send(smalltalk.send(self, "_associations", []), "_do_separatedBy_", [(function(anAssociation){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(anAssociation, "_key", []), "_printString", [])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%20-%3E%20")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(anAssociation, "_value", []), "_printString", [])]);})(aStream);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%20%2C%20")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [unescape("%29")]);})]); +smalltalk.send(self, "_reset", []); +smalltalk.send(self, "_setStreamSize_", [(0)]); return self;}, args: [], -source: unescape('printString%0A%09%5EString%20streamContents%3A%20%5B%3AaStream%7C%20%20%0A%09%09aStream%20%0A%09%09%09nextPutAll%3A%20super%20printString%3B%0A%09%09%09nextPutAll%3A%20%27%28%27.%0A%09%09%09%09self%20associations%20%0A%09%09%09%09%09do%3A%20%5B%3AanAssociation%7C%20%20%0A%09%09%09%09%09%09aStream%20%0A%09%09%09%09%09%09%09nextPutAll%3A%20anAssociation%20key%20printString%3B%0A%09%09%09%09%09%09%09%09nextPutAll%3A%20%27%20-%3E%20%27%3B%0A%09%09%09%09%09%09%09%09nextPutAll%3A%20anAssociation%20value%20printString%5D%0A%09%09%09%09%09%09%09separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%20%2C%20%27%5D.%0A%09%09%09%09%09%09aStream%20nextPutAll%3A%20%27%29%27%5D'), -messageSends: ["streamContents:", "nextPutAll:", "printString", "do:separatedBy:", "associations", "key", "value"], -referencedClasses: ["String"] +source: unescape('resetContents%0A%09self%20reset.%0A%09self%20setStreamSize%3A%200'), +messageSends: ["reset", "setStreamSize:"], +referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_storeOn_'), +unescape('_setCollection_'), smalltalk.method({ -selector: unescape('storeOn%3A'), -category: 'printing', -fn: function (aStream) { +selector: unescape('setCollection%3A'), +category: 'accessing', +fn: function (aCollection) { var self=this; -smalltalk.send(aStream, "_nextPutAll_", [unescape("%23%7B")]); -smalltalk.send(smalltalk.send(self, "_associations", []), "_do_separatedBy_", [(function(each){return smalltalk.send(each, "_storeOn_", [aStream]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [". "]);})]); -smalltalk.send(aStream, "_nextPutAll_", [unescape("%7D")]); +(self['@collection']=aCollection); return self;}, -args: ["aStream"], -source: unescape('storeOn%3A%20aStream%0A%09aStream%20nextPutAll%3A%20%27%23%7B%27.%0A%09self%20associations%0A%09%09do%3A%20%5B%3Aeach%20%7C%20each%20storeOn%3A%20aStream%5D%0A%09%09separatedBy%3A%20%5B%20aStream%20nextPutAll%3A%20%27.%20%27%5D.%0A%09aStream%20nextPutAll%3A%20%27%7D%27'), -messageSends: ["nextPutAll:", "do:separatedBy:", "associations", "storeOn:"], +args: ["aCollection"], +source: unescape('setCollection%3A%20aCollection%0A%09collection%20%3A%3D%20aCollection'), +messageSends: [], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_includesKey_'), +unescape('_setStreamSize_'), smalltalk.method({ -selector: unescape('includesKey%3A'), -category: 'testing', -fn: function (aKey) { +selector: unescape('setStreamSize%3A'), +category: 'accessing', +fn: function (anInteger) { var self=this; -return self.hasOwnProperty(aKey); +(self['@streamSize']=anInteger); return self;}, -args: ["aKey"], -source: unescape('includesKey%3A%20aKey%0A%09%3Creturn%20self.hasOwnProperty%28aKey%29%3E'), +args: ["anInteger"], +source: unescape('setStreamSize%3A%20anInteger%0A%09streamSize%20%3A%3D%20anInteger'), messageSends: [], referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_asDictionary'), +unescape('_setToEnd'), smalltalk.method({ -selector: unescape('asDictionary'), -category: 'converting', +selector: unescape('setToEnd'), +category: 'positioning', fn: function () { var self=this; -return smalltalk.send((smalltalk.Dictionary || Dictionary), "_fromPairs_", [smalltalk.send(self, "_associations", [])]); +smalltalk.send(self, "_position_", [smalltalk.send(self, "_size", [])]); return self;}, args: [], -source: unescape('asDictionary%0A%09%5EDictionary%20fromPairs%3A%20self%20associations'), -messageSends: ["fromPairs:", "associations"], -referencedClasses: ["Dictionary"] +source: unescape('setToEnd%0A%09self%20position%3A%20self%20size'), +messageSends: ["position:", "size"], +referencedClasses: [] }), -smalltalk.HashedCollection); +smalltalk.Stream); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_size'), smalltalk.method({ -selector: unescape('asJSON'), -category: 'converting', -fn: function (){ +selector: unescape('size'), +category: 'accessing', +fn: function () { var self=this; -var c=nil; -(c=smalltalk.send(smalltalk.send(self, "_class", []), "_new", [])); -smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(c, "_at_put_", [key, smalltalk.send(value, "_asJSON", [])]);})]); -return c; +return smalltalk.send(self, "_streamSize", []); return self;}, args: [], -source: unescape('asJSON%0A%09%7C%20c%20%7C%0A%09c%20%3A%3D%20self%20class%20new.%0A%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%09c%20at%3A%20key%20put%3A%20value%20asJSON%5D.%0A%09%5Ec'), -messageSends: ["new", "class", "keysAndValuesDo:", "at:put:", "asJSON"], +source: unescape('size%0A%09%5Eself%20streamSize'), +messageSends: ["streamSize"], referencedClasses: [] }), -smalltalk.HashedCollection); - +smalltalk.Stream); smalltalk.addMethod( -unescape('_fromPairs_'), +unescape('_skip_'), smalltalk.method({ -selector: unescape('fromPairs%3A'), -category: 'instance creation', -fn: function (aCollection) { +selector: unescape('skip%3A'), +category: 'positioning', +fn: function (anInteger) { var self=this; -var dict=nil; -(dict=smalltalk.send(self, "_new", [])); -smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(dict, "_add_", [each]);})]); -return dict; +smalltalk.send(self, "_position_", [smalltalk.send(((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +anInteger : smalltalk.send($receiver, "__plus", [anInteger])), "_min_max_", [smalltalk.send(self, "_size", []), (0)])]); return self;}, -args: ["aCollection"], -source: unescape('fromPairs%3A%20aCollection%0A%09%7C%20dict%20%7C%0A%09dict%20%3A%3D%20self%20new.%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%20dict%20add%3A%20each%5D.%0A%09%5Edict'), -messageSends: ["new", "do:", "add:"], +args: ["anInteger"], +source: unescape('skip%3A%20anInteger%0A%09self%20position%3A%20%28%28self%20position%20+%20anInteger%29%20min%3A%20self%20size%20max%3A%200%29'), +messageSends: ["position:", "min:max:", unescape("+"), "position", "size"], referencedClasses: [] }), -smalltalk.HashedCollection.klass); - +smalltalk.Stream); -smalltalk.addClass('Dictionary', smalltalk.HashedCollection, ['keys', 'values'], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_at_ifAbsent_'), +unescape('_streamSize'), smalltalk.method({ -selector: unescape('at%3AifAbsent%3A'), +selector: unescape('streamSize'), category: 'accessing', -fn: function (aKey, aBlock) { +fn: function () { var self=this; - - var index; - for(var i=0;i<self['@keys'].length;i++){ - if(self['@keys'][i].__eq(aKey)) {index = i;} - }; - if(typeof index === 'undefined') { - return aBlock(); - } else { - return self['@values'][index]; - } - ; +return self['@streamSize']; return self;}, -args: ["aKey", "aBlock"], -source: unescape('at%3A%20aKey%20ifAbsent%3A%20aBlock%0A%09%3C%0A%09%09var%20index%3B%0A%09%09for%28var%20i%3D0%3Bi%3Cself%5B%27@keys%27%5D.length%3Bi++%29%7B%0A%09%09%09if%28self%5B%27@keys%27%5D%5Bi%5D.__eq%28aKey%29%29%20%7Bindex%20%3D%20i%3B%7D%0A%09%09%7D%3B%0A%09%09if%28typeof%20index%20%3D%3D%3D%20%27undefined%27%29%20%7B%0A%09%09%09return%20aBlock%28%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09return%20self%5B%27@values%27%5D%5Bindex%5D%3B%0A%09%09%7D%0A%09%3E'), +args: [], +source: unescape('streamSize%0A%09%5EstreamSize'), messageSends: [], referencedClasses: [] }), -smalltalk.Dictionary); +smalltalk.Stream); + smalltalk.addMethod( -unescape('_keys'), +unescape('_on_'), smalltalk.method({ -selector: unescape('keys'), -category: 'accessing', -fn: function () { +selector: unescape('on%3A'), +category: 'instance creation', +fn: function (aCollection) { var self=this; -return smalltalk.send(self['@keys'], "_copy", []); +return (function($rec){smalltalk.send($rec, "_setCollection_", [aCollection]);smalltalk.send($rec, "_setStreamSize_", [smalltalk.send(aCollection, "_size", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;}, -args: [], -source: unescape('keys%0A%09%5Ekeys%20copy'), -messageSends: ["copy"], +args: ["aCollection"], +source: unescape('on%3A%20aCollection%0A%09%20%20%20%20%5Eself%20new%20%0A%09%09setCollection%3A%20aCollection%3B%0A%09%09setStreamSize%3A%20aCollection%20size%3B%0A%09%09yourself'), +messageSends: ["setCollection:", "setStreamSize:", "size", "yourself", "new"], referencedClasses: [] }), -smalltalk.Dictionary); +smalltalk.Stream.klass); + +smalltalk.addClass('StringStream', smalltalk.Stream, [], 'Kernel-Collections'); smalltalk.addMethod( -unescape('_values'), +unescape('_cr'), smalltalk.method({ -selector: unescape('values'), -category: 'accessing', +selector: unescape('cr'), +category: 'writing', fn: function () { var self=this; -return smalltalk.send(self['@values'], "_copy", []); +return smalltalk.send(self, "_nextPutAll_", [smalltalk.send((smalltalk.String || String), "_cr", [])]); return self;}, args: [], -source: unescape('values%0A%09%5Evalues%20copy'), -messageSends: ["copy"], -referencedClasses: [] +source: unescape('cr%0A%09%5Eself%20nextPutAll%3A%20String%20cr'), +messageSends: ["nextPutAll:", "cr"], +referencedClasses: ["String"] }), -smalltalk.Dictionary); +smalltalk.StringStream); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_crlf'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), -category: 'accessing', -fn: function (aKey, aValue) { +selector: unescape('crlf'), +category: 'writing', +fn: function () { var self=this; - - var index = self['@keys'].indexOf(aKey); - if(index === -1) { - self['@values'].push(aValue); - self['@keys'].push(aKey); - } else { - self['@values'][index] = aValue; - }; - - return aValue; - ; +return smalltalk.send(self, "_nextPutAll_", [smalltalk.send((smalltalk.String || String), "_crlf", [])]); return self;}, -args: ["aKey", "aValue"], -source: unescape('at%3A%20aKey%20put%3A%20aValue%0A%09%3C%0A%09%09var%20index%20%3D%20self%5B%27@keys%27%5D.indexOf%28aKey%29%3B%0A%09%09if%28index%20%3D%3D%3D%20-1%29%20%7B%0A%09%09%09self%5B%27@values%27%5D.push%28aValue%29%3B%0A%09%09%09self%5B%27@keys%27%5D.push%28aKey%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09self%5B%27@values%27%5D%5Bindex%5D%20%3D%20aValue%3B%0A%09%09%7D%3B%0A%0A%09%09return%20aValue%3B%0A%09%3E'), -messageSends: [], -referencedClasses: [] +args: [], +source: unescape('crlf%0A%09%5Eself%20nextPutAll%3A%20String%20crlf'), +messageSends: ["nextPutAll:", "crlf"], +referencedClasses: ["String"] }), -smalltalk.Dictionary); +smalltalk.StringStream); smalltalk.addMethod( -unescape('_removeKey_ifAbsent_'), +unescape('_lf'), smalltalk.method({ -selector: unescape('removeKey%3AifAbsent%3A'), -category: 'adding/removing', -fn: function (aKey, aBlock) { +selector: unescape('lf'), +category: 'writing', +fn: function () { var self=this; - - var index = self['@keys'].indexOf(aKey); - if(index === -1) { - return aBlock() - } else { - self['@keys'].splice(i, 1); - self['@values'].splice(i, 1); - return aKey - }; - ; +return smalltalk.send(self, "_nextPutAll_", [smalltalk.send((smalltalk.String || String), "_lf", [])]); return self;}, -args: ["aKey", "aBlock"], -source: unescape('removeKey%3A%20aKey%20ifAbsent%3A%20aBlock%0A%09%3C%0A%09%09var%20index%20%3D%20self%5B%27@keys%27%5D.indexOf%28aKey%29%3B%0A%09%09if%28index%20%3D%3D%3D%20-1%29%20%7B%0A%09%09%09return%20aBlock%28%29%0A%09%09%7D%20else%20%7B%0A%09%09%09self%5B%27@keys%27%5D.splice%28i%2C%201%29%3B%0A%09%09%09self%5B%27@values%27%5D.splice%28i%2C%201%29%3B%0A%09%09%09return%20aKey%0A%09%09%7D%3B%0A%09%3E'), -messageSends: [], -referencedClasses: [] +args: [], +source: unescape('lf%0A%09%5Eself%20nextPutAll%3A%20String%20lf'), +messageSends: ["nextPutAll:", "lf"], +referencedClasses: ["String"] }), -smalltalk.Dictionary); +smalltalk.StringStream); smalltalk.addMethod( -unescape('_initialize'), +unescape('_next_'), smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', -fn: function () { +selector: unescape('next%3A'), +category: 'reading', +fn: function (anInteger) { var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.HashedCollection); -(self['@keys']=[]); -(self['@values']=[]); +var tempCollection=nil; +(tempCollection=smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_class", []), "_new", [])); +smalltalk.send(anInteger, "_timesRepeat_", [(function(){return ((($receiver = smalltalk.send(self, "_atEnd", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return (tempCollection=smalltalk.send(tempCollection, "__comma", [smalltalk.send(self, "_next", [])]));})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return (tempCollection=smalltalk.send(tempCollection, "__comma", [smalltalk.send(self, "_next", [])]));})]));})]); +return tempCollection; return self;}, -args: [], -source: unescape('initialize%0A%09super%20initialize.%0A%09keys%20%3A%3D%20%23%28%29.%0A%09values%20%3A%3D%20%23%28%29'), -messageSends: ["initialize"], +args: ["anInteger"], +source: unescape('next%3A%20anInteger%0A%09%7C%20tempCollection%20%7C%0A%09tempCollection%20%3A%3D%20self%20collection%20class%20new.%0A%09anInteger%20timesRepeat%3A%20%5B%0A%09%20%20%20%20self%20atEnd%20ifFalse%3A%20%5B%0A%09%09tempCollection%20%3A%3D%20tempCollection%2C%20self%20next%5D%5D.%0A%09%5EtempCollection'), +messageSends: ["new", "class", "collection", "timesRepeat:", "ifFalse:", "atEnd", unescape("%2C"), "next"], referencedClasses: [] }), -smalltalk.Dictionary); +smalltalk.StringStream); smalltalk.addMethod( -unescape('_includesKey_'), +unescape('_nextPut_'), smalltalk.method({ -selector: unescape('includesKey%3A'), -category: 'testing', -fn: function (aKey) { +selector: unescape('nextPut%3A'), +category: 'writing', +fn: function (aString) { var self=this; -return smalltalk.send(self['@keys'], "_includes_", [aKey]); +smalltalk.send(self, "_nextPutAll_", [aString]); return self;}, -args: ["aKey"], -source: unescape('includesKey%3A%20aKey%0A%09%5Ekeys%20includes%3A%20aKey'), -messageSends: ["includes:"], +args: ["aString"], +source: unescape('nextPut%3A%20aString%0A%09self%20nextPutAll%3A%20aString'), +messageSends: ["nextPutAll:"], referencedClasses: [] }), -smalltalk.Dictionary); +smalltalk.StringStream); smalltalk.addMethod( -unescape('_asHashedCollection'), +unescape('_nextPutAll_'), smalltalk.method({ -selector: unescape('asHashedCollection'), -category: 'converting', -fn: function () { +selector: unescape('nextPutAll%3A'), +category: 'writing', +fn: function (aString) { var self=this; -return smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_fromPairs_", [smalltalk.send(self, "_associations", [])]); +smalltalk.send(self, "_setCollection_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [(1), smalltalk.send(self, "_position", [])]), "__comma", [aString]), "__comma", [smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [((($receiver = ((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))).klass === smalltalk.Number) ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])])), smalltalk.send(smalltalk.send(self, "_collection", []), "_size", [])])])]); +smalltalk.send(self, "_position_", [((($receiver = smalltalk.send(self, "_position", [])).klass === smalltalk.Number) ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])]))]); +smalltalk.send(self, "_setStreamSize_", [smalltalk.send(smalltalk.send(self, "_streamSize", []), "_max_", [smalltalk.send(self, "_position", [])])]); return self;}, -args: [], -source: unescape('asHashedCollection%0A%09%5EHashedCollection%20fromPairs%3A%20self%20associations'), -messageSends: ["fromPairs:", "associations"], -referencedClasses: ["HashedCollection"] +args: ["aString"], +source: unescape('nextPutAll%3A%20aString%0A%09self%20setCollection%3A%20%0A%09%20%20%20%20%28self%20collection%20copyFrom%3A%201%20to%3A%20self%20position%29%2C%0A%09%20%20%20%20aString%2C%0A%09%20%20%20%20%28self%20collection%20copyFrom%3A%20%28self%20position%20+%201%20+%20aString%20size%29%20to%3A%20self%20collection%20size%29.%0A%09self%20position%3A%20self%20position%20+%20aString%20size.%0A%09self%20setStreamSize%3A%20%28self%20streamSize%20max%3A%20self%20position%29'), +messageSends: ["setCollection:", unescape("%2C"), "copyFrom:to:", "collection", "position", unescape("+"), "size", "position:", "setStreamSize:", "max:", "streamSize"], +referencedClasses: [] }), -smalltalk.Dictionary); +smalltalk.StringStream); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_space'), smalltalk.method({ -selector: unescape('asJSON'), -category: 'converting', -fn: function (){ +selector: unescape('space'), +category: 'writing', +fn: function () { var self=this; -return smalltalk.send(smalltalk.send(self, "_asHashedCollection", []), "_asJSON", []); +smalltalk.send(self, "_nextPut_", [" "]); return self;}, args: [], -source: unescape('asJSON%0A%09%5Eself%20asHashedCollection%20asJSON'), -messageSends: ["asJSON", "asHashedCollection"], +source: unescape('space%0A%09self%20nextPut%3A%20%27%20%27'), +messageSends: ["nextPut:"], referencedClasses: [] }), -smalltalk.Dictionary); +smalltalk.StringStream); diff --git a/amber/src/js/Kernel-Exceptions.deploy.js b/amber/src/js/Kernel-Exceptions.deploy.js index ec8539d71cb..b06fca01abd 100644 --- a/amber/src/js/Kernel-Exceptions.deploy.js +++ b/amber/src/js/Kernel-Exceptions.deploy.js @@ -1,76 +1,76 @@ smalltalk.addPackage('Kernel-Exceptions', {}); smalltalk.addClass('Error', smalltalk.Object, ['messageText'], 'Kernel-Exceptions'); smalltalk.addMethod( -'_messageText', +unescape('_context'), smalltalk.method({ -selector: 'messageText', +selector: unescape('context'), fn: function (){ var self=this; -return self['@messageText']; +return self.context; return self;} }), smalltalk.Error); smalltalk.addMethod( -'_messageText_', +unescape('_isSmalltalkError'), smalltalk.method({ -selector: 'messageText:', -fn: function (aString){ +selector: unescape('isSmalltalkError'), +fn: function (){ var self=this; -(self['@messageText']=aString); +return self.smalltalkError === true; return self;} }), smalltalk.Error); smalltalk.addMethod( -'_signal', +unescape('_jsStack'), smalltalk.method({ -selector: 'signal', +selector: unescape('jsStack'), fn: function (){ var self=this; -self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self); +return self.stack; return self;} }), smalltalk.Error); smalltalk.addMethod( -'_context', +unescape('_messageText'), smalltalk.method({ -selector: 'context', +selector: unescape('messageText'), fn: function (){ var self=this; -return self.context; +return self['@messageText']; return self;} }), smalltalk.Error); smalltalk.addMethod( -'_jsStack', +unescape('_messageText_'), smalltalk.method({ -selector: 'jsStack', -fn: function (){ +selector: unescape('messageText%3A'), +fn: function (aString){ var self=this; -return self.stack; +(self['@messageText']=aString); return self;} }), smalltalk.Error); smalltalk.addMethod( -'_isSmalltalkError', +unescape('_signal'), smalltalk.method({ -selector: 'isSmalltalkError', +selector: unescape('signal'), fn: function (){ var self=this; -return self.smalltalkError === true; +self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self); return self;} }), smalltalk.Error); smalltalk.addMethod( -'_signal_', +unescape('_signal_'), smalltalk.method({ -selector: 'signal:', +selector: unescape('signal%3A'), fn: function (aString){ var self=this; return (function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send(self, "_new", [])); @@ -81,9 +81,9 @@ smalltalk.Error.klass); smalltalk.addClass('MessageNotUnderstood', smalltalk.Error, ['message', 'receiver'], 'Kernel-Exceptions'); smalltalk.addMethod( -'_message', +unescape('_message'), smalltalk.method({ -selector: 'message', +selector: unescape('message'), fn: function (){ var self=this; return self['@message']; @@ -92,9 +92,9 @@ return self;} smalltalk.MessageNotUnderstood); smalltalk.addMethod( -'_message_', +unescape('_message_'), smalltalk.method({ -selector: 'message:', +selector: unescape('message%3A'), fn: function (aMessage){ var self=this; (self['@message']=aMessage); @@ -103,34 +103,34 @@ return self;} smalltalk.MessageNotUnderstood); smalltalk.addMethod( -'_receiver', +unescape('_messageText'), smalltalk.method({ -selector: 'receiver', +selector: unescape('messageText'), fn: function (){ var self=this; -return self['@receiver']; +return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_asString", []), "__comma", [unescape("%20does%20not%20understand%20%23")]), "__comma", [smalltalk.send(smalltalk.send(self, "_message", []), "_selector", [])]); return self;} }), smalltalk.MessageNotUnderstood); smalltalk.addMethod( -'_receiver_', +unescape('_receiver'), smalltalk.method({ -selector: 'receiver:', -fn: function (anObject){ +selector: unescape('receiver'), +fn: function (){ var self=this; -(self['@receiver']=anObject); +return self['@receiver']; return self;} }), smalltalk.MessageNotUnderstood); smalltalk.addMethod( -'_messageText', +unescape('_receiver_'), smalltalk.method({ -selector: 'messageText', -fn: function (){ +selector: unescape('receiver%3A'), +fn: function (anObject){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_asString", []), "__comma", [unescape("%20does%20not%20understand%20%23")]), "__comma", [smalltalk.send(smalltalk.send(self, "_message", []), "_selector", [])]); +(self['@receiver']=anObject); return self;} }), smalltalk.MessageNotUnderstood); @@ -139,9 +139,9 @@ smalltalk.MessageNotUnderstood); smalltalk.addClass('ErrorHandler', smalltalk.Object, [], 'Kernel-Exceptions'); smalltalk.addMethod( -'_handleError_', +unescape('_handleError_'), smalltalk.method({ -selector: 'handleError:', +selector: unescape('handleError%3A'), fn: function (anError){ var self=this; (($receiver = smalltalk.send(anError, "_context", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logErrorContext_", [smalltalk.send(anError, "_context", [])]);})() : nil; @@ -151,32 +151,32 @@ return self;} smalltalk.ErrorHandler); smalltalk.addMethod( -'_logContext_', +unescape('_log_'), smalltalk.method({ -selector: 'logContext:', -fn: function (aContext){ +selector: unescape('log%3A'), +fn: function (aString){ var self=this; -(($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil; -smalltalk.send(self, "_log_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aContext, "_receiver", []), "_asString", []), "__comma", [unescape("%3E%3E")]), "__comma", [smalltalk.send(aContext, "_selector", [])])]); +smalltalk.send((typeof console == 'undefined' ? nil : console), "_log_", [aString]); return self;} }), smalltalk.ErrorHandler); smalltalk.addMethod( -'_logErrorContext_', +unescape('_logContext_'), smalltalk.method({ -selector: 'logErrorContext:', +selector: unescape('logContext%3A'), fn: function (aContext){ var self=this; -(($receiver = aContext) != nil && $receiver != undefined) ? (function(){return (($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;})() : nil; +(($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil; +smalltalk.send(self, "_log_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aContext, "_receiver", []), "_asString", []), "__comma", [unescape("%3E%3E")]), "__comma", [smalltalk.send(aContext, "_selector", [])])]); return self;} }), smalltalk.ErrorHandler); smalltalk.addMethod( -'_logError_', +unescape('_logError_'), smalltalk.method({ -selector: 'logError:', +selector: unescape('logError%3A'), fn: function (anError){ var self=this; smalltalk.send(self, "_log_", [smalltalk.send(anError, "_messageText", [])]); @@ -185,12 +185,12 @@ return self;} smalltalk.ErrorHandler); smalltalk.addMethod( -'_log_', +unescape('_logErrorContext_'), smalltalk.method({ -selector: 'log:', -fn: function (aString){ +selector: unescape('logErrorContext%3A'), +fn: function (aContext){ var self=this; -smalltalk.send((typeof console == 'undefined' ? nil : console), "_log_", [aString]); +(($receiver = aContext) != nil && $receiver != undefined) ? (function(){return (($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;})() : nil; return self;} }), smalltalk.ErrorHandler); @@ -198,9 +198,9 @@ smalltalk.ErrorHandler); smalltalk.ErrorHandler.klass.iVarNames = ['current']; smalltalk.addMethod( -'_current', +unescape('_current'), smalltalk.method({ -selector: 'current', +selector: unescape('current'), fn: function (){ var self=this; return (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return (self['@current']=smalltalk.send(self, "_new", []));})() : $receiver; @@ -209,9 +209,9 @@ return self;} smalltalk.ErrorHandler.klass); smalltalk.addMethod( -'_initialize', +unescape('_initialize'), smalltalk.method({ -selector: 'initialize', +selector: unescape('initialize'), fn: function (){ var self=this; smalltalk.send(self, "_register", []); @@ -220,9 +220,9 @@ return self;} smalltalk.ErrorHandler.klass); smalltalk.addMethod( -'_register', +unescape('_register'), smalltalk.method({ -selector: 'register', +selector: unescape('register'), fn: function (){ var self=this; smalltalk.send((smalltalk.ErrorHandler || ErrorHandler), "_setCurrent_", [smalltalk.send(self, "_new", [])]); @@ -231,9 +231,9 @@ return self;} smalltalk.ErrorHandler.klass); smalltalk.addMethod( -'_setCurrent_', +unescape('_setCurrent_'), smalltalk.method({ -selector: 'setCurrent:', +selector: unescape('setCurrent%3A'), fn: function (anHandler){ var self=this; (self['@current']=anHandler); diff --git a/amber/src/js/Kernel-Exceptions.js b/amber/src/js/Kernel-Exceptions.js index 970d9f244b6..459163afcf9 100644 --- a/amber/src/js/Kernel-Exceptions.js +++ b/amber/src/js/Kernel-Exceptions.js @@ -1,96 +1,96 @@ smalltalk.addPackage('Kernel-Exceptions', {}); smalltalk.addClass('Error', smalltalk.Object, ['messageText'], 'Kernel-Exceptions'); smalltalk.addMethod( -unescape('_messageText'), +unescape('_context'), smalltalk.method({ -selector: unescape('messageText'), +selector: unescape('context'), category: 'accessing', fn: function (){ var self=this; -return self['@messageText']; +return self.context; return self;}, args: [], -source: unescape('messageText%0A%09%5EmessageText'), +source: unescape('context%0A%09%3Creturn%20self.context%3E'), messageSends: [], referencedClasses: [] }), smalltalk.Error); smalltalk.addMethod( -unescape('_messageText_'), +unescape('_isSmalltalkError'), smalltalk.method({ -selector: unescape('messageText%3A'), -category: 'accessing', -fn: function (aString){ +selector: unescape('isSmalltalkError'), +category: 'testing', +fn: function (){ var self=this; -(self['@messageText']=aString); +return self.smalltalkError === true; return self;}, -args: ["aString"], -source: unescape('messageText%3A%20aString%0A%09messageText%20%3A%3D%20aString'), +args: [], +source: unescape('isSmalltalkError%0A%09%3Creturn%20self.smalltalkError%20%3D%3D%3D%20true%3E'), messageSends: [], referencedClasses: [] }), smalltalk.Error); smalltalk.addMethod( -unescape('_signal'), +unescape('_jsStack'), smalltalk.method({ -selector: unescape('signal'), -category: 'signaling', +selector: unescape('jsStack'), +category: 'accessing', fn: function (){ var self=this; -self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self); +return self.stack; return self;}, args: [], -source: unescape('signal%0A%09%3Cself.context%20%3D%20smalltalk.getThisContext%28%29%3B%20self.smalltalkError%20%3D%20true%3B%20throw%28self%29%3E'), +source: unescape('jsStack%0A%09%3Creturn%20self.stack%3E'), messageSends: [], referencedClasses: [] }), smalltalk.Error); smalltalk.addMethod( -unescape('_context'), +unescape('_messageText'), smalltalk.method({ -selector: unescape('context'), +selector: unescape('messageText'), category: 'accessing', fn: function (){ var self=this; -return self.context; +return self['@messageText']; return self;}, args: [], -source: unescape('context%0A%09%3Creturn%20self.context%3E'), +source: unescape('messageText%0A%09%5EmessageText'), messageSends: [], referencedClasses: [] }), smalltalk.Error); smalltalk.addMethod( -unescape('_jsStack'), +unescape('_messageText_'), smalltalk.method({ -selector: unescape('jsStack'), +selector: unescape('messageText%3A'), category: 'accessing', -fn: function (){ +fn: function (aString){ var self=this; -return self.stack; +(self['@messageText']=aString); return self;}, -args: [], -source: unescape('jsStack%0A%09%3Creturn%20self.stack%3E'), +args: ["aString"], +source: unescape('messageText%3A%20aString%0A%09messageText%20%3A%3D%20aString'), messageSends: [], referencedClasses: [] }), smalltalk.Error); smalltalk.addMethod( -unescape('_isSmalltalkError'), +unescape('_signal'), smalltalk.method({ -selector: unescape('isSmalltalkError'), -category: 'testing', +selector: unescape('signal'), +category: 'signaling', fn: function (){ var self=this; -return self.smalltalkError === true; +self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self); return self;}, args: [], -source: unescape('isSmalltalkError%0A%09%3Creturn%20self.smalltalkError%20%3D%3D%3D%20true%3E'), +source: unescape('signal%0A%09%3Cself.context%20%3D%20smalltalk.getThisContext%28%29%3B%20self.smalltalkError%20%3D%20true%3B%20throw%28self%29%3E'), messageSends: [], referencedClasses: [] }), @@ -147,6 +147,22 @@ referencedClasses: [] }), smalltalk.MessageNotUnderstood); +smalltalk.addMethod( +unescape('_messageText'), +smalltalk.method({ +selector: unescape('messageText'), +category: 'accessing', +fn: function (){ +var self=this; +return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_asString", []), "__comma", [unescape("%20does%20not%20understand%20%23")]), "__comma", [smalltalk.send(smalltalk.send(self, "_message", []), "_selector", [])]); +return self;}, +args: [], +source: unescape('messageText%0A%09%5Eself%20receiver%20asString%2C%20%27%20does%20not%20understand%20%23%27%2C%20self%20message%20selector'), +messageSends: [unescape("%2C"), "asString", "receiver", "selector", "message"], +referencedClasses: [] +}), +smalltalk.MessageNotUnderstood); + smalltalk.addMethod( unescape('_receiver'), smalltalk.method({ @@ -179,22 +195,6 @@ referencedClasses: [] }), smalltalk.MessageNotUnderstood); -smalltalk.addMethod( -unescape('_messageText'), -smalltalk.method({ -selector: unescape('messageText'), -category: 'accessing', -fn: function (){ -var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_asString", []), "__comma", [unescape("%20does%20not%20understand%20%23")]), "__comma", [smalltalk.send(smalltalk.send(self, "_message", []), "_selector", [])]); -return self;}, -args: [], -source: unescape('messageText%0A%09%5Eself%20receiver%20asString%2C%20%27%20does%20not%20understand%20%23%27%2C%20self%20message%20selector'), -messageSends: [unescape("%2C"), "asString", "receiver", "selector", "message"], -referencedClasses: [] -}), -smalltalk.MessageNotUnderstood); - smalltalk.addClass('ErrorHandler', smalltalk.Object, [], 'Kernel-Exceptions'); @@ -216,34 +216,34 @@ referencedClasses: [] smalltalk.ErrorHandler); smalltalk.addMethod( -unescape('_logContext_'), +unescape('_log_'), smalltalk.method({ -selector: unescape('logContext%3A'), +selector: unescape('log%3A'), category: 'private', -fn: function (aContext){ +fn: function (aString){ var self=this; -(($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil; -smalltalk.send(self, "_log_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aContext, "_receiver", []), "_asString", []), "__comma", [unescape("%3E%3E")]), "__comma", [smalltalk.send(aContext, "_selector", [])])]); +smalltalk.send((typeof console == 'undefined' ? nil : console), "_log_", [aString]); return self;}, -args: ["aContext"], -source: unescape('logContext%3A%20aContext%0A%09aContext%20home%20ifNotNil%3A%20%5B%0A%09%09self%20logContext%3A%20aContext%20home%5D.%0A%09self%20log%3A%20aContext%20receiver%20asString%2C%20%27%3E%3E%27%2C%20aContext%20selector'), -messageSends: ["ifNotNil:", "home", "logContext:", "log:", unescape("%2C"), "asString", "receiver", "selector"], +args: ["aString"], +source: unescape('log%3A%20aString%0A%09console%20log%3A%20aString'), +messageSends: ["log:"], referencedClasses: [] }), smalltalk.ErrorHandler); smalltalk.addMethod( -unescape('_logErrorContext_'), +unescape('_logContext_'), smalltalk.method({ -selector: unescape('logErrorContext%3A'), +selector: unescape('logContext%3A'), category: 'private', fn: function (aContext){ var self=this; -(($receiver = aContext) != nil && $receiver != undefined) ? (function(){return (($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;})() : nil; +(($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil; +smalltalk.send(self, "_log_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aContext, "_receiver", []), "_asString", []), "__comma", [unescape("%3E%3E")]), "__comma", [smalltalk.send(aContext, "_selector", [])])]); return self;}, args: ["aContext"], -source: unescape('logErrorContext%3A%20aContext%0A%09aContext%20ifNotNil%3A%20%5B%0A%09%09aContext%20home%20ifNotNil%3A%20%5B%0A%09%09%09self%20logContext%3A%20aContext%20home%5D%5D'), -messageSends: ["ifNotNil:", "home", "logContext:"], +source: unescape('logContext%3A%20aContext%0A%09aContext%20home%20ifNotNil%3A%20%5B%0A%09%09self%20logContext%3A%20aContext%20home%5D.%0A%09self%20log%3A%20aContext%20receiver%20asString%2C%20%27%3E%3E%27%2C%20aContext%20selector'), +messageSends: ["ifNotNil:", "home", "logContext:", "log:", unescape("%2C"), "asString", "receiver", "selector"], referencedClasses: [] }), smalltalk.ErrorHandler); @@ -265,17 +265,17 @@ referencedClasses: [] smalltalk.ErrorHandler); smalltalk.addMethod( -unescape('_log_'), +unescape('_logErrorContext_'), smalltalk.method({ -selector: unescape('log%3A'), +selector: unescape('logErrorContext%3A'), category: 'private', -fn: function (aString){ +fn: function (aContext){ var self=this; -smalltalk.send((typeof console == 'undefined' ? nil : console), "_log_", [aString]); +(($receiver = aContext) != nil && $receiver != undefined) ? (function(){return (($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;})() : nil; return self;}, -args: ["aString"], -source: unescape('log%3A%20aString%0A%09console%20log%3A%20aString'), -messageSends: ["log:"], +args: ["aContext"], +source: unescape('logErrorContext%3A%20aContext%0A%09aContext%20ifNotNil%3A%20%5B%0A%09%09aContext%20home%20ifNotNil%3A%20%5B%0A%09%09%09self%20logContext%3A%20aContext%20home%5D%5D'), +messageSends: ["ifNotNil:", "home", "logContext:"], referencedClasses: [] }), smalltalk.ErrorHandler); diff --git a/amber/src/js/Kernel-Methods.deploy.js b/amber/src/js/Kernel-Methods.deploy.js index b86481fc7bf..4b9771b6a93 100644 --- a/amber/src/js/Kernel-Methods.deploy.js +++ b/amber/src/js/Kernel-Methods.deploy.js @@ -1,202 +1,122 @@ smalltalk.addPackage('Kernel-Methods', {}); -smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel-Methods'); -smalltalk.addMethod( -unescape('_selector'), -smalltalk.method({ -selector: unescape('selector'), -fn: function () { - var self = this; - return self['@selector']; - return self; -} -}), -smalltalk.Message); - -smalltalk.addMethod( -unescape('_selector_'), -smalltalk.method({ -selector: unescape('selector%3A'), -fn: function (aString) { - var self = this; - self['@selector'] = aString; - return self; -} -}), -smalltalk.Message); - -smalltalk.addMethod( -unescape('_arguments_'), -smalltalk.method({ -selector: unescape('arguments%3A'), -fn: function (anArray) { - var self = this; - self['@arguments'] = anArray; - return self; -} -}), -smalltalk.Message); - -smalltalk.addMethod( -unescape('_arguments'), -smalltalk.method({ -selector: unescape('arguments'), -fn: function () { - var self = this; - return self['@arguments']; - return self; -} -}), -smalltalk.Message); - -smalltalk.addMethod( -unescape('_printString'), -smalltalk.method({ -selector: unescape('printString'), -fn: function () { - var self = this; - return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (aStream) {return function ($rec) {smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Object)]);smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);smalltalk.send($rec, "_nextPutAll_", [self['@selector']]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29")]);}(aStream);}]); - return self; -} -}), -smalltalk.Message); - -smalltalk.addMethod( -unescape('_sendTo_'), -smalltalk.method({ -selector: unescape('sendTo%3A'), -fn: function (anObject) { - var self = this; - smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_send_to_arguments_", [smalltalk.send(self, "_selector", []), anObject, smalltalk.send(self, "_arguments", [])]); - return self; -} -}), -smalltalk.Message); - - +smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel-Methods'); smalltalk.addMethod( -unescape('_selector_arguments_'), +unescape('_applyTo_arguments_'), smalltalk.method({ -selector: unescape('selector%3Aarguments%3A'), -fn: function (aString, anArray) { +selector: unescape('applyTo%3Aarguments%3A'), +fn: function (anObject, aCollection) { var self = this; - return function ($rec) {smalltalk.send($rec, "_selector_", [aString]);smalltalk.send($rec, "_arguments_", [anArray]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", [])); + return self.apply(anObject, aCollection); return self; } }), -smalltalk.Message.klass); - +smalltalk.BlockClosure); -smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel-Methods'); smalltalk.addMethod( -unescape('_receiver'), +unescape('_compiledSource'), smalltalk.method({ -selector: unescape('receiver'), +selector: unescape('compiledSource'), fn: function () { var self = this; - return self.receiver; + return self.toString(); return self; } }), -smalltalk.MethodContext); +smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_selector'), +unescape('_ensure_'), smalltalk.method({ -selector: unescape('selector'), -fn: function () { +selector: unescape('ensure%3A'), +fn: function (aBlock) { var self = this; - return smalltalk.convertSelector(self.selector); + var success = nil; + success = false; + return smalltalk.send(function () {smalltalk.send(self, "_value", []);success = true;return smalltalk.send(aBlock, "_value", []);}, "_on_do_", [smalltalk.Error || Error, function (ex) {($receiver = success).klass === smalltalk.Boolean ? !$receiver ? function () {return smalltalk.send(aBlock, "_value", []);}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return smalltalk.send(aBlock, "_value", []);}]);return smalltalk.send(ex, "_signal", []);}]); return self; } }), -smalltalk.MethodContext); +smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_home'), +unescape('_new'), smalltalk.method({ -selector: unescape('home'), +selector: unescape('new'), fn: function () { var self = this; - return self.homeContext; + return new self; return self; } }), -smalltalk.MethodContext); +smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_temps'), +unescape('_newValue_'), smalltalk.method({ -selector: unescape('temps'), -fn: function () { +selector: unescape('newValue%3A'), +fn: function (anObject) { var self = this; - return self.temps; + return new self(anObject); return self; } }), -smalltalk.MethodContext); +smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_printString'), +unescape('_newValue_value_'), smalltalk.method({ -selector: unescape('printString'), -fn: function () { +selector: unescape('newValue%3Avalue%3A'), +fn: function (anObject, anObject2) { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.Object), "__comma", [unescape("%28")]), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%29")]); + return new self(anObject, anObject2); return self; } }), -smalltalk.MethodContext); +smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_asString'), +unescape('_newValue_value_value_'), smalltalk.method({ -selector: unescape('asString'), -fn: function () { +selector: unescape('newValue%3Avalue%3Avalue%3A'), +fn: function (anObject, anObject2, anObject3) { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_printString", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(self, "_selector", [])]); + return new self(anObject, anObject2); return self; } }), -smalltalk.MethodContext); - - +smalltalk.BlockClosure); -smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel-Methods'); smalltalk.addMethod( -unescape('_compiledSource'), +unescape('_numArgs'), smalltalk.method({ -selector: unescape('compiledSource'), +selector: unescape('numArgs'), fn: function () { var self = this; - return self.toString(); + return self.length; return self; } }), smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_whileTrue_'), +unescape('_on_do_'), smalltalk.method({ -selector: unescape('whileTrue%3A'), -fn: function (aBlock) { +selector: unescape('on%3Ado%3A'), +fn: function (anErrorClass, aBlock) { var self = this; - while (self()) { - aBlock(); - } + return smalltalk.send(self, "_try_catch_", [self, function (error) {return ($receiver = smalltalk.send(error, "_isKindOf_", [anErrorClass])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(aBlock, "_value_", [error]);}() : function () {return smalltalk.send(error, "_signal", []);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return smalltalk.send(aBlock, "_value_", [error]);}, function () {return smalltalk.send(error, "_signal", []);}]);}]); return self; } }), smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_whileFalse_'), +unescape('_timeToRun'), smalltalk.method({ -selector: unescape('whileFalse%3A'), -fn: function (aBlock) { +selector: unescape('timeToRun'), +fn: function () { var self = this; - while (!self()) { - aBlock(); - } + return smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [self]); return self; } }), @@ -251,24 +171,24 @@ fn: function (firstArg, secondArg, thirdArg) { smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_valueWithPossibleArguments_'), +unescape('_valueWithInterval_'), smalltalk.method({ -selector: unescape('valueWithPossibleArguments%3A'), -fn: function (aCollection) { +selector: unescape('valueWithInterval%3A'), +fn: function (aNumber) { var self = this; - return self.apply(null, aCollection); + return setInterval(self, aNumber); return self; } }), smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_on_do_'), +unescape('_valueWithPossibleArguments_'), smalltalk.method({ -selector: unescape('on%3Ado%3A'), -fn: function (anErrorClass, aBlock) { +selector: unescape('valueWithPossibleArguments%3A'), +fn: function (aCollection) { var self = this; - return smalltalk.send(self, "_try_catch_", [self, function (error) {return ($receiver = smalltalk.send(error, "_isKindOf_", [anErrorClass])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(aBlock, "_value_", [error]);}() : function () {return smalltalk.send(error, "_signal", []);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return smalltalk.send(aBlock, "_value_", [error]);}, function () {return smalltalk.send(error, "_signal", []);}]);}]); + return self.apply(null, aCollection); return self; } }), @@ -287,24 +207,26 @@ fn: function (aNumber) { smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_valueWithInterval_'), +unescape('_whileFalse'), smalltalk.method({ -selector: unescape('valueWithInterval%3A'), -fn: function (aNumber) { +selector: unescape('whileFalse'), +fn: function () { var self = this; - return setInterval(self, aNumber); + smalltalk.send(self, "_whileFalse_", [function () {return nil;}]); return self; } }), smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_whileFalse'), +unescape('_whileFalse_'), smalltalk.method({ -selector: unescape('whileFalse'), -fn: function () { +selector: unescape('whileFalse%3A'), +fn: function (aBlock) { var self = this; - smalltalk.send(self, "_whileFalse_", [function () {return nil;}]); + while (!self()) { + aBlock(); + } return self; } }), @@ -323,106 +245,143 @@ fn: function () { smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_new'), +unescape('_whileTrue_'), smalltalk.method({ -selector: unescape('new'), -fn: function () { +selector: unescape('whileTrue%3A'), +fn: function (aBlock) { var self = this; - return new self; + while (self()) { + aBlock(); + } return self; } }), smalltalk.BlockClosure); + + +smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel-Methods'); smalltalk.addMethod( -unescape('_applyTo_arguments_'), +unescape('_arguments'), smalltalk.method({ -selector: unescape('applyTo%3Aarguments%3A'), -fn: function (anObject, aCollection) { +selector: unescape('arguments'), +fn: function () { var self = this; - return self.apply(anObject, aCollection); + return self.args || []; return self; } }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); smalltalk.addMethod( -unescape('_timeToRun'), +unescape('_category'), smalltalk.method({ -selector: unescape('timeToRun'), +selector: unescape('category'), fn: function () { var self = this; - return smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [self]); + return ($receiver = smalltalk.send(self, "_basicAt_", ["category"])) == nil || + $receiver == undefined ? function () {return "";}() : $receiver; return self; } }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); smalltalk.addMethod( -unescape('_numArgs'), +unescape('_category_'), smalltalk.method({ -selector: unescape('numArgs'), +selector: unescape('category%3A'), +fn: function (aString) { + var self = this; + smalltalk.send(self, "_basicAt_put_", ["category", aString]); + return self; +} +}), +smalltalk.CompiledMethod); + +smalltalk.addMethod( +unescape('_fn'), +smalltalk.method({ +selector: unescape('fn'), fn: function () { var self = this; - return self.length; + return smalltalk.send(self, "_basicAt_", ["fn"]); return self; } }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); smalltalk.addMethod( -unescape('_ensure_'), +unescape('_fn_'), smalltalk.method({ -selector: unescape('ensure%3A'), +selector: unescape('fn%3A'), fn: function (aBlock) { var self = this; - var success = nil; - success = false; - return smalltalk.send(function () {smalltalk.send(self, "_value", []);success = true;return smalltalk.send(aBlock, "_value", []);}, "_on_do_", [smalltalk.Error || Error, function (ex) {($receiver = success).klass === smalltalk.Boolean ? !$receiver ? function () {return smalltalk.send(aBlock, "_value", []);}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return smalltalk.send(aBlock, "_value", []);}]);return smalltalk.send(ex, "_signal", []);}]); + smalltalk.send(self, "_basicAt_put_", ["fn", aBlock]); return self; } }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); smalltalk.addMethod( -unescape('_newValue_'), +unescape('_messageSends'), smalltalk.method({ -selector: unescape('newValue%3A'), -fn: function (anObject) { +selector: unescape('messageSends'), +fn: function () { var self = this; - return new self(anObject); + return smalltalk.send(self, "_basicAt_", ["messageSends"]); return self; } }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); smalltalk.addMethod( -unescape('_newValue_value_'), +unescape('_methodClass'), smalltalk.method({ -selector: unescape('newValue%3Avalue%3A'), -fn: function (anObject, anObject2) { +selector: unescape('methodClass'), +fn: function () { var self = this; - return new self(anObject, anObject2); + return smalltalk.send(self, "_basicAt_", ["methodClass"]); return self; } }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); smalltalk.addMethod( -unescape('_newValue_value_value_'), +unescape('_referencedClasses'), smalltalk.method({ -selector: unescape('newValue%3Avalue%3Avalue%3A'), -fn: function (anObject, anObject2, anObject3) { +selector: unescape('referencedClasses'), +fn: function () { var self = this; - return new self(anObject, anObject2); + return smalltalk.send(self, "_basicAt_", ["referencedClasses"]); return self; } }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); +smalltalk.addMethod( +unescape('_selector'), +smalltalk.method({ +selector: unescape('selector'), +fn: function () { + var self = this; + return smalltalk.send(self, "_basicAt_", ["selector"]); + return self; +} +}), +smalltalk.CompiledMethod); +smalltalk.addMethod( +unescape('_selector_'), +smalltalk.method({ +selector: unescape('selector%3A'), +fn: function (aString) { + var self = this; + smalltalk.send(self, "_basicAt_put_", ["selector", aString]); + return self; +} +}), +smalltalk.CompiledMethod); -smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel-Methods'); smalltalk.addMethod( unescape('_source'), smalltalk.method({ @@ -448,30 +407,44 @@ fn: function (aString) { }), smalltalk.CompiledMethod); + + +smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel-Methods'); smalltalk.addMethod( -unescape('_category'), +unescape('_arguments'), smalltalk.method({ -selector: unescape('category'), +selector: unescape('arguments'), fn: function () { var self = this; - return ($receiver = smalltalk.send(self, "_basicAt_", ["category"])) == nil || - $receiver == undefined ? function () {return "";}() : $receiver; + return self['@arguments']; return self; } }), -smalltalk.CompiledMethod); +smalltalk.Message); smalltalk.addMethod( -unescape('_category_'), +unescape('_arguments_'), smalltalk.method({ -selector: unescape('category%3A'), -fn: function (aString) { +selector: unescape('arguments%3A'), +fn: function (anArray) { var self = this; - smalltalk.send(self, "_basicAt_put_", ["category", aString]); + self['@arguments'] = anArray; return self; } }), -smalltalk.CompiledMethod); +smalltalk.Message); + +smalltalk.addMethod( +unescape('_printString'), +smalltalk.method({ +selector: unescape('printString'), +fn: function () { + var self = this; + return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (aStream) {return function ($rec) {smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Object)]);smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);smalltalk.send($rec, "_nextPutAll_", [self['@selector']]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29")]);}(aStream);}]); + return self; +} +}), +smalltalk.Message); smalltalk.addMethod( unescape('_selector'), @@ -479,11 +452,11 @@ smalltalk.method({ selector: unescape('selector'), fn: function () { var self = this; - return smalltalk.send(self, "_basicAt_", ["selector"]); + return self['@selector']; return self; } }), -smalltalk.CompiledMethod); +smalltalk.Message); smalltalk.addMethod( unescape('_selector_'), @@ -491,83 +464,110 @@ smalltalk.method({ selector: unescape('selector%3A'), fn: function (aString) { var self = this; - smalltalk.send(self, "_basicAt_put_", ["selector", aString]); + self['@selector'] = aString; return self; } }), -smalltalk.CompiledMethod); +smalltalk.Message); smalltalk.addMethod( -unescape('_fn'), +unescape('_sendTo_'), smalltalk.method({ -selector: unescape('fn'), +selector: unescape('sendTo%3A'), +fn: function (anObject) { + var self = this; + smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_send_to_arguments_", [smalltalk.send(self, "_selector", []), anObject, smalltalk.send(self, "_arguments", [])]); + return self; +} +}), +smalltalk.Message); + + +smalltalk.addMethod( +unescape('_selector_arguments_'), +smalltalk.method({ +selector: unescape('selector%3Aarguments%3A'), +fn: function (aString, anArray) { + var self = this; + return function ($rec) {smalltalk.send($rec, "_selector_", [aString]);smalltalk.send($rec, "_arguments_", [anArray]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", [])); + return self; +} +}), +smalltalk.Message.klass); + + +smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel-Methods'); +smalltalk.addMethod( +unescape('_asString'), +smalltalk.method({ +selector: unescape('asString'), fn: function () { var self = this; - return smalltalk.send(self, "_basicAt_", ["fn"]); + return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_printString", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(self, "_selector", [])]); return self; } }), -smalltalk.CompiledMethod); +smalltalk.MethodContext); smalltalk.addMethod( -unescape('_fn_'), +unescape('_home'), smalltalk.method({ -selector: unescape('fn%3A'), -fn: function (aBlock) { +selector: unescape('home'), +fn: function () { var self = this; - smalltalk.send(self, "_basicAt_put_", ["fn", aBlock]); + return self.homeContext; return self; } }), -smalltalk.CompiledMethod); +smalltalk.MethodContext); smalltalk.addMethod( -unescape('_messageSends'), +unescape('_printString'), smalltalk.method({ -selector: unescape('messageSends'), +selector: unescape('printString'), fn: function () { var self = this; - return smalltalk.send(self, "_basicAt_", ["messageSends"]); + return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.Object), "__comma", [unescape("%28")]), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%29")]); return self; } }), -smalltalk.CompiledMethod); +smalltalk.MethodContext); smalltalk.addMethod( -unescape('_methodClass'), +unescape('_receiver'), smalltalk.method({ -selector: unescape('methodClass'), +selector: unescape('receiver'), fn: function () { var self = this; - return smalltalk.send(self, "_basicAt_", ["methodClass"]); + return self.receiver; return self; } }), -smalltalk.CompiledMethod); +smalltalk.MethodContext); smalltalk.addMethod( -unescape('_referencedClasses'), +unescape('_selector'), smalltalk.method({ -selector: unescape('referencedClasses'), +selector: unescape('selector'), fn: function () { var self = this; - return smalltalk.send(self, "_basicAt_", ["referencedClasses"]); + return smalltalk.convertSelector(self.selector); return self; } }), -smalltalk.CompiledMethod); +smalltalk.MethodContext); smalltalk.addMethod( -unescape('_arguments'), +unescape('_temps'), smalltalk.method({ -selector: unescape('arguments'), +selector: unescape('temps'), fn: function () { var self = this; - return self.args || []; + return self.temps; return self; } }), -smalltalk.CompiledMethod); +smalltalk.MethodContext); diff --git a/amber/src/js/Kernel-Methods.js b/amber/src/js/Kernel-Methods.js index e455e27e740..09e811fbef9 100644 --- a/amber/src/js/Kernel-Methods.js +++ b/amber/src/js/Kernel-Methods.js @@ -1,287 +1,175 @@ smalltalk.addPackage('Kernel-Methods', {}); -smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel-Methods'); -smalltalk.Message.comment=unescape('Generally%2C%20the%20system%20does%20not%20use%20instances%20of%20Message%20for%20efficiency%20reasons.%0AHowever%2C%20when%20a%20message%20is%20not%20understood%20by%20its%20receiver%2C%20the%20interpreter%20will%20make%20up%20an%20instance%20of%20it%20in%20order%20to%20capture%20the%20information%20involved%20in%20an%20actual%20message%20transmission.%20%0AThis%20instance%20is%20sent%20it%20as%20an%20argument%20with%20the%20message%20%60doesNotUnderstand%3A%60%20to%20the%20receiver.%0A%0ASee%20boot.js%2C%20%60messageNotUnderstood%60%20%20and%20its%20counterpart%20%60Object%3E%3EdoesNotUnderstand%3A%60') -smalltalk.addMethod( -unescape('_selector'), -smalltalk.method({ -selector: unescape('selector'), -category: 'accessing', -fn: function () { - var self = this; - return self['@selector']; - return self; -}, -args: [], -source: unescape('selector%0A%09%5Eselector'), -messageSends: [], -referencedClasses: [] -}), -smalltalk.Message); - -smalltalk.addMethod( -unescape('_selector_'), -smalltalk.method({ -selector: unescape('selector%3A'), -category: 'accessing', -fn: function (aString) { - var self = this; - self['@selector'] = aString; - return self; -}, -args: ["aString"], -source: unescape('selector%3A%20aString%0A%09selector%20%3A%3D%20aString'), -messageSends: [], -referencedClasses: [] -}), -smalltalk.Message); - +smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel-Methods'); +smalltalk.BlockClosure.comment=unescape('A%20BlockClosure%20is%20a%20lexical%20closure.%0AThe%20JavaScript%20representation%20is%20a%20function.%0A%0AA%20BlockClosure%20is%20evaluated%20with%20the%20%60%23value*%60%20methods%20in%20the%20%27evaluating%27%20protocol.') smalltalk.addMethod( -unescape('_arguments_'), +unescape('_applyTo_arguments_'), smalltalk.method({ -selector: unescape('arguments%3A'), -category: 'accessing', -fn: function (anArray) { +selector: unescape('applyTo%3Aarguments%3A'), +category: 'evaluating', +fn: function (anObject, aCollection) { var self = this; - self['@arguments'] = anArray; + return self.apply(anObject, aCollection); return self; }, -args: ["anArray"], -source: unescape('arguments%3A%20anArray%0A%09arguments%20%3A%3D%20anArray'), +args: ["anObject", "aCollection"], +source: unescape('applyTo%3A%20anObject%20arguments%3A%20aCollection%0A%09%3Creturn%20self.apply%28anObject%2C%20aCollection%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Message); +smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_arguments'), +unescape('_compiledSource'), smalltalk.method({ -selector: unescape('arguments'), +selector: unescape('compiledSource'), category: 'accessing', fn: function () { var self = this; - return self['@arguments']; + return self.toString(); return self; }, args: [], -source: unescape('arguments%0A%09%5Earguments'), +source: unescape('compiledSource%0A%09%3Creturn%20self.toString%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Message); - -smalltalk.addMethod( -unescape('_printString'), -smalltalk.method({ -selector: unescape('printString'), -category: 'printing', -fn: function () { - var self = this; - return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (aStream) {return function ($rec) {smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Object)]);smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);smalltalk.send($rec, "_nextPutAll_", [self['@selector']]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29")]);}(aStream);}]); - return self; -}, -args: [], -source: unescape('printString%0A%09%5E%20String%20streamContents%3A%20%5B%3AaStream%7C%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09aStream%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20super%20printString%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27%28%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20selector%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27%29%27%20%09%09%09%09%5D'), -messageSends: ["streamContents:", "nextPutAll:", "printString"], -referencedClasses: ["String"] -}), -smalltalk.Message); - -smalltalk.addMethod( -unescape('_sendTo_'), -smalltalk.method({ -selector: unescape('sendTo%3A'), -category: 'printing', -fn: function (anObject) { - var self = this; - smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_send_to_arguments_", [smalltalk.send(self, "_selector", []), anObject, smalltalk.send(self, "_arguments", [])]); - return self; -}, -args: ["anObject"], -source: unescape('sendTo%3A%20anObject%0A%09Smalltalk%20current%20send%3A%20self%20selector%20to%3A%20anObject%20arguments%3A%20self%20arguments'), -messageSends: ["send:to:arguments:", "current", "selector", "arguments"], -referencedClasses: ["Smalltalk"] -}), -smalltalk.Message); - +smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_selector_arguments_'), +unescape('_ensure_'), smalltalk.method({ -selector: unescape('selector%3Aarguments%3A'), -category: 'instance creation', -fn: function (aString, anArray) { +selector: unescape('ensure%3A'), +category: 'evaluating', +fn: function (aBlock) { var self = this; - return function ($rec) {smalltalk.send($rec, "_selector_", [aString]);smalltalk.send($rec, "_arguments_", [anArray]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", [])); + var success = nil; + success = false; + return smalltalk.send(function () {smalltalk.send(self, "_value", []);success = true;return smalltalk.send(aBlock, "_value", []);}, "_on_do_", [smalltalk.Error || Error, function (ex) {($receiver = success).klass === smalltalk.Boolean ? !$receiver ? function () {return smalltalk.send(aBlock, "_value", []);}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return smalltalk.send(aBlock, "_value", []);}]);return smalltalk.send(ex, "_signal", []);}]); return self; }, -args: ["aString", "anArray"], -source: unescape('selector%3A%20aString%20arguments%3A%20anArray%0A%09%5Eself%20new%0A%09%09selector%3A%20aString%3B%0A%09%09arguments%3A%20anArray%3B%0A%09%09yourself'), -messageSends: ["selector:", "arguments:", "yourself", "new"], -referencedClasses: [] +args: ["aBlock"], +source: unescape('ensure%3A%20aBlock%0A%09%7C%20success%20%7C%0A%09success%20%3A%3D%20false.%0A%09%5E%5Bself%20value.%20success%20%3A%3D%20true.%20aBlock%20value%5D%0A%09%09on%3A%20Error%0A%09%09do%3A%20%5B%3Aex%20%7C%0A%09%09%09success%20ifFalse%3A%20%5BaBlock%20value%5D.%0A%09%09%09ex%20signal%5D'), +messageSends: ["on:do:", "value", "ifFalse:", "signal"], +referencedClasses: ["Error"] }), -smalltalk.Message.klass); - +smalltalk.BlockClosure); -smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel-Methods'); -smalltalk.MethodContext.comment=unescape('MethodContext%20holds%20all%20the%20dynamic%20state%20associated%20with%20the%20execution%20of%20either%20a%20method%20activation%20resulting%20from%20a%20message%20send.%20That%20is%20used%20to%20build%20the%20call%20stack%20while%20debugging.%0A%20%20%0AMethodContext%20instances%20are%20JavaScript%20%60SmalltalkMethodContext%60%20objects%20defined%20in%20boot.js%20%0A%0ACurrent%20limitation%3A%20MethodContext%20instances%20are%20not%20created%20on%20Block%20evaluation.%20That%20means%20it%27s%20actually%20impossible%20to%20debug%20inside%20a%20Block.') smalltalk.addMethod( -unescape('_receiver'), +unescape('_new'), smalltalk.method({ -selector: unescape('receiver'), -category: 'accessing', +selector: unescape('new'), +category: 'evaluating', fn: function () { var self = this; - return self.receiver; + return new self; return self; }, args: [], -source: unescape('receiver%0A%09%3Creturn%20self.receiver%3E'), +source: unescape('new%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.MethodContext); +smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_selector'), +unescape('_newValue_'), smalltalk.method({ -selector: unescape('selector'), -category: 'accessing', -fn: function () { +selector: unescape('newValue%3A'), +category: 'evaluating', +fn: function (anObject) { var self = this; - return smalltalk.convertSelector(self.selector); + return new self(anObject); return self; }, -args: [], -source: unescape('selector%0A%09%3Creturn%20smalltalk.convertSelector%28self.selector%29%3E'), +args: ["anObject"], +source: unescape('newValue%3A%20anObject%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.MethodContext); +smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_home'), +unescape('_newValue_value_'), smalltalk.method({ -selector: unescape('home'), -category: 'accessing', -fn: function () { +selector: unescape('newValue%3Avalue%3A'), +category: 'evaluating', +fn: function (anObject, anObject2) { var self = this; - return self.homeContext; + return new self(anObject, anObject2); return self; }, -args: [], -source: unescape('home%0A%09%3Creturn%20self.homeContext%3E'), +args: ["anObject", "anObject2"], +source: unescape('newValue%3A%20%20anObject%20value%3A%20anObject2%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%2C%20anObject2%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.MethodContext); +smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_temps'), +unescape('_newValue_value_value_'), smalltalk.method({ -selector: unescape('temps'), -category: 'accessing', -fn: function () { +selector: unescape('newValue%3Avalue%3Avalue%3A'), +category: 'evaluating', +fn: function (anObject, anObject2, anObject3) { var self = this; - return self.temps; + return new self(anObject, anObject2); return self; }, -args: [], -source: unescape('temps%0A%09%3Creturn%20self.temps%3E'), +args: ["anObject", "anObject2", "anObject3"], +source: unescape('newValue%3A%20%20anObject%20value%3A%20anObject2%20value%3A%20anObject3%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%2C%20anObject2%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.MethodContext); - -smalltalk.addMethod( -unescape('_printString'), -smalltalk.method({ -selector: unescape('printString'), -category: 'accessing', -fn: function () { - var self = this; - return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.Object), "__comma", [unescape("%28")]), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%29")]); - return self; -}, -args: [], -source: unescape('printString%0A%09%5Esuper%20printString%2C%20%27%28%27%2C%20self%20asString%2C%20%27%29%27'), -messageSends: [unescape("%2C"), "printString", "asString"], -referencedClasses: [] -}), -smalltalk.MethodContext); - -smalltalk.addMethod( -unescape('_asString'), -smalltalk.method({ -selector: unescape('asString'), -category: 'accessing', -fn: function () { - var self = this; - return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_printString", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(self, "_selector", [])]); - return self; -}, -args: [], -source: unescape('asString%0A%09%5Eself%20receiver%20class%20printString%2C%20%27%20%3E%3E%20%27%2C%20self%20selector'), -messageSends: [unescape("%2C"), "printString", "class", "receiver", "selector"], -referencedClasses: [] -}), -smalltalk.MethodContext); - - +smalltalk.BlockClosure); -smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel-Methods'); -smalltalk.BlockClosure.comment=unescape('A%20BlockClosure%20is%20a%20lexical%20closure.%0AThe%20JavaScript%20representation%20is%20a%20function.%0A%0AA%20BlockClosure%20is%20evaluated%20with%20the%20%60%23value*%60%20methods%20in%20the%20%27evaluating%27%20protocol.') smalltalk.addMethod( -unescape('_compiledSource'), +unescape('_numArgs'), smalltalk.method({ -selector: unescape('compiledSource'), +selector: unescape('numArgs'), category: 'accessing', fn: function () { var self = this; - return self.toString(); + return self.length; return self; }, args: [], -source: unescape('compiledSource%0A%09%3Creturn%20self.toString%28%29%3E'), +source: unescape('numArgs%0A%09%3Creturn%20self.length%3E'), messageSends: [], referencedClasses: [] }), smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_whileTrue_'), +unescape('_on_do_'), smalltalk.method({ -selector: unescape('whileTrue%3A'), -category: 'controlling', -fn: function (aBlock) { +selector: unescape('on%3Ado%3A'), +category: 'error handling', +fn: function (anErrorClass, aBlock) { var self = this; - while (self()) { - aBlock(); - } + return smalltalk.send(self, "_try_catch_", [self, function (error) {return ($receiver = smalltalk.send(error, "_isKindOf_", [anErrorClass])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(aBlock, "_value_", [error]);}() : function () {return smalltalk.send(error, "_signal", []);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return smalltalk.send(aBlock, "_value_", [error]);}, function () {return smalltalk.send(error, "_signal", []);}]);}]); return self; }, -args: ["aBlock"], -source: unescape('whileTrue%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Cwhile%28self%28%29%29%20%7BaBlock%28%29%7D%3E'), -messageSends: [], +args: ["anErrorClass", "aBlock"], +source: unescape('on%3A%20anErrorClass%20do%3A%20aBlock%0A%09%5Eself%20try%3A%20self%20catch%3A%20%5B%3Aerror%20%7C%0A%09%20%20%20%20%28error%20isKindOf%3A%20anErrorClass%29%20%0A%09%20%20%20%20%20ifTrue%3A%20%5BaBlock%20value%3A%20error%5D%0A%09%20%20%20%20%20ifFalse%3A%20%5Berror%20signal%5D%5D'), +messageSends: ["try:catch:", "ifTrue:ifFalse:", "isKindOf:", "value:", "signal"], referencedClasses: [] }), smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_whileFalse_'), +unescape('_timeToRun'), smalltalk.method({ -selector: unescape('whileFalse%3A'), -category: 'controlling', -fn: function (aBlock) { +selector: unescape('timeToRun'), +category: 'evaluating', +fn: function () { var self = this; - while (!self()) { - aBlock(); - } + return smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [self]); return self; }, -args: ["aBlock"], -source: unescape('whileFalse%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Cwhile%28%21self%28%29%29%20%7BaBlock%28%29%7D%3E'), -messageSends: [], -referencedClasses: [] +args: [], +source: unescape('timeToRun%0A%09%22Answer%20the%20number%20of%20milliseconds%20taken%20to%20execute%20this%20block.%22%0A%0A%09%5E%20Date%20millisecondsToRun%3A%20self'), +messageSends: ["millisecondsToRun:"], +referencedClasses: ["Date"] }), smalltalk.BlockClosure); @@ -354,35 +242,35 @@ referencedClasses: [] smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_valueWithPossibleArguments_'), +unescape('_valueWithInterval_'), smalltalk.method({ -selector: unescape('valueWithPossibleArguments%3A'), -category: 'evaluating', -fn: function (aCollection) { +selector: unescape('valueWithInterval%3A'), +category: 'timeout/interval', +fn: function (aNumber) { var self = this; - return self.apply(null, aCollection); + return setInterval(self, aNumber); return self; }, -args: ["aCollection"], -source: unescape('valueWithPossibleArguments%3A%20aCollection%0A%09%3Creturn%20self.apply%28null%2C%20aCollection%29%3B%3E'), +args: ["aNumber"], +source: unescape('valueWithInterval%3A%20aNumber%0A%09%3Creturn%20setInterval%28self%2C%20aNumber%29%3E'), messageSends: [], referencedClasses: [] }), smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_on_do_'), +unescape('_valueWithPossibleArguments_'), smalltalk.method({ -selector: unescape('on%3Ado%3A'), -category: 'error handling', -fn: function (anErrorClass, aBlock) { +selector: unescape('valueWithPossibleArguments%3A'), +category: 'evaluating', +fn: function (aCollection) { var self = this; - return smalltalk.send(self, "_try_catch_", [self, function (error) {return ($receiver = smalltalk.send(error, "_isKindOf_", [anErrorClass])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(aBlock, "_value_", [error]);}() : function () {return smalltalk.send(error, "_signal", []);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return smalltalk.send(aBlock, "_value_", [error]);}, function () {return smalltalk.send(error, "_signal", []);}]);}]); + return self.apply(null, aCollection); return self; }, -args: ["anErrorClass", "aBlock"], -source: unescape('on%3A%20anErrorClass%20do%3A%20aBlock%0A%09%5Eself%20try%3A%20self%20catch%3A%20%5B%3Aerror%20%7C%0A%09%20%20%20%20%28error%20isKindOf%3A%20anErrorClass%29%20%0A%09%20%20%20%20%20ifTrue%3A%20%5BaBlock%20value%3A%20error%5D%0A%09%20%20%20%20%20ifFalse%3A%20%5Berror%20signal%5D%5D'), -messageSends: ["try:catch:", "ifTrue:ifFalse:", "isKindOf:", "value:", "signal"], +args: ["aCollection"], +source: unescape('valueWithPossibleArguments%3A%20aCollection%0A%09%3Creturn%20self.apply%28null%2C%20aCollection%29%3B%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.BlockClosure); @@ -405,35 +293,37 @@ referencedClasses: [] smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_valueWithInterval_'), +unescape('_whileFalse'), smalltalk.method({ -selector: unescape('valueWithInterval%3A'), -category: 'timeout/interval', -fn: function (aNumber) { +selector: unescape('whileFalse'), +category: 'controlling', +fn: function () { var self = this; - return setInterval(self, aNumber); + smalltalk.send(self, "_whileFalse_", [function () {return nil;}]); return self; }, -args: ["aNumber"], -source: unescape('valueWithInterval%3A%20aNumber%0A%09%3Creturn%20setInterval%28self%2C%20aNumber%29%3E'), -messageSends: [], +args: [], +source: unescape('whileFalse%0A%09%22inlined%20in%20the%20Compiler%22%0A%09self%20whileFalse%3A%20%5B%5D'), +messageSends: ["whileFalse:"], referencedClasses: [] }), smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_whileFalse'), +unescape('_whileFalse_'), smalltalk.method({ -selector: unescape('whileFalse'), +selector: unescape('whileFalse%3A'), category: 'controlling', -fn: function () { +fn: function (aBlock) { var self = this; - smalltalk.send(self, "_whileFalse_", [function () {return nil;}]); + while (!self()) { + aBlock(); + } return self; }, -args: [], -source: unescape('whileFalse%0A%09%22inlined%20in%20the%20Compiler%22%0A%09self%20whileFalse%3A%20%5B%5D'), -messageSends: ["whileFalse:"], +args: ["aBlock"], +source: unescape('whileFalse%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Cwhile%28%21self%28%29%29%20%7BaBlock%28%29%7D%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.BlockClosure); @@ -456,147 +346,199 @@ referencedClasses: [] smalltalk.BlockClosure); smalltalk.addMethod( -unescape('_new'), +unescape('_whileTrue_'), smalltalk.method({ -selector: unescape('new'), -category: 'evaluating', -fn: function () { +selector: unescape('whileTrue%3A'), +category: 'controlling', +fn: function (aBlock) { var self = this; - return new self; + while (self()) { + aBlock(); + } return self; }, -args: [], -source: unescape('new%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28%29%3E'), +args: ["aBlock"], +source: unescape('whileTrue%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Cwhile%28self%28%29%29%20%7BaBlock%28%29%7D%3E'), messageSends: [], referencedClasses: [] }), smalltalk.BlockClosure); + + +smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel-Methods'); +smalltalk.CompiledMethod.comment=unescape('CompiledMethod%20hold%20the%20source%20and%20compiled%20code%20of%20a%20class%20method.%0A%0AYou%20can%20get%20a%20CompiledMethod%20using%20%60Behavior%3E%3EmethodAt%3A%60%0A%0A%09String%20methodAt%3A%20%27lines%27%0A%0Aand%20read%20the%20source%20code%0A%0A%09%28String%20methodAt%3A%20%27lines%27%29%20source%0A%0ASee%20referenced%20classes%3A%0A%0A%09%28String%20methodAt%3A%20%27lines%27%29%20referencedClasses%0A%0Aor%20messages%20sent%20from%20this%20method%3A%0A%09%0A%09%28String%20methodAt%3A%20%27lines%27%29%20%20messageSends') smalltalk.addMethod( -unescape('_applyTo_arguments_'), +unescape('_arguments'), smalltalk.method({ -selector: unescape('applyTo%3Aarguments%3A'), -category: 'evaluating', -fn: function (anObject, aCollection) { +selector: unescape('arguments'), +category: 'accessing', +fn: function () { var self = this; - return self.apply(anObject, aCollection); + return self.args || []; return self; }, -args: ["anObject", "aCollection"], -source: unescape('applyTo%3A%20anObject%20arguments%3A%20aCollection%0A%09%3Creturn%20self.apply%28anObject%2C%20aCollection%29%3E'), +args: [], +source: unescape('arguments%0A%09%3Creturn%20self.args%20%7C%7C%20%5B%5D%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); smalltalk.addMethod( -unescape('_timeToRun'), +unescape('_category'), smalltalk.method({ -selector: unescape('timeToRun'), -category: 'evaluating', +selector: unescape('category'), +category: 'accessing', fn: function () { var self = this; - return smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [self]); + return ($receiver = smalltalk.send(self, "_basicAt_", ["category"])) == nil || + $receiver == undefined ? function () {return "";}() : $receiver; return self; }, args: [], -source: unescape('timeToRun%0A%09%22Answer%20the%20number%20of%20milliseconds%20taken%20to%20execute%20this%20block.%22%0A%0A%09%5E%20Date%20millisecondsToRun%3A%20self'), -messageSends: ["millisecondsToRun:"], -referencedClasses: ["Date"] +source: unescape('category%0A%09%5E%28self%20basicAt%3A%20%27category%27%29%20ifNil%3A%20%5B%27%27%5D'), +messageSends: ["ifNil:", "basicAt:"], +referencedClasses: [] }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); smalltalk.addMethod( -unescape('_numArgs'), +unescape('_category_'), smalltalk.method({ -selector: unescape('numArgs'), +selector: unescape('category%3A'), +category: 'accessing', +fn: function (aString) { + var self = this; + smalltalk.send(self, "_basicAt_put_", ["category", aString]); + return self; +}, +args: ["aString"], +source: unescape('category%3A%20aString%0A%09self%20basicAt%3A%20%27category%27%20put%3A%20aString'), +messageSends: ["basicAt:put:"], +referencedClasses: [] +}), +smalltalk.CompiledMethod); + +smalltalk.addMethod( +unescape('_fn'), +smalltalk.method({ +selector: unescape('fn'), category: 'accessing', fn: function () { var self = this; - return self.length; + return smalltalk.send(self, "_basicAt_", ["fn"]); return self; }, args: [], -source: unescape('numArgs%0A%09%3Creturn%20self.length%3E'), -messageSends: [], +source: unescape('fn%0A%09%5Eself%20basicAt%3A%20%27fn%27'), +messageSends: ["basicAt:"], referencedClasses: [] }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); smalltalk.addMethod( -unescape('_ensure_'), +unescape('_fn_'), +smalltalk.method({ +selector: unescape('fn%3A'), +category: 'accessing', +fn: function (aBlock) { + var self = this; + smalltalk.send(self, "_basicAt_put_", ["fn", aBlock]); + return self; +}, +args: ["aBlock"], +source: unescape('fn%3A%20aBlock%0A%09self%20basicAt%3A%20%27fn%27%20put%3A%20aBlock'), +messageSends: ["basicAt:put:"], +referencedClasses: [] +}), +smalltalk.CompiledMethod); + +smalltalk.addMethod( +unescape('_messageSends'), +smalltalk.method({ +selector: unescape('messageSends'), +category: 'accessing', +fn: function () { + var self = this; + return smalltalk.send(self, "_basicAt_", ["messageSends"]); + return self; +}, +args: [], +source: unescape('messageSends%0A%09%5Eself%20basicAt%3A%20%27messageSends%27'), +messageSends: ["basicAt:"], +referencedClasses: [] +}), +smalltalk.CompiledMethod); + +smalltalk.addMethod( +unescape('_methodClass'), smalltalk.method({ -selector: unescape('ensure%3A'), -category: 'evaluating', -fn: function (aBlock) { +selector: unescape('methodClass'), +category: 'accessing', +fn: function () { var self = this; - var success = nil; - success = false; - return smalltalk.send(function () {smalltalk.send(self, "_value", []);success = true;return smalltalk.send(aBlock, "_value", []);}, "_on_do_", [smalltalk.Error || Error, function (ex) {($receiver = success).klass === smalltalk.Boolean ? !$receiver ? function () {return smalltalk.send(aBlock, "_value", []);}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return smalltalk.send(aBlock, "_value", []);}]);return smalltalk.send(ex, "_signal", []);}]); + return smalltalk.send(self, "_basicAt_", ["methodClass"]); return self; }, -args: ["aBlock"], -source: unescape('ensure%3A%20aBlock%0A%09%7C%20success%20%7C%0A%09success%20%3A%3D%20false.%0A%09%5E%5Bself%20value.%20success%20%3A%3D%20true.%20aBlock%20value%5D%0A%09%09on%3A%20Error%0A%09%09do%3A%20%5B%3Aex%20%7C%0A%09%09%09success%20ifFalse%3A%20%5BaBlock%20value%5D.%0A%09%09%09ex%20signal%5D'), -messageSends: ["on:do:", "value", "ifFalse:", "signal"], -referencedClasses: ["Error"] +args: [], +source: unescape('methodClass%0A%09%5Eself%20basicAt%3A%20%27methodClass%27'), +messageSends: ["basicAt:"], +referencedClasses: [] }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); smalltalk.addMethod( -unescape('_newValue_'), +unescape('_referencedClasses'), smalltalk.method({ -selector: unescape('newValue%3A'), -category: 'evaluating', -fn: function (anObject) { +selector: unescape('referencedClasses'), +category: 'accessing', +fn: function () { var self = this; - return new self(anObject); + return smalltalk.send(self, "_basicAt_", ["referencedClasses"]); return self; }, -args: ["anObject"], -source: unescape('newValue%3A%20anObject%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%29%3E'), -messageSends: [], +args: [], +source: unescape('referencedClasses%0A%09%5Eself%20basicAt%3A%20%27referencedClasses%27'), +messageSends: ["basicAt:"], referencedClasses: [] }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); smalltalk.addMethod( -unescape('_newValue_value_'), +unescape('_selector'), smalltalk.method({ -selector: unescape('newValue%3Avalue%3A'), -category: 'evaluating', -fn: function (anObject, anObject2) { +selector: unescape('selector'), +category: 'accessing', +fn: function () { var self = this; - return new self(anObject, anObject2); + return smalltalk.send(self, "_basicAt_", ["selector"]); return self; }, -args: ["anObject", "anObject2"], -source: unescape('newValue%3A%20%20anObject%20value%3A%20anObject2%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%2C%20anObject2%29%3E'), -messageSends: [], +args: [], +source: unescape('selector%0A%09%5Eself%20basicAt%3A%20%27selector%27'), +messageSends: ["basicAt:"], referencedClasses: [] }), -smalltalk.BlockClosure); +smalltalk.CompiledMethod); smalltalk.addMethod( -unescape('_newValue_value_value_'), +unescape('_selector_'), smalltalk.method({ -selector: unescape('newValue%3Avalue%3Avalue%3A'), -category: 'evaluating', -fn: function (anObject, anObject2, anObject3) { +selector: unescape('selector%3A'), +category: 'accessing', +fn: function (aString) { var self = this; - return new self(anObject, anObject2); + smalltalk.send(self, "_basicAt_put_", ["selector", aString]); return self; }, -args: ["anObject", "anObject2", "anObject3"], -source: unescape('newValue%3A%20%20anObject%20value%3A%20anObject2%20value%3A%20anObject3%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%2C%20anObject2%29%3E'), -messageSends: [], +args: ["aString"], +source: unescape('selector%3A%20aString%0A%09self%20basicAt%3A%20%27selector%27%20put%3A%20aString'), +messageSends: ["basicAt:put:"], referencedClasses: [] }), -smalltalk.BlockClosure); - - +smalltalk.CompiledMethod); -smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel-Methods'); -smalltalk.CompiledMethod.comment=unescape('CompiledMethod%20hold%20the%20source%20and%20compiled%20code%20of%20a%20class%20method.%0A%0AYou%20can%20get%20a%20CompiledMethod%20using%20%60Behavior%3E%3EmethodAt%3A%60%0A%0A%09String%20methodAt%3A%20%27lines%27%0A%0Aand%20read%20the%20source%20code%0A%0A%09%28String%20methodAt%3A%20%27lines%27%29%20source%0A%0ASee%20referenced%20classes%3A%0A%0A%09%28String%20methodAt%3A%20%27lines%27%29%20referencedClasses%0A%0Aor%20messages%20sent%20from%20this%20method%3A%0A%09%0A%09%28String%20methodAt%3A%20%27lines%27%29%20%20messageSends') smalltalk.addMethod( unescape('_source'), smalltalk.method({ @@ -632,40 +574,60 @@ referencedClasses: [] }), smalltalk.CompiledMethod); + + +smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel-Methods'); +smalltalk.Message.comment=unescape('Generally%2C%20the%20system%20does%20not%20use%20instances%20of%20Message%20for%20efficiency%20reasons.%0AHowever%2C%20when%20a%20message%20is%20not%20understood%20by%20its%20receiver%2C%20the%20interpreter%20will%20make%20up%20an%20instance%20of%20it%20in%20order%20to%20capture%20the%20information%20involved%20in%20an%20actual%20message%20transmission.%20%0AThis%20instance%20is%20sent%20it%20as%20an%20argument%20with%20the%20message%20%60doesNotUnderstand%3A%60%20to%20the%20receiver.%0A%0ASee%20boot.js%2C%20%60messageNotUnderstood%60%20%20and%20its%20counterpart%20%60Object%3E%3EdoesNotUnderstand%3A%60') smalltalk.addMethod( -unescape('_category'), +unescape('_arguments'), smalltalk.method({ -selector: unescape('category'), +selector: unescape('arguments'), category: 'accessing', fn: function () { var self = this; - return ($receiver = smalltalk.send(self, "_basicAt_", ["category"])) == nil || - $receiver == undefined ? function () {return "";}() : $receiver; + return self['@arguments']; return self; }, args: [], -source: unescape('category%0A%09%5E%28self%20basicAt%3A%20%27category%27%29%20ifNil%3A%20%5B%27%27%5D'), -messageSends: ["ifNil:", "basicAt:"], +source: unescape('arguments%0A%09%5Earguments'), +messageSends: [], referencedClasses: [] }), -smalltalk.CompiledMethod); +smalltalk.Message); smalltalk.addMethod( -unescape('_category_'), +unescape('_arguments_'), smalltalk.method({ -selector: unescape('category%3A'), +selector: unescape('arguments%3A'), category: 'accessing', -fn: function (aString) { +fn: function (anArray) { var self = this; - smalltalk.send(self, "_basicAt_put_", ["category", aString]); + self['@arguments'] = anArray; return self; }, -args: ["aString"], -source: unescape('category%3A%20aString%0A%09self%20basicAt%3A%20%27category%27%20put%3A%20aString'), -messageSends: ["basicAt:put:"], +args: ["anArray"], +source: unescape('arguments%3A%20anArray%0A%09arguments%20%3A%3D%20anArray'), +messageSends: [], referencedClasses: [] }), -smalltalk.CompiledMethod); +smalltalk.Message); + +smalltalk.addMethod( +unescape('_printString'), +smalltalk.method({ +selector: unescape('printString'), +category: 'printing', +fn: function () { + var self = this; + return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (aStream) {return function ($rec) {smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Object)]);smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);smalltalk.send($rec, "_nextPutAll_", [self['@selector']]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29")]);}(aStream);}]); + return self; +}, +args: [], +source: unescape('printString%0A%09%5E%20String%20streamContents%3A%20%5B%3AaStream%7C%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09aStream%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20super%20printString%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27%28%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20selector%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27%29%27%20%09%09%09%09%5D'), +messageSends: ["streamContents:", "nextPutAll:", "printString"], +referencedClasses: ["String"] +}), +smalltalk.Message); smalltalk.addMethod( unescape('_selector'), @@ -674,15 +636,15 @@ selector: unescape('selector'), category: 'accessing', fn: function () { var self = this; - return smalltalk.send(self, "_basicAt_", ["selector"]); + return self['@selector']; return self; }, args: [], -source: unescape('selector%0A%09%5Eself%20basicAt%3A%20%27selector%27'), -messageSends: ["basicAt:"], +source: unescape('selector%0A%09%5Eselector'), +messageSends: [], referencedClasses: [] }), -smalltalk.CompiledMethod); +smalltalk.Message); smalltalk.addMethod( unescape('_selector_'), @@ -691,117 +653,155 @@ selector: unescape('selector%3A'), category: 'accessing', fn: function (aString) { var self = this; - smalltalk.send(self, "_basicAt_put_", ["selector", aString]); + self['@selector'] = aString; return self; }, args: ["aString"], -source: unescape('selector%3A%20aString%0A%09self%20basicAt%3A%20%27selector%27%20put%3A%20aString'), -messageSends: ["basicAt:put:"], +source: unescape('selector%3A%20aString%0A%09selector%20%3A%3D%20aString'), +messageSends: [], referencedClasses: [] }), -smalltalk.CompiledMethod); +smalltalk.Message); smalltalk.addMethod( -unescape('_fn'), +unescape('_sendTo_'), smalltalk.method({ -selector: unescape('fn'), +selector: unescape('sendTo%3A'), +category: 'printing', +fn: function (anObject) { + var self = this; + smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_send_to_arguments_", [smalltalk.send(self, "_selector", []), anObject, smalltalk.send(self, "_arguments", [])]); + return self; +}, +args: ["anObject"], +source: unescape('sendTo%3A%20anObject%0A%09Smalltalk%20current%20send%3A%20self%20selector%20to%3A%20anObject%20arguments%3A%20self%20arguments'), +messageSends: ["send:to:arguments:", "current", "selector", "arguments"], +referencedClasses: ["Smalltalk"] +}), +smalltalk.Message); + + +smalltalk.addMethod( +unescape('_selector_arguments_'), +smalltalk.method({ +selector: unescape('selector%3Aarguments%3A'), +category: 'instance creation', +fn: function (aString, anArray) { + var self = this; + return function ($rec) {smalltalk.send($rec, "_selector_", [aString]);smalltalk.send($rec, "_arguments_", [anArray]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", [])); + return self; +}, +args: ["aString", "anArray"], +source: unescape('selector%3A%20aString%20arguments%3A%20anArray%0A%09%5Eself%20new%0A%09%09selector%3A%20aString%3B%0A%09%09arguments%3A%20anArray%3B%0A%09%09yourself'), +messageSends: ["selector:", "arguments:", "yourself", "new"], +referencedClasses: [] +}), +smalltalk.Message.klass); + + +smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel-Methods'); +smalltalk.MethodContext.comment=unescape('MethodContext%20holds%20all%20the%20dynamic%20state%20associated%20with%20the%20execution%20of%20either%20a%20method%20activation%20resulting%20from%20a%20message%20send.%20That%20is%20used%20to%20build%20the%20call%20stack%20while%20debugging.%0A%20%20%0AMethodContext%20instances%20are%20JavaScript%20%60SmalltalkMethodContext%60%20objects%20defined%20in%20boot.js%20%0A%0ACurrent%20limitation%3A%20MethodContext%20instances%20are%20not%20created%20on%20Block%20evaluation.%20That%20means%20it%27s%20actually%20impossible%20to%20debug%20inside%20a%20Block.') +smalltalk.addMethod( +unescape('_asString'), +smalltalk.method({ +selector: unescape('asString'), category: 'accessing', fn: function () { var self = this; - return smalltalk.send(self, "_basicAt_", ["fn"]); + return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_printString", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(self, "_selector", [])]); return self; }, args: [], -source: unescape('fn%0A%09%5Eself%20basicAt%3A%20%27fn%27'), -messageSends: ["basicAt:"], +source: unescape('asString%0A%09%5Eself%20receiver%20class%20printString%2C%20%27%20%3E%3E%20%27%2C%20self%20selector'), +messageSends: [unescape("%2C"), "printString", "class", "receiver", "selector"], referencedClasses: [] }), -smalltalk.CompiledMethod); +smalltalk.MethodContext); smalltalk.addMethod( -unescape('_fn_'), +unescape('_home'), smalltalk.method({ -selector: unescape('fn%3A'), +selector: unescape('home'), category: 'accessing', -fn: function (aBlock) { +fn: function () { var self = this; - smalltalk.send(self, "_basicAt_put_", ["fn", aBlock]); + return self.homeContext; return self; }, -args: ["aBlock"], -source: unescape('fn%3A%20aBlock%0A%09self%20basicAt%3A%20%27fn%27%20put%3A%20aBlock'), -messageSends: ["basicAt:put:"], +args: [], +source: unescape('home%0A%09%3Creturn%20self.homeContext%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.CompiledMethod); +smalltalk.MethodContext); smalltalk.addMethod( -unescape('_messageSends'), +unescape('_printString'), smalltalk.method({ -selector: unescape('messageSends'), +selector: unescape('printString'), category: 'accessing', fn: function () { var self = this; - return smalltalk.send(self, "_basicAt_", ["messageSends"]); + return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.Object), "__comma", [unescape("%28")]), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%29")]); return self; }, args: [], -source: unescape('messageSends%0A%09%5Eself%20basicAt%3A%20%27messageSends%27'), -messageSends: ["basicAt:"], +source: unescape('printString%0A%09%5Esuper%20printString%2C%20%27%28%27%2C%20self%20asString%2C%20%27%29%27'), +messageSends: [unescape("%2C"), "printString", "asString"], referencedClasses: [] }), -smalltalk.CompiledMethod); +smalltalk.MethodContext); smalltalk.addMethod( -unescape('_methodClass'), +unescape('_receiver'), smalltalk.method({ -selector: unescape('methodClass'), +selector: unescape('receiver'), category: 'accessing', fn: function () { var self = this; - return smalltalk.send(self, "_basicAt_", ["methodClass"]); + return self.receiver; return self; }, args: [], -source: unescape('methodClass%0A%09%5Eself%20basicAt%3A%20%27methodClass%27'), -messageSends: ["basicAt:"], +source: unescape('receiver%0A%09%3Creturn%20self.receiver%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.CompiledMethod); +smalltalk.MethodContext); smalltalk.addMethod( -unescape('_referencedClasses'), +unescape('_selector'), smalltalk.method({ -selector: unescape('referencedClasses'), +selector: unescape('selector'), category: 'accessing', fn: function () { var self = this; - return smalltalk.send(self, "_basicAt_", ["referencedClasses"]); + return smalltalk.convertSelector(self.selector); return self; }, args: [], -source: unescape('referencedClasses%0A%09%5Eself%20basicAt%3A%20%27referencedClasses%27'), -messageSends: ["basicAt:"], +source: unescape('selector%0A%09%3Creturn%20smalltalk.convertSelector%28self.selector%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.CompiledMethod); +smalltalk.MethodContext); smalltalk.addMethod( -unescape('_arguments'), +unescape('_temps'), smalltalk.method({ -selector: unescape('arguments'), +selector: unescape('temps'), category: 'accessing', fn: function () { var self = this; - return self.args || []; + return self.temps; return self; }, args: [], -source: unescape('arguments%0A%09%3Creturn%20self.args%20%7C%7C%20%5B%5D%3E'), +source: unescape('temps%0A%09%3Creturn%20self.temps%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.CompiledMethod); +smalltalk.MethodContext); diff --git a/amber/src/js/Kernel-Objects.deploy.js b/amber/src/js/Kernel-Objects.deploy.js index 62041816909..770c194cdf1 100644 --- a/amber/src/js/Kernel-Objects.deploy.js +++ b/amber/src/js/Kernel-Objects.deploy.js @@ -1,5 +1,17 @@ smalltalk.addPackage('Kernel-Objects', {}); smalltalk.addClass('Object', smalltalk.nil, [], 'Kernel-Objects'); +smalltalk.addMethod( +unescape('__minus_gt'), +smalltalk.method({ +selector: unescape('-%3E'), +fn: function (anObject) { + var self = this; + return smalltalk.send(smalltalk.Association || Association, "_key_value_", [self, anObject]); + return self; +} +}), +smalltalk.Object); + smalltalk.addMethod( unescape('__eq'), smalltalk.method({ @@ -13,307 +25,323 @@ fn: function (anObject) { smalltalk.Object); smalltalk.addMethod( -unescape('_%7E_eq'), +unescape('__eq_eq'), smalltalk.method({ -selector: unescape('%7E%3D'), +selector: unescape('%3D%3D'), fn: function (anObject) { var self = this; - return smalltalk.send(smalltalk.send(self, "__eq", [anObject]), "__eq", [false]); + return smalltalk.send(smalltalk.send(self, "_identityHash", []), "__eq", [smalltalk.send(anObject, "_identityHash", [])]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_initialize'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('initialize'), +selector: unescape('asJSON'), +fn: function (){ +var self=this; +var variables=nil; +(variables=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", [])); +smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_allInstanceVariableNames", []), "_do_", [(function(each){return smalltalk.send(variables, "_at_put_", [each, smalltalk.send(smalltalk.send(self, "_instVarAt_", [each]), "_asJSON", [])]);})]); +return variables; +return self;} +}), +smalltalk.Object); + +smalltalk.addMethod( +unescape('_asJSONString'), +smalltalk.method({ +selector: unescape('asJSONString'), +fn: function (){ +var self=this; +return smalltalk.send((smalltalk.JSON || JSON), "_stringify_", [smalltalk.send(self, "_asJSON", [])]); +return self;} +}), +smalltalk.Object); + +smalltalk.addMethod( +unescape('_asJavascript'), +smalltalk.method({ +selector: unescape('asJavascript'), fn: function () { var self = this; + return smalltalk.send(self, "_asString", []); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_yourself'), +unescape('_asString'), smalltalk.method({ -selector: unescape('yourself'), +selector: unescape('asString'), fn: function () { var self = this; - return self; + return smalltalk.send(self, "_printString", []); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_class'), +unescape('_basicAt_'), smalltalk.method({ -selector: unescape('class'), -fn: function () { +selector: unescape('basicAt%3A'), +fn: function (aString) { var self = this; - return self.klass; + return self[aString]; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_size'), +unescape('_basicAt_put_'), smalltalk.method({ -selector: unescape('size'), -fn: function () { +selector: unescape('basicAt%3Aput%3A'), +fn: function (aString, anObject) { var self = this; - smalltalk.send(self, "_error_", ["Object not indexable"]); + return self[aString] = anObject; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_copy'), +unescape('_basicDelete_'), smalltalk.method({ -selector: unescape('copy'), -fn: function () { +selector: unescape('basicDelete%3A'), +fn: function (aString) { var self = this; - return smalltalk.send(smalltalk.send(self, "_shallowCopy", []), "_postCopy", []); + delete self[aString]; + return aString; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_shallowCopy'), +unescape('_basicPerform_'), smalltalk.method({ -selector: unescape('shallowCopy'), -fn: function () { +selector: unescape('basicPerform%3A'), +fn: function (aSymbol) { var self = this; - var copy = self.klass._new(); - for (var i in self) { - if (/^@.+/.test(i)) { - copy[i] = self[i]; - } - } - return copy; + return smalltalk.send(self, "_basicPerform_withArguments_", [aSymbol, []]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_basicPerform_withArguments_'), smalltalk.method({ -selector: unescape('deepCopy'), -fn: function () { +selector: unescape('basicPerform%3AwithArguments%3A'), +fn: function (aSymbol, aCollection) { var self = this; - var copy = self.klass._new(); - for (var i in self) { - if (/^@.+/.test(i)) { - copy[i] = self[i]._deepCopy(); - } - } - return copy; + return self[aSymbol].apply(self, aCollection); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_postCopy'), +unescape('_class'), smalltalk.method({ -selector: unescape('postCopy'), +selector: unescape('class'), fn: function () { var self = this; + return self.klass; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('__minus_gt'), +unescape('_copy'), smalltalk.method({ -selector: unescape('-%3E'), -fn: function (anObject) { +selector: unescape('copy'), +fn: function () { var self = this; - return smalltalk.send(smalltalk.Association || Association, "_key_value_", [self, anObject]); + return smalltalk.send(smalltalk.send(self, "_shallowCopy", []), "_postCopy", []); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_asString'), +unescape('_deepCopy'), smalltalk.method({ -selector: unescape('asString'), +selector: unescape('deepCopy'), fn: function () { var self = this; - return smalltalk.send(self, "_printString", []); + var copy = self.klass._new(); + for (var i in self) { + if (/^@.+/.test(i)) { + copy[i] = self[i]._deepCopy(); + } + } + return copy; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_asJavascript'), +unescape('_deprecatedAPI'), smalltalk.method({ -selector: unescape('asJavascript'), +selector: unescape('deprecatedAPI'), fn: function () { var self = this; - return smalltalk.send(self, "_asString", []); + smalltalk.send(typeof console == "undefined" ? nil : console, "_warn_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.getThisContext(), "_home", []), "_asString", []), "__comma", [unescape("%20is%20deprecated%21%20%28in%20")]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.getThisContext(), "_home", []), "_home", []), "_asString", [])]), "__comma", [unescape("%29")])]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_perform_'), +unescape('_doesNotUnderstand_'), smalltalk.method({ -selector: unescape('perform%3A'), -fn: function (aSymbol) { +selector: unescape('doesNotUnderstand%3A'), +fn: function (aMessage) { var self = this; - return smalltalk.send(self, "_perform_withArguments_", [aSymbol, []]); + (function ($rec) {smalltalk.send($rec, "_receiver_", [self]);smalltalk.send($rec, "_message_", [aMessage]);return smalltalk.send($rec, "_signal", []);}(smalltalk.send(smalltalk.MessageNotUnderstood || MessageNotUnderstood, "_new", []))); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_perform_withArguments_'), +unescape('_error_'), smalltalk.method({ -selector: unescape('perform%3AwithArguments%3A'), -fn: function (aSymbol, aCollection) { +selector: unescape('error%3A'), +fn: function (aString) { var self = this; - return smalltalk.send(self, "_basicPerform_withArguments_", [smalltalk.send(aSymbol, "_asSelector", []), aCollection]); + smalltalk.send(smalltalk.Error || Error, "_signal_", [aString]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_instVarAt_'), +unescape('_halt'), smalltalk.method({ -selector: unescape('instVarAt%3A'), -fn: function (aSymbol) { +selector: unescape('halt'), +fn: function () { var self = this; - var varname = nil; - varname = smalltalk.send(aSymbol, "_asString", []); - return self["@" + varname]; + smalltalk.send(self, "_error_", ["Halt encountered"]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_instVarAt_put_'), +unescape('_identityHash'), smalltalk.method({ -selector: unescape('instVarAt%3Aput%3A'), -fn: function (aSymbol, anObject) { +selector: unescape('identityHash'), +fn: function () { var self = this; - var varname = nil; - varname = smalltalk.send(aSymbol, "_asString", []); - self["@" + varname] = anObject; + return self.identityHash || (self.identityHash = smalltalk.nextId()); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_basicAt_'), +unescape('_ifNil_'), smalltalk.method({ -selector: unescape('basicAt%3A'), -fn: function (aString) { +selector: unescape('ifNil%3A'), +fn: function (aBlock) { var self = this; - return self[aString]; + return self; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_basicAt_put_'), +unescape('_ifNil_ifNotNil_'), smalltalk.method({ -selector: unescape('basicAt%3Aput%3A'), -fn: function (aString, anObject) { +selector: unescape('ifNil%3AifNotNil%3A'), +fn: function (aBlock, anotherBlock) { var self = this; - return self[aString] = anObject; + return smalltalk.send(anotherBlock, "_value", []); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_error_'), +unescape('_ifNotNil_'), smalltalk.method({ -selector: unescape('error%3A'), -fn: function (aString) { +selector: unescape('ifNotNil%3A'), +fn: function (aBlock) { var self = this; - smalltalk.send(smalltalk.Error || Error, "_signal_", [aString]); + return smalltalk.send(aBlock, "_value", []); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_subclassResponsibility'), +unescape('_ifNotNil_ifNil_'), smalltalk.method({ -selector: unescape('subclassResponsibility'), -fn: function () { +selector: unescape('ifNotNil%3AifNil%3A'), +fn: function (aBlock, anotherBlock) { var self = this; - smalltalk.send(self, "_error_", ["This method is a responsibility of a subclass"]); + return smalltalk.send(aBlock, "_value", []); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_shouldNotImplement'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('shouldNotImplement'), +selector: unescape('initialize'), fn: function () { var self = this; - smalltalk.send(self, "_error_", [smalltalk.send("This method should not be implemented in ", "__comma", [smalltalk.send(smalltalk.send(self, "_class", []), "_name", [])])]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_try_catch_'), +unescape('_instVarAt_'), smalltalk.method({ -selector: unescape('try%3Acatch%3A'), -fn: function (aBlock, anotherBlock) { +selector: unescape('instVarAt%3A'), +fn: function (aSymbol) { var self = this; - try { - result = aBlock(); - } catch (e) { - result = anotherBlock(e); - } - return result; + var varname = nil; + varname = smalltalk.send(aSymbol, "_asString", []); + return self["@" + varname]; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_printString'), +unescape('_instVarAt_put_'), smalltalk.method({ -selector: unescape('printString'), -fn: function () { +selector: unescape('instVarAt%3Aput%3A'), +fn: function (aSymbol, anObject) { var self = this; - return smalltalk.send("a ", "__comma", [smalltalk.send(smalltalk.send(self, "_class", []), "_name", [])]); + var varname = nil; + varname = smalltalk.send(aSymbol, "_asString", []); + self["@" + varname] = anObject; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_printNl'), +unescape('_isClass'), smalltalk.method({ -selector: unescape('printNl'), +selector: unescape('isClass'), fn: function () { var self = this; - console.log(self); + return false; return self; } }), @@ -344,58 +372,22 @@ fn: function (aClass) { smalltalk.Object); smalltalk.addMethod( -unescape('_ifNil_'), +unescape('_isMetaclass'), smalltalk.method({ -selector: unescape('ifNil%3A'), -fn: function (aBlock) { +selector: unescape('isMetaclass'), +fn: function () { var self = this; - return self; + return false; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_ifNil_ifNotNil_'), +unescape('_isNil'), smalltalk.method({ -selector: unescape('ifNil%3AifNotNil%3A'), -fn: function (aBlock, anotherBlock) { - var self = this; - return smalltalk.send(anotherBlock, "_value", []); - return self; -} -}), -smalltalk.Object); - -smalltalk.addMethod( -unescape('_ifNotNil_'), -smalltalk.method({ -selector: unescape('ifNotNil%3A'), -fn: function (aBlock) { - var self = this; - return smalltalk.send(aBlock, "_value", []); - return self; -} -}), -smalltalk.Object); - -smalltalk.addMethod( -unescape('_ifNotNil_ifNil_'), -smalltalk.method({ -selector: unescape('ifNotNil%3AifNil%3A'), -fn: function (aBlock, anotherBlock) { - var self = this; - return smalltalk.send(aBlock, "_value", []); - return self; -} -}), -smalltalk.Object); - -smalltalk.addMethod( -unescape('_isNil'), -smalltalk.method({ -selector: unescape('isNil'), -fn: function () { +selector: unescape('isNil'), +fn: function () { var self = this; return false; return self; @@ -404,21 +396,21 @@ fn: function () { smalltalk.Object); smalltalk.addMethod( -unescape('_notNil'), +unescape('_isNumber'), smalltalk.method({ -selector: unescape('notNil'), +selector: unescape('isNumber'), fn: function () { var self = this; - return smalltalk.send(smalltalk.send(self, "_isNil", []), "_not", []); + return false; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_isClass'), +unescape('_isParseFailure'), smalltalk.method({ -selector: unescape('isClass'), +selector: unescape('isParseFailure'), fn: function () { var self = this; return false; @@ -428,9 +420,9 @@ fn: function () { smalltalk.Object); smalltalk.addMethod( -unescape('_isMetaclass'), +unescape('_isString'), smalltalk.method({ -selector: unescape('isMetaclass'), +selector: unescape('isString'), fn: function () { var self = this; return false; @@ -440,9 +432,9 @@ fn: function () { smalltalk.Object); smalltalk.addMethod( -unescape('_isNumber'), +unescape('_isSymbol'), smalltalk.method({ -selector: unescape('isNumber'), +selector: unescape('isSymbol'), fn: function () { var self = this; return false; @@ -452,208 +444,216 @@ fn: function () { smalltalk.Object); smalltalk.addMethod( -unescape('_isString'), +unescape('_log_block_'), smalltalk.method({ -selector: unescape('isString'), -fn: function () { +selector: unescape('log%3Ablock%3A'), +fn: function (aString, aBlock) { var self = this; - return false; + var result = nil; + smalltalk.send(typeof console == "undefined" ? nil : console, "_log_", [smalltalk.send(smalltalk.send(aString, "__comma", [" time: "]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [function () {return result = smalltalk.send(aBlock, "_value", []);}]), "_printString", [])])]); + return result; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_isParseFailure'), +unescape('_notNil'), smalltalk.method({ -selector: unescape('isParseFailure'), +selector: unescape('notNil'), fn: function () { var self = this; - return false; + return smalltalk.send(smalltalk.send(self, "_isNil", []), "_not", []); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_basicPerform_'), +unescape('_perform_'), smalltalk.method({ -selector: unescape('basicPerform%3A'), +selector: unescape('perform%3A'), fn: function (aSymbol) { var self = this; - return smalltalk.send(self, "_basicPerform_withArguments_", [aSymbol, []]); + return smalltalk.send(self, "_perform_withArguments_", [aSymbol, []]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_basicPerform_withArguments_'), +unescape('_perform_withArguments_'), smalltalk.method({ -selector: unescape('basicPerform%3AwithArguments%3A'), +selector: unescape('perform%3AwithArguments%3A'), fn: function (aSymbol, aCollection) { var self = this; - return self[aSymbol].apply(self, aCollection); + return smalltalk.send(self, "_basicPerform_withArguments_", [smalltalk.send(aSymbol, "_asSelector", []), aCollection]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_basicDelete_'), +unescape('_postCopy'), smalltalk.method({ -selector: unescape('basicDelete%3A'), -fn: function (aString) { +selector: unescape('postCopy'), +fn: function () { var self = this; - delete self[aString]; - return aString; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_doesNotUnderstand_'), +unescape('_printNl'), smalltalk.method({ -selector: unescape('doesNotUnderstand%3A'), -fn: function (aMessage) { +selector: unescape('printNl'), +fn: function () { var self = this; - (function ($rec) {smalltalk.send($rec, "_receiver_", [self]);smalltalk.send($rec, "_message_", [aMessage]);return smalltalk.send($rec, "_signal", []);}(smalltalk.send(smalltalk.MessageNotUnderstood || MessageNotUnderstood, "_new", []))); + console.log(self); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_printString'), smalltalk.method({ -selector: unescape('asJSON'), -fn: function (){ -var self=this; -var variables=nil; -(variables=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", [])); -smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_allInstanceVariableNames", []), "_do_", [(function(each){return smalltalk.send(variables, "_at_put_", [each, smalltalk.send(smalltalk.send(self, "_instVarAt_", [each]), "_asJSON", [])]);})]); -return variables; -return self;} +selector: unescape('printString'), +fn: function () { + var self = this; + return smalltalk.send("a ", "__comma", [smalltalk.send(smalltalk.send(self, "_class", []), "_name", [])]); + return self; +} }), smalltalk.Object); smalltalk.addMethod( -unescape('_halt'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('halt'), +selector: unescape('shallowCopy'), fn: function () { var self = this; - smalltalk.send(self, "_error_", ["Halt encountered"]); + var copy = self.klass._new(); + for (var i in self) { + if (/^@.+/.test(i)) { + copy[i] = self[i]; + } + } + return copy; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_log_block_'), +unescape('_shouldNotImplement'), smalltalk.method({ -selector: unescape('log%3Ablock%3A'), -fn: function (aString, aBlock) { +selector: unescape('shouldNotImplement'), +fn: function () { var self = this; - var result = nil; - smalltalk.send(typeof console == "undefined" ? nil : console, "_log_", [smalltalk.send(smalltalk.send(aString, "__comma", [" time: "]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [function () {return result = smalltalk.send(aBlock, "_value", []);}]), "_printString", [])])]); - return result; + smalltalk.send(self, "_error_", [smalltalk.send("This method should not be implemented in ", "__comma", [smalltalk.send(smalltalk.send(self, "_class", []), "_name", [])])]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('__eq_eq'), +unescape('_size'), smalltalk.method({ -selector: unescape('%3D%3D'), -fn: function (anObject) { +selector: unescape('size'), +fn: function () { var self = this; - return smalltalk.send(smalltalk.send(self, "_identityHash", []), "__eq", [smalltalk.send(anObject, "_identityHash", [])]); + smalltalk.send(self, "_error_", ["Object not indexable"]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_%7E%7E'), +unescape('_storeOn_'), smalltalk.method({ -selector: unescape('%7E%7E'), -fn: function (anObject) { +selector: unescape('storeOn%3A'), +fn: function (aStream) { var self = this; - return smalltalk.send(smalltalk.send(self, "__eq_eq", [anObject]), "__eq", [false]); + smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(self, "_printString", [])]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_deprecatedAPI'), +unescape('_storeString'), smalltalk.method({ -selector: unescape('deprecatedAPI'), +selector: unescape('storeString'), fn: function () { var self = this; - smalltalk.send(typeof console == "undefined" ? nil : console, "_warn_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.getThisContext(), "_home", []), "_asString", []), "__comma", [unescape("%20is%20deprecated%21%20%28in%20")]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.getThisContext(), "_home", []), "_home", []), "_asString", [])]), "__comma", [unescape("%29")])]); + return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (s) {return smalltalk.send(self, "_storeOn_", [s]);}]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_storeString'), +unescape('_subclassResponsibility'), smalltalk.method({ -selector: unescape('storeString'), +selector: unescape('subclassResponsibility'), fn: function () { var self = this; - return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (s) {return smalltalk.send(self, "_storeOn_", [s]);}]); + smalltalk.send(self, "_error_", ["This method is a responsibility of a subclass"]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_storeOn_'), +unescape('_try_catch_'), smalltalk.method({ -selector: unescape('storeOn%3A'), -fn: function (aStream) { +selector: unescape('try%3Acatch%3A'), +fn: function (aBlock, anotherBlock) { var self = this; - smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(self, "_printString", [])]); + try { + result = aBlock(); + } catch (e) { + result = anotherBlock(e); + } + return result; return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_asJSONString'), +unescape('_yourself'), smalltalk.method({ -selector: unescape('asJSONString'), -fn: function (){ -var self=this; -return smalltalk.send((smalltalk.JSON || JSON), "_stringify_", [smalltalk.send(self, "_asJSON", [])]); -return self;} +selector: unescape('yourself'), +fn: function () { + var self = this; + return self; + return self; +} }), smalltalk.Object); smalltalk.addMethod( -unescape('_identityHash'), +unescape('_%7E_eq'), smalltalk.method({ -selector: unescape('identityHash'), -fn: function () { +selector: unescape('%7E%3D'), +fn: function (anObject) { var self = this; - return self.identityHash || (self.identityHash = smalltalk.nextId()); + return smalltalk.send(smalltalk.send(self, "__eq", [anObject]), "__eq", [false]); return self; } }), smalltalk.Object); smalltalk.addMethod( -unescape('_isSymbol'), +unescape('_%7E%7E'), smalltalk.method({ -selector: unescape('isSymbol'), -fn: function () { +selector: unescape('%7E%7E'), +fn: function (anObject) { var self = this; - return false; + return smalltalk.send(smalltalk.send(self, "__eq_eq", [anObject]), "__eq", [false]); return self; } }), @@ -672,853 +672,802 @@ fn: function () { smalltalk.Object.klass); -smalltalk.addClass('Smalltalk', smalltalk.Object, [], 'Kernel-Objects'); +smalltalk.addClass('Boolean', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_classes'), +unescape('_%26'), smalltalk.method({ -selector: unescape('classes'), -fn: function () { +selector: unescape('%26'), +fn: function (aBoolean) { var self = this; - return self.classes(); + if (self == true) { + return aBoolean; + } else { + return false; + } return self; } }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_at_'), +unescape('__eq'), smalltalk.method({ -selector: unescape('at%3A'), -fn: function (aString) { +selector: unescape('%3D'), +fn: function (aBoolean) { var self = this; - return self[aString]; - return self; + try { + ($receiver = smalltalk.send(smalltalk.send(aBoolean, "_class", []), "__eq", [smalltalk.send(self, "_class", [])])).klass === smalltalk.Boolean ? !$receiver ? function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}]); + return Boolean(self == true) == aBoolean; + return self; + } catch (e) { + if (e.name === "stReturn" && e.selector === "__eq") { + return e.fn(); + } + throw e; + } } }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_removeClass_'), +unescape('_and_'), smalltalk.method({ -selector: unescape('removeClass%3A'), -fn: function (aClass) { +selector: unescape('and%3A'), +fn: function (aBlock) { var self = this; - ($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_asString", []), "__comma", [unescape("%20is%20a%20Metaclass%20and%20cannot%20be%20removed%21")])]);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_asString", []), "__comma", [unescape("%20is%20a%20Metaclass%20and%20cannot%20be%20removed%21")])]);}]); - smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [function (each) {return smalltalk.send(aClass, "_removeCompiledMethod_", [each]);}]); - smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [function (each) {return smalltalk.send(smalltalk.send(aClass, "_class", []), "_removeCompiledMethod_", [each]);}]); - smalltalk.send(self, "_basicDelete_", [smalltalk.send(aClass, "_name", [])]); + return smalltalk.send(smalltalk.send(self, "__eq", [true]), "_ifTrue_ifFalse_", [aBlock, function () {return false;}]); return self; } }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_basicParse_'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('basicParse%3A'), -fn: function (aString) { - var self = this; - return smalltalk.parser.parse(aString); - return self; -} +selector: unescape('asJSON'), +fn: function (){ +var self=this; +return self; +return self;} }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_parse_'), +unescape('_deepCopy'), smalltalk.method({ -selector: unescape('parse%3A'), -fn: function (aString) { +selector: unescape('deepCopy'), +fn: function () { var self = this; - var result = nil; - smalltalk.send(self, "_try_catch_", [function () {return result = smalltalk.send(self, "_basicParse_", [aString]);}, function (ex) {return smalltalk.send(smalltalk.send(self, "_parseError_parsing_", [ex, aString]), "_signal", []);}]); - return result; + return self; return self; } }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_parseError_parsing_'), +unescape('_ifFalse_'), smalltalk.method({ -selector: unescape('parseError%3Aparsing%3A'), -fn: function (anException, aString) { +selector: unescape('ifFalse%3A'), +fn: function (aBlock) { var self = this; - var row = nil; - var col = nil; - var message = nil; - var lines = nil; - var badLine = nil; - var code = nil; - row = anException.line; - col = anException.column; - message = anException.message; - lines = smalltalk.send(aString, "_lines", []); - badLine = smalltalk.send(lines, "_at_", [row]); - badLine = smalltalk.send(smalltalk.send(smalltalk.send(badLine, "_copyFrom_to_", [1, ($receiver = col).klass === smalltalk.Number ? $receiver - 1 : smalltalk.send($receiver, "__minus", [1])]), "__comma", [unescape("%20%3D%3D%3D%3E")]), "__comma", [smalltalk.send(badLine, "_copyFrom_to_", [col, smalltalk.send(badLine, "_size", [])])]); - smalltalk.send(lines, "_at_put_", [row, badLine]); - code = smalltalk.send(smalltalk.String || String, "_streamContents_", [function (s) {return smalltalk.send(lines, "_withIndexDo_", [function (l, i) {return smalltalk.send(s, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(i, "_asString", []), "__comma", [": "]), "__comma", [l]), "__comma", [smalltalk.send(smalltalk.String || String, "_lf", [])])]);}]);}]); - return smalltalk.send(smalltalk.send(smalltalk.Error || Error, "_new", []), "_messageText_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("Parse error on line ", "__comma", [row]), "__comma", [" column "]), "__comma", [col]), "__comma", [" : "]), "__comma", [message]), "__comma", [unescape("%20Below%20is%20code%20with%20line%20numbers%20and%20%3D%3D%3D%3E%20marker%20inserted%3A")]), "__comma", [smalltalk.send(smalltalk.String || String, "_lf", [])]), "__comma", [code])]); + return smalltalk.send(self, "_ifTrue_ifFalse_", [function () {return nil;}, aBlock]); return self; } }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_packages'), +unescape('_ifFalse_ifTrue_'), smalltalk.method({ -selector: unescape('packages'), -fn: function () { +selector: unescape('ifFalse%3AifTrue%3A'), +fn: function (aBlock, anotherBlock) { var self = this; - return self.packages.all(); + return smalltalk.send(self, "_ifTrue_ifFalse_", [anotherBlock, aBlock]); return self; } }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_packageAt_'), +unescape('_ifTrue_'), smalltalk.method({ -selector: unescape('packageAt%3A'), -fn: function (packageName) { +selector: unescape('ifTrue%3A'), +fn: function (aBlock) { var self = this; - return self.packages[packageName]; + return smalltalk.send(self, "_ifTrue_ifFalse_", [aBlock, function () {return nil;}]); return self; } }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_packageAt_ifAbsent_'), +unescape('_ifTrue_ifFalse_'), smalltalk.method({ -selector: unescape('packageAt%3AifAbsent%3A'), -fn: function (packageName, aBlock) { +selector: unescape('ifTrue%3AifFalse%3A'), +fn: function (aBlock, anotherBlock) { var self = this; - return smalltalk.send(smalltalk.send(self, "_packageAt_", [packageName]), "_ifNil_", [aBlock]); + if (self == true) { + return aBlock(); + } else { + return anotherBlock(); + } return self; } }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_createPackage_'), +unescape('_not'), smalltalk.method({ -selector: unescape('createPackage%3A'), -fn: function (packageName) { +selector: unescape('not'), +fn: function () { var self = this; - return smalltalk.addPackage(packageName, nil); + return smalltalk.send(self, "__eq", [false]); return self; } }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_deletePackage_'), +unescape('_or_'), smalltalk.method({ -selector: unescape('deletePackage%3A'), -fn: function (packageName) { +selector: unescape('or%3A'), +fn: function (aBlock) { var self = this; - delete smalltalk.packages[packageName]; + return smalltalk.send(smalltalk.send(self, "__eq", [true]), "_ifTrue_ifFalse_", [function () {return true;}, aBlock]); return self; } }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_removePackage_'), +unescape('_printString'), smalltalk.method({ -selector: unescape('removePackage%3A'), -fn: function (packageName) { +selector: unescape('printString'), +fn: function () { var self = this; - var pkg = nil; - pkg = smalltalk.send(self, "_packageAt_ifAbsent_", [packageName, function () {return smalltalk.send(self, "_error_", [smalltalk.send("Missing package: ", "__comma", [packageName])]);}]); - smalltalk.send(smalltalk.send(pkg, "_classes", []), "_do_", [function (each) {return smalltalk.send(self, "_removeClass_", [each]);}]); - smalltalk.send(self, "_deletePackage_", [packageName]); + return self.toString(); return self; } }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_renamePackage_to_'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('renamePackage%3Ato%3A'), -fn: function (packageName, newName) { +selector: unescape('shallowCopy'), +fn: function () { var self = this; - var pkg = nil; - pkg = smalltalk.send(self, "_packageAt_ifAbsent_", [packageName, function () {return smalltalk.send(self, "_error_", [smalltalk.send("Missing package: ", "__comma", [packageName])]);}]); - ($receiver = smalltalk.send(self, "_packageAt_", [newName])) != nil && - $receiver != undefined ? function () {return smalltalk.send(self, "_error_", [smalltalk.send("Already exists a package called: ", "__comma", [newName])]);}() : nil; - smalltalk.packages[newName] = smalltalk.packages[packageName]; - smalltalk.send(pkg, "_name_", [newName]); - smalltalk.send(self, "_deletePackage_", [packageName]); + return self; return self; } }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_reservedWords'), +unescape('_%7C'), smalltalk.method({ -selector: unescape('reservedWords'), -fn: function () { +selector: unescape('%7C'), +fn: function (aBoolean) { var self = this; - return self.reservedWords; + if (self == true) { + return true; + } else { + return aBoolean; + } return self; } }), -smalltalk.Smalltalk); +smalltalk.Boolean); + + +smalltalk.addClass('Date', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_createPackage_properties_'), +unescape('__plus'), smalltalk.method({ -selector: unescape('createPackage%3Aproperties%3A'), -fn: function (packageName, aDict) { +selector: unescape('+'), +fn: function (aDate) { var self = this; - var object = nil; - object = {}; - smalltalk.send(aDict, "_keysAndValuesDo_", [function (key, value) {return object[key] = value;}]); - return smalltalk.addPackage(packageName, object); + return self + aDate; return self; } }), -smalltalk.Smalltalk); +smalltalk.Date); smalltalk.addMethod( -unescape('_readJSObject_'), +unescape('__minus'), smalltalk.method({ -selector: unescape('readJSObject%3A'), -fn: function (anObject) { +selector: unescape('-'), +fn: function (aDate) { var self = this; - return self.readJSObject(anObject); + return self - aDate; return self; } }), -smalltalk.Smalltalk); +smalltalk.Date); smalltalk.addMethod( -unescape('_send_to_arguments_'), +unescape('__lt'), smalltalk.method({ -selector: unescape('send%3Ato%3Aarguments%3A'), -fn: function (aSelector, anObject, aCollection) { +selector: unescape('%3C'), +fn: function (aDate) { var self = this; - var selector = nil; - selector = smalltalk.send(smalltalk.send(aSelector, "_asString", []), "_asSelector", []); - self.send(anObject, selector, aCollection); + return self < aDate; return self; } }), -smalltalk.Smalltalk); - +smalltalk.Date); -smalltalk.Smalltalk.klass.iVarNames = ['current']; smalltalk.addMethod( -unescape('_current'), +unescape('__lt_eq'), smalltalk.method({ -selector: unescape('current'), -fn: function () { +selector: unescape('%3C%3D'), +fn: function (aDate) { var self = this; - return smalltalk; + return self <= aDate; return self; } }), -smalltalk.Smalltalk.klass); - +smalltalk.Date); -smalltalk.addClass('Package', smalltalk.Object, ['commitPathJs', 'commitPathSt'], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_name'), +unescape('__gt'), smalltalk.method({ -selector: unescape('name'), -fn: function () { +selector: unescape('%3E'), +fn: function (aDate) { var self = this; - return self.pkgName; + return self > aDate; return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_name_'), +unescape('__gt_eq'), smalltalk.method({ -selector: unescape('name%3A'), -fn: function (aString) { +selector: unescape('%3E%3D'), +fn: function (aDate) { var self = this; - self.pkgName = aString; + return self >= aDate; return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_classes'), +unescape('_asDateString'), smalltalk.method({ -selector: unescape('classes'), +selector: unescape('asDateString'), fn: function () { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_classes", []), "_select_", [function (c) {return smalltalk.send(smalltalk.send(c, "_package", []), "__eq_eq", [self]);}]); + return self.toDateString(); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_printString'), +unescape('_asLocaleString'), smalltalk.method({ -selector: unescape('printString'), +selector: unescape('asLocaleString'), fn: function () { var self = this; - return smalltalk.send(self, "_name", []); + return self.toLocaleString(); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_dependencies'), +unescape('_asMilliseconds'), smalltalk.method({ -selector: unescape('dependencies'), +selector: unescape('asMilliseconds'), fn: function () { var self = this; - return smalltalk.send(self, "_propertyAt_ifAbsent_", ["dependencies", function () {return [];}]); + return smalltalk.send(self, "_time", []); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_dependencies_'), +unescape('_asNumber'), smalltalk.method({ -selector: unescape('dependencies%3A'), -fn: function (anArray) { +selector: unescape('asNumber'), +fn: function () { var self = this; - return smalltalk.send(self, "_propertyAt_put_", ["dependencies", anArray]); + return smalltalk.send(self, "_asMilliseconds", []); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_properties'), +unescape('_asString'), smalltalk.method({ -selector: unescape('properties'), +selector: unescape('asString'), fn: function () { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_readJSObject_", [smalltalk.send(self, "_basicAt_", ["properties"])]); + return self.toString(); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_propertiesAsJSON'), +unescape('_asTimeString'), smalltalk.method({ -selector: unescape('propertiesAsJSON'), +selector: unescape('asTimeString'), fn: function () { var self = this; - return JSON.stringify(self.properties); + return self.toTimeString(); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_properties_'), +unescape('_day'), smalltalk.method({ -selector: unescape('properties%3A'), -fn: function (aDict) { +selector: unescape('day'), +fn: function () { var self = this; - var object = nil; - object = {}; - smalltalk.send(aDict, "_keysAndValuesDo_", [function (key, value) {return object[key] = value;}]); - return self.properties = object; + return smalltalk.send(self, "_dayOfWeek", []); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_jsProperties'), +unescape('_day_'), smalltalk.method({ -selector: unescape('jsProperties'), -fn: function () { +selector: unescape('day%3A'), +fn: function (aNumber) { var self = this; - return self.properties; + smalltalk.send(self, "_day_", [aNumber]); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_jsProperties_'), +unescape('_dayOfMonth'), smalltalk.method({ -selector: unescape('jsProperties%3A'), -fn: function (aJSObject) { +selector: unescape('dayOfMonth'), +fn: function () { var self = this; - return self.properties = aJSObject; + return self.getDate(); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_propertyAt_'), +unescape('_dayOfMonth_'), smalltalk.method({ -selector: unescape('propertyAt%3A'), -fn: function (key) { +selector: unescape('dayOfMonth%3A'), +fn: function (aNumber) { var self = this; - return self.properties[key]; + self.setDate(aNumber); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_propertyAt_put_'), +unescape('_dayOfWeek'), smalltalk.method({ -selector: unescape('propertyAt%3Aput%3A'), -fn: function (key, value) { +selector: unescape('dayOfWeek'), +fn: function () { var self = this; - return self.properties[key] = value; + return self.getDay() + 1; return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_propertyAt_ifAbsent_'), +unescape('_dayOfWeek_'), smalltalk.method({ -selector: unescape('propertyAt%3AifAbsent%3A'), -fn: function (key, block) { +selector: unescape('dayOfWeek%3A'), +fn: function (aNumber) { var self = this; - return ($receiver = smalltalk.send(self, "_propertyAt_", [key])) == nil || - $receiver == undefined ? function () {return smalltalk.send(block, "_value", []);}() : $receiver; + return self.setDay(aNumber - 1); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_commitPathJs'), +unescape('_hours'), smalltalk.method({ -selector: unescape('commitPathJs'), +selector: unescape('hours'), fn: function () { var self = this; - return ($receiver = self['@commitPathJs']) == nil || - $receiver == undefined ? function () {return smalltalk.send(smalltalk.send(self, "_class", []), "_defaultCommitPathJs", []);}() : $receiver; + return self.getHours(); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_commitPathJs_'), +unescape('_hours_'), smalltalk.method({ -selector: unescape('commitPathJs%3A'), -fn: function (aString) { +selector: unescape('hours%3A'), +fn: function (aNumber) { var self = this; - self['@commitPathJs'] = aString; + self.setHours(aNumber); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_commitPathSt'), +unescape('_milliseconds'), smalltalk.method({ -selector: unescape('commitPathSt'), +selector: unescape('milliseconds'), fn: function () { var self = this; - return ($receiver = self['@commitPathSt']) == nil || - $receiver == undefined ? function () {return smalltalk.send(smalltalk.send(self, "_class", []), "_defaultCommitPathSt", []);}() : $receiver; + return self.getMilliseconds(); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_commitPathSt_'), +unescape('_milliseconds_'), smalltalk.method({ -selector: unescape('commitPathSt%3A'), -fn: function (aString) { +selector: unescape('milliseconds%3A'), +fn: function (aNumber) { var self = this; - self['@commitPathSt'] = aString; + self.setMilliseconds(aNumber); return self; } }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_sortedClasses'), +unescape('_minutes'), smalltalk.method({ -selector: unescape('sortedClasses'), +selector: unescape('minutes'), fn: function () { var self = this; - return smalltalk.send(smalltalk.send(self, "_classes", []), "_inject_into_", [[], function (acc, each) {return ($receiver = smalltalk.send(acc, "_isEmpty", [])).klass === smalltalk.Boolean ? $receiver ? function () {return function ($rec) {smalltalk.send($rec, "_add_", [each]);return smalltalk.send($rec, "_yourself", []);}(acc);}() : function () {return ($receiver = smalltalk.send(acc, "_includes_", [smalltalk.send(each, "_superclass", [])])).klass === smalltalk.Boolean ? $receiver ? function () {return function ($rec) {smalltalk.send($rec, "_add_", [each]);return smalltalk.send($rec, "_yourself", []);}(acc);}() : function () {return smalltalk.send([each], "__comma", [acc]);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function ($rec) {smalltalk.send($rec, "_add_", [each]);return smalltalk.send($rec, "_yourself", []);}(acc);}, function () {return smalltalk.send([each], "__comma", [acc]);}]);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function ($rec) {smalltalk.send($rec, "_add_", [each]);return smalltalk.send($rec, "_yourself", []);}(acc);}, function () {return ($receiver = smalltalk.send(acc, "_includes_", [smalltalk.send(each, "_superclass", [])])).klass === smalltalk.Boolean ? $receiver ? function () {return function ($rec) {smalltalk.send($rec, "_add_", [each]);return smalltalk.send($rec, "_yourself", []);}(acc);}() : function () {return smalltalk.send([each], "__comma", [acc]);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function ($rec) {smalltalk.send($rec, "_add_", [each]);return smalltalk.send($rec, "_yourself", []);}(acc);}, function () {return smalltalk.send([each], "__comma", [acc]);}]);}]);}]); + return self.getMinutes(); return self; } }), -smalltalk.Package); - +smalltalk.Date); -smalltalk.Package.klass.iVarNames = ['defaultCommitPathJs','defaultCommitPathSt']; smalltalk.addMethod( -unescape('_named_'), +unescape('_minutes_'), smalltalk.method({ -selector: unescape('named%3A'), -fn: function (aPackageName) { +selector: unescape('minutes%3A'), +fn: function (aNumber) { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_packageAt_", [aPackageName]); + self.setMinutes(aNumber); return self; } }), -smalltalk.Package.klass); +smalltalk.Date); smalltalk.addMethod( -unescape('_named_ifAbsent_'), +unescape('_month'), smalltalk.method({ -selector: unescape('named%3AifAbsent%3A'), -fn: function (aPackageName, aBlock) { +selector: unescape('month'), +fn: function () { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_packageAt_ifAbsent_", [aPackageName, aBlock]); + return self.getMonth() + 1; return self; } }), -smalltalk.Package.klass); +smalltalk.Date); smalltalk.addMethod( -unescape('_defaultCommitPathJs'), +unescape('_month_'), smalltalk.method({ -selector: unescape('defaultCommitPathJs'), -fn: function () { +selector: unescape('month%3A'), +fn: function (aNumber) { var self = this; - return ($receiver = self['@defaultCommitPathJs']) == nil || - $receiver == undefined ? function () {return self['@defaultCommitPathJs'] = "js";}() : $receiver; + self.setMonth(aNumber - 1); return self; } }), -smalltalk.Package.klass); +smalltalk.Date); smalltalk.addMethod( -unescape('_defaultCommitPathJs_'), +unescape('_printString'), smalltalk.method({ -selector: unescape('defaultCommitPathJs%3A'), -fn: function (aString) { +selector: unescape('printString'), +fn: function () { var self = this; - self['@defaultCommitPathJs'] = aString; + return smalltalk.send(self, "_asString", []); return self; } }), -smalltalk.Package.klass); +smalltalk.Date); smalltalk.addMethod( -unescape('_defaultCommitPathSt'), +unescape('_seconds'), smalltalk.method({ -selector: unescape('defaultCommitPathSt'), +selector: unescape('seconds'), fn: function () { var self = this; - return ($receiver = self['@defaultCommitPathSt']) == nil || - $receiver == undefined ? function () {return self['@defaultCommitPathSt'] = "st";}() : $receiver; + return self.getSeconds(); return self; } }), -smalltalk.Package.klass); +smalltalk.Date); smalltalk.addMethod( -unescape('_defaultCommitPathSt_'), +unescape('_seconds_'), smalltalk.method({ -selector: unescape('defaultCommitPathSt%3A'), -fn: function (aString) { +selector: unescape('seconds%3A'), +fn: function (aNumber) { var self = this; - self['@defaultCommitPathSt'] = aString; + self.setSeconds(aNumber); return self; } }), -smalltalk.Package.klass); +smalltalk.Date); smalltalk.addMethod( -unescape('_resetCommitPaths'), +unescape('_time'), smalltalk.method({ -selector: unescape('resetCommitPaths'), +selector: unescape('time'), fn: function () { var self = this; - self['@defaultCommitPathJs'] = nil; - self['@defaultCommitPathSt'] = nil; + return self.getTime(); return self; } }), -smalltalk.Package.klass); +smalltalk.Date); smalltalk.addMethod( -unescape('_fetch_prefix_'), +unescape('_time_'), smalltalk.method({ -selector: unescape('fetch%3Aprefix%3A'), -fn: function (aPackageName, aPrefix) { +selector: unescape('time%3A'), +fn: function (aNumber) { var self = this; - smalltalk.send(typeof jQuery == "undefined" ? nil : jQuery, "_getScript_onSuccess_", [smalltalk.send(smalltalk.send(aPrefix, "__comma", [aPackageName]), "__comma", [".js"]), function () {return smalltalk.send(smalltalk.Package || Package, "_init_", [aPackageName]);}]); + self.setTime(aNumber); return self; } }), -smalltalk.Package.klass); +smalltalk.Date); smalltalk.addMethod( -unescape('_fetch_'), +unescape('_year'), smalltalk.method({ -selector: unescape('fetch%3A'), -fn: function (aPackageName) { +selector: unescape('year'), +fn: function () { var self = this; - smalltalk.send(self, "_fetch_prefix_", [aPackageName, smalltalk.send(smalltalk.send(self, "_defaultCommitPathJs", []), "__comma", [unescape("/")])]); + return self.getFullYear(); return self; } }), -smalltalk.Package.klass); +smalltalk.Date); smalltalk.addMethod( -unescape('_commitToLocalStorage_'), +unescape('_year_'), smalltalk.method({ -selector: unescape('commitToLocalStorage%3A'), -fn: function (aPackageName) { +selector: unescape('year%3A'), +fn: function (aNumber) { var self = this; - var key = nil; - var sourceCode = nil; - key = smalltalk.send("smalltalk.packages.", "__comma", [aPackageName]); - sourceCode = smalltalk.send(smalltalk.send(smalltalk.Exporter || Exporter, "_new", []), "_exportPackage_", [aPackageName]); - localStorage[key] = escape(sourceCode); + self.setFullYear(aNumber); return self; } }), -smalltalk.Package.klass); +smalltalk.Date); + smalltalk.addMethod( -unescape('_init_'), +unescape('_fromMilliseconds_'), smalltalk.method({ -selector: unescape('init%3A'), -fn: function (aPackageName) { +selector: unescape('fromMilliseconds%3A'), +fn: function (aNumber) { var self = this; - (function ($rec) {smalltalk.send($rec, "_do_", [function (each) {return smalltalk.init(each);}]);return smalltalk.send($rec, "_do_", [function (each) {return smalltalk.send(each, "_initialize", []);}]);}(smalltalk.send(smalltalk.send(typeof smalltalk == "undefined" ? nil : smalltalk, "_classes", []), "_select_", [function (each) {return each.pkg.pkgName == aPackageName;}]))); + return smalltalk.send(self, "_new_", [aNumber]); return self; } }), -smalltalk.Package.klass); - +smalltalk.Date.klass); -smalltalk.addClass('Number', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('__eq'), +unescape('_fromSeconds_'), smalltalk.method({ -selector: unescape('%3D'), +selector: unescape('fromSeconds%3A'), fn: function (aNumber) { var self = this; - try { - ($receiver = smalltalk.send(aNumber, "_isNumber", [])).klass === smalltalk.Boolean ? !$receiver ? function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}]); - return Number(self) == aNumber; - return self; - } catch (e) { - if (e.name === "stReturn" && e.selector === "__eq") { - return e.fn(); - } - throw e; - } + return smalltalk.send(self, "_fromMilliseconds_", [($receiver = aNumber).klass === smalltalk.Number ? $receiver * 1000 : smalltalk.send($receiver, "__star", [1000])]); + return self; } }), -smalltalk.Number); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('__gt'), +unescape('_fromString_'), smalltalk.method({ -selector: unescape('%3E'), -fn: function (aNumber) { +selector: unescape('fromString%3A'), +fn: function (aString) { var self = this; - return self > aNumber; + return smalltalk.send(self, "_new_", [aString]); return self; } }), -smalltalk.Number); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('__lt'), +unescape('_millisecondsToRun_'), smalltalk.method({ -selector: unescape('%3C'), -fn: function (aNumber) { +selector: unescape('millisecondsToRun%3A'), +fn: function (aBlock) { var self = this; - return self < aNumber; + var t = nil; + t = smalltalk.send(smalltalk.Date || Date, "_now", []); + smalltalk.send(aBlock, "_value", []); + return ($receiver = smalltalk.send(smalltalk.Date || Date, "_now", [])).klass === smalltalk.Number ? $receiver - t : smalltalk.send($receiver, "__minus", [t]); return self; } }), -smalltalk.Number); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('__gt_eq'), +unescape('_new_'), smalltalk.method({ -selector: unescape('%3E%3D'), -fn: function (aNumber) { +selector: unescape('new%3A'), +fn: function (anObject) { var self = this; - return self >= aNumber; + return new Date(anObject); return self; } }), -smalltalk.Number); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('__lt_eq'), +unescape('_now'), smalltalk.method({ -selector: unescape('%3C%3D'), -fn: function (aNumber) { +selector: unescape('now'), +fn: function () { var self = this; - return self <= aNumber; + return smalltalk.send(self, "_today", []); return self; } }), -smalltalk.Number); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('__plus'), +unescape('_today'), smalltalk.method({ -selector: unescape('+'), -fn: function (aNumber) { +selector: unescape('today'), +fn: function () { var self = this; - return self + aNumber; + return smalltalk.send(self, "_new", []); return self; } }), -smalltalk.Number); +smalltalk.Date.klass); + +smalltalk.addClass('Date', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('__minus'), +unescape('__plus'), smalltalk.method({ -selector: unescape('-'), -fn: function (aNumber) { +selector: unescape('+'), +fn: function (aDate) { var self = this; - return self - aNumber; + return self + aDate; return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('__star'), +unescape('__minus'), smalltalk.method({ -selector: unescape('*'), -fn: function (aNumber) { +selector: unescape('-'), +fn: function (aDate) { var self = this; - return self * aNumber; + return self - aDate; return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('__slash'), +unescape('__lt'), smalltalk.method({ -selector: unescape('/'), -fn: function (aNumber) { +selector: unescape('%3C'), +fn: function (aDate) { var self = this; - return self / aNumber; + return self < aDate; return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_max_'), +unescape('__lt_eq'), smalltalk.method({ -selector: unescape('max%3A'), -fn: function (aNumber) { +selector: unescape('%3C%3D'), +fn: function (aDate) { var self = this; - return Math.max(self, aNumber); + return self <= aDate; return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_min_'), +unescape('__gt'), smalltalk.method({ -selector: unescape('min%3A'), -fn: function (aNumber) { +selector: unescape('%3E'), +fn: function (aDate) { var self = this; - return Math.min(self, aNumber); + return self > aDate; return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_rounded'), +unescape('__gt_eq'), smalltalk.method({ -selector: unescape('rounded'), -fn: function () { +selector: unescape('%3E%3D'), +fn: function (aDate) { var self = this; - return Math.round(self); + return self >= aDate; return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_truncated'), +unescape('_asDateString'), smalltalk.method({ -selector: unescape('truncated'), +selector: unescape('asDateString'), fn: function () { var self = this; - var result = nil; - ($receiver = self >= 0).klass === smalltalk.Boolean ? $receiver ? function () {return result = Math.floor(self);}() : function () {return result = Math.floor(self * -1) * -1;}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return result = Math.floor(self);}, function () {return result = Math.floor(self * -1) * -1;}]); - return result; + return self.toDateString(); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_to_'), +unescape('_asLocaleString'), smalltalk.method({ -selector: unescape('to%3A'), -fn: function (aNumber) { +selector: unescape('asLocaleString'), +fn: function () { var self = this; - var array = nil; - var first = nil; - var last = nil; - var count = nil; - first = smalltalk.send(self, "_truncated", []); - last = ($receiver = smalltalk.send(aNumber, "_truncated", [])).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]); - count = 1; - array = smalltalk.send(smalltalk.Array || Array, "_new", []); - smalltalk.send(($receiver = last).klass === smalltalk.Number ? $receiver - first : smalltalk.send($receiver, "__minus", [first]), "_timesRepeat_", [function () {smalltalk.send(array, "_at_put_", [count, first]);count = ($receiver = count).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return first = ($receiver = first).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);}]); - return array; + return self.toLocaleString(); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_timesRepeat_'), +unescape('_asMilliseconds'), smalltalk.method({ -selector: unescape('timesRepeat%3A'), -fn: function (aBlock) { +selector: unescape('asMilliseconds'), +fn: function () { var self = this; - var integer = nil; - var count = nil; - integer = smalltalk.send(self, "_truncated", []); - count = 1; - (function () {while (!function () {return ($receiver = count).klass === smalltalk.Number ? $receiver > self : smalltalk.send($receiver, "__gt", [self]);}()) {(function () {smalltalk.send(aBlock, "_value", []);return count = ($receiver = count).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);}());}}()); + return smalltalk.send(self, "_time", []); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_to_do_'), +unescape('_asNumber'), smalltalk.method({ -selector: unescape('to%3Ado%3A'), -fn: function (stop, aBlock) { +selector: unescape('asNumber'), +fn: function () { var self = this; - var nextValue = nil; - nextValue = self; - (function () {while (function () {return ($receiver = nextValue).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [nextValue]);return nextValue = ($receiver = nextValue).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);}());}}()); + return smalltalk.send(self, "_asMilliseconds", []); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( unescape('_asString'), @@ -1526,456 +1475,459 @@ smalltalk.method({ selector: unescape('asString'), fn: function () { var self = this; - return smalltalk.send(self, "_printString", []); + return self.toString(); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_asJavascript'), +unescape('_asTimeString'), smalltalk.method({ -selector: unescape('asJavascript'), +selector: unescape('asTimeString'), fn: function () { var self = this; - return smalltalk.send(smalltalk.send(unescape("%28"), "__comma", [smalltalk.send(self, "_printString", [])]), "__comma", [unescape("%29")]); + return self.toTimeString(); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_printString'), +unescape('_day'), smalltalk.method({ -selector: unescape('printString'), +selector: unescape('day'), fn: function () { var self = this; - return String(self); + return smalltalk.send(self, "_dayOfWeek", []); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_isNumber'), +unescape('_day_'), smalltalk.method({ -selector: unescape('isNumber'), -fn: function () { +selector: unescape('day%3A'), +fn: function (aNumber) { var self = this; - return true; + smalltalk.send(self, "_day_", [aNumber]); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_atRandom'), +unescape('_dayOfMonth'), smalltalk.method({ -selector: unescape('atRandom'), +selector: unescape('dayOfMonth'), fn: function () { var self = this; - return ($receiver = smalltalk.send(($receiver = smalltalk.send(smalltalk.send(smalltalk.Random || Random, "_new", []), "_next", [])).klass === smalltalk.Number ? $receiver * self : smalltalk.send($receiver, "__star", [self]), "_truncated", [])).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]); + return self.getDate(); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('__at'), +unescape('_dayOfMonth_'), smalltalk.method({ -selector: unescape('@'), +selector: unescape('dayOfMonth%3A'), fn: function (aNumber) { var self = this; - return smalltalk.send(smalltalk.Point || Point, "_x_y_", [self, aNumber]); + self.setDate(aNumber); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_asPoint'), +unescape('_dayOfWeek'), smalltalk.method({ -selector: unescape('asPoint'), +selector: unescape('dayOfWeek'), fn: function () { var self = this; - return smalltalk.send(smalltalk.Point || Point, "_x_y_", [self, self]); + return self.getDay() + 1; return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_clearInterval'), +unescape('_dayOfWeek_'), smalltalk.method({ -selector: unescape('clearInterval'), -fn: function () { +selector: unescape('dayOfWeek%3A'), +fn: function (aNumber) { var self = this; - clearInterval(Number(self)); + return self.setDay(aNumber - 1); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_clearTimeout'), +unescape('_hours'), smalltalk.method({ -selector: unescape('clearTimeout'), +selector: unescape('hours'), fn: function () { var self = this; - clearTimeout(Number(self)); + return self.getHours(); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_even'), +unescape('_hours_'), smalltalk.method({ -selector: unescape('even'), -fn: function () { +selector: unescape('hours%3A'), +fn: function (aNumber) { var self = this; - return smalltalk.send(0, "__eq", [smalltalk.send(self, "_\\\\", [2])]); + self.setHours(aNumber); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_odd'), +unescape('_milliseconds'), smalltalk.method({ -selector: unescape('odd'), +selector: unescape('milliseconds'), fn: function () { var self = this; - return smalltalk.send(smalltalk.send(self, "_even", []), "_not", []); + return self.getMilliseconds(); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_negated'), +unescape('_milliseconds_'), smalltalk.method({ -selector: unescape('negated'), -fn: function () { +selector: unescape('milliseconds%3A'), +fn: function (aNumber) { var self = this; - return 0 - self; + self.setMilliseconds(aNumber); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_printShowingDecimalPlaces_'), +unescape('_minutes'), smalltalk.method({ -selector: unescape('printShowingDecimalPlaces%3A'), -fn: function (placesDesired) { +selector: unescape('minutes'), +fn: function () { var self = this; - return self.toFixed(placesDesired); + return self.getMinutes(); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_to_by_'), +unescape('_minutes_'), smalltalk.method({ -selector: unescape('to%3Aby%3A'), -fn: function (stop, step) { +selector: unescape('minutes%3A'), +fn: function (aNumber) { var self = this; - var array = nil; - var value = nil; - var pos = nil; - value = self; - array = smalltalk.send(smalltalk.Array || Array, "_new", []); - pos = 1; - ($receiver = smalltalk.send(step, "__eq", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}]); - ($receiver = ($receiver = step).klass === smalltalk.Number ? $receiver < 0 : smalltalk.send($receiver, "__lt", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}, function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}]); - return array; + self.setMinutes(aNumber); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_to_by_do_'), +unescape('_month'), smalltalk.method({ -selector: unescape('to%3Aby%3Ado%3A'), -fn: function (stop, step, aBlock) { +selector: unescape('month'), +fn: function () { var self = this; - var value = nil; - value = self; - ($receiver = smalltalk.send(step, "__eq", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}]); - ($receiver = ($receiver = step).klass === smalltalk.Number ? $receiver < 0 : smalltalk.send($receiver, "__lt", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}, function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}]); + return self.getMonth() + 1; return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_month_'), smalltalk.method({ -selector: unescape('deepCopy'), -fn: function () { +selector: unescape('month%3A'), +fn: function (aNumber) { var self = this; - return smalltalk.send(self, "_copy", []); + self.setMonth(aNumber - 1); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_copy'), +unescape('_printString'), smalltalk.method({ -selector: unescape('copy'), +selector: unescape('printString'), fn: function () { var self = this; - return self; + return smalltalk.send(self, "_asString", []); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_%5C%5C'), +unescape('_seconds'), smalltalk.method({ -selector: unescape('%5C%5C'), -fn: function (aNumber) { +selector: unescape('seconds'), +fn: function () { var self = this; - return self % aNumber; + return self.getSeconds(); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_sqrt'), +unescape('_seconds_'), smalltalk.method({ -selector: unescape('sqrt'), -fn: function () { +selector: unescape('seconds%3A'), +fn: function (aNumber) { var self = this; - return Math.sqrt(self); + self.setSeconds(aNumber); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_squared'), +unescape('_time'), smalltalk.method({ -selector: unescape('squared'), +selector: unescape('time'), fn: function () { var self = this; - return self * self; + return self.getTime(); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_identityHash'), +unescape('_time_'), smalltalk.method({ -selector: unescape('identityHash'), -fn: function () { +selector: unescape('time%3A'), +fn: function (aNumber) { var self = this; - return smalltalk.send(smalltalk.send(self, "_asString", []), "__comma", ["n"]); + self.setTime(aNumber); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_negative'), +unescape('_year'), smalltalk.method({ -selector: unescape('negative'), +selector: unescape('year'), fn: function () { var self = this; - return self < 0; + return self.getFullYear(); return self; } }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_positive'), +unescape('_year_'), smalltalk.method({ -selector: unescape('positive'), -fn: function () { +selector: unescape('year%3A'), +fn: function (aNumber) { var self = this; - return self >= 0; + self.setFullYear(aNumber); return self; } }), -smalltalk.Number); +smalltalk.Date); + smalltalk.addMethod( -unescape('_isZero'), +unescape('_fromMilliseconds_'), smalltalk.method({ -selector: unescape('isZero'), -fn: function () { +selector: unescape('fromMilliseconds%3A'), +fn: function (aNumber) { var self = this; - return smalltalk.send(self, "__eq", [0]); + return smalltalk.send(self, "_new_", [aNumber]); return self; } }), -smalltalk.Number); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_fromSeconds_'), smalltalk.method({ -selector: unescape('asJSON'), -fn: function (){ -var self=this; -return self; -return self;} +selector: unescape('fromSeconds%3A'), +fn: function (aNumber) { + var self = this; + return smalltalk.send(self, "_fromMilliseconds_", [($receiver = aNumber).klass === smalltalk.Number ? $receiver * 1000 : smalltalk.send($receiver, "__star", [1000])]); + return self; +} }), -smalltalk.Number); - +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_pi'), +unescape('_fromString_'), smalltalk.method({ -selector: unescape('pi'), -fn: function () { +selector: unescape('fromString%3A'), +fn: function (aString) { var self = this; - return Math.PI; + return smalltalk.send(self, "_new_", [aString]); return self; } }), -smalltalk.Number.klass); - +smalltalk.Date.klass); -smalltalk.addClass('Boolean', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('__eq'), +unescape('_millisecondsToRun_'), smalltalk.method({ -selector: unescape('%3D'), -fn: function (aBoolean) { +selector: unescape('millisecondsToRun%3A'), +fn: function (aBlock) { var self = this; - try { - ($receiver = smalltalk.send(smalltalk.send(aBoolean, "_class", []), "__eq", [smalltalk.send(self, "_class", [])])).klass === smalltalk.Boolean ? !$receiver ? function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}]); - return Boolean(self == true) == aBoolean; - return self; - } catch (e) { - if (e.name === "stReturn" && e.selector === "__eq") { - return e.fn(); - } - throw e; - } + var t = nil; + t = smalltalk.send(smalltalk.Date || Date, "_now", []); + smalltalk.send(aBlock, "_value", []); + return ($receiver = smalltalk.send(smalltalk.Date || Date, "_now", [])).klass === smalltalk.Number ? $receiver - t : smalltalk.send($receiver, "__minus", [t]); + return self; } }), -smalltalk.Boolean); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_shallowCopy'), +unescape('_new_'), smalltalk.method({ -selector: unescape('shallowCopy'), -fn: function () { +selector: unescape('new%3A'), +fn: function (anObject) { var self = this; - return self; + return new Date(anObject); return self; } }), -smalltalk.Boolean); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_now'), smalltalk.method({ -selector: unescape('deepCopy'), +selector: unescape('now'), fn: function () { var self = this; - return self; + return smalltalk.send(self, "_today", []); return self; } }), -smalltalk.Boolean); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_ifTrue_'), +unescape('_today'), smalltalk.method({ -selector: unescape('ifTrue%3A'), -fn: function (aBlock) { +selector: unescape('today'), +fn: function () { var self = this; - return smalltalk.send(self, "_ifTrue_ifFalse_", [aBlock, function () {return nil;}]); + return smalltalk.send(self, "_new", []); return self; } }), -smalltalk.Boolean); +smalltalk.Date.klass); + +smalltalk.addClass('JSObjectProxy', smalltalk.Object, ['jsObject'], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_ifFalse_'), +unescape('_at_'), smalltalk.method({ -selector: unescape('ifFalse%3A'), -fn: function (aBlock) { +selector: unescape('at%3A'), +fn: function (aSymbol) { var self = this; - return smalltalk.send(self, "_ifTrue_ifFalse_", [function () {return nil;}, aBlock]); + var attr = nil; + attr = smalltalk.send(aSymbol, "_asString", []); + return self['@jsObject'][attr]; return self; } }), -smalltalk.Boolean); +smalltalk.JSObjectProxy); smalltalk.addMethod( -unescape('_ifFalse_ifTrue_'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('ifFalse%3AifTrue%3A'), -fn: function (aBlock, anotherBlock) { +selector: unescape('at%3Aput%3A'), +fn: function (aSymbol, anObject) { var self = this; - return smalltalk.send(self, "_ifTrue_ifFalse_", [anotherBlock, aBlock]); + var attr = nil; + attr = smalltalk.send(aSymbol, "_asString", []); + self['@jsObject'][attr] = anObject; return self; } }), -smalltalk.Boolean); +smalltalk.JSObjectProxy); smalltalk.addMethod( -unescape('_ifTrue_ifFalse_'), +unescape('_doesNotUnderstand_'), smalltalk.method({ -selector: unescape('ifTrue%3AifFalse%3A'), -fn: function (aBlock, anotherBlock) { +selector: unescape('doesNotUnderstand%3A'), +fn: function (aMessage) { var self = this; - if (self == true) { - return aBlock(); - } else { - return anotherBlock(); + var obj = nil; + var selector = nil; + var jsSelector = nil; + var arguments = nil; + obj = smalltalk.send(self, "_jsObject", []); + selector = smalltalk.send(aMessage, "_selector", []); + jsSelector = smalltalk.send(selector, "_asJavaScriptSelector", []); + arguments = smalltalk.send(aMessage, "_arguments", []); + if (obj[jsSelector] != undefined) { + return smalltalk.send(obj, jsSelector, arguments); } + smalltalk.send(self, "_doesNotUnderstand_", [aMessage], smalltalk.Object); return self; } }), -smalltalk.Boolean); +smalltalk.JSObjectProxy); smalltalk.addMethod( -unescape('_and_'), +unescape('_inspectOn_'), smalltalk.method({ -selector: unescape('and%3A'), -fn: function (aBlock) { +selector: unescape('inspectOn%3A'), +fn: function (anInspector) { var self = this; - return smalltalk.send(smalltalk.send(self, "__eq", [true]), "_ifTrue_ifFalse_", [aBlock, function () {return false;}]); + var variables = nil; + variables = smalltalk.send(smalltalk.Dictionary || Dictionary, "_new", []); + smalltalk.send(variables, "_at_put_", [unescape("%23self"), smalltalk.send(self, "_jsObject", [])]); + smalltalk.send(anInspector, "_setLabel_", [smalltalk.send(self, "_printString", [])]); + for (var i in self['@jsObject']) { + variables._at_put_(i, self['@jsObject'][i]); + } + smalltalk.send(anInspector, "_setVariables_", [variables]); return self; } }), -smalltalk.Boolean); +smalltalk.JSObjectProxy); smalltalk.addMethod( -unescape('_or_'), +unescape('_jsObject'), smalltalk.method({ -selector: unescape('or%3A'), -fn: function (aBlock) { +selector: unescape('jsObject'), +fn: function () { var self = this; - return smalltalk.send(smalltalk.send(self, "__eq", [true]), "_ifTrue_ifFalse_", [function () {return true;}, aBlock]); + return self['@jsObject']; return self; } }), -smalltalk.Boolean); +smalltalk.JSObjectProxy); smalltalk.addMethod( -unescape('_not'), +unescape('_jsObject_'), smalltalk.method({ -selector: unescape('not'), -fn: function () { +selector: unescape('jsObject%3A'), +fn: function (aJSObject) { var self = this; - return smalltalk.send(self, "__eq", [false]); + self['@jsObject'] = aJSObject; return self; } }), -smalltalk.Boolean); +smalltalk.JSObjectProxy); smalltalk.addMethod( unescape('_printString'), @@ -1983,1441 +1935,1499 @@ smalltalk.method({ selector: unescape('printString'), fn: function () { var self = this; - return self.toString(); + return smalltalk.send(smalltalk.send(self, "_jsObject", []), "_toString", []); return self; } }), -smalltalk.Boolean); +smalltalk.JSObjectProxy); + smalltalk.addMethod( -unescape('_%26'), +unescape('_on_'), smalltalk.method({ -selector: unescape('%26'), -fn: function (aBoolean) { +selector: unescape('on%3A'), +fn: function (aJSObject) { var self = this; - if (self == true) { - return aBoolean; - } else { - return false; - } + return function ($rec) {smalltalk.send($rec, "_jsObject_", [aJSObject]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", [])); return self; } }), -smalltalk.Boolean); +smalltalk.JSObjectProxy.klass); + +smalltalk.addClass('Number', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_%7C'), +unescape('__star'), smalltalk.method({ -selector: unescape('%7C'), -fn: function (aBoolean) { +selector: unescape('*'), +fn: function (aNumber) { var self = this; - if (self == true) { - return true; - } else { - return aBoolean; - } + return self * aNumber; return self; } }), -smalltalk.Boolean); - -smalltalk.addMethod( -unescape('_asJSON'), -smalltalk.method({ -selector: unescape('asJSON'), -fn: function (){ -var self=this; -return self; -return self;} -}), -smalltalk.Boolean); - - +smalltalk.Number); -smalltalk.addClass('Date', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_year'), +unescape('__plus'), smalltalk.method({ -selector: unescape('year'), -fn: function () { +selector: unescape('+'), +fn: function (aNumber) { var self = this; - return self.getFullYear(); + return self + aNumber; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_month'), +unescape('__minus'), smalltalk.method({ -selector: unescape('month'), -fn: function () { +selector: unescape('-'), +fn: function (aNumber) { var self = this; - return self.getMonth() + 1; + return self - aNumber; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_month_'), +unescape('__slash'), smalltalk.method({ -selector: unescape('month%3A'), +selector: unescape('/'), fn: function (aNumber) { var self = this; - self.setMonth(aNumber - 1); + return self / aNumber; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_day'), +unescape('__lt'), smalltalk.method({ -selector: unescape('day'), -fn: function () { +selector: unescape('%3C'), +fn: function (aNumber) { var self = this; - return smalltalk.send(self, "_dayOfWeek", []); + return self < aNumber; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_dayOfWeek'), +unescape('__lt_eq'), smalltalk.method({ -selector: unescape('dayOfWeek'), -fn: function () { +selector: unescape('%3C%3D'), +fn: function (aNumber) { var self = this; - return self.getDay() + 1; + return self <= aNumber; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_dayOfWeek_'), +unescape('__eq'), smalltalk.method({ -selector: unescape('dayOfWeek%3A'), +selector: unescape('%3D'), fn: function (aNumber) { var self = this; - return self.setDay(aNumber - 1); - return self; + try { + ($receiver = smalltalk.send(aNumber, "_isNumber", [])).klass === smalltalk.Boolean ? !$receiver ? function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}]); + return Number(self) == aNumber; + return self; + } catch (e) { + if (e.name === "stReturn" && e.selector === "__eq") { + return e.fn(); + } + throw e; + } } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_day_'), +unescape('__gt'), smalltalk.method({ -selector: unescape('day%3A'), +selector: unescape('%3E'), fn: function (aNumber) { var self = this; - smalltalk.send(self, "_day_", [aNumber]); + return self > aNumber; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_year_'), +unescape('__gt_eq'), smalltalk.method({ -selector: unescape('year%3A'), +selector: unescape('%3E%3D'), fn: function (aNumber) { var self = this; - self.setFullYear(aNumber); + return self >= aNumber; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_dayOfMonth'), +unescape('__at'), smalltalk.method({ -selector: unescape('dayOfMonth'), -fn: function () { +selector: unescape('@'), +fn: function (aNumber) { var self = this; - return self.getDate(); + return smalltalk.send(smalltalk.Point || Point, "_x_y_", [self, aNumber]); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_dayOfMonth_'), +unescape('_%5C%5C'), smalltalk.method({ -selector: unescape('dayOfMonth%3A'), +selector: unescape('%5C%5C'), fn: function (aNumber) { var self = this; - self.setDate(aNumber); + return self % aNumber; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_asString'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('asString'), -fn: function () { - var self = this; - return self.toString(); - return self; -} +selector: unescape('asJSON'), +fn: function (){ +var self=this; +return self; +return self;} }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_printString'), +unescape('_asJavascript'), smalltalk.method({ -selector: unescape('printString'), +selector: unescape('asJavascript'), fn: function () { var self = this; - return smalltalk.send(self, "_asString", []); + return smalltalk.send(smalltalk.send(unescape("%28"), "__comma", [smalltalk.send(self, "_printString", [])]), "__comma", [unescape("%29")]); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_asMilliseconds'), +unescape('_asPoint'), smalltalk.method({ -selector: unescape('asMilliseconds'), +selector: unescape('asPoint'), fn: function () { var self = this; - return smalltalk.send(self, "_time", []); + return smalltalk.send(smalltalk.Point || Point, "_x_y_", [self, self]); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_time'), +unescape('_asString'), smalltalk.method({ -selector: unescape('time'), +selector: unescape('asString'), fn: function () { var self = this; - return self.getTime(); + return smalltalk.send(self, "_printString", []); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_time_'), +unescape('_atRandom'), smalltalk.method({ -selector: unescape('time%3A'), -fn: function (aNumber) { +selector: unescape('atRandom'), +fn: function () { var self = this; - self.setTime(aNumber); + return ($receiver = smalltalk.send(($receiver = smalltalk.send(smalltalk.send(smalltalk.Random || Random, "_new", []), "_next", [])).klass === smalltalk.Number ? $receiver * self : smalltalk.send($receiver, "__star", [self]), "_truncated", [])).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_asDateString'), +unescape('_clearInterval'), smalltalk.method({ -selector: unescape('asDateString'), +selector: unescape('clearInterval'), fn: function () { var self = this; - return self.toDateString(); + clearInterval(Number(self)); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_asTimeString'), +unescape('_clearTimeout'), smalltalk.method({ -selector: unescape('asTimeString'), +selector: unescape('clearTimeout'), fn: function () { var self = this; - return self.toTimeString(); + clearTimeout(Number(self)); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_asLocaleString'), +unescape('_copy'), smalltalk.method({ -selector: unescape('asLocaleString'), +selector: unescape('copy'), fn: function () { var self = this; - return self.toLocaleString(); + return self; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_asNumber'), +unescape('_deepCopy'), smalltalk.method({ -selector: unescape('asNumber'), +selector: unescape('deepCopy'), fn: function () { var self = this; - return smalltalk.send(self, "_asMilliseconds", []); + return smalltalk.send(self, "_copy", []); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_hours_'), +unescape('_even'), smalltalk.method({ -selector: unescape('hours%3A'), -fn: function (aNumber) { +selector: unescape('even'), +fn: function () { var self = this; - self.setHours(aNumber); + return smalltalk.send(0, "__eq", [smalltalk.send(self, "_\\\\", [2])]); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_minutes_'), +unescape('_identityHash'), smalltalk.method({ -selector: unescape('minutes%3A'), -fn: function (aNumber) { +selector: unescape('identityHash'), +fn: function () { var self = this; - self.setMinutes(aNumber); + return smalltalk.send(smalltalk.send(self, "_asString", []), "__comma", ["n"]); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_seconds_'), +unescape('_isNumber'), smalltalk.method({ -selector: unescape('seconds%3A'), -fn: function (aNumber) { +selector: unescape('isNumber'), +fn: function () { var self = this; - self.setSeconds(aNumber); + return true; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_milliseconds_'), +unescape('_isZero'), smalltalk.method({ -selector: unescape('milliseconds%3A'), -fn: function (aNumber) { +selector: unescape('isZero'), +fn: function () { var self = this; - self.setMilliseconds(aNumber); + return smalltalk.send(self, "__eq", [0]); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_hours'), +unescape('_max_'), smalltalk.method({ -selector: unescape('hours'), -fn: function () { +selector: unescape('max%3A'), +fn: function (aNumber) { var self = this; - return self.getHours(); + return Math.max(self, aNumber); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_minutes'), +unescape('_min_'), smalltalk.method({ -selector: unescape('minutes'), -fn: function () { +selector: unescape('min%3A'), +fn: function (aNumber) { var self = this; - return self.getMinutes(); + return Math.min(self, aNumber); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_seconds'), +unescape('_negated'), smalltalk.method({ -selector: unescape('seconds'), +selector: unescape('negated'), fn: function () { var self = this; - return self.getSeconds(); + return 0 - self; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_milliseconds'), +unescape('_negative'), smalltalk.method({ -selector: unescape('milliseconds'), +selector: unescape('negative'), fn: function () { var self = this; - return self.getMilliseconds(); + return self < 0; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('__lt'), +unescape('_odd'), smalltalk.method({ -selector: unescape('%3C'), -fn: function (aDate) { +selector: unescape('odd'), +fn: function () { var self = this; - return self < aDate; + return smalltalk.send(smalltalk.send(self, "_even", []), "_not", []); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('__gt'), +unescape('_positive'), smalltalk.method({ -selector: unescape('%3E'), -fn: function (aDate) { +selector: unescape('positive'), +fn: function () { var self = this; - return self > aDate; + return self >= 0; return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('__lt_eq'), +unescape('_printShowingDecimalPlaces_'), smalltalk.method({ -selector: unescape('%3C%3D'), -fn: function (aDate) { +selector: unescape('printShowingDecimalPlaces%3A'), +fn: function (placesDesired) { var self = this; - return self <= aDate; + return self.toFixed(placesDesired); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('__gt_eq'), +unescape('_printString'), smalltalk.method({ -selector: unescape('%3E%3D'), -fn: function (aDate) { +selector: unescape('printString'), +fn: function () { var self = this; - return self >= aDate; + return String(self); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('__minus'), +unescape('_rounded'), smalltalk.method({ -selector: unescape('-'), -fn: function (aDate) { +selector: unescape('rounded'), +fn: function () { var self = this; - return self - aDate; + return Math.round(self); return self; } }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('__plus'), +unescape('_sqrt'), smalltalk.method({ -selector: unescape('+'), -fn: function (aDate) { +selector: unescape('sqrt'), +fn: function () { var self = this; - return self + aDate; + return Math.sqrt(self); return self; } }), -smalltalk.Date); - +smalltalk.Number); smalltalk.addMethod( -unescape('_new_'), +unescape('_squared'), smalltalk.method({ -selector: unescape('new%3A'), -fn: function (anObject) { +selector: unescape('squared'), +fn: function () { var self = this; - return new Date(anObject); + return self * self; return self; } }), -smalltalk.Date.klass); +smalltalk.Number); smalltalk.addMethod( -unescape('_fromString_'), +unescape('_timesRepeat_'), smalltalk.method({ -selector: unescape('fromString%3A'), -fn: function (aString) { +selector: unescape('timesRepeat%3A'), +fn: function (aBlock) { var self = this; - return smalltalk.send(self, "_new_", [aString]); + var integer = nil; + var count = nil; + integer = smalltalk.send(self, "_truncated", []); + count = 1; + (function () {while (!function () {return ($receiver = count).klass === smalltalk.Number ? $receiver > self : smalltalk.send($receiver, "__gt", [self]);}()) {(function () {smalltalk.send(aBlock, "_value", []);return count = ($receiver = count).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);}());}}()); return self; } }), -smalltalk.Date.klass); +smalltalk.Number); smalltalk.addMethod( -unescape('_fromSeconds_'), +unescape('_to_'), smalltalk.method({ -selector: unescape('fromSeconds%3A'), +selector: unescape('to%3A'), fn: function (aNumber) { var self = this; - return smalltalk.send(self, "_fromMilliseconds_", [($receiver = aNumber).klass === smalltalk.Number ? $receiver * 1000 : smalltalk.send($receiver, "__star", [1000])]); + var array = nil; + var first = nil; + var last = nil; + var count = nil; + first = smalltalk.send(self, "_truncated", []); + last = ($receiver = smalltalk.send(aNumber, "_truncated", [])).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]); + count = 1; + array = smalltalk.send(smalltalk.Array || Array, "_new", []); + smalltalk.send(($receiver = last).klass === smalltalk.Number ? $receiver - first : smalltalk.send($receiver, "__minus", [first]), "_timesRepeat_", [function () {smalltalk.send(array, "_at_put_", [count, first]);count = ($receiver = count).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return first = ($receiver = first).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);}]); + return array; return self; } }), -smalltalk.Date.klass); +smalltalk.Number); smalltalk.addMethod( -unescape('_fromMilliseconds_'), +unescape('_to_by_'), smalltalk.method({ -selector: unescape('fromMilliseconds%3A'), -fn: function (aNumber) { +selector: unescape('to%3Aby%3A'), +fn: function (stop, step) { var self = this; - return smalltalk.send(self, "_new_", [aNumber]); + var array = nil; + var value = nil; + var pos = nil; + value = self; + array = smalltalk.send(smalltalk.Array || Array, "_new", []); + pos = 1; + ($receiver = smalltalk.send(step, "__eq", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}]); + ($receiver = ($receiver = step).klass === smalltalk.Number ? $receiver < 0 : smalltalk.send($receiver, "__lt", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}, function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}]); + return array; return self; } }), -smalltalk.Date.klass); +smalltalk.Number); smalltalk.addMethod( -unescape('_today'), +unescape('_to_by_do_'), smalltalk.method({ -selector: unescape('today'), -fn: function () { +selector: unescape('to%3Aby%3Ado%3A'), +fn: function (stop, step, aBlock) { var self = this; - return smalltalk.send(self, "_new", []); + var value = nil; + value = self; + ($receiver = smalltalk.send(step, "__eq", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}]); + ($receiver = ($receiver = step).klass === smalltalk.Number ? $receiver < 0 : smalltalk.send($receiver, "__lt", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}, function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}]); return self; } }), -smalltalk.Date.klass); +smalltalk.Number); smalltalk.addMethod( -unescape('_now'), +unescape('_to_do_'), smalltalk.method({ -selector: unescape('now'), -fn: function () { +selector: unescape('to%3Ado%3A'), +fn: function (stop, aBlock) { var self = this; - return smalltalk.send(self, "_today", []); + var nextValue = nil; + nextValue = self; + (function () {while (function () {return ($receiver = nextValue).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [nextValue]);return nextValue = ($receiver = nextValue).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);}());}}()); return self; } }), -smalltalk.Date.klass); +smalltalk.Number); smalltalk.addMethod( -unescape('_millisecondsToRun_'), +unescape('_truncated'), smalltalk.method({ -selector: unescape('millisecondsToRun%3A'), -fn: function (aBlock) { +selector: unescape('truncated'), +fn: function () { var self = this; - var t = nil; - t = smalltalk.send(smalltalk.Date || Date, "_now", []); - smalltalk.send(aBlock, "_value", []); - return ($receiver = smalltalk.send(smalltalk.Date || Date, "_now", [])).klass === smalltalk.Number ? $receiver - t : smalltalk.send($receiver, "__minus", [t]); + var result = nil; + ($receiver = self >= 0).klass === smalltalk.Boolean ? $receiver ? function () {return result = Math.floor(self);}() : function () {return result = Math.floor(self * -1) * -1;}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return result = Math.floor(self);}, function () {return result = Math.floor(self * -1) * -1;}]); + return result; return self; } }), -smalltalk.Date.klass); +smalltalk.Number); -smalltalk.addClass('UndefinedObject', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_subclass_instanceVariableNames_'), +unescape('_pi'), smalltalk.method({ -selector: unescape('subclass%3AinstanceVariableNames%3A'), -fn: function (aString, anotherString) { +selector: unescape('pi'), +fn: function () { var self = this; - return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]); + return Math.PI; return self; } }), -smalltalk.UndefinedObject); +smalltalk.Number.klass); + +smalltalk.addClass('Package', smalltalk.Object, ['commitPathJs', 'commitPathSt'], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_subclass_instanceVariableNames_category_'), +unescape('_classes'), smalltalk.method({ -selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'), -fn: function (aString, aString2, aString3) { +selector: unescape('classes'), +fn: function () { var self = this; - smalltalk.send(self, "_deprecatedAPI", []); - return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]); + return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_classes", []), "_select_", [function (c) {return smalltalk.send(smalltalk.send(c, "_package", []), "__eq_eq", [self]);}]); return self; } }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_shallowCopy'), +unescape('_commitPathJs'), smalltalk.method({ -selector: unescape('shallowCopy'), +selector: unescape('commitPathJs'), fn: function () { var self = this; - return self; + return ($receiver = self['@commitPathJs']) == nil || + $receiver == undefined ? function () {return smalltalk.send(smalltalk.send(self, "_class", []), "_defaultCommitPathJs", []);}() : $receiver; return self; } }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_commitPathJs_'), smalltalk.method({ -selector: unescape('deepCopy'), -fn: function () { +selector: unescape('commitPathJs%3A'), +fn: function (aString) { var self = this; - return self; + self['@commitPathJs'] = aString; return self; } }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_ifNil_'), +unescape('_commitPathSt'), smalltalk.method({ -selector: unescape('ifNil%3A'), -fn: function (aBlock) { +selector: unescape('commitPathSt'), +fn: function () { var self = this; - return smalltalk.send(self, "_ifNil_ifNotNil_", [aBlock, function () {return nil;}]); + return ($receiver = self['@commitPathSt']) == nil || + $receiver == undefined ? function () {return smalltalk.send(smalltalk.send(self, "_class", []), "_defaultCommitPathSt", []);}() : $receiver; return self; } }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_ifNotNil_'), +unescape('_commitPathSt_'), smalltalk.method({ -selector: unescape('ifNotNil%3A'), -fn: function (aBlock) { +selector: unescape('commitPathSt%3A'), +fn: function (aString) { var self = this; - return self; + self['@commitPathSt'] = aString; return self; } }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_ifNil_ifNotNil_'), +unescape('_dependencies'), smalltalk.method({ -selector: unescape('ifNil%3AifNotNil%3A'), -fn: function (aBlock, anotherBlock) { +selector: unescape('dependencies'), +fn: function () { var self = this; - return smalltalk.send(aBlock, "_value", []); + return smalltalk.send(self, "_propertyAt_ifAbsent_", ["dependencies", function () {return [];}]); return self; } }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_ifNotNil_ifNil_'), +unescape('_dependencies_'), smalltalk.method({ -selector: unescape('ifNotNil%3AifNil%3A'), -fn: function (aBlock, anotherBlock) { +selector: unescape('dependencies%3A'), +fn: function (anArray) { var self = this; - return smalltalk.send(anotherBlock, "_value", []); + return smalltalk.send(self, "_propertyAt_put_", ["dependencies", anArray]); return self; } }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_isNil'), +unescape('_jsProperties'), smalltalk.method({ -selector: unescape('isNil'), +selector: unescape('jsProperties'), fn: function () { var self = this; - return true; + return self.properties; return self; } }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_notNil'), +unescape('_jsProperties_'), smalltalk.method({ -selector: unescape('notNil'), -fn: function () { +selector: unescape('jsProperties%3A'), +fn: function (aJSObject) { var self = this; - return false; + return self.properties = aJSObject; return self; } }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_printString'), +unescape('_name'), smalltalk.method({ -selector: unescape('printString'), +selector: unescape('name'), fn: function () { var self = this; - return "nil"; + return self.pkgName; return self; } }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_subclass_instanceVariableNames_package_'), +unescape('_name_'), smalltalk.method({ -selector: unescape('subclass%3AinstanceVariableNames%3Apackage%3A'), -fn: function (aString, aString2, aString3) { +selector: unescape('name%3A'), +fn: function (aString) { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.ClassBuilder || ClassBuilder, "_new", []), "_superclass_subclass_instanceVariableNames_package_", [self, aString, aString2, aString3]); + self.pkgName = aString; return self; } }), -smalltalk.UndefinedObject); - -smalltalk.addMethod( -unescape('_asJSON'), -smalltalk.method({ -selector: unescape('asJSON'), -fn: function (){ -var self=this; -return (typeof null == 'undefined' ? nil : null); -return self;} -}), -smalltalk.UndefinedObject); - +smalltalk.Package); smalltalk.addMethod( -unescape('_new'), +unescape('_printString'), smalltalk.method({ -selector: unescape('new'), +selector: unescape('printString'), fn: function () { var self = this; - smalltalk.send(self, "_error_", ["You cannot create new instances of UndefinedObject. Use nil"]); + return smalltalk.send(self, "_name", []); return self; } }), -smalltalk.UndefinedObject.klass); - +smalltalk.Package); -smalltalk.addClass('Date', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_year'), +unescape('_properties'), smalltalk.method({ -selector: unescape('year'), +selector: unescape('properties'), fn: function () { var self = this; - return self.getFullYear(); + return smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_readJSObject_", [smalltalk.send(self, "_basicAt_", ["properties"])]); return self; } }), -smalltalk.Date); +smalltalk.Package); smalltalk.addMethod( -unescape('_month'), +unescape('_properties_'), smalltalk.method({ -selector: unescape('month'), -fn: function () { +selector: unescape('properties%3A'), +fn: function (aDict) { var self = this; - return self.getMonth() + 1; + var object = nil; + object = {}; + smalltalk.send(aDict, "_keysAndValuesDo_", [function (key, value) {return object[key] = value;}]); + return self.properties = object; return self; } }), -smalltalk.Date); +smalltalk.Package); smalltalk.addMethod( -unescape('_month_'), +unescape('_propertiesAsJSON'), smalltalk.method({ -selector: unescape('month%3A'), -fn: function (aNumber) { +selector: unescape('propertiesAsJSON'), +fn: function () { var self = this; - self.setMonth(aNumber - 1); + return JSON.stringify(self.properties); return self; } }), -smalltalk.Date); +smalltalk.Package); smalltalk.addMethod( -unescape('_day'), +unescape('_propertyAt_'), smalltalk.method({ -selector: unescape('day'), -fn: function () { +selector: unescape('propertyAt%3A'), +fn: function (key) { var self = this; - return smalltalk.send(self, "_dayOfWeek", []); + return self.properties[key]; return self; } }), -smalltalk.Date); +smalltalk.Package); smalltalk.addMethod( -unescape('_dayOfWeek'), +unescape('_propertyAt_ifAbsent_'), smalltalk.method({ -selector: unescape('dayOfWeek'), -fn: function () { +selector: unescape('propertyAt%3AifAbsent%3A'), +fn: function (key, block) { var self = this; - return self.getDay() + 1; + return ($receiver = smalltalk.send(self, "_propertyAt_", [key])) == nil || + $receiver == undefined ? function () {return smalltalk.send(block, "_value", []);}() : $receiver; return self; } }), -smalltalk.Date); +smalltalk.Package); smalltalk.addMethod( -unescape('_dayOfWeek_'), +unescape('_propertyAt_put_'), smalltalk.method({ -selector: unescape('dayOfWeek%3A'), -fn: function (aNumber) { +selector: unescape('propertyAt%3Aput%3A'), +fn: function (key, value) { var self = this; - return self.setDay(aNumber - 1); + return self.properties[key] = value; return self; } }), -smalltalk.Date); +smalltalk.Package); smalltalk.addMethod( -unescape('_day_'), +unescape('_sortedClasses'), smalltalk.method({ -selector: unescape('day%3A'), -fn: function (aNumber) { - var self = this; - smalltalk.send(self, "_day_", [aNumber]); - return self; -} +selector: unescape('sortedClasses'), +fn: function (){ +var self=this; +return smalltalk.send(smalltalk.send(self, "_class", []), "_sortedClasses_", [smalltalk.send(self, "_classes", [])]); +return self;} }), -smalltalk.Date); +smalltalk.Package); + +smalltalk.Package.klass.iVarNames = ['defaultCommitPathJs','defaultCommitPathSt']; smalltalk.addMethod( -unescape('_year_'), +unescape('_commitToLocalStorage_'), smalltalk.method({ -selector: unescape('year%3A'), -fn: function (aNumber) { +selector: unescape('commitToLocalStorage%3A'), +fn: function (aPackageName) { var self = this; - self.setFullYear(aNumber); + var key = nil; + var sourceCode = nil; + key = smalltalk.send("smalltalk.packages.", "__comma", [aPackageName]); + sourceCode = smalltalk.send(smalltalk.send(smalltalk.Exporter || Exporter, "_new", []), "_exportPackage_", [aPackageName]); + localStorage[key] = escape(sourceCode); return self; } }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_dayOfMonth'), +unescape('_defaultCommitPathJs'), smalltalk.method({ -selector: unescape('dayOfMonth'), +selector: unescape('defaultCommitPathJs'), fn: function () { var self = this; - return self.getDate(); + return ($receiver = self['@defaultCommitPathJs']) == nil || + $receiver == undefined ? function () {return self['@defaultCommitPathJs'] = "js";}() : $receiver; return self; } }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_dayOfMonth_'), +unescape('_defaultCommitPathJs_'), smalltalk.method({ -selector: unescape('dayOfMonth%3A'), -fn: function (aNumber) { +selector: unescape('defaultCommitPathJs%3A'), +fn: function (aString) { var self = this; - self.setDate(aNumber); + self['@defaultCommitPathJs'] = aString; return self; } }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_asString'), +unescape('_defaultCommitPathSt'), smalltalk.method({ -selector: unescape('asString'), +selector: unescape('defaultCommitPathSt'), fn: function () { var self = this; - return self.toString(); + return ($receiver = self['@defaultCommitPathSt']) == nil || + $receiver == undefined ? function () {return self['@defaultCommitPathSt'] = "st";}() : $receiver; return self; } }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_printString'), +unescape('_defaultCommitPathSt_'), smalltalk.method({ -selector: unescape('printString'), -fn: function () { +selector: unescape('defaultCommitPathSt%3A'), +fn: function (aString) { var self = this; - return smalltalk.send(self, "_asString", []); + self['@defaultCommitPathSt'] = aString; return self; } }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_asMilliseconds'), +unescape('_fetch_'), smalltalk.method({ -selector: unescape('asMilliseconds'), -fn: function () { +selector: unescape('fetch%3A'), +fn: function (aPackageName) { var self = this; - return smalltalk.send(self, "_time", []); + smalltalk.send(self, "_fetch_prefix_", [aPackageName, smalltalk.send(smalltalk.send(self, "_defaultCommitPathJs", []), "__comma", [unescape("/")])]); return self; } }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_time'), +unescape('_fetch_prefix_'), smalltalk.method({ -selector: unescape('time'), -fn: function () { +selector: unescape('fetch%3Aprefix%3A'), +fn: function (aPackageName, aPrefix) { var self = this; - return self.getTime(); + smalltalk.send(typeof jQuery == "undefined" ? nil : jQuery, "_getScript_onSuccess_", [smalltalk.send(smalltalk.send(aPrefix, "__comma", [aPackageName]), "__comma", [".js"]), function () {return smalltalk.send(smalltalk.Package || Package, "_init_", [aPackageName]);}]); return self; } }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_time_'), +unescape('_init_'), smalltalk.method({ -selector: unescape('time%3A'), -fn: function (aNumber) { +selector: unescape('init%3A'), +fn: function (aPackageName) { var self = this; - self.setTime(aNumber); + (function ($rec) {smalltalk.send($rec, "_do_", [function (each) {return smalltalk.init(each);}]);return smalltalk.send($rec, "_do_", [function (each) {return smalltalk.send(each, "_initialize", []);}]);}(smalltalk.send(smalltalk.send(typeof smalltalk == "undefined" ? nil : smalltalk, "_classes", []), "_select_", [function (each) {return each.pkg.pkgName == aPackageName;}]))); return self; } }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_asDateString'), +unescape('_named_'), smalltalk.method({ -selector: unescape('asDateString'), -fn: function () { +selector: unescape('named%3A'), +fn: function (aPackageName) { var self = this; - return self.toDateString(); + return smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_packageAt_", [aPackageName]); return self; } }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_asTimeString'), +unescape('_named_ifAbsent_'), smalltalk.method({ -selector: unescape('asTimeString'), -fn: function () { +selector: unescape('named%3AifAbsent%3A'), +fn: function (aPackageName, aBlock) { var self = this; - return self.toTimeString(); + return smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_packageAt_ifAbsent_", [aPackageName, aBlock]); return self; } }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_asLocaleString'), +unescape('_resetCommitPaths'), smalltalk.method({ -selector: unescape('asLocaleString'), +selector: unescape('resetCommitPaths'), fn: function () { var self = this; - return self.toLocaleString(); + self['@defaultCommitPathJs'] = nil; + self['@defaultCommitPathSt'] = nil; return self; } }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_asNumber'), +unescape('_sortedClasses_'), smalltalk.method({ -selector: unescape('asNumber'), -fn: function () { - var self = this; - return smalltalk.send(self, "_asMilliseconds", []); - return self; -} +selector: unescape('sortedClasses%3A'), +fn: function (classes){ +var self=this; +var children=nil; +var others=nil; +var nodes=nil; +var expandedClasses=nil; +(children=[]); +(others=[]); +smalltalk.send(classes, "_do_", [(function(each){return ((($receiver = smalltalk.send(classes, "_includes_", [smalltalk.send(each, "_superclass", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(children, "_add_", [each]);})() : (function(){return smalltalk.send(others, "_add_", [each]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(children, "_add_", [each]);}), (function(){return smalltalk.send(others, "_add_", [each]);})]));})]); +(nodes=smalltalk.send(children, "_collect_", [(function(each){return smalltalk.send((smalltalk.ClassSorterNode || ClassSorterNode), "_on_classes_level_", [each, others, (0)]);})])); +(nodes=smalltalk.send(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", [])]));})])); +(expandedClasses=smalltalk.send((smalltalk.Array || Array), "_new", [])); +smalltalk.send(nodes, "_do_", [(function(aNode){return smalltalk.send(aNode, "_traverseClassesWith_", [expandedClasses]);})]); +return expandedClasses; +return self;} }), -smalltalk.Date); +smalltalk.Package.klass); + +smalltalk.addClass('Point', smalltalk.Object, ['x', 'y'], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_hours_'), +unescape('__star'), smalltalk.method({ -selector: unescape('hours%3A'), -fn: function (aNumber) { +selector: unescape('*'), +fn: function (aPoint) { var self = this; - self.setHours(aNumber); + return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver * smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__star", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver * smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__star", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); return self; } }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_minutes_'), +unescape('__plus'), smalltalk.method({ -selector: unescape('minutes%3A'), -fn: function (aNumber) { +selector: unescape('+'), +fn: function (aPoint) { var self = this; - self.setMinutes(aNumber); + return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver + smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver + smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); return self; } }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_seconds_'), +unescape('__minus'), smalltalk.method({ -selector: unescape('seconds%3A'), -fn: function (aNumber) { +selector: unescape('-'), +fn: function (aPoint) { var self = this; - self.setSeconds(aNumber); + return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver - smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__minus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver - smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__minus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); return self; } }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_milliseconds_'), +unescape('__slash'), smalltalk.method({ -selector: unescape('milliseconds%3A'), -fn: function (aNumber) { +selector: unescape('/'), +fn: function (aPoint) { var self = this; - self.setMilliseconds(aNumber); + return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver / smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__slash", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver / smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__slash", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); return self; } }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_hours'), +unescape('__eq'), smalltalk.method({ -selector: unescape('hours'), -fn: function () { +selector: unescape('%3D'), +fn: function (aPoint) { var self = this; - return self.getHours(); + return smalltalk.send(smalltalk.send(smalltalk.send(aPoint, "_class", []), "__eq", [smalltalk.send(self, "_class", [])]), "_and_", [function () {return smalltalk.send(smalltalk.send(smalltalk.send(aPoint, "_x", []), "__eq", [smalltalk.send(self, "_x", [])]), "_&", [smalltalk.send(smalltalk.send(aPoint, "_y", []), "__eq", [smalltalk.send(self, "_y", [])])]);}]); return self; } }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_minutes'), +unescape('_asPoint'), smalltalk.method({ -selector: unescape('minutes'), +selector: unescape('asPoint'), fn: function () { var self = this; - return self.getMinutes(); + return self; return self; } }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_seconds'), +unescape('_printString'), smalltalk.method({ -selector: unescape('seconds'), +selector: unescape('printString'), fn: function () { var self = this; - return self.getSeconds(); + return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (stream) {smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@x'], "_printString", []), "__comma", [unescape("@")])]);($receiver = smalltalk.send(smalltalk.send(self['@y'], "_notNil", []), "_and_", [function () {return smalltalk.send(self['@y'], "_negative", []);}])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(stream, "_space", []);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(stream, "_space", []);}]);return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(self['@y'], "_printString", [])]);}]); return self; } }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_milliseconds'), +unescape('_translateBy_'), smalltalk.method({ -selector: unescape('milliseconds'), +selector: unescape('translateBy%3A'), +fn: function (delta){ +var self=this; +return smalltalk.send(((($receiver = smalltalk.send(delta, "_x", [])).klass === smalltalk.Number) ? $receiver +self['@x'] : smalltalk.send($receiver, "__plus", [self['@x']])), "__at", [((($receiver = smalltalk.send(delta, "_y", [])).klass === smalltalk.Number) ? $receiver +self['@y'] : smalltalk.send($receiver, "__plus", [self['@y']]))]); +return self;} +}), +smalltalk.Point); + +smalltalk.addMethod( +unescape('_x'), +smalltalk.method({ +selector: unescape('x'), fn: function () { var self = this; - return self.getMilliseconds(); + return self['@x']; return self; } }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('__lt'), +unescape('_x_'), smalltalk.method({ -selector: unescape('%3C'), -fn: function (aDate) { +selector: unescape('x%3A'), +fn: function (aNumber) { var self = this; - return self < aDate; + self['@x'] = aNumber; return self; } }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('__gt'), +unescape('_y'), smalltalk.method({ -selector: unescape('%3E'), -fn: function (aDate) { +selector: unescape('y'), +fn: function () { var self = this; - return self > aDate; + return self['@y']; return self; } }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('__lt_eq'), +unescape('_y_'), smalltalk.method({ -selector: unescape('%3C%3D'), -fn: function (aDate) { +selector: unescape('y%3A'), +fn: function (aNumber) { var self = this; - return self <= aDate; + self['@y'] = aNumber; return self; } }), -smalltalk.Date); +smalltalk.Point); + smalltalk.addMethod( -unescape('__gt_eq'), +unescape('_x_y_'), smalltalk.method({ -selector: unescape('%3E%3D'), -fn: function (aDate) { +selector: unescape('x%3Ay%3A'), +fn: function (aNumber, anotherNumber) { var self = this; - return self >= aDate; + return function ($rec) {smalltalk.send($rec, "_x_", [aNumber]);smalltalk.send($rec, "_y_", [anotherNumber]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", [])); return self; } }), -smalltalk.Date); +smalltalk.Point.klass); + +smalltalk.addClass('Random', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('__minus'), +unescape('_next'), smalltalk.method({ -selector: unescape('-'), -fn: function (aDate) { +selector: unescape('next'), +fn: function () { var self = this; - return self - aDate; + return Math.random(); return self; } }), -smalltalk.Date); +smalltalk.Random); smalltalk.addMethod( -unescape('__plus'), +unescape('_next_'), smalltalk.method({ -selector: unescape('+'), -fn: function (aDate) { +selector: unescape('next%3A'), +fn: function (anInteger) { var self = this; - return self + aDate; + return smalltalk.send(smalltalk.send(1, "_to_", [anInteger]), "_collect_", [function (each) {return smalltalk.send(self, "_next", []);}]); return self; } }), -smalltalk.Date); +smalltalk.Random); + +smalltalk.addClass('Smalltalk', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_new_'), +unescape('_at_'), smalltalk.method({ -selector: unescape('new%3A'), -fn: function (anObject) { +selector: unescape('at%3A'), +fn: function (aString) { var self = this; - return new Date(anObject); + return self[aString]; return self; } }), -smalltalk.Date.klass); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_fromString_'), +unescape('_basicParse_'), smalltalk.method({ -selector: unescape('fromString%3A'), +selector: unescape('basicParse%3A'), fn: function (aString) { var self = this; - return smalltalk.send(self, "_new_", [aString]); + return smalltalk.parser.parse(aString); return self; } }), -smalltalk.Date.klass); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_fromSeconds_'), +unescape('_classes'), smalltalk.method({ -selector: unescape('fromSeconds%3A'), -fn: function (aNumber) { +selector: unescape('classes'), +fn: function () { var self = this; - return smalltalk.send(self, "_fromMilliseconds_", [($receiver = aNumber).klass === smalltalk.Number ? $receiver * 1000 : smalltalk.send($receiver, "__star", [1000])]); + return self.classes(); return self; } }), -smalltalk.Date.klass); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_fromMilliseconds_'), +unescape('_createPackage_'), smalltalk.method({ -selector: unescape('fromMilliseconds%3A'), -fn: function (aNumber) { +selector: unescape('createPackage%3A'), +fn: function (packageName) { var self = this; - return smalltalk.send(self, "_new_", [aNumber]); + return smalltalk.addPackage(packageName, nil); return self; } }), -smalltalk.Date.klass); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_today'), +unescape('_createPackage_properties_'), smalltalk.method({ -selector: unescape('today'), -fn: function () { +selector: unescape('createPackage%3Aproperties%3A'), +fn: function (packageName, aDict) { var self = this; - return smalltalk.send(self, "_new", []); + var object = nil; + object = {}; + smalltalk.send(aDict, "_keysAndValuesDo_", [function (key, value) {return object[key] = value;}]); + return smalltalk.addPackage(packageName, object); return self; } }), -smalltalk.Date.klass); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_now'), +unescape('_deletePackage_'), smalltalk.method({ -selector: unescape('now'), -fn: function () { +selector: unescape('deletePackage%3A'), +fn: function (packageName) { var self = this; - return smalltalk.send(self, "_today", []); + delete smalltalk.packages[packageName]; return self; } }), -smalltalk.Date.klass); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_millisecondsToRun_'), +unescape('_packageAt_'), smalltalk.method({ -selector: unescape('millisecondsToRun%3A'), -fn: function (aBlock) { +selector: unescape('packageAt%3A'), +fn: function (packageName) { var self = this; - var t = nil; - t = smalltalk.send(smalltalk.Date || Date, "_now", []); - smalltalk.send(aBlock, "_value", []); - return ($receiver = smalltalk.send(smalltalk.Date || Date, "_now", [])).klass === smalltalk.Number ? $receiver - t : smalltalk.send($receiver, "__minus", [t]); + return self.packages[packageName]; return self; } }), -smalltalk.Date.klass); - +smalltalk.Smalltalk); -smalltalk.addClass('JSObjectProxy', smalltalk.Object, ['jsObject'], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_jsObject_'), +unescape('_packageAt_ifAbsent_'), smalltalk.method({ -selector: unescape('jsObject%3A'), -fn: function (aJSObject) { +selector: unescape('packageAt%3AifAbsent%3A'), +fn: function (packageName, aBlock) { var self = this; - self['@jsObject'] = aJSObject; + return smalltalk.send(smalltalk.send(self, "_packageAt_", [packageName]), "_ifNil_", [aBlock]); return self; } }), -smalltalk.JSObjectProxy); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_jsObject'), +unescape('_packages'), smalltalk.method({ -selector: unescape('jsObject'), +selector: unescape('packages'), fn: function () { var self = this; - return self['@jsObject']; + return self.packages.all(); return self; } }), -smalltalk.JSObjectProxy); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_printString'), +unescape('_parse_'), smalltalk.method({ -selector: unescape('printString'), -fn: function () { +selector: unescape('parse%3A'), +fn: function (aString) { var self = this; - return smalltalk.send(smalltalk.send(self, "_jsObject", []), "_toString", []); + var result = nil; + smalltalk.send(self, "_try_catch_", [function () {return result = smalltalk.send(self, "_basicParse_", [aString]);}, function (ex) {return smalltalk.send(smalltalk.send(self, "_parseError_parsing_", [ex, aString]), "_signal", []);}]); + return result; return self; } }), -smalltalk.JSObjectProxy); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_inspectOn_'), +unescape('_parseError_parsing_'), smalltalk.method({ -selector: unescape('inspectOn%3A'), -fn: function (anInspector) { +selector: unescape('parseError%3Aparsing%3A'), +fn: function (anException, aString) { var self = this; - var variables = nil; - variables = smalltalk.send(smalltalk.Dictionary || Dictionary, "_new", []); - smalltalk.send(variables, "_at_put_", [unescape("%23self"), smalltalk.send(self, "_jsObject", [])]); - smalltalk.send(anInspector, "_setLabel_", [smalltalk.send(self, "_printString", [])]); - for (var i in self['@jsObject']) { - variables._at_put_(i, self['@jsObject'][i]); - } - smalltalk.send(anInspector, "_setVariables_", [variables]); + var row = nil; + var col = nil; + var message = nil; + var lines = nil; + var badLine = nil; + var code = nil; + row = anException.line; + col = anException.column; + message = anException.message; + lines = smalltalk.send(aString, "_lines", []); + badLine = smalltalk.send(lines, "_at_", [row]); + badLine = smalltalk.send(smalltalk.send(smalltalk.send(badLine, "_copyFrom_to_", [1, ($receiver = col).klass === smalltalk.Number ? $receiver - 1 : smalltalk.send($receiver, "__minus", [1])]), "__comma", [unescape("%20%3D%3D%3D%3E")]), "__comma", [smalltalk.send(badLine, "_copyFrom_to_", [col, smalltalk.send(badLine, "_size", [])])]); + smalltalk.send(lines, "_at_put_", [row, badLine]); + code = smalltalk.send(smalltalk.String || String, "_streamContents_", [function (s) {return smalltalk.send(lines, "_withIndexDo_", [function (l, i) {return smalltalk.send(s, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(i, "_asString", []), "__comma", [": "]), "__comma", [l]), "__comma", [smalltalk.send(smalltalk.String || String, "_lf", [])])]);}]);}]); + return smalltalk.send(smalltalk.send(smalltalk.Error || Error, "_new", []), "_messageText_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("Parse error on line ", "__comma", [row]), "__comma", [" column "]), "__comma", [col]), "__comma", [" : "]), "__comma", [message]), "__comma", [unescape("%20Below%20is%20code%20with%20line%20numbers%20and%20%3D%3D%3D%3E%20marker%20inserted%3A")]), "__comma", [smalltalk.send(smalltalk.String || String, "_lf", [])]), "__comma", [code])]); return self; } }), -smalltalk.JSObjectProxy); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_doesNotUnderstand_'), +unescape('_readJSObject_'), smalltalk.method({ -selector: unescape('doesNotUnderstand%3A'), -fn: function (aMessage) { +selector: unescape('readJSObject%3A'), +fn: function (anObject) { var self = this; - var obj = nil; - var selector = nil; - var jsSelector = nil; - var arguments = nil; - obj = smalltalk.send(self, "_jsObject", []); - selector = smalltalk.send(aMessage, "_selector", []); - jsSelector = smalltalk.send(selector, "_asJavaScriptSelector", []); - arguments = smalltalk.send(aMessage, "_arguments", []); - if (obj[jsSelector] != undefined) { - return smalltalk.send(obj, jsSelector, arguments); - } - smalltalk.send(self, "_doesNotUnderstand_", [aMessage], smalltalk.Object); + return self.readJSObject(anObject); return self; } }), -smalltalk.JSObjectProxy); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_at_'), +unescape('_removeClass_'), smalltalk.method({ -selector: unescape('at%3A'), -fn: function (aSymbol) { +selector: unescape('removeClass%3A'), +fn: function (aClass) { var self = this; - var attr = nil; - attr = smalltalk.send(aSymbol, "_asString", []); - return self['@jsObject'][attr]; + ($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_asString", []), "__comma", [unescape("%20is%20a%20Metaclass%20and%20cannot%20be%20removed%21")])]);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_asString", []), "__comma", [unescape("%20is%20a%20Metaclass%20and%20cannot%20be%20removed%21")])]);}]); + smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [function (each) {return smalltalk.send(aClass, "_removeCompiledMethod_", [each]);}]); + smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [function (each) {return smalltalk.send(smalltalk.send(aClass, "_class", []), "_removeCompiledMethod_", [each]);}]); + smalltalk.send(self, "_basicDelete_", [smalltalk.send(aClass, "_name", [])]); return self; } }), -smalltalk.JSObjectProxy); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_at_put_'), +unescape('_removePackage_'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), -fn: function (aSymbol, anObject) { +selector: unescape('removePackage%3A'), +fn: function (packageName) { var self = this; - var attr = nil; - attr = smalltalk.send(aSymbol, "_asString", []); - self['@jsObject'][attr] = anObject; + var pkg = nil; + pkg = smalltalk.send(self, "_packageAt_ifAbsent_", [packageName, function () {return smalltalk.send(self, "_error_", [smalltalk.send("Missing package: ", "__comma", [packageName])]);}]); + smalltalk.send(smalltalk.send(pkg, "_classes", []), "_do_", [function (each) {return smalltalk.send(self, "_removeClass_", [each]);}]); + smalltalk.send(self, "_deletePackage_", [packageName]); return self; } }), -smalltalk.JSObjectProxy); - +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_on_'), +unescape('_renamePackage_to_'), smalltalk.method({ -selector: unescape('on%3A'), -fn: function (aJSObject) { +selector: unescape('renamePackage%3Ato%3A'), +fn: function (packageName, newName) { var self = this; - return function ($rec) {smalltalk.send($rec, "_jsObject_", [aJSObject]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", [])); + var pkg = nil; + pkg = smalltalk.send(self, "_packageAt_ifAbsent_", [packageName, function () {return smalltalk.send(self, "_error_", [smalltalk.send("Missing package: ", "__comma", [packageName])]);}]); + ($receiver = smalltalk.send(self, "_packageAt_", [newName])) != nil && + $receiver != undefined ? function () {return smalltalk.send(self, "_error_", [smalltalk.send("Already exists a package called: ", "__comma", [newName])]);}() : nil; + smalltalk.packages[newName] = smalltalk.packages[packageName]; + smalltalk.send(pkg, "_name_", [newName]); + smalltalk.send(self, "_deletePackage_", [packageName]); return self; } }), -smalltalk.JSObjectProxy.klass); - +smalltalk.Smalltalk); -smalltalk.addClass('Point', smalltalk.Object, ['x', 'y'], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_x'), +unescape('_reservedWords'), smalltalk.method({ -selector: unescape('x'), +selector: unescape('reservedWords'), fn: function () { var self = this; - return self['@x']; + return self.reservedWords; return self; } }), -smalltalk.Point); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_y'), +unescape('_send_to_arguments_'), smalltalk.method({ -selector: unescape('y'), -fn: function () { +selector: unescape('send%3Ato%3Aarguments%3A'), +fn: function (aSelector, anObject, aCollection) { var self = this; - return self['@y']; + var selector = nil; + selector = smalltalk.send(smalltalk.send(aSelector, "_asString", []), "_asSelector", []); + self.send(anObject, selector, aCollection); return self; } }), -smalltalk.Point); +smalltalk.Smalltalk); + +smalltalk.Smalltalk.klass.iVarNames = ['current']; smalltalk.addMethod( -unescape('_y_'), +unescape('_current'), smalltalk.method({ -selector: unescape('y%3A'), -fn: function (aNumber) { +selector: unescape('current'), +fn: function () { var self = this; - self['@y'] = aNumber; + return smalltalk; return self; } }), -smalltalk.Point); +smalltalk.Smalltalk.klass); + +smalltalk.addClass('UndefinedObject', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_x_'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('x%3A'), -fn: function (aNumber) { +selector: unescape('asJSON'), +fn: function (){ +var self=this; +return (typeof null == 'undefined' ? nil : null); +return self;} +}), +smalltalk.UndefinedObject); + +smalltalk.addMethod( +unescape('_deepCopy'), +smalltalk.method({ +selector: unescape('deepCopy'), +fn: function () { var self = this; - self['@x'] = aNumber; + return self; return self; } }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('__star'), +unescape('_ifNil_'), smalltalk.method({ -selector: unescape('*'), -fn: function (aPoint) { +selector: unescape('ifNil%3A'), +fn: function (aBlock) { var self = this; - return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver * smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__star", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver * smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__star", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); + return smalltalk.send(self, "_ifNil_ifNotNil_", [aBlock, function () {return nil;}]); return self; } }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('__plus'), +unescape('_ifNil_ifNotNil_'), smalltalk.method({ -selector: unescape('+'), -fn: function (aPoint) { +selector: unescape('ifNil%3AifNotNil%3A'), +fn: function (aBlock, anotherBlock) { var self = this; - return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver + smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver + smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); + return smalltalk.send(aBlock, "_value", []); return self; } }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('__minus'), +unescape('_ifNotNil_'), smalltalk.method({ -selector: unescape('-'), -fn: function (aPoint) { +selector: unescape('ifNotNil%3A'), +fn: function (aBlock) { var self = this; - return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver - smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__minus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver - smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__minus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); + return self; return self; } }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('__slash'), +unescape('_ifNotNil_ifNil_'), smalltalk.method({ -selector: unescape('/'), -fn: function (aPoint) { +selector: unescape('ifNotNil%3AifNil%3A'), +fn: function (aBlock, anotherBlock) { var self = this; - return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver / smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__slash", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver / smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__slash", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); + return smalltalk.send(anotherBlock, "_value", []); return self; } }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('_asPoint'), +unescape('_isNil'), smalltalk.method({ -selector: unescape('asPoint'), +selector: unescape('isNil'), fn: function () { var self = this; - return self; + return true; return self; } }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('__eq'), +unescape('_notNil'), smalltalk.method({ -selector: unescape('%3D'), -fn: function (aPoint) { +selector: unescape('notNil'), +fn: function () { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.send(aPoint, "_class", []), "__eq", [smalltalk.send(self, "_class", [])]), "_and_", [function () {return smalltalk.send(smalltalk.send(smalltalk.send(aPoint, "_x", []), "__eq", [smalltalk.send(self, "_x", [])]), "_&", [smalltalk.send(smalltalk.send(aPoint, "_y", []), "__eq", [smalltalk.send(self, "_y", [])])]);}]); + return false; return self; } }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( unescape('_printString'), @@ -3425,61 +3435,72 @@ smalltalk.method({ selector: unescape('printString'), fn: function () { var self = this; - return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (stream) {smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@x'], "_printString", []), "__comma", [unescape("@")])]);($receiver = smalltalk.send(smalltalk.send(self['@y'], "_notNil", []), "_and_", [function () {return smalltalk.send(self['@y'], "_negative", []);}])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(stream, "_space", []);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(stream, "_space", []);}]);return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(self['@y'], "_printString", [])]);}]); + return "nil"; return self; } }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('_translateBy_'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('translateBy%3A'), -fn: function (delta){ -var self=this; -return smalltalk.send(((($receiver = smalltalk.send(delta, "_x", [])).klass === smalltalk.Number) ? $receiver +self['@x'] : smalltalk.send($receiver, "__plus", [self['@x']])), "__at", [((($receiver = smalltalk.send(delta, "_y", [])).klass === smalltalk.Number) ? $receiver +self['@y'] : smalltalk.send($receiver, "__plus", [self['@y']]))]); -return self;} +selector: unescape('shallowCopy'), +fn: function () { + var self = this; + return self; + return self; +} }), -smalltalk.Point); - +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('_x_y_'), +unescape('_subclass_instanceVariableNames_'), smalltalk.method({ -selector: unescape('x%3Ay%3A'), -fn: function (aNumber, anotherNumber) { +selector: unescape('subclass%3AinstanceVariableNames%3A'), +fn: function (aString, anotherString) { var self = this; - return function ($rec) {smalltalk.send($rec, "_x_", [aNumber]);smalltalk.send($rec, "_y_", [anotherNumber]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", [])); + return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]); return self; } }), -smalltalk.Point.klass); - +smalltalk.UndefinedObject); -smalltalk.addClass('Random', smalltalk.Object, [], 'Kernel-Objects'); smalltalk.addMethod( -unescape('_next'), +unescape('_subclass_instanceVariableNames_category_'), smalltalk.method({ -selector: unescape('next'), -fn: function () { +selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'), +fn: function (aString, aString2, aString3) { var self = this; - return Math.random(); + smalltalk.send(self, "_deprecatedAPI", []); + return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]); return self; } }), -smalltalk.Random); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('_next_'), +unescape('_subclass_instanceVariableNames_package_'), smalltalk.method({ -selector: unescape('next%3A'), -fn: function (anInteger) { +selector: unescape('subclass%3AinstanceVariableNames%3Apackage%3A'), +fn: function (aString, aString2, aString3) { var self = this; - return smalltalk.send(smalltalk.send(1, "_to_", [anInteger]), "_collect_", [function (each) {return smalltalk.send(self, "_next", []);}]); + return smalltalk.send(smalltalk.send(smalltalk.ClassBuilder || ClassBuilder, "_new", []), "_superclass_subclass_instanceVariableNames_package_", [self, aString, aString2, aString3]); return self; } }), -smalltalk.Random); +smalltalk.UndefinedObject); + +smalltalk.addMethod( +unescape('_new'), +smalltalk.method({ +selector: unescape('new'), +fn: function () { + var self = this; + smalltalk.send(self, "_error_", ["You cannot create new instances of UndefinedObject. Use nil"]); + return self; +} +}), +smalltalk.UndefinedObject.klass); diff --git a/amber/src/js/Kernel-Objects.js b/amber/src/js/Kernel-Objects.js index 3d5cc22ed86..cefa23ddca0 100644 --- a/amber/src/js/Kernel-Objects.js +++ b/amber/src/js/Kernel-Objects.js @@ -1,6 +1,23 @@ smalltalk.addPackage('Kernel-Objects', {}); smalltalk.addClass('Object', smalltalk.nil, [], 'Kernel-Objects'); smalltalk.Object.comment=unescape('*Object%20is%20the%20root%20of%20the%20Smalltalk%20class%20system*.%20All%20classes%20in%20the%20system%20are%20subclasses%20of%20Object.%0A%0AObject%20provides%20default%20behavior%20common%20to%20all%20normal%20objects%2C%20such%20as%3A%20%0A%0A-%20access%0A-%20copying%0A-%20comparison%0A-%20error%20handling%0A-%20message%20sending%0A-%20reflection%0A%0AAlso%20utility%20messages%20that%20all%20objects%20should%20respond%20to%20are%20defined%20here.%0A%0AObject%20has%20no%20instance%20variable.%0A%0A%23%23Access%0A%0AInstance%20variables%20can%20be%20accessed%20with%20%60%23instVarAt%3A%60%20and%20%60%23instVarAt%3Aput%3A%60.%20%60Object%20%3E%3E%20instanceVariableNames%60%20answers%20a%20collection%20of%20all%20instance%20variable%20names.%0AAccessing%20JavaScript%20properties%20of%20an%20object%20is%20done%20through%20%60%23basicAt%3A%60%2C%20%60%23basicAt%3Aput%3A%60%20and%20%60basicDelete%3A%60.%0A%0A%23%23Copying%0A%0ACopying%20an%20object%20is%20handled%20by%20%60%23copy%60%20and%20%60%23deepCopy%60.%20The%20first%20one%20performs%20a%20shallow%20copy%20of%20the%20receiver%2C%20while%20the%20second%20one%20performs%20a%20deep%20copy.%0AThe%20hook%20method%20%60%23postCopy%60%20can%20be%20overriden%20in%20subclasses%20to%20copy%20fields%20as%20necessary%20to%20complete%20the%20full%20copy.%20It%20will%20be%20sent%20by%20the%20copy%20of%20the%20receiver.%0A%0A%23%23Comparison%0A%0AObjects%20understand%20equality%20%20%60%23%3D%60%20and%20identity%20%60%23%3D%3D%60%20comparison.%0A%0A%23%23Error%20handling%0A%0A-%20%60%23halt%60%20is%20the%20typical%20message%20to%20use%20for%20inserting%20breakpoints%20during%20debugging.%0A-%20%60%23error%3A%60%20throws%20a%20generic%20error%20exception%0A-%20%60%23doesNotUnderstand%3A%60%20handles%20the%20fact%20that%20there%20was%20an%20attempt%20to%20send%20the%20given%20message%20to%20the%20receiver%20but%20the%20receiver%20does%20not%20understand%20this%20message.%0A%20%20Overriding%20this%20message%20can%20be%20useful%20to%20implement%20proxies%20for%20example.') +smalltalk.addMethod( +unescape('__minus_gt'), +smalltalk.method({ +selector: unescape('-%3E'), +category: 'converting', +fn: function (anObject) { + var self = this; + return smalltalk.send(smalltalk.Association || Association, "_key_value_", [self, anObject]); + return self; +}, +args: ["anObject"], +source: unescape('-%3E%20anObject%0A%09%5EAssociation%20key%3A%20self%20value%3A%20anObject'), +messageSends: ["key:value:"], +referencedClasses: ["Association"] +}), +smalltalk.Object); + smalltalk.addMethod( unescape('__eq'), smalltalk.method({ @@ -19,125 +36,207 @@ referencedClasses: [] smalltalk.Object); smalltalk.addMethod( -unescape('_%7E_eq'), +unescape('__eq_eq'), smalltalk.method({ -selector: unescape('%7E%3D'), +selector: unescape('%3D%3D'), category: 'comparing', fn: function (anObject) { var self = this; - return smalltalk.send(smalltalk.send(self, "__eq", [anObject]), "__eq", [false]); + return smalltalk.send(smalltalk.send(self, "_identityHash", []), "__eq", [smalltalk.send(anObject, "_identityHash", [])]); return self; }, args: ["anObject"], -source: unescape('%7E%3D%20anObject%0A%09%5E%28self%20%3D%20anObject%29%20%3D%20false'), -messageSends: [unescape("%3D")], +source: unescape('%3D%3D%20anObject%0A%09%5Eself%20identityHash%20%3D%20anObject%20identityHash'), +messageSends: [unescape("%3D"), "identityHash"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_initialize'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', +selector: unescape('asJSON'), +category: 'converting', +fn: function (){ +var self=this; +var variables=nil; +(variables=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", [])); +smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_allInstanceVariableNames", []), "_do_", [(function(each){return smalltalk.send(variables, "_at_put_", [each, smalltalk.send(smalltalk.send(self, "_instVarAt_", [each]), "_asJSON", [])]);})]); +return variables; +return self;}, +args: [], +source: unescape('asJSON%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20HashedCollection%20new.%0A%09self%20class%20allInstanceVariableNames%20do%3A%20%5B%3Aeach%20%7C%0A%09%09variables%20at%3A%20each%20put%3A%20%28self%20instVarAt%3A%20each%29%20asJSON%5D.%0A%09%5Evariables'), +messageSends: ["new", "do:", "allInstanceVariableNames", "class", "at:put:", "asJSON", "instVarAt:"], +referencedClasses: ["HashedCollection"] +}), +smalltalk.Object); + +smalltalk.addMethod( +unescape('_asJSONString'), +smalltalk.method({ +selector: unescape('asJSONString'), +category: 'converting', +fn: function (){ +var self=this; +return smalltalk.send((smalltalk.JSON || JSON), "_stringify_", [smalltalk.send(self, "_asJSON", [])]); +return self;}, +args: [], +source: unescape('asJSONString%0A%09%5EJSON%20stringify%3A%20self%20asJSON'), +messageSends: ["stringify:", "asJSON"], +referencedClasses: ["JSON"] +}), +smalltalk.Object); + +smalltalk.addMethod( +unescape('_asJavascript'), +smalltalk.method({ +selector: unescape('asJavascript'), +category: 'converting', fn: function () { var self = this; + return smalltalk.send(self, "_asString", []); return self; }, args: [], -source: unescape('initialize'), -messageSends: [], +source: unescape('asJavascript%0A%09%5Eself%20asString'), +messageSends: ["asString"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_yourself'), +unescape('_asString'), smalltalk.method({ -selector: unescape('yourself'), -category: 'accessing', +selector: unescape('asString'), +category: 'converting', fn: function () { var self = this; - return self; + return smalltalk.send(self, "_printString", []); return self; }, args: [], -source: unescape('yourself%0A%09%5Eself'), +source: unescape('asString%0A%09%5Eself%20printString'), +messageSends: ["printString"], +referencedClasses: [] +}), +smalltalk.Object); + +smalltalk.addMethod( +unescape('_basicAt_'), +smalltalk.method({ +selector: unescape('basicAt%3A'), +category: 'accessing', +fn: function (aString) { + var self = this; + return self[aString]; + return self; +}, +args: ["aString"], +source: unescape('basicAt%3A%20aString%0A%09%3Creturn%20self%5BaString%5D%3E'), messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_class'), +unescape('_basicAt_put_'), smalltalk.method({ -selector: unescape('class'), +selector: unescape('basicAt%3Aput%3A'), category: 'accessing', -fn: function () { +fn: function (aString, anObject) { var self = this; - return self.klass; + return self[aString] = anObject; return self; }, -args: [], -source: unescape('class%0A%09%3Creturn%20self.klass%3E'), +args: ["aString", "anObject"], +source: unescape('basicAt%3A%20aString%20put%3A%20anObject%0A%09%3Creturn%20self%5BaString%5D%20%3D%20anObject%3E'), messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_size'), +unescape('_basicDelete_'), smalltalk.method({ -selector: unescape('size'), +selector: unescape('basicDelete%3A'), category: 'accessing', -fn: function () { +fn: function (aString) { var self = this; - smalltalk.send(self, "_error_", ["Object not indexable"]); + delete self[aString]; + return aString; return self; }, -args: [], -source: unescape('size%0A%09self%20error%3A%20%27Object%20not%20indexable%27'), -messageSends: ["error:"], +args: ["aString"], +source: unescape('basicDelete%3A%20aString%0A%20%20%20%20%3Cdelete%20self%5BaString%5D%3B%20return%20aString%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_copy'), +unescape('_basicPerform_'), smalltalk.method({ -selector: unescape('copy'), -category: 'copying', +selector: unescape('basicPerform%3A'), +category: 'message handling', +fn: function (aSymbol) { + var self = this; + return smalltalk.send(self, "_basicPerform_withArguments_", [aSymbol, []]); + return self; +}, +args: ["aSymbol"], +source: unescape('basicPerform%3A%20aSymbol%20%0A%09%5Eself%20basicPerform%3A%20aSymbol%20withArguments%3A%20%23%28%29'), +messageSends: ["basicPerform:withArguments:"], +referencedClasses: [] +}), +smalltalk.Object); + +smalltalk.addMethod( +unescape('_basicPerform_withArguments_'), +smalltalk.method({ +selector: unescape('basicPerform%3AwithArguments%3A'), +category: 'message handling', +fn: function (aSymbol, aCollection) { + var self = this; + return self[aSymbol].apply(self, aCollection); + return self; +}, +args: ["aSymbol", "aCollection"], +source: unescape('basicPerform%3A%20aSymbol%20withArguments%3A%20aCollection%0A%09%3Creturn%20self%5BaSymbol%5D.apply%28self%2C%20aCollection%29%3B%3E'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.Object); + +smalltalk.addMethod( +unescape('_class'), +smalltalk.method({ +selector: unescape('class'), +category: 'accessing', fn: function () { var self = this; - return smalltalk.send(smalltalk.send(self, "_shallowCopy", []), "_postCopy", []); + return self.klass; return self; }, args: [], -source: unescape('copy%0A%09%5Eself%20shallowCopy%20postCopy'), -messageSends: ["postCopy", "shallowCopy"], +source: unescape('class%0A%09%3Creturn%20self.klass%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_shallowCopy'), +unescape('_copy'), smalltalk.method({ -selector: unescape('shallowCopy'), +selector: unescape('copy'), category: 'copying', fn: function () { var self = this; - var copy = self.klass._new(); - for (var i in self) { - if (/^@.+/.test(i)) { - copy[i] = self[i]; - } - } - return copy; + return smalltalk.send(smalltalk.send(self, "_shallowCopy", []), "_postCopy", []); return self; }, args: [], -source: unescape('shallowCopy%0A%09%3C%0A%09%20%20%20%20var%20copy%20%3D%20self.klass._new%28%29%3B%0A%09%20%20%20%20for%28var%20i%20in%20self%29%20%7B%0A%09%09if%28/%5E@.+/.test%28i%29%29%20%7B%0A%09%09%20%20%20%20copy%5Bi%5D%20%3D%20self%5Bi%5D%3B%0A%09%09%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20copy%3B%0A%09%3E'), -messageSends: [], +source: unescape('copy%0A%09%5Eself%20shallowCopy%20postCopy'), +messageSends: ["postCopy", "shallowCopy"], referencedClasses: [] }), smalltalk.Object); @@ -166,280 +265,224 @@ referencedClasses: [] smalltalk.Object); smalltalk.addMethod( -unescape('_postCopy'), +unescape('_deprecatedAPI'), smalltalk.method({ -selector: unescape('postCopy'), -category: 'copying', +selector: unescape('deprecatedAPI'), +category: 'error handling', fn: function () { var self = this; + smalltalk.send(typeof console == "undefined" ? nil : console, "_warn_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.getThisContext(), "_home", []), "_asString", []), "__comma", [unescape("%20is%20deprecated%21%20%28in%20")]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.getThisContext(), "_home", []), "_home", []), "_asString", [])]), "__comma", [unescape("%29")])]); return self; }, args: [], -source: unescape('postCopy'), -messageSends: [], +source: unescape('deprecatedAPI%0A%09%22Just%20a%20simple%20way%20to%20deprecate%20methods.%0A%09%23deprecatedAPI%20is%20in%20the%20%27error%20handling%27%20protocol%20even%20if%20it%20doesn%27t%20throw%20an%20error%2C%0A%09but%20it%20could%20in%20the%20future.%22%0A%09console%20warn%3A%20thisContext%20home%20asString%2C%20%27%20is%20deprecated%21%20%28in%20%27%2C%20thisContext%20home%20home%20asString%2C%20%27%29%27'), +messageSends: ["warn:", unescape("%2C"), "asString", "home"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('__minus_gt'), +unescape('_doesNotUnderstand_'), smalltalk.method({ -selector: unescape('-%3E'), -category: 'converting', -fn: function (anObject) { +selector: unescape('doesNotUnderstand%3A'), +category: 'error handling', +fn: function (aMessage) { var self = this; - return smalltalk.send(smalltalk.Association || Association, "_key_value_", [self, anObject]); + (function ($rec) {smalltalk.send($rec, "_receiver_", [self]);smalltalk.send($rec, "_message_", [aMessage]);return smalltalk.send($rec, "_signal", []);}(smalltalk.send(smalltalk.MessageNotUnderstood || MessageNotUnderstood, "_new", []))); return self; }, -args: ["anObject"], -source: unescape('-%3E%20anObject%0A%09%5EAssociation%20key%3A%20self%20value%3A%20anObject'), -messageSends: ["key:value:"], -referencedClasses: ["Association"] +args: ["aMessage"], +source: unescape('doesNotUnderstand%3A%20aMessage%0A%09MessageNotUnderstood%20new%0A%09%09receiver%3A%20self%3B%0A%09%09message%3A%20aMessage%3B%0A%09%09signal'), +messageSends: ["receiver:", "message:", "signal", "new"], +referencedClasses: ["MessageNotUnderstood"] }), smalltalk.Object); smalltalk.addMethod( -unescape('_asString'), +unescape('_error_'), smalltalk.method({ -selector: unescape('asString'), -category: 'converting', -fn: function () { +selector: unescape('error%3A'), +category: 'error handling', +fn: function (aString) { var self = this; - return smalltalk.send(self, "_printString", []); + smalltalk.send(smalltalk.Error || Error, "_signal_", [aString]); return self; }, -args: [], -source: unescape('asString%0A%09%5Eself%20printString'), -messageSends: ["printString"], -referencedClasses: [] +args: ["aString"], +source: unescape('error%3A%20aString%0A%09Error%20signal%3A%20aString'), +messageSends: ["signal:"], +referencedClasses: ["Error"] }), smalltalk.Object); smalltalk.addMethod( -unescape('_asJavascript'), +unescape('_halt'), smalltalk.method({ -selector: unescape('asJavascript'), -category: 'converting', +selector: unescape('halt'), +category: 'error handling', fn: function () { var self = this; - return smalltalk.send(self, "_asString", []); + smalltalk.send(self, "_error_", ["Halt encountered"]); return self; }, args: [], -source: unescape('asJavascript%0A%09%5Eself%20asString'), -messageSends: ["asString"], +source: unescape('halt%0A%09self%20error%3A%20%27Halt%20encountered%27'), +messageSends: ["error:"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_perform_'), +unescape('_identityHash'), smalltalk.method({ -selector: unescape('perform%3A'), -category: 'message handling', -fn: function (aSymbol) { +selector: unescape('identityHash'), +category: 'accessing', +fn: function () { var self = this; - return smalltalk.send(self, "_perform_withArguments_", [aSymbol, []]); - return self; -}, -args: ["aSymbol"], -source: unescape('perform%3A%20aSymbol%0A%09%5Eself%20perform%3A%20aSymbol%20withArguments%3A%20%23%28%29'), -messageSends: ["perform:withArguments:"], -referencedClasses: [] -}), -smalltalk.Object); - -smalltalk.addMethod( -unescape('_perform_withArguments_'), -smalltalk.method({ -selector: unescape('perform%3AwithArguments%3A'), -category: 'message handling', -fn: function (aSymbol, aCollection) { - var self = this; - return smalltalk.send(self, "_basicPerform_withArguments_", [smalltalk.send(aSymbol, "_asSelector", []), aCollection]); - return self; -}, -args: ["aSymbol", "aCollection"], -source: unescape('perform%3A%20aSymbol%20withArguments%3A%20aCollection%0A%09%5Eself%20basicPerform%3A%20aSymbol%20asSelector%20withArguments%3A%20aCollection'), -messageSends: ["basicPerform:withArguments:", "asSelector"], -referencedClasses: [] -}), -smalltalk.Object); - -smalltalk.addMethod( -unescape('_instVarAt_'), -smalltalk.method({ -selector: unescape('instVarAt%3A'), -category: 'accessing', -fn: function (aSymbol) { - var self = this; - var varname = nil; - varname = smalltalk.send(aSymbol, "_asString", []); - return self["@" + varname]; + return self.identityHash || (self.identityHash = smalltalk.nextId()); return self; }, -args: ["aSymbol"], -source: unescape('instVarAt%3A%20aSymbol%0A%09%7C%20varname%20%7C%0A%09varname%20%3A%3D%20aSymbol%20asString.%0A%09%3Creturn%20self%5B%27@%27+varname%5D%3E'), -messageSends: ["asString"], +args: [], +source: unescape('identityHash%0A%09%3Creturn%20self.identityHash%20%7C%7C%20%28self.identityHash%20%3D%20smalltalk.nextId%28%29%29%3B%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_instVarAt_put_'), +unescape('_ifNil_'), smalltalk.method({ -selector: unescape('instVarAt%3Aput%3A'), -category: 'accessing', -fn: function (aSymbol, anObject) { +selector: unescape('ifNil%3A'), +category: 'testing', +fn: function (aBlock) { var self = this; - var varname = nil; - varname = smalltalk.send(aSymbol, "_asString", []); - self["@" + varname] = anObject; return self; -}, -args: ["aSymbol", "anObject"], -source: unescape('instVarAt%3A%20aSymbol%20put%3A%20anObject%0A%09%7C%20varname%20%7C%0A%09varname%20%3A%3D%20aSymbol%20asString.%0A%09%3Cself%5B%27@%27%20+%20varname%5D%20%3D%20anObject%3E'), -messageSends: ["asString"], -referencedClasses: [] -}), -smalltalk.Object); - -smalltalk.addMethod( -unescape('_basicAt_'), -smalltalk.method({ -selector: unescape('basicAt%3A'), -category: 'accessing', -fn: function (aString) { - var self = this; - return self[aString]; return self; }, -args: ["aString"], -source: unescape('basicAt%3A%20aString%0A%09%3Creturn%20self%5BaString%5D%3E'), +args: ["aBlock"], +source: unescape('ifNil%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself'), messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_basicAt_put_'), +unescape('_ifNil_ifNotNil_'), smalltalk.method({ -selector: unescape('basicAt%3Aput%3A'), -category: 'accessing', -fn: function (aString, anObject) { +selector: unescape('ifNil%3AifNotNil%3A'), +category: 'testing', +fn: function (aBlock, anotherBlock) { var self = this; - return self[aString] = anObject; + return smalltalk.send(anotherBlock, "_value", []); return self; }, -args: ["aString", "anObject"], -source: unescape('basicAt%3A%20aString%20put%3A%20anObject%0A%09%3Creturn%20self%5BaString%5D%20%3D%20anObject%3E'), -messageSends: [], +args: ["aBlock", "anotherBlock"], +source: unescape('ifNil%3A%20aBlock%20ifNotNil%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EanotherBlock%20value'), +messageSends: ["value"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_error_'), +unescape('_ifNotNil_'), smalltalk.method({ -selector: unescape('error%3A'), -category: 'error handling', -fn: function (aString) { +selector: unescape('ifNotNil%3A'), +category: 'testing', +fn: function (aBlock) { var self = this; - smalltalk.send(smalltalk.Error || Error, "_signal_", [aString]); + return smalltalk.send(aBlock, "_value", []); return self; }, -args: ["aString"], -source: unescape('error%3A%20aString%0A%09Error%20signal%3A%20aString'), -messageSends: ["signal:"], -referencedClasses: ["Error"] +args: ["aBlock"], +source: unescape('ifNotNil%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EaBlock%20value'), +messageSends: ["value"], +referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_subclassResponsibility'), +unescape('_ifNotNil_ifNil_'), smalltalk.method({ -selector: unescape('subclassResponsibility'), -category: 'error handling', -fn: function () { +selector: unescape('ifNotNil%3AifNil%3A'), +category: 'testing', +fn: function (aBlock, anotherBlock) { var self = this; - smalltalk.send(self, "_error_", ["This method is a responsibility of a subclass"]); + return smalltalk.send(aBlock, "_value", []); return self; }, -args: [], -source: unescape('subclassResponsibility%0A%09self%20error%3A%20%27This%20method%20is%20a%20responsibility%20of%20a%20subclass%27'), -messageSends: ["error:"], +args: ["aBlock", "anotherBlock"], +source: unescape('ifNotNil%3A%20aBlock%20ifNil%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EaBlock%20value'), +messageSends: ["value"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_shouldNotImplement'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('shouldNotImplement'), -category: 'error handling', +selector: unescape('initialize'), +category: 'initialization', fn: function () { var self = this; - smalltalk.send(self, "_error_", [smalltalk.send("This method should not be implemented in ", "__comma", [smalltalk.send(smalltalk.send(self, "_class", []), "_name", [])])]); return self; }, args: [], -source: unescape('shouldNotImplement%0A%09self%20error%3A%20%27This%20method%20should%20not%20be%20implemented%20in%20%27%2C%20self%20class%20name'), -messageSends: ["error:", unescape("%2C"), "name", "class"], +source: unescape('initialize'), +messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_try_catch_'), +unescape('_instVarAt_'), smalltalk.method({ -selector: unescape('try%3Acatch%3A'), -category: 'error handling', -fn: function (aBlock, anotherBlock) { +selector: unescape('instVarAt%3A'), +category: 'accessing', +fn: function (aSymbol) { var self = this; - try { - result = aBlock(); - } catch (e) { - result = anotherBlock(e); - } - return result; + var varname = nil; + varname = smalltalk.send(aSymbol, "_asString", []); + return self["@" + varname]; return self; }, -args: ["aBlock", "anotherBlock"], -source: unescape('try%3A%20aBlock%20catch%3A%20anotherBlock%0A%09%3Ctry%7Bresult%20%3D%20aBlock%28%29%7D%20catch%28e%29%20%7Bresult%20%3D%20anotherBlock%28e%29%7D%3B%0A%09return%20result%3B%3E'), -messageSends: [], +args: ["aSymbol"], +source: unescape('instVarAt%3A%20aSymbol%0A%09%7C%20varname%20%7C%0A%09varname%20%3A%3D%20aSymbol%20asString.%0A%09%3Creturn%20self%5B%27@%27+varname%5D%3E'), +messageSends: ["asString"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_printString'), +unescape('_instVarAt_put_'), smalltalk.method({ -selector: unescape('printString'), -category: 'printing', -fn: function () { +selector: unescape('instVarAt%3Aput%3A'), +category: 'accessing', +fn: function (aSymbol, anObject) { var self = this; - return smalltalk.send("a ", "__comma", [smalltalk.send(smalltalk.send(self, "_class", []), "_name", [])]); + var varname = nil; + varname = smalltalk.send(aSymbol, "_asString", []); + self["@" + varname] = anObject; return self; }, -args: [], -source: unescape('printString%0A%09%5E%27a%20%27%2C%20self%20class%20name'), -messageSends: [unescape("%2C"), "name", "class"], +args: ["aSymbol", "anObject"], +source: unescape('instVarAt%3A%20aSymbol%20put%3A%20anObject%0A%09%7C%20varname%20%7C%0A%09varname%20%3A%3D%20aSymbol%20asString.%0A%09%3Cself%5B%27@%27%20+%20varname%5D%20%3D%20anObject%3E'), +messageSends: ["asString"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_printNl'), +unescape('_isClass'), smalltalk.method({ -selector: unescape('printNl'), -category: 'printing', +selector: unescape('isClass'), +category: 'testing', fn: function () { var self = this; - console.log(self); + return false; return self; }, args: [], -source: unescape('printNl%0A%09%3Cconsole.log%28self%29%3E'), +source: unescape('isClass%0A%09%5Efalse'), messageSends: [], referencedClasses: [] }), @@ -480,77 +523,77 @@ referencedClasses: [] smalltalk.Object); smalltalk.addMethod( -unescape('_ifNil_'), +unescape('_isMetaclass'), smalltalk.method({ -selector: unescape('ifNil%3A'), +selector: unescape('isMetaclass'), category: 'testing', -fn: function (aBlock) { +fn: function () { var self = this; - return self; + return false; return self; }, -args: ["aBlock"], -source: unescape('ifNil%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself'), +args: [], +source: unescape('isMetaclass%0A%09%5Efalse'), messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_ifNil_ifNotNil_'), +unescape('_isNil'), smalltalk.method({ -selector: unescape('ifNil%3AifNotNil%3A'), +selector: unescape('isNil'), category: 'testing', -fn: function (aBlock, anotherBlock) { +fn: function () { var self = this; - return smalltalk.send(anotherBlock, "_value", []); + return false; return self; }, -args: ["aBlock", "anotherBlock"], -source: unescape('ifNil%3A%20aBlock%20ifNotNil%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EanotherBlock%20value'), -messageSends: ["value"], +args: [], +source: unescape('isNil%0A%09%5Efalse'), +messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_ifNotNil_'), +unescape('_isNumber'), smalltalk.method({ -selector: unescape('ifNotNil%3A'), +selector: unescape('isNumber'), category: 'testing', -fn: function (aBlock) { +fn: function () { var self = this; - return smalltalk.send(aBlock, "_value", []); + return false; return self; }, -args: ["aBlock"], -source: unescape('ifNotNil%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EaBlock%20value'), -messageSends: ["value"], +args: [], +source: unescape('isNumber%0A%09%5Efalse'), +messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_ifNotNil_ifNil_'), +unescape('_isParseFailure'), smalltalk.method({ -selector: unescape('ifNotNil%3AifNil%3A'), +selector: unescape('isParseFailure'), category: 'testing', -fn: function (aBlock, anotherBlock) { +fn: function () { var self = this; - return smalltalk.send(aBlock, "_value", []); + return false; return self; }, -args: ["aBlock", "anotherBlock"], -source: unescape('ifNotNil%3A%20aBlock%20ifNil%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EaBlock%20value'), -messageSends: ["value"], +args: [], +source: unescape('isParseFailure%0A%09%5Efalse'), +messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_isNil'), +unescape('_isString'), smalltalk.method({ -selector: unescape('isNil'), +selector: unescape('isString'), category: 'testing', fn: function () { var self = this; @@ -558,251 +601,309 @@ fn: function () { return self; }, args: [], -source: unescape('isNil%0A%09%5Efalse'), +source: unescape('isString%0A%09%5Efalse'), messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_notNil'), +unescape('_isSymbol'), smalltalk.method({ -selector: unescape('notNil'), +selector: unescape('isSymbol'), category: 'testing', fn: function () { var self = this; - return smalltalk.send(smalltalk.send(self, "_isNil", []), "_not", []); + return false; return self; }, args: [], -source: unescape('notNil%0A%09%5Eself%20isNil%20not'), -messageSends: ["not", "isNil"], -referencedClasses: [] +source: unescape('isSymbol%0A%09%5Efalse'), +messageSends: [], +referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_isClass'), +unescape('_log_block_'), smalltalk.method({ -selector: unescape('isClass'), +selector: unescape('log%3Ablock%3A'), +category: 'printing', +fn: function (aString, aBlock) { + var self = this; + var result = nil; + smalltalk.send(typeof console == "undefined" ? nil : console, "_log_", [smalltalk.send(smalltalk.send(aString, "__comma", [" time: "]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [function () {return result = smalltalk.send(aBlock, "_value", []);}]), "_printString", [])])]); + return result; + return self; +}, +args: ["aString", "aBlock"], +source: unescape('log%3A%20aString%20block%3A%20aBlock%0A%0A%09%7C%20result%20%7C%0A%09console%20log%3A%20%20aString%2C%20%20%27%20time%3A%20%27%2C%20%28Date%20millisecondsToRun%3A%20%5Bresult%20%3A%3D%20aBlock%20value%5D%29%20printString.%0A%09%5Eresult'), +messageSends: ["log:", unescape("%2C"), "printString", "millisecondsToRun:", "value"], +referencedClasses: ["Date"] +}), +smalltalk.Object); + +smalltalk.addMethod( +unescape('_notNil'), +smalltalk.method({ +selector: unescape('notNil'), category: 'testing', fn: function () { var self = this; - return false; + return smalltalk.send(smalltalk.send(self, "_isNil", []), "_not", []); return self; }, args: [], -source: unescape('isClass%0A%09%5Efalse'), -messageSends: [], +source: unescape('notNil%0A%09%5Eself%20isNil%20not'), +messageSends: ["not", "isNil"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_isMetaclass'), +unescape('_perform_'), smalltalk.method({ -selector: unescape('isMetaclass'), -category: 'testing', -fn: function () { +selector: unescape('perform%3A'), +category: 'message handling', +fn: function (aSymbol) { var self = this; - return false; + return smalltalk.send(self, "_perform_withArguments_", [aSymbol, []]); return self; }, -args: [], -source: unescape('isMetaclass%0A%09%5Efalse'), -messageSends: [], +args: ["aSymbol"], +source: unescape('perform%3A%20aSymbol%0A%09%5Eself%20perform%3A%20aSymbol%20withArguments%3A%20%23%28%29'), +messageSends: ["perform:withArguments:"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_isNumber'), +unescape('_perform_withArguments_'), smalltalk.method({ -selector: unescape('isNumber'), -category: 'testing', +selector: unescape('perform%3AwithArguments%3A'), +category: 'message handling', +fn: function (aSymbol, aCollection) { + var self = this; + return smalltalk.send(self, "_basicPerform_withArguments_", [smalltalk.send(aSymbol, "_asSelector", []), aCollection]); + return self; +}, +args: ["aSymbol", "aCollection"], +source: unescape('perform%3A%20aSymbol%20withArguments%3A%20aCollection%0A%09%5Eself%20basicPerform%3A%20aSymbol%20asSelector%20withArguments%3A%20aCollection'), +messageSends: ["basicPerform:withArguments:", "asSelector"], +referencedClasses: [] +}), +smalltalk.Object); + +smalltalk.addMethod( +unescape('_postCopy'), +smalltalk.method({ +selector: unescape('postCopy'), +category: 'copying', fn: function () { var self = this; - return false; return self; }, args: [], -source: unescape('isNumber%0A%09%5Efalse'), +source: unescape('postCopy'), messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_isString'), +unescape('_printNl'), smalltalk.method({ -selector: unescape('isString'), -category: 'testing', +selector: unescape('printNl'), +category: 'printing', fn: function () { var self = this; - return false; + console.log(self); return self; }, args: [], -source: unescape('isString%0A%09%5Efalse'), +source: unescape('printNl%0A%09%3Cconsole.log%28self%29%3E'), messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_isParseFailure'), +unescape('_printString'), smalltalk.method({ -selector: unescape('isParseFailure'), -category: 'testing', +selector: unescape('printString'), +category: 'printing', fn: function () { var self = this; - return false; + return smalltalk.send("a ", "__comma", [smalltalk.send(smalltalk.send(self, "_class", []), "_name", [])]); return self; }, args: [], -source: unescape('isParseFailure%0A%09%5Efalse'), -messageSends: [], +source: unescape('printString%0A%09%5E%27a%20%27%2C%20self%20class%20name'), +messageSends: [unescape("%2C"), "name", "class"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_basicPerform_'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('basicPerform%3A'), -category: 'message handling', -fn: function (aSymbol) { +selector: unescape('shallowCopy'), +category: 'copying', +fn: function () { var self = this; - return smalltalk.send(self, "_basicPerform_withArguments_", [aSymbol, []]); + var copy = self.klass._new(); + for (var i in self) { + if (/^@.+/.test(i)) { + copy[i] = self[i]; + } + } + return copy; return self; }, -args: ["aSymbol"], -source: unescape('basicPerform%3A%20aSymbol%20%0A%09%5Eself%20basicPerform%3A%20aSymbol%20withArguments%3A%20%23%28%29'), -messageSends: ["basicPerform:withArguments:"], +args: [], +source: unescape('shallowCopy%0A%09%3C%0A%09%20%20%20%20var%20copy%20%3D%20self.klass._new%28%29%3B%0A%09%20%20%20%20for%28var%20i%20in%20self%29%20%7B%0A%09%09if%28/%5E@.+/.test%28i%29%29%20%7B%0A%09%09%20%20%20%20copy%5Bi%5D%20%3D%20self%5Bi%5D%3B%0A%09%09%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20copy%3B%0A%09%3E'), +messageSends: [], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_basicPerform_withArguments_'), +unescape('_shouldNotImplement'), smalltalk.method({ -selector: unescape('basicPerform%3AwithArguments%3A'), -category: 'message handling', -fn: function (aSymbol, aCollection) { +selector: unescape('shouldNotImplement'), +category: 'error handling', +fn: function () { var self = this; - return self[aSymbol].apply(self, aCollection); + smalltalk.send(self, "_error_", [smalltalk.send("This method should not be implemented in ", "__comma", [smalltalk.send(smalltalk.send(self, "_class", []), "_name", [])])]); return self; }, -args: ["aSymbol", "aCollection"], -source: unescape('basicPerform%3A%20aSymbol%20withArguments%3A%20aCollection%0A%09%3Creturn%20self%5BaSymbol%5D.apply%28self%2C%20aCollection%29%3B%3E'), -messageSends: [], +args: [], +source: unescape('shouldNotImplement%0A%09self%20error%3A%20%27This%20method%20should%20not%20be%20implemented%20in%20%27%2C%20self%20class%20name'), +messageSends: ["error:", unescape("%2C"), "name", "class"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_basicDelete_'), +unescape('_size'), smalltalk.method({ -selector: unescape('basicDelete%3A'), +selector: unescape('size'), category: 'accessing', -fn: function (aString) { +fn: function () { var self = this; - delete self[aString]; - return aString; + smalltalk.send(self, "_error_", ["Object not indexable"]); return self; }, -args: ["aString"], -source: unescape('basicDelete%3A%20aString%0A%20%20%20%20%3Cdelete%20self%5BaString%5D%3B%20return%20aString%3E'), -messageSends: [], +args: [], +source: unescape('size%0A%09self%20error%3A%20%27Object%20not%20indexable%27'), +messageSends: ["error:"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_doesNotUnderstand_'), +unescape('_storeOn_'), smalltalk.method({ -selector: unescape('doesNotUnderstand%3A'), -category: 'error handling', -fn: function (aMessage) { +selector: unescape('storeOn%3A'), +category: 'printing', +fn: function (aStream) { var self = this; - (function ($rec) {smalltalk.send($rec, "_receiver_", [self]);smalltalk.send($rec, "_message_", [aMessage]);return smalltalk.send($rec, "_signal", []);}(smalltalk.send(smalltalk.MessageNotUnderstood || MessageNotUnderstood, "_new", []))); + smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(self, "_printString", [])]); return self; }, -args: ["aMessage"], -source: unescape('doesNotUnderstand%3A%20aMessage%0A%09MessageNotUnderstood%20new%0A%09%09receiver%3A%20self%3B%0A%09%09message%3A%20aMessage%3B%0A%09%09signal'), -messageSends: ["receiver:", "message:", "signal", "new"], -referencedClasses: ["MessageNotUnderstood"] +args: ["aStream"], +source: unescape('storeOn%3A%20aStream%0A%09aStream%20nextPutAll%3A%20self%20printString'), +messageSends: ["nextPutAll:", "printString"], +referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_storeString'), smalltalk.method({ -selector: unescape('asJSON'), -category: 'converting', -fn: function (){ -var self=this; -var variables=nil; -(variables=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", [])); -smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_allInstanceVariableNames", []), "_do_", [(function(each){return smalltalk.send(variables, "_at_put_", [each, smalltalk.send(smalltalk.send(self, "_instVarAt_", [each]), "_asJSON", [])]);})]); -return variables; -return self;}, +selector: unescape('storeString'), +category: 'printing', +fn: function () { + var self = this; + return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (s) {return smalltalk.send(self, "_storeOn_", [s]);}]); + return self; +}, args: [], -source: unescape('asJSON%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20HashedCollection%20new.%0A%09self%20class%20allInstanceVariableNames%20do%3A%20%5B%3Aeach%20%7C%0A%09%09variables%20at%3A%20each%20put%3A%20%28self%20instVarAt%3A%20each%29%20asJSON%5D.%0A%09%5Evariables'), -messageSends: ["new", "do:", "allInstanceVariableNames", "class", "at:put:", "asJSON", "instVarAt:"], -referencedClasses: ["HashedCollection"] +source: unescape('storeString%0A%09%22Answer%20a%20String%20representation%20of%20the%20receiver%20from%20which%20the%20receiver%20%0A%09can%20be%20reconstructed.%22%0A%0A%09%5E%20String%20streamContents%3A%20%5B%3As%20%7C%20self%20storeOn%3A%20s%5D'), +messageSends: ["streamContents:", "storeOn:"], +referencedClasses: ["String"] }), smalltalk.Object); smalltalk.addMethod( -unescape('_halt'), +unescape('_subclassResponsibility'), smalltalk.method({ -selector: unescape('halt'), +selector: unescape('subclassResponsibility'), category: 'error handling', fn: function () { var self = this; - smalltalk.send(self, "_error_", ["Halt encountered"]); + smalltalk.send(self, "_error_", ["This method is a responsibility of a subclass"]); return self; }, args: [], -source: unescape('halt%0A%09self%20error%3A%20%27Halt%20encountered%27'), +source: unescape('subclassResponsibility%0A%09self%20error%3A%20%27This%20method%20is%20a%20responsibility%20of%20a%20subclass%27'), messageSends: ["error:"], referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('_log_block_'), +unescape('_try_catch_'), smalltalk.method({ -selector: unescape('log%3Ablock%3A'), -category: 'printing', -fn: function (aString, aBlock) { +selector: unescape('try%3Acatch%3A'), +category: 'error handling', +fn: function (aBlock, anotherBlock) { var self = this; - var result = nil; - smalltalk.send(typeof console == "undefined" ? nil : console, "_log_", [smalltalk.send(smalltalk.send(aString, "__comma", [" time: "]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [function () {return result = smalltalk.send(aBlock, "_value", []);}]), "_printString", [])])]); + try { + result = aBlock(); + } catch (e) { + result = anotherBlock(e); + } return result; return self; }, -args: ["aString", "aBlock"], -source: unescape('log%3A%20aString%20block%3A%20aBlock%0A%0A%09%7C%20result%20%7C%0A%09console%20log%3A%20%20aString%2C%20%20%27%20time%3A%20%27%2C%20%28Date%20millisecondsToRun%3A%20%5Bresult%20%3A%3D%20aBlock%20value%5D%29%20printString.%0A%09%5Eresult'), -messageSends: ["log:", unescape("%2C"), "printString", "millisecondsToRun:", "value"], -referencedClasses: ["Date"] +args: ["aBlock", "anotherBlock"], +source: unescape('try%3A%20aBlock%20catch%3A%20anotherBlock%0A%09%3Ctry%7Bresult%20%3D%20aBlock%28%29%7D%20catch%28e%29%20%7Bresult%20%3D%20anotherBlock%28e%29%7D%3B%0A%09return%20result%3B%3E'), +messageSends: [], +referencedClasses: [] }), smalltalk.Object); smalltalk.addMethod( -unescape('__eq_eq'), +unescape('_yourself'), smalltalk.method({ -selector: unescape('%3D%3D'), +selector: unescape('yourself'), +category: 'accessing', +fn: function () { + var self = this; + return self; + return self; +}, +args: [], +source: unescape('yourself%0A%09%5Eself'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.Object); + +smalltalk.addMethod( +unescape('_%7E_eq'), +smalltalk.method({ +selector: unescape('%7E%3D'), category: 'comparing', fn: function (anObject) { var self = this; - return smalltalk.send(smalltalk.send(self, "_identityHash", []), "__eq", [smalltalk.send(anObject, "_identityHash", [])]); + return smalltalk.send(smalltalk.send(self, "__eq", [anObject]), "__eq", [false]); return self; }, args: ["anObject"], -source: unescape('%3D%3D%20anObject%0A%09%5Eself%20identityHash%20%3D%20anObject%20identityHash'), -messageSends: [unescape("%3D"), "identityHash"], +source: unescape('%7E%3D%20anObject%0A%09%5E%28self%20%3D%20anObject%29%20%3D%20false'), +messageSends: [unescape("%3D")], referencedClasses: [] }), smalltalk.Object); @@ -824,1995 +925,2020 @@ referencedClasses: [] }), smalltalk.Object); + smalltalk.addMethod( -unescape('_deprecatedAPI'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('deprecatedAPI'), -category: 'error handling', +selector: unescape('initialize'), +category: 'initialization', fn: function () { var self = this; - smalltalk.send(typeof console == "undefined" ? nil : console, "_warn_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.getThisContext(), "_home", []), "_asString", []), "__comma", [unescape("%20is%20deprecated%21%20%28in%20")]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.getThisContext(), "_home", []), "_home", []), "_asString", [])]), "__comma", [unescape("%29")])]); return self; }, args: [], -source: unescape('deprecatedAPI%0A%09%22Just%20a%20simple%20way%20to%20deprecate%20methods.%0A%09%23deprecatedAPI%20is%20in%20the%20%27error%20handling%27%20protocol%20even%20if%20it%20doesn%27t%20throw%20an%20error%2C%0A%09but%20it%20could%20in%20the%20future.%22%0A%09console%20warn%3A%20thisContext%20home%20asString%2C%20%27%20is%20deprecated%21%20%28in%20%27%2C%20thisContext%20home%20home%20asString%2C%20%27%29%27'), -messageSends: ["warn:", unescape("%2C"), "asString", "home"], +source: unescape('initialize%0A%09%22no%20op%22'), +messageSends: [], referencedClasses: [] }), -smalltalk.Object); +smalltalk.Object.klass); + +smalltalk.addClass('Boolean', smalltalk.Object, [], 'Kernel-Objects'); +smalltalk.Boolean.comment=unescape('Boolean%20wraps%20the%20JavaScript%20%60Boolean%28%29%60%20constructor.%20The%20%60true%60%20and%20%60false%60%20objects%20are%20the%20JavaScript%20boolean%20objects.%0A%0ABoolean%20defines%20the%20protocol%20for%20logic%20testing%20operations%20and%20conditional%20control%20structures%20for%20the%20logical%20values.%0ABoolean%20instances%20are%20weither%20%60true%60%20or%20%60false%60.') smalltalk.addMethod( -unescape('_storeString'), +unescape('_%26'), smalltalk.method({ -selector: unescape('storeString'), -category: 'printing', -fn: function () { +selector: unescape('%26'), +category: 'controlling', +fn: function (aBoolean) { var self = this; - return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (s) {return smalltalk.send(self, "_storeOn_", [s]);}]); + if (self == true) { + return aBoolean; + } else { + return false; + } return self; }, -args: [], -source: unescape('storeString%0A%09%22Answer%20a%20String%20representation%20of%20the%20receiver%20from%20which%20the%20receiver%20%0A%09can%20be%20reconstructed.%22%0A%0A%09%5E%20String%20streamContents%3A%20%5B%3As%20%7C%20self%20storeOn%3A%20s%5D'), -messageSends: ["streamContents:", "storeOn:"], -referencedClasses: ["String"] +args: ["aBoolean"], +source: unescape('%26%20aBoolean%0A%09%3C%0A%09%20%20%20%20if%28self%20%3D%3D%20true%29%20%7B%0A%09%09return%20aBoolean%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%09return%20false%3B%0A%09%20%20%20%20%7D%0A%09%3E'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Object); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_storeOn_'), +unescape('__eq'), smalltalk.method({ -selector: unescape('storeOn%3A'), -category: 'printing', -fn: function (aStream) { +selector: unescape('%3D'), +category: 'comparing', +fn: function (aBoolean) { var self = this; - smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(self, "_printString", [])]); + try { + ($receiver = smalltalk.send(smalltalk.send(aBoolean, "_class", []), "__eq", [smalltalk.send(self, "_class", [])])).klass === smalltalk.Boolean ? !$receiver ? function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}]); + return Boolean(self == true) == aBoolean; + return self; + } catch (e) { + if (e.name === "stReturn" && e.selector === "__eq") { + return e.fn(); + } + throw e; + } +}, +args: ["aBoolean"], +source: unescape('%3D%20aBoolean%0A%09aBoolean%20class%20%3D%20self%20class%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09%3Creturn%20Boolean%28self%20%3D%3D%20true%29%20%3D%3D%20aBoolean%3E'), +messageSends: ["ifFalse:", unescape("%3D"), "class"], +referencedClasses: [] +}), +smalltalk.Boolean); + +smalltalk.addMethod( +unescape('_and_'), +smalltalk.method({ +selector: unescape('and%3A'), +category: 'controlling', +fn: function (aBlock) { + var self = this; + return smalltalk.send(smalltalk.send(self, "__eq", [true]), "_ifTrue_ifFalse_", [aBlock, function () {return false;}]); return self; }, -args: ["aStream"], -source: unescape('storeOn%3A%20aStream%0A%09aStream%20nextPutAll%3A%20self%20printString'), -messageSends: ["nextPutAll:", "printString"], +args: ["aBlock"], +source: unescape('and%3A%20aBlock%0A%09%5Eself%20%3D%20true%0A%09%20%20%20%20ifTrue%3A%20aBlock%0A%09%20%20%20%20ifFalse%3A%20%5Bfalse%5D'), +messageSends: ["ifTrue:ifFalse:", unescape("%3D")], referencedClasses: [] }), -smalltalk.Object); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_asJSONString'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('asJSONString'), +selector: unescape('asJSON'), category: 'converting', fn: function (){ var self=this; -return smalltalk.send((smalltalk.JSON || JSON), "_stringify_", [smalltalk.send(self, "_asJSON", [])]); +return self; return self;}, args: [], -source: unescape('asJSONString%0A%09%5EJSON%20stringify%3A%20self%20asJSON'), -messageSends: ["stringify:", "asJSON"], -referencedClasses: ["JSON"] +source: unescape('asJSON%0A%09%5Eself'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Object); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_identityHash'), +unescape('_deepCopy'), smalltalk.method({ -selector: unescape('identityHash'), -category: 'accessing', +selector: unescape('deepCopy'), +category: 'copying', fn: function () { var self = this; - return self.identityHash || (self.identityHash = smalltalk.nextId()); + return self; return self; }, args: [], -source: unescape('identityHash%0A%09%3Creturn%20self.identityHash%20%7C%7C%20%28self.identityHash%20%3D%20smalltalk.nextId%28%29%29%3B%3E'), +source: unescape('deepCopy%0A%09%5Eself'), messageSends: [], referencedClasses: [] }), -smalltalk.Object); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_isSymbol'), +unescape('_ifFalse_'), smalltalk.method({ -selector: unescape('isSymbol'), -category: 'testing', -fn: function () { +selector: unescape('ifFalse%3A'), +category: 'controlling', +fn: function (aBlock) { var self = this; - return false; + return smalltalk.send(self, "_ifTrue_ifFalse_", [function () {return nil;}, aBlock]); return self; }, -args: [], -source: unescape('isSymbol%0A%09%5Efalse'), -messageSends: [], +args: ["aBlock"], +source: unescape('ifFalse%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself%20ifTrue%3A%20%5B%5D%20ifFalse%3A%20aBlock'), +messageSends: ["ifTrue:ifFalse:"], referencedClasses: [] }), -smalltalk.Object); - +smalltalk.Boolean); smalltalk.addMethod( -unescape('_initialize'), +unescape('_ifFalse_ifTrue_'), smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', -fn: function () { +selector: unescape('ifFalse%3AifTrue%3A'), +category: 'controlling', +fn: function (aBlock, anotherBlock) { var self = this; + return smalltalk.send(self, "_ifTrue_ifFalse_", [anotherBlock, aBlock]); return self; }, -args: [], -source: unescape('initialize%0A%09%22no%20op%22'), -messageSends: [], +args: ["aBlock", "anotherBlock"], +source: unescape('ifFalse%3A%20aBlock%20ifTrue%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself%20ifTrue%3A%20anotherBlock%20ifFalse%3A%20aBlock'), +messageSends: ["ifTrue:ifFalse:"], referencedClasses: [] }), -smalltalk.Object.klass); +smalltalk.Boolean); +smalltalk.addMethod( +unescape('_ifTrue_'), +smalltalk.method({ +selector: unescape('ifTrue%3A'), +category: 'controlling', +fn: function (aBlock) { + var self = this; + return smalltalk.send(self, "_ifTrue_ifFalse_", [aBlock, function () {return nil;}]); + return self; +}, +args: ["aBlock"], +source: unescape('ifTrue%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself%20ifTrue%3A%20aBlock%20ifFalse%3A%20%5B%5D'), +messageSends: ["ifTrue:ifFalse:"], +referencedClasses: [] +}), +smalltalk.Boolean); -smalltalk.addClass('Smalltalk', smalltalk.Object, [], 'Kernel-Objects'); -smalltalk.Smalltalk.comment=unescape('Smalltalk%20has%20only%20one%20instance%2C%20accessed%20with%20%60Smalltalk%20current%60.%20%0AIt%20represents%20the%20global%20JavaScript%20variable%20%60smalltalk%60%20declared%20in%20%60js/boot.js%60.%0A%0AThe%20%60smalltalk%60%20object%20holds%20all%20class%20and%20packages%20defined%20in%20the%20system.%0A%0A%23%23%20Classes%0A%0AClasses%20can%20be%20accessed%20using%20the%20following%20methods%3A%0A%0A-%20%60%23classes%60%20answers%20the%20full%20list%20of%20Smalltalk%20classes%20in%20the%20system%0A-%20%60%23at%3A%60%20answers%20a%20specific%20class%20of%20%60nil%60%0A%0A%23%23%20Packages%0A%0APackages%20can%20be%20accessed%20using%20the%20following%20methods%3A%0A%0A-%20%60%23packages%60%20answers%20the%20full%20list%20of%20packages%0A-%20%60%23packageAt%3A%60%20answers%20a%20specific%20class%20of%20%60nil%60%0A%0A__note%3A__%20classes%20and%20packages%20are%20accessed%20using%20strings%2C%20not%20symbols%0A%0A%23%23%20Parsing%0A%0AThe%20%60%23parse%3A%60%20method%20is%20used%20to%20parse%20Smalltalk%20source%20code.%20%0AIt%20requires%20the%20%60Compiler%60%20package%20and%20the%20%60js/parser.js%60%20parser%20file%20in%20order%20to%20work') smalltalk.addMethod( -unescape('_classes'), +unescape('_ifTrue_ifFalse_'), smalltalk.method({ -selector: unescape('classes'), -category: 'accessing', -fn: function () { +selector: unescape('ifTrue%3AifFalse%3A'), +category: 'controlling', +fn: function (aBlock, anotherBlock) { var self = this; - return self.classes(); + if (self == true) { + return aBlock(); + } else { + return anotherBlock(); + } return self; }, -args: [], -source: unescape('classes%0A%09%3Creturn%20self.classes%28%29%3E'), +args: ["aBlock", "anotherBlock"], +source: unescape('ifTrue%3A%20aBlock%20ifFalse%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3C%0A%09%20%20%20%20if%28self%20%3D%3D%20true%29%20%7B%0A%09%09return%20aBlock%28%29%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%09return%20anotherBlock%28%29%3B%0A%09%20%20%20%20%7D%0A%09%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_at_'), +unescape('_not'), smalltalk.method({ -selector: unescape('at%3A'), -category: 'accessing', -fn: function (aString) { +selector: unescape('not'), +category: 'controlling', +fn: function () { var self = this; - return self[aString]; + return smalltalk.send(self, "__eq", [false]); return self; }, -args: ["aString"], -source: unescape('at%3A%20aString%0A%09%3Creturn%20self%5BaString%5D%3E'), -messageSends: [], +args: [], +source: unescape('not%0A%09%5Eself%20%3D%20false'), +messageSends: [unescape("%3D")], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_removeClass_'), +unescape('_or_'), smalltalk.method({ -selector: unescape('removeClass%3A'), -category: 'classes', -fn: function (aClass) { +selector: unescape('or%3A'), +category: 'controlling', +fn: function (aBlock) { var self = this; - ($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_asString", []), "__comma", [unescape("%20is%20a%20Metaclass%20and%20cannot%20be%20removed%21")])]);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_asString", []), "__comma", [unescape("%20is%20a%20Metaclass%20and%20cannot%20be%20removed%21")])]);}]); - smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [function (each) {return smalltalk.send(aClass, "_removeCompiledMethod_", [each]);}]); - smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [function (each) {return smalltalk.send(smalltalk.send(aClass, "_class", []), "_removeCompiledMethod_", [each]);}]); - smalltalk.send(self, "_basicDelete_", [smalltalk.send(aClass, "_name", [])]); + return smalltalk.send(smalltalk.send(self, "__eq", [true]), "_ifTrue_ifFalse_", [function () {return true;}, aBlock]); return self; }, -args: ["aClass"], -source: unescape('removeClass%3A%20aClass%0A%09aClass%20isMetaclass%20ifTrue%3A%20%5Bself%20error%3A%20aClass%20asString%2C%20%27%20is%20a%20Metaclass%20and%20cannot%20be%20removed%21%27%5D.%0A%09aClass%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09aClass%20removeCompiledMethod%3A%20each%5D.%0A%09aClass%20class%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09aClass%20class%20removeCompiledMethod%3A%20each%5D.%0A%09self%20basicDelete%3A%20aClass%20name'), -messageSends: ["ifTrue:", "isMetaclass", "error:", unescape("%2C"), "asString", "do:", "values", "methodDictionary", "removeCompiledMethod:", "class", "basicDelete:", "name"], +args: ["aBlock"], +source: unescape('or%3A%20aBlock%0A%09%5Eself%20%3D%20true%0A%09%20%20%20%20ifTrue%3A%20%5Btrue%5D%0A%09%20%20%20%20ifFalse%3A%20aBlock'), +messageSends: ["ifTrue:ifFalse:", unescape("%3D")], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_basicParse_'), +unescape('_printString'), smalltalk.method({ -selector: unescape('basicParse%3A'), -category: 'accessing', -fn: function (aString) { +selector: unescape('printString'), +category: 'printing', +fn: function () { var self = this; - return smalltalk.parser.parse(aString); + return self.toString(); return self; }, -args: ["aString"], -source: unescape('basicParse%3A%20aString%0A%09%3Creturn%20smalltalk.parser.parse%28aString%29%3E'), +args: [], +source: unescape('printString%0A%09%3Creturn%20self.toString%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_parse_'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('parse%3A'), -category: 'accessing', -fn: function (aString) { +selector: unescape('shallowCopy'), +category: 'copying', +fn: function () { var self = this; - var result = nil; - smalltalk.send(self, "_try_catch_", [function () {return result = smalltalk.send(self, "_basicParse_", [aString]);}, function (ex) {return smalltalk.send(smalltalk.send(self, "_parseError_parsing_", [ex, aString]), "_signal", []);}]); - return result; + return self; return self; }, -args: ["aString"], -source: unescape('parse%3A%20aString%0A%09%7C%20result%20%7C%20%0A%09self%20try%3A%20%5Bresult%20%3A%3D%20self%20basicParse%3A%20aString%5D%20catch%3A%20%5B%3Aex%20%7C%20%28self%20parseError%3A%20ex%20parsing%3A%20aString%29%20signal%5D.%0A%09%5Eresult'), -messageSends: ["try:catch:", "basicParse:", "signal", "parseError:parsing:"], +args: [], +source: unescape('shallowCopy%0A%09%5Eself'), +messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Boolean); smalltalk.addMethod( -unescape('_parseError_parsing_'), +unescape('_%7C'), smalltalk.method({ -selector: unescape('parseError%3Aparsing%3A'), -category: 'accessing', -fn: function (anException, aString) { +selector: unescape('%7C'), +category: 'controlling', +fn: function (aBoolean) { var self = this; - var row = nil; - var col = nil; - var message = nil; - var lines = nil; - var badLine = nil; - var code = nil; - row = anException.line; - col = anException.column; - message = anException.message; - lines = smalltalk.send(aString, "_lines", []); - badLine = smalltalk.send(lines, "_at_", [row]); - badLine = smalltalk.send(smalltalk.send(smalltalk.send(badLine, "_copyFrom_to_", [1, ($receiver = col).klass === smalltalk.Number ? $receiver - 1 : smalltalk.send($receiver, "__minus", [1])]), "__comma", [unescape("%20%3D%3D%3D%3E")]), "__comma", [smalltalk.send(badLine, "_copyFrom_to_", [col, smalltalk.send(badLine, "_size", [])])]); - smalltalk.send(lines, "_at_put_", [row, badLine]); - code = smalltalk.send(smalltalk.String || String, "_streamContents_", [function (s) {return smalltalk.send(lines, "_withIndexDo_", [function (l, i) {return smalltalk.send(s, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(i, "_asString", []), "__comma", [": "]), "__comma", [l]), "__comma", [smalltalk.send(smalltalk.String || String, "_lf", [])])]);}]);}]); - return smalltalk.send(smalltalk.send(smalltalk.Error || Error, "_new", []), "_messageText_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("Parse error on line ", "__comma", [row]), "__comma", [" column "]), "__comma", [col]), "__comma", [" : "]), "__comma", [message]), "__comma", [unescape("%20Below%20is%20code%20with%20line%20numbers%20and%20%3D%3D%3D%3E%20marker%20inserted%3A")]), "__comma", [smalltalk.send(smalltalk.String || String, "_lf", [])]), "__comma", [code])]); + if (self == true) { + return true; + } else { + return aBoolean; + } return self; }, -args: ["anException", "aString"], -source: unescape('parseError%3A%20anException%20parsing%3A%20aString%0A%09%7C%20row%20col%20message%20lines%20badLine%20code%20%7C%0A%09%3Crow%20%3D%20anException.line%3B%0A%09col%20%3D%20anException.column%3B%0A%09message%20%3D%20anException.message%3B%3E.%0A%09lines%20%3A%3D%20aString%20lines.%0A%09badLine%20%3A%3D%20lines%20at%3A%20row.%0A%09badLine%20%3A%3D%20%28badLine%20copyFrom%3A%201%20to%3A%20col%20-%201%29%2C%20%27%20%3D%3D%3D%3E%27%2C%20%28badLine%20copyFrom%3A%20%20col%20to%3A%20badLine%20size%29.%0A%09lines%20at%3A%20row%20put%3A%20badLine.%0A%09code%20%3A%3D%20String%20streamContents%3A%20%5B%3As%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lines%20withIndexDo%3A%20%5B%3Al%20%3Ai%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20s%20nextPutAll%3A%20i%20asString%2C%20%27%3A%20%27%2C%20l%2C%20String%20lf%5D%5D.%0A%09%5E%20Error%20new%20messageText%3A%20%28%27Parse%20error%20on%20line%20%27%20%2C%20row%20%2C%20%27%20column%20%27%20%2C%20col%20%2C%20%27%20%3A%20%27%20%2C%20message%20%2C%20%27%20Below%20is%20code%20with%20line%20numbers%20and%20%3D%3D%3D%3E%20marker%20inserted%3A%27%20%2C%20String%20lf%2C%20code%29'), -messageSends: ["lines", "at:", unescape("%2C"), "copyFrom:to:", unescape("-"), "size", "at:put:", "streamContents:", "withIndexDo:", "nextPutAll:", "asString", "lf", "messageText:", "new"], -referencedClasses: ["String", "Error"] +args: ["aBoolean"], +source: unescape('%7C%20aBoolean%0A%09%3C%0A%09%20%20%20%20if%28self%20%3D%3D%20true%29%20%7B%0A%09%09return%20true%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%09return%20aBoolean%3B%0A%09%20%20%20%20%7D%0A%09%3E'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Boolean); + + +smalltalk.addClass('Date', smalltalk.Object, [], 'Kernel-Objects'); +smalltalk.Date.comment=unescape('The%20Date%20class%20is%20used%20to%20work%20with%20dates%20and%20times.%20Therefore%20%60Date%20today%60%20and%20%60Date%20now%60%20are%20both%20valid%20in%0AAmber%20and%20answer%20the%20same%20date%20object.%0A%0ADate%20wraps%20the%20%60Date%28%29%60%20JavaScript%20constructor%2C%20and%20Smalltalk%20date%20objects%20are%20JavaScript%20date%20objects.') smalltalk.addMethod( -unescape('_packages'), +unescape('__plus'), smalltalk.method({ -selector: unescape('packages'), -category: 'packages', -fn: function () { +selector: unescape('+'), +category: 'arithmetic', +fn: function (aDate) { var self = this; - return self.packages.all(); + return self + aDate; return self; }, -args: [], -source: unescape('packages%0A%09%22Return%20all%20Package%20instances%20in%20the%20system.%22%0A%0A%09%3Creturn%20self.packages.all%28%29%3E'), +args: ["aDate"], +source: unescape('+%20aDate%0A%09%3Creturn%20self%20+%20aDate%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Date); smalltalk.addMethod( -unescape('_packageAt_'), +unescape('__minus'), smalltalk.method({ -selector: unescape('packageAt%3A'), -category: 'packages', -fn: function (packageName) { +selector: unescape('-'), +category: 'arithmetic', +fn: function (aDate) { var self = this; - return self.packages[packageName]; + return self - aDate; return self; }, -args: ["packageName"], -source: unescape('packageAt%3A%20packageName%0A%20%20%20%20%20%20%20%3Creturn%20self.packages%5BpackageName%5D%3E'), +args: ["aDate"], +source: unescape('-%20aDate%0A%09%3Creturn%20self%20-%20aDate%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Date); smalltalk.addMethod( -unescape('_packageAt_ifAbsent_'), +unescape('__lt'), smalltalk.method({ -selector: unescape('packageAt%3AifAbsent%3A'), -category: 'packages', -fn: function (packageName, aBlock) { +selector: unescape('%3C'), +category: 'comparing', +fn: function (aDate) { var self = this; - return smalltalk.send(smalltalk.send(self, "_packageAt_", [packageName]), "_ifNil_", [aBlock]); + return self < aDate; return self; }, -args: ["packageName", "aBlock"], -source: unescape('packageAt%3A%20packageName%20ifAbsent%3A%20aBlock%0A%20%20%20%20%20%20%20%5E%28self%20packageAt%3A%20packageName%29%20ifNil%3A%20aBlock'), -messageSends: ["ifNil:", "packageAt:"], +args: ["aDate"], +source: unescape('%3C%20aDate%0A%09%3Creturn%20self%20%3C%20aDate%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Date); smalltalk.addMethod( -unescape('_createPackage_'), +unescape('__lt_eq'), smalltalk.method({ -selector: unescape('createPackage%3A'), -category: 'private', -fn: function (packageName) { +selector: unescape('%3C%3D'), +category: 'comparing', +fn: function (aDate) { var self = this; - return smalltalk.addPackage(packageName, nil); + return self <= aDate; return self; }, -args: ["packageName"], -source: unescape('createPackage%3A%20packageName%0A%09%22Create%20and%20bind%20a%20new%20package%20with%20given%20name%20and%20return%20it.%22%0A%0A%20%20%20%20%20%20%3Creturn%20smalltalk.addPackage%28packageName%2C%20nil%29%3E'), +args: ["aDate"], +source: unescape('%3C%3D%20aDate%0A%09%3Creturn%20self%20%3C%3D%20aDate%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Date); smalltalk.addMethod( -unescape('_deletePackage_'), +unescape('__gt'), smalltalk.method({ -selector: unescape('deletePackage%3A'), -category: 'private', -fn: function (packageName) { +selector: unescape('%3E'), +category: 'comparing', +fn: function (aDate) { var self = this; - delete smalltalk.packages[packageName]; + return self > aDate; return self; }, -args: ["packageName"], -source: unescape('deletePackage%3A%20packageName%0A%09%22Deletes%20a%20package%20by%20deleting%20its%20binding%2C%20but%20does%20not%20check%20if%20it%20contains%20classes%20etc.%0A%09To%20remove%20a%20package%2C%20use%20%23removePackage%20instead.%22%0A%0A%20%20%20%20%20%20%20%3Cdelete%20smalltalk.packages%5BpackageName%5D%3E'), +args: ["aDate"], +source: unescape('%3E%20aDate%0A%09%3Creturn%20self%20%3E%3E%20aDate%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Date); smalltalk.addMethod( -unescape('_removePackage_'), +unescape('__gt_eq'), smalltalk.method({ -selector: unescape('removePackage%3A'), -category: 'packages', -fn: function (packageName) { +selector: unescape('%3E%3D'), +category: 'comparing', +fn: function (aDate) { var self = this; - var pkg = nil; - pkg = smalltalk.send(self, "_packageAt_ifAbsent_", [packageName, function () {return smalltalk.send(self, "_error_", [smalltalk.send("Missing package: ", "__comma", [packageName])]);}]); - smalltalk.send(smalltalk.send(pkg, "_classes", []), "_do_", [function (each) {return smalltalk.send(self, "_removeClass_", [each]);}]); - smalltalk.send(self, "_deletePackage_", [packageName]); + return self >= aDate; return self; }, -args: ["packageName"], -source: unescape('removePackage%3A%20packageName%0A%09%22Removes%20a%20package%20and%20all%20its%20classes.%22%0A%0A%09%7C%20pkg%20%7C%0A%09pkg%20%3A%3D%20self%20packageAt%3A%20packageName%20ifAbsent%3A%20%5Bself%20error%3A%20%27Missing%20package%3A%20%27%2C%20packageName%5D.%0A%09pkg%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%20%20%20%20%20%20%20%20%09self%20removeClass%3A%20each%5D.%0A%09self%20deletePackage%3A%20packageName'), -messageSends: ["packageAt:ifAbsent:", "error:", unescape("%2C"), "do:", "classes", "removeClass:", "deletePackage:"], +args: ["aDate"], +source: unescape('%3E%3D%20aDate%0A%09%3Creturn%20self%20%3E%3E%3D%20aDate%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Date); smalltalk.addMethod( -unescape('_renamePackage_to_'), +unescape('_asDateString'), smalltalk.method({ -selector: unescape('renamePackage%3Ato%3A'), -category: 'packages', -fn: function (packageName, newName) { +selector: unescape('asDateString'), +category: 'converting', +fn: function () { var self = this; - var pkg = nil; - pkg = smalltalk.send(self, "_packageAt_ifAbsent_", [packageName, function () {return smalltalk.send(self, "_error_", [smalltalk.send("Missing package: ", "__comma", [packageName])]);}]); - ($receiver = smalltalk.send(self, "_packageAt_", [newName])) != nil && - $receiver != undefined ? function () {return smalltalk.send(self, "_error_", [smalltalk.send("Already exists a package called: ", "__comma", [newName])]);}() : nil; - smalltalk.packages[newName] = smalltalk.packages[packageName]; - smalltalk.send(pkg, "_name_", [newName]); - smalltalk.send(self, "_deletePackage_", [packageName]); + return self.toDateString(); return self; }, -args: ["packageName", "newName"], -source: unescape('renamePackage%3A%20packageName%20to%3A%20newName%0A%09%22Rename%20a%20package.%22%0A%0A%09%7C%20pkg%20%7C%0A%09pkg%20%3A%3D%20self%20packageAt%3A%20packageName%20ifAbsent%3A%20%5Bself%20error%3A%20%27Missing%20package%3A%20%27%2C%20packageName%5D.%0A%09%28self%20packageAt%3A%20newName%29%20ifNotNil%3A%20%5Bself%20error%3A%20%27Already%20exists%20a%20package%20called%3A%20%27%2C%20newName%5D.%0A%09%3Csmalltalk.packages%5BnewName%5D%20%3D%20smalltalk.packages%5BpackageName%5D%3E.%0A%09pkg%20name%3A%20newName.%0A%09self%20deletePackage%3A%20packageName.'), -messageSends: ["packageAt:ifAbsent:", "error:", unescape("%2C"), "ifNotNil:", "packageAt:", "name:", "deletePackage:"], +args: [], +source: unescape('asDateString%0A%09%3Creturn%20self.toDateString%28%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Date); smalltalk.addMethod( -unescape('_reservedWords'), +unescape('_asLocaleString'), smalltalk.method({ -selector: unescape('reservedWords'), -category: 'accessing', +selector: unescape('asLocaleString'), +category: 'converting', fn: function () { var self = this; - return self.reservedWords; + return self.toLocaleString(); return self; }, args: [], -source: unescape('reservedWords%0A%09%22JavaScript%20reserved%20words%22%0A%09%3Creturn%20self.reservedWords%3E'), +source: unescape('asLocaleString%0A%09%3Creturn%20self.toLocaleString%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Date); smalltalk.addMethod( -unescape('_createPackage_properties_'), +unescape('_asMilliseconds'), smalltalk.method({ -selector: unescape('createPackage%3Aproperties%3A'), -category: 'private', -fn: function (packageName, aDict) { +selector: unescape('asMilliseconds'), +category: 'converting', +fn: function () { var self = this; - var object = nil; - object = {}; - smalltalk.send(aDict, "_keysAndValuesDo_", [function (key, value) {return object[key] = value;}]); - return smalltalk.addPackage(packageName, object); + return smalltalk.send(self, "_time", []); return self; }, -args: ["packageName", "aDict"], -source: unescape('createPackage%3A%20packageName%20properties%3A%20aDict%0A%09%22Create%20and%20bind%20a%20new%20package%20with%20given%20name%20and%20return%20it.%22%0A%0A%09%7C%20object%20%7C%0A%09%3Cobject%20%3D%20%7B%7D%3B%3E.%0A%09aDict%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%09%3Cobject%5Bkey%5D%20%3D%20value%3E.%0A%09%5D.%0A%20%20%20%20%20%20%20%3Creturn%20smalltalk.addPackage%28packageName%2C%20object%29%3E'), -messageSends: ["keysAndValuesDo:"], +args: [], +source: unescape('asMilliseconds%0A%09%5Eself%20time'), +messageSends: ["time"], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Date); smalltalk.addMethod( -unescape('_readJSObject_'), +unescape('_asNumber'), smalltalk.method({ -selector: unescape('readJSObject%3A'), -category: 'accessing', -fn: function (anObject) { +selector: unescape('asNumber'), +category: 'converting', +fn: function () { var self = this; - return self.readJSObject(anObject); + return smalltalk.send(self, "_asMilliseconds", []); return self; }, -args: ["anObject"], -source: unescape('readJSObject%3A%20anObject%0A%09%3Creturn%20self.readJSObject%28anObject%29%3E'), -messageSends: [], +args: [], +source: unescape('asNumber%0A%09%5Eself%20asMilliseconds'), +messageSends: ["asMilliseconds"], referencedClasses: [] }), -smalltalk.Smalltalk); +smalltalk.Date); smalltalk.addMethod( -unescape('_send_to_arguments_'), +unescape('_asString'), smalltalk.method({ -selector: unescape('send%3Ato%3Aarguments%3A'), -category: 'accessing', -fn: function (aSelector, anObject, aCollection) { +selector: unescape('asString'), +category: 'converting', +fn: function () { var self = this; - var selector = nil; - selector = smalltalk.send(smalltalk.send(aSelector, "_asString", []), "_asSelector", []); - self.send(anObject, selector, aCollection); + return self.toString(); return self; }, -args: ["aSelector", "anObject", "aCollection"], -source: unescape('send%3A%20aSelector%20to%3A%20anObject%20arguments%3A%20aCollection%0A%09%7C%20selector%20%7C%0A%09selector%20%3A%3D%20aSelector%20asString%20asSelector.%0A%09%3Cself.send%28anObject%2C%20selector%2C%20aCollection%29%3E'), -messageSends: ["asSelector", "asString"], +args: [], +source: unescape('asString%0A%09%3Creturn%20self.toString%28%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk); - +smalltalk.Date); -smalltalk.Smalltalk.klass.iVarNames = ['current']; smalltalk.addMethod( -unescape('_current'), +unescape('_asTimeString'), smalltalk.method({ -selector: unescape('current'), -category: 'accessing', +selector: unescape('asTimeString'), +category: 'converting', fn: function () { var self = this; - return smalltalk; + return self.toTimeString(); return self; }, args: [], -source: unescape('current%0A%09%3Creturn%20smalltalk%3E'), +source: unescape('asTimeString%0A%09%3Creturn%20self.toTimeString%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Smalltalk.klass); - +smalltalk.Date); -smalltalk.addClass('Package', smalltalk.Object, ['commitPathJs', 'commitPathSt'], 'Kernel-Objects'); -smalltalk.Package.comment=unescape('A%20Package%20is%20similar%20to%20a%20%22class%20category%22%20typically%20found%20in%20other%20Smalltalks%20like%20Pharo%20or%20Squeak.%20Amber%20does%20not%20have%20class%20categories%20anymore%2C%20it%20had%20in%20the%20beginning%20but%20now%20each%20class%20in%20the%20system%20knows%20which%20package%20it%20belongs%20to.%0A%0AA%20Package%20has%20a%20name%2C%20an%20Array%20of%20%22requires%22%2C%20a%20comment%20and%20a%20Dictionary%20with%20other%20optional%20key%20value%20attributes.%20A%20Package%20can%20also%20be%20queried%20for%20its%20classes%2C%20but%20it%20will%20then%20resort%20to%20a%20reverse%20scan%20of%20all%20classes%20to%20find%20them.%0APackages%20are%20manipulated%20through%20%22Smalltalk%20current%22%2C%20like%20for%20example%20finding%20one%20based%20on%20a%20name%3A%0A%0A%09Smalltalk%20current%20packageAt%3A%20%27Kernel%27%0A%0A...but%20you%20can%20also%20use%3A%0A%0A%09Package%20named%3A%20%27Kernel%27%0A%0AA%20Package%20differs%20slightly%20from%20a%20Monticello%20package%20which%20can%20span%20multiple%20class%20categories%20using%20a%20naming%20convention%20based%20on%20hyphenation.%20But%20just%20as%20in%20Monticello%20a%20Package%20supports%20%22class%20extensions%22%20so%20a%20Package%0Acan%20define%20behaviors%20in%20foreign%20classes%20using%20a%20naming%20convention%20for%20method%20categories%20where%20the%20category%20starts%20with%20an%20asterisk%20and%20then%20the%20name%20of%20the%20owning%20package%20follows.%20This%20can%20easily%20be%20seen%20in%20for%20example%20class%0AString%20where%20the%20method%20category%20%22*IDE%22%20defines%20%23inspectOn%3A%20which%20thus%20is%20a%20method%20belonging%20to%20the%20IDE%20package.%0A%0AYou%20can%20fetch%20a%20package%20from%20the%20server%3A%0A%0A%09Package%20fetch%3A%20%27Additional-Examples%27') smalltalk.addMethod( -unescape('_name'), +unescape('_day'), smalltalk.method({ -selector: unescape('name'), +selector: unescape('day'), category: 'accessing', fn: function () { var self = this; - return self.pkgName; + return smalltalk.send(self, "_dayOfWeek", []); return self; }, args: [], -source: unescape('name%0A%09%3Creturn%20self.pkgName%3E'), -messageSends: [], +source: unescape('day%0A%09%5Eself%20dayOfWeek'), +messageSends: ["dayOfWeek"], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_name_'), +unescape('_day_'), smalltalk.method({ -selector: unescape('name%3A'), +selector: unescape('day%3A'), category: 'accessing', -fn: function (aString) { +fn: function (aNumber) { var self = this; - self.pkgName = aString; + smalltalk.send(self, "_day_", [aNumber]); return self; }, -args: ["aString"], -source: unescape('name%3A%20aString%0A%09%3Cself.pkgName%20%3D%20aString%3E'), -messageSends: [], +args: ["aNumber"], +source: unescape('day%3A%20aNumber%0A%09self%20day%3A%20aNumber'), +messageSends: ["day:"], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_classes'), +unescape('_dayOfMonth'), smalltalk.method({ -selector: unescape('classes'), -category: 'classes', +selector: unescape('dayOfMonth'), +category: 'accessing', fn: function () { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_classes", []), "_select_", [function (c) {return smalltalk.send(smalltalk.send(c, "_package", []), "__eq_eq", [self]);}]); + return self.getDate(); return self; }, args: [], -source: unescape('classes%0A%09%22We%20need%20to%20do%20a%20reverse%20scan.%22%0A%09%5ESmalltalk%20current%20classes%20select%3A%20%5B%3Ac%20%7C%20c%20package%20%3D%3D%20self%5D'), -messageSends: ["select:", "classes", "current", unescape("%3D%3D"), "package"], -referencedClasses: ["Smalltalk"] +source: unescape('dayOfMonth%0A%09%3Creturn%20self.getDate%28%29%3E'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_printString'), +unescape('_dayOfMonth_'), smalltalk.method({ -selector: unescape('printString'), -category: 'printing', -fn: function () { +selector: unescape('dayOfMonth%3A'), +category: 'accessing', +fn: function (aNumber) { var self = this; - return smalltalk.send(self, "_name", []); + self.setDate(aNumber); return self; }, -args: [], -source: unescape('printString%0A%09%5Eself%20name'), -messageSends: ["name"], +args: ["aNumber"], +source: unescape('dayOfMonth%3A%20aNumber%0A%09%3Cself.setDate%28aNumber%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_dependencies'), +unescape('_dayOfWeek'), smalltalk.method({ -selector: unescape('dependencies'), +selector: unescape('dayOfWeek'), category: 'accessing', fn: function () { var self = this; - return smalltalk.send(self, "_propertyAt_ifAbsent_", ["dependencies", function () {return [];}]); + return self.getDay() + 1; return self; }, args: [], -source: unescape('dependencies%0A%09%5Eself%20propertyAt%3A%20%27dependencies%27%20ifAbsent%3A%20%5B%23%28%29%5D'), -messageSends: ["propertyAt:ifAbsent:"], +source: unescape('dayOfWeek%0A%09%3Creturn%20self.getDay%28%29%20+%201%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_dependencies_'), +unescape('_dayOfWeek_'), smalltalk.method({ -selector: unescape('dependencies%3A'), +selector: unescape('dayOfWeek%3A'), category: 'accessing', -fn: function (anArray) { +fn: function (aNumber) { var self = this; - return smalltalk.send(self, "_propertyAt_put_", ["dependencies", anArray]); + return self.setDay(aNumber - 1); return self; }, -args: ["anArray"], -source: unescape('dependencies%3A%20anArray%0A%09%5Eself%20propertyAt%3A%20%27dependencies%27%20put%3A%20anArray'), -messageSends: ["propertyAt:put:"], +args: ["aNumber"], +source: unescape('dayOfWeek%3A%20aNumber%0A%09%3Creturn%20self.setDay%28aNumber%20-%201%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_properties'), +unescape('_hours'), smalltalk.method({ -selector: unescape('properties'), +selector: unescape('hours'), category: 'accessing', fn: function () { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_readJSObject_", [smalltalk.send(self, "_basicAt_", ["properties"])]); + return self.getHours(); return self; }, args: [], -source: unescape('properties%0A%09%5ESmalltalk%20current%20readJSObject%3A%20%28self%20basicAt%3A%20%27properties%27%29'), -messageSends: ["readJSObject:", "current", "basicAt:"], -referencedClasses: ["Smalltalk"] +source: unescape('hours%0A%09%3Creturn%20self.getHours%28%29%3E'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_propertiesAsJSON'), +unescape('_hours_'), smalltalk.method({ -selector: unescape('propertiesAsJSON'), -category: 'private', +selector: unescape('hours%3A'), +category: 'accessing', +fn: function (aNumber) { + var self = this; + self.setHours(aNumber); + return self; +}, +args: ["aNumber"], +source: unescape('hours%3A%20aNumber%0A%09%3Cself.setHours%28aNumber%29%3E'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.Date); + +smalltalk.addMethod( +unescape('_milliseconds'), +smalltalk.method({ +selector: unescape('milliseconds'), +category: 'accessing', fn: function () { var self = this; - return JSON.stringify(self.properties); + return self.getMilliseconds(); return self; }, args: [], -source: unescape('propertiesAsJSON%0A%09%3Creturn%20JSON.stringify%28self.properties%29%3E'), +source: unescape('milliseconds%0A%09%3Creturn%20self.getMilliseconds%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_properties_'), +unescape('_milliseconds_'), smalltalk.method({ -selector: unescape('properties%3A'), +selector: unescape('milliseconds%3A'), category: 'accessing', -fn: function (aDict) { +fn: function (aNumber) { var self = this; - var object = nil; - object = {}; - smalltalk.send(aDict, "_keysAndValuesDo_", [function (key, value) {return object[key] = value;}]); - return self.properties = object; + self.setMilliseconds(aNumber); return self; }, -args: ["aDict"], -source: unescape('properties%3A%20aDict%0A%09%22We%20store%20it%20as%20a%20javascript%20object.%22%0A%09%0A%09%7C%20object%20%7C%0A%09%3Cobject%20%3D%20%7B%7D%3B%3E.%0A%09aDict%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%09%3Cobject%5Bkey%5D%20%3D%20value%3E.%0A%09%5D.%0A%09%3Creturn%20self.properties%20%3D%20object%3E'), -messageSends: ["keysAndValuesDo:"], +args: ["aNumber"], +source: unescape('milliseconds%3A%20aNumber%0A%09%3Cself.setMilliseconds%28aNumber%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_jsProperties'), +unescape('_minutes'), smalltalk.method({ -selector: unescape('jsProperties'), -category: 'private', +selector: unescape('minutes'), +category: 'accessing', fn: function () { var self = this; - return self.properties; + return self.getMinutes(); return self; }, args: [], -source: unescape('jsProperties%0A%09%3Creturn%20self.properties%3E'), +source: unescape('minutes%0A%09%3Creturn%20self.getMinutes%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_jsProperties_'), +unescape('_minutes_'), smalltalk.method({ -selector: unescape('jsProperties%3A'), -category: 'private', -fn: function (aJSObject) { +selector: unescape('minutes%3A'), +category: 'accessing', +fn: function (aNumber) { var self = this; - return self.properties = aJSObject; + self.setMinutes(aNumber); return self; }, -args: ["aJSObject"], -source: unescape('jsProperties%3A%20aJSObject%0A%09%3Creturn%20self.properties%20%3D%20aJSObject%3E'), +args: ["aNumber"], +source: unescape('minutes%3A%20aNumber%0A%09%3Cself.setMinutes%28aNumber%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_propertyAt_'), +unescape('_month'), smalltalk.method({ -selector: unescape('propertyAt%3A'), -category: 'properties', -fn: function (key) { +selector: unescape('month'), +category: 'accessing', +fn: function () { var self = this; - return self.properties[key]; + return self.getMonth() + 1; return self; }, -args: ["key"], -source: unescape('propertyAt%3A%20key%0A%0A%09%3Creturn%20self.properties%5Bkey%5D%3E'), +args: [], +source: unescape('month%0A%09%3Creturn%20self.getMonth%28%29%20+%201%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_propertyAt_put_'), +unescape('_month_'), smalltalk.method({ -selector: unescape('propertyAt%3Aput%3A'), -category: 'properties', -fn: function (key, value) { +selector: unescape('month%3A'), +category: 'accessing', +fn: function (aNumber) { var self = this; - return self.properties[key] = value; + self.setMonth(aNumber - 1); return self; }, -args: ["key", "value"], -source: unescape('propertyAt%3A%20key%20put%3A%20value%0A%0A%09%3Creturn%20self.properties%5Bkey%5D%20%3D%20value%3E'), +args: ["aNumber"], +source: unescape('month%3A%20aNumber%0A%09%3Cself.setMonth%28aNumber%20-%201%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_propertyAt_ifAbsent_'), +unescape('_printString'), smalltalk.method({ -selector: unescape('propertyAt%3AifAbsent%3A'), -category: 'properties', -fn: function (key, block) { +selector: unescape('printString'), +category: 'printing', +fn: function () { var self = this; - return ($receiver = smalltalk.send(self, "_propertyAt_", [key])) == nil || - $receiver == undefined ? function () {return smalltalk.send(block, "_value", []);}() : $receiver; + return smalltalk.send(self, "_asString", []); return self; }, -args: ["key", "block"], -source: unescape('propertyAt%3A%20key%20ifAbsent%3A%20block%0A%0A%09%5E%28self%20propertyAt%3A%20key%29%20ifNil%3A%20%5Bblock%20value%5D'), -messageSends: ["ifNil:", "propertyAt:", "value"], +args: [], +source: unescape('printString%0A%09%5Eself%20asString'), +messageSends: ["asString"], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_commitPathJs'), +unescape('_seconds'), smalltalk.method({ -selector: unescape('commitPathJs'), +selector: unescape('seconds'), category: 'accessing', fn: function () { var self = this; - return ($receiver = self['@commitPathJs']) == nil || - $receiver == undefined ? function () {return smalltalk.send(smalltalk.send(self, "_class", []), "_defaultCommitPathJs", []);}() : $receiver; + return self.getSeconds(); return self; }, args: [], -source: unescape('commitPathJs%0A%09%5E%20commitPathJs%20ifNil%3A%20%5Bself%20class%20defaultCommitPathJs%5D'), -messageSends: ["ifNil:", "defaultCommitPathJs", "class"], +source: unescape('seconds%0A%09%3Creturn%20self.getSeconds%28%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_commitPathJs_'), +unescape('_seconds_'), smalltalk.method({ -selector: unescape('commitPathJs%3A'), +selector: unescape('seconds%3A'), category: 'accessing', -fn: function (aString) { +fn: function (aNumber) { var self = this; - self['@commitPathJs'] = aString; + self.setSeconds(aNumber); return self; }, -args: ["aString"], -source: unescape('commitPathJs%3A%20aString%0A%09commitPathJs%A0%3A%3D%20aString'), +args: ["aNumber"], +source: unescape('seconds%3A%20aNumber%0A%09%3Cself.setSeconds%28aNumber%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_commitPathSt'), +unescape('_time'), smalltalk.method({ -selector: unescape('commitPathSt'), +selector: unescape('time'), category: 'accessing', fn: function () { var self = this; - return ($receiver = self['@commitPathSt']) == nil || - $receiver == undefined ? function () {return smalltalk.send(smalltalk.send(self, "_class", []), "_defaultCommitPathSt", []);}() : $receiver; + return self.getTime(); return self; }, args: [], -source: unescape('commitPathSt%0A%09%5E%20commitPathSt%20ifNil%3A%20%5Bself%20class%20defaultCommitPathSt%5D'), -messageSends: ["ifNil:", "defaultCommitPathSt", "class"], +source: unescape('time%0A%09%3Creturn%20self.getTime%28%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_commitPathSt_'), +unescape('_time_'), smalltalk.method({ -selector: unescape('commitPathSt%3A'), +selector: unescape('time%3A'), category: 'accessing', -fn: function (aString) { +fn: function (aNumber) { var self = this; - self['@commitPathSt'] = aString; + self.setTime(aNumber); return self; }, -args: ["aString"], -source: unescape('commitPathSt%3A%20aString%0A%09commitPathSt%A0%3A%3D%20aString'), +args: ["aNumber"], +source: unescape('time%3A%20aNumber%0A%09%3Cself.setTime%28aNumber%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Package); +smalltalk.Date); smalltalk.addMethod( -unescape('_sortedClasses'), +unescape('_year'), smalltalk.method({ -selector: unescape('sortedClasses'), -category: 'classes', +selector: unescape('year'), +category: 'accessing', fn: function () { var self = this; - return smalltalk.send(smalltalk.send(self, "_classes", []), "_inject_into_", [[], function (acc, each) {return ($receiver = smalltalk.send(acc, "_isEmpty", [])).klass === smalltalk.Boolean ? $receiver ? function () {return function ($rec) {smalltalk.send($rec, "_add_", [each]);return smalltalk.send($rec, "_yourself", []);}(acc);}() : function () {return ($receiver = smalltalk.send(acc, "_includes_", [smalltalk.send(each, "_superclass", [])])).klass === smalltalk.Boolean ? $receiver ? function () {return function ($rec) {smalltalk.send($rec, "_add_", [each]);return smalltalk.send($rec, "_yourself", []);}(acc);}() : function () {return smalltalk.send([each], "__comma", [acc]);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function ($rec) {smalltalk.send($rec, "_add_", [each]);return smalltalk.send($rec, "_yourself", []);}(acc);}, function () {return smalltalk.send([each], "__comma", [acc]);}]);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function ($rec) {smalltalk.send($rec, "_add_", [each]);return smalltalk.send($rec, "_yourself", []);}(acc);}, function () {return ($receiver = smalltalk.send(acc, "_includes_", [smalltalk.send(each, "_superclass", [])])).klass === smalltalk.Boolean ? $receiver ? function () {return function ($rec) {smalltalk.send($rec, "_add_", [each]);return smalltalk.send($rec, "_yourself", []);}(acc);}() : function () {return smalltalk.send([each], "__comma", [acc]);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function ($rec) {smalltalk.send($rec, "_add_", [each]);return smalltalk.send($rec, "_yourself", []);}(acc);}, function () {return smalltalk.send([each], "__comma", [acc]);}]);}]);}]); + return self.getFullYear(); return self; }, args: [], -source: unescape('sortedClasses%0A%09%22Answer%20all%20classes%20in%20the%20receiver%2C%20sorted%20by%20superclass/subclasses%22%0A%09%0A%09%5Eself%20classes%20inject%3A%20%23%28%29%20into%3A%20%5B%3Aacc%20%3Aeach%20%7C%20%0A%09%09acc%20isEmpty%20%0A%09%09%09ifTrue%3A%20%5Bacc%20add%3A%20each%3B%20yourself%5D%0A%09%09%09ifFalse%3A%20%5B%28acc%20includes%3A%20each%20superclass%29%0A%09%09%09%09ifTrue%3A%20%5Bacc%20add%3A%20each%3B%20yourself%5D%0A%09%09%09%09ifFalse%3A%20%5B%7Beach%7D%2C%20acc%5D%5D%5D'), -messageSends: ["inject:into:", "classes", "ifTrue:ifFalse:", "isEmpty", "add:", "yourself", "includes:", "superclass", unescape("%2C")], +source: unescape('year%0A%09%3Creturn%20self.getFullYear%28%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Package); - +smalltalk.Date); -smalltalk.Package.klass.iVarNames = ['defaultCommitPathJs','defaultCommitPathSt']; smalltalk.addMethod( -unescape('_named_'), +unescape('_year_'), smalltalk.method({ -selector: unescape('named%3A'), -category: 'not yet classified', -fn: function (aPackageName) { +selector: unescape('year%3A'), +category: 'accessing', +fn: function (aNumber) { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_packageAt_", [aPackageName]); + self.setFullYear(aNumber); return self; }, -args: ["aPackageName"], -source: unescape('named%3A%20aPackageName%0A%0A%09%5ESmalltalk%20current%20packageAt%3A%20aPackageName'), -messageSends: ["packageAt:", "current"], -referencedClasses: ["Smalltalk"] +args: ["aNumber"], +source: unescape('year%3A%20aNumber%0A%09%3Cself.setFullYear%28aNumber%29%3E'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Package.klass); +smalltalk.Date); + smalltalk.addMethod( -unescape('_named_ifAbsent_'), +unescape('_fromMilliseconds_'), smalltalk.method({ -selector: unescape('named%3AifAbsent%3A'), -category: 'not yet classified', -fn: function (aPackageName, aBlock) { +selector: unescape('fromMilliseconds%3A'), +category: 'instance creation', +fn: function (aNumber) { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_packageAt_ifAbsent_", [aPackageName, aBlock]); + return smalltalk.send(self, "_new_", [aNumber]); return self; }, -args: ["aPackageName", "aBlock"], -source: unescape('named%3A%20aPackageName%20ifAbsent%3A%20aBlock%0A%0A%09%5ESmalltalk%20current%20packageAt%3A%20aPackageName%20ifAbsent%3A%20aBlock'), -messageSends: ["packageAt:ifAbsent:", "current"], -referencedClasses: ["Smalltalk"] +args: ["aNumber"], +source: unescape('fromMilliseconds%3A%20aNumber%0A%09%5Eself%20new%3A%20aNumber'), +messageSends: ["new:"], +referencedClasses: [] }), -smalltalk.Package.klass); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_defaultCommitPathJs'), +unescape('_fromSeconds_'), smalltalk.method({ -selector: unescape('defaultCommitPathJs'), -category: 'commit paths', -fn: function () { +selector: unescape('fromSeconds%3A'), +category: 'instance creation', +fn: function (aNumber) { var self = this; - return ($receiver = self['@defaultCommitPathJs']) == nil || - $receiver == undefined ? function () {return self['@defaultCommitPathJs'] = "js";}() : $receiver; + return smalltalk.send(self, "_fromMilliseconds_", [($receiver = aNumber).klass === smalltalk.Number ? $receiver * 1000 : smalltalk.send($receiver, "__star", [1000])]); return self; }, -args: [], -source: unescape('defaultCommitPathJs%0A%09%5E%20defaultCommitPathJs%20ifNil%3A%20%5B%20defaultCommitPathJs%20%3A%3D%20%27js%27%5D'), -messageSends: ["ifNil:"], +args: ["aNumber"], +source: unescape('fromSeconds%3A%20aNumber%0A%09%5Eself%20fromMilliseconds%3A%20aNumber%20*%201000'), +messageSends: ["fromMilliseconds:", unescape("*")], referencedClasses: [] }), -smalltalk.Package.klass); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_defaultCommitPathJs_'), +unescape('_fromString_'), smalltalk.method({ -selector: unescape('defaultCommitPathJs%3A'), -category: 'commit paths', +selector: unescape('fromString%3A'), +category: 'instance creation', fn: function (aString) { var self = this; - self['@defaultCommitPathJs'] = aString; + return smalltalk.send(self, "_new_", [aString]); return self; }, args: ["aString"], -source: unescape('defaultCommitPathJs%3A%20aString%0A%09defaultCommitPathJs%20%3A%3D%20aString'), -messageSends: [], +source: unescape('fromString%3A%20aString%0A%09%22Example%3A%20Date%20fromString%28%272011/04/15%2000%3A00%3A00%27%29%22%0A%09%5Eself%20new%3A%20aString'), +messageSends: ["new:"], referencedClasses: [] }), -smalltalk.Package.klass); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_defaultCommitPathSt'), +unescape('_millisecondsToRun_'), smalltalk.method({ -selector: unescape('defaultCommitPathSt'), -category: 'commit paths', -fn: function () { +selector: unescape('millisecondsToRun%3A'), +category: 'instance creation', +fn: function (aBlock) { var self = this; - return ($receiver = self['@defaultCommitPathSt']) == nil || - $receiver == undefined ? function () {return self['@defaultCommitPathSt'] = "st";}() : $receiver; + var t = nil; + t = smalltalk.send(smalltalk.Date || Date, "_now", []); + smalltalk.send(aBlock, "_value", []); + return ($receiver = smalltalk.send(smalltalk.Date || Date, "_now", [])).klass === smalltalk.Number ? $receiver - t : smalltalk.send($receiver, "__minus", [t]); return self; }, -args: [], -source: unescape('defaultCommitPathSt%0A%09%5E%20defaultCommitPathSt%20ifNil%3A%20%5B%20defaultCommitPathSt%20%3A%3D%20%27st%27%5D'), -messageSends: ["ifNil:"], -referencedClasses: [] +args: ["aBlock"], +source: unescape('millisecondsToRun%3A%20aBlock%0A%09%7C%20t%20%7C%0A%09t%20%3A%3D%20Date%20now.%0A%09aBlock%20value.%0A%09%5EDate%20now%20-%20t'), +messageSends: ["now", "value", unescape("-")], +referencedClasses: ["Date"] }), -smalltalk.Package.klass); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_defaultCommitPathSt_'), +unescape('_new_'), smalltalk.method({ -selector: unescape('defaultCommitPathSt%3A'), -category: 'commit paths', -fn: function (aString) { +selector: unescape('new%3A'), +category: 'instance creation', +fn: function (anObject) { var self = this; - self['@defaultCommitPathSt'] = aString; + return new Date(anObject); return self; }, -args: ["aString"], -source: unescape('defaultCommitPathSt%3A%20aString%0A%09defaultCommitPathSt%20%3A%3D%20aString'), +args: ["anObject"], +source: unescape('new%3A%20anObject%0A%09%3Creturn%20new%20Date%28anObject%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Package.klass); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_resetCommitPaths'), +unescape('_now'), smalltalk.method({ -selector: unescape('resetCommitPaths'), -category: 'commit paths', +selector: unescape('now'), +category: 'instance creation', fn: function () { var self = this; - self['@defaultCommitPathJs'] = nil; - self['@defaultCommitPathSt'] = nil; + return smalltalk.send(self, "_today", []); return self; }, args: [], -source: unescape('resetCommitPaths%0A%20%20%20%20%20%20%20%20defaultCommitPathJs%20%3A%3D%20nil.%0A%20%20%20%20%20%20%20%20defaultCommitPathSt%20%3A%3D%20nil.'), -messageSends: [], +source: unescape('now%0A%09%5Eself%20today'), +messageSends: ["today"], referencedClasses: [] }), -smalltalk.Package.klass); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_fetch_prefix_'), +unescape('_today'), smalltalk.method({ -selector: unescape('fetch%3Aprefix%3A'), -category: 'loading-storing', -fn: function (aPackageName, aPrefix) { +selector: unescape('today'), +category: 'instance creation', +fn: function () { var self = this; - smalltalk.send(typeof jQuery == "undefined" ? nil : jQuery, "_getScript_onSuccess_", [smalltalk.send(smalltalk.send(aPrefix, "__comma", [aPackageName]), "__comma", [".js"]), function () {return smalltalk.send(smalltalk.Package || Package, "_init_", [aPackageName]);}]); + return smalltalk.send(self, "_new", []); return self; }, -args: ["aPackageName", "aPrefix"], -source: unescape('fetch%3A%20aPackageName%20prefix%3A%20aPrefix%0A%09jQuery%20getScript%3A%20%28aPrefix%20%2C%20aPackageName%20%2C%20%27.js%27%29%20onSuccess%3A%20%5B%20Package%20init%3A%20aPackageName%20%5D'), -messageSends: ["getScript:onSuccess:", unescape("%2C"), "init:"], -referencedClasses: ["Package"] +args: [], +source: unescape('today%0A%09%5Eself%20new'), +messageSends: ["new"], +referencedClasses: [] }), -smalltalk.Package.klass); +smalltalk.Date.klass); + +smalltalk.addClass('Date', smalltalk.Object, [], 'Kernel-Objects'); +smalltalk.Date.comment=unescape('The%20Date%20class%20is%20used%20to%20work%20with%20dates%20and%20times.%20Therefore%20%60Date%20today%60%20and%20%60Date%20now%60%20are%20both%20valid%20in%0AAmber%20and%20answer%20the%20same%20date%20object.%0A%0ADate%20wraps%20the%20%60Date%28%29%60%20JavaScript%20constructor%2C%20and%20Smalltalk%20date%20objects%20are%20JavaScript%20date%20objects.') smalltalk.addMethod( -unescape('_fetch_'), +unescape('__plus'), smalltalk.method({ -selector: unescape('fetch%3A'), -category: 'loading-storing', -fn: function (aPackageName) { +selector: unescape('+'), +category: 'arithmetic', +fn: function (aDate) { var self = this; - smalltalk.send(self, "_fetch_prefix_", [aPackageName, smalltalk.send(smalltalk.send(self, "_defaultCommitPathJs", []), "__comma", [unescape("/")])]); + return self + aDate; return self; }, -args: ["aPackageName"], -source: unescape('fetch%3A%20aPackageName%0A%09self%20fetch%3A%20aPackageName%20prefix%3A%20self%20defaultCommitPathJs%2C%20%27/%27'), -messageSends: ["fetch:prefix:", unescape("%2C"), "defaultCommitPathJs"], +args: ["aDate"], +source: unescape('+%20aDate%0A%09%3Creturn%20self%20+%20aDate%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Package.klass); +smalltalk.Date); smalltalk.addMethod( -unescape('_commitToLocalStorage_'), +unescape('__minus'), smalltalk.method({ -selector: unescape('commitToLocalStorage%3A'), -category: 'loading-storing', -fn: function (aPackageName) { +selector: unescape('-'), +category: 'arithmetic', +fn: function (aDate) { var self = this; - var key = nil; - var sourceCode = nil; - key = smalltalk.send("smalltalk.packages.", "__comma", [aPackageName]); - sourceCode = smalltalk.send(smalltalk.send(smalltalk.Exporter || Exporter, "_new", []), "_exportPackage_", [aPackageName]); - localStorage[key] = escape(sourceCode); + return self - aDate; return self; }, -args: ["aPackageName"], -source: unescape('commitToLocalStorage%3A%20aPackageName%0A%09%7C%20key%20sourceCode%20%7C%0A%09key%20%3A%3D%20%27smalltalk.packages.%27%20%2C%20aPackageName.%0A%09sourceCode%20%3A%3D%20Exporter%20new%20exportPackage%3A%20aPackageName.%0A%09%3ClocalStorage%5Bkey%5D%20%3D%20escape%28sourceCode%29%3E'), -messageSends: [unescape("%2C"), "exportPackage:", "new"], -referencedClasses: ["Exporter"] +args: ["aDate"], +source: unescape('-%20aDate%0A%09%3Creturn%20self%20-%20aDate%3E'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Package.klass); +smalltalk.Date); smalltalk.addMethod( -unescape('_init_'), +unescape('__lt'), smalltalk.method({ -selector: unescape('init%3A'), -category: 'loading-storing', -fn: function (aPackageName) { +selector: unescape('%3C'), +category: 'comparing', +fn: function (aDate) { var self = this; - (function ($rec) {smalltalk.send($rec, "_do_", [function (each) {return smalltalk.init(each);}]);return smalltalk.send($rec, "_do_", [function (each) {return smalltalk.send(each, "_initialize", []);}]);}(smalltalk.send(smalltalk.send(typeof smalltalk == "undefined" ? nil : smalltalk, "_classes", []), "_select_", [function (each) {return each.pkg.pkgName == aPackageName;}]))); + return self < aDate; return self; }, -args: ["aPackageName"], -source: unescape('init%3A%20aPackageName%0A%09%28smalltalk%20classes%20select%3A%20%5B%20%3Aeach%20%7C%20%3Ceach.pkg.pkgName%20%3D%3D%20aPackageName%3E%20%5D%29%0A%09%09do%3A%20%5B%20%3Aeach%20%7C%20%3Csmalltalk.init%28each%29%3E%20%5D%3B%0A%09%09do%3A%20%5B%20%3Aeach%20%7C%20each%20initialize%20%5D'), -messageSends: ["do:", "initialize", "select:", "classes"], +args: ["aDate"], +source: unescape('%3C%20aDate%0A%09%3Creturn%20self%20%3C%20aDate%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Package.klass); - +smalltalk.Date); -smalltalk.addClass('Number', smalltalk.Object, [], 'Kernel-Objects'); -smalltalk.Number.comment=unescape('Number%20holds%20the%20most%20general%20methods%20for%20dealing%20with%20numbers.%20%20%0ANumber%20is%20directly%20mapped%20to%20JavaScript%20Number.%0A%0AMost%20arithmetic%20methods%20like%20%60%23+%60%20%60%23/%60%20%60%23-%60%20%60%23max%3A%60%20are%20directly%20inlined%20into%20javascript.%20%0A%0A%23%23Enumerating%0AA%20Number%20can%20be%20used%20to%20evaluate%20a%20Block%20a%20fixed%20number%20of%20times%3A%0A%0A%095%20timesRepeat%3A%20%5BTranscript%20show%3A%20%27This%20will%20be%20printed%205%20times%27%3B%20cr%5D.%0A%09%0A%091%20to%3A%205%20do%3A%20%5B%3AaNumber%7C%20Transcript%20show%3A%20aNumber%20asString%3B%20cr%5D.%0A%09%0A%091%20to%3A%2010%20by%3A%202%20do%3A%20%5B%3AaNumber%7C%20Transcript%20show%3A%20aNumber%20asString%3B%20cr%5D.') smalltalk.addMethod( -unescape('__eq'), +unescape('__lt_eq'), smalltalk.method({ -selector: unescape('%3D'), +selector: unescape('%3C%3D'), category: 'comparing', -fn: function (aNumber) { +fn: function (aDate) { var self = this; - try { - ($receiver = smalltalk.send(aNumber, "_isNumber", [])).klass === smalltalk.Boolean ? !$receiver ? function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}]); - return Number(self) == aNumber; - return self; - } catch (e) { - if (e.name === "stReturn" && e.selector === "__eq") { - return e.fn(); - } - throw e; - } + return self <= aDate; + return self; }, -args: ["aNumber"], -source: unescape('%3D%20aNumber%0A%09aNumber%20isNumber%20ifFalse%3A%20%5B%5Efalse%5D.%20%0A%09%3Creturn%20Number%28self%29%20%3D%3D%20aNumber%3E'), -messageSends: ["ifFalse:", "isNumber"], +args: ["aDate"], +source: unescape('%3C%3D%20aDate%0A%09%3Creturn%20self%20%3C%3D%20aDate%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( unescape('__gt'), smalltalk.method({ selector: unescape('%3E'), category: 'comparing', -fn: function (aNumber) { +fn: function (aDate) { var self = this; - return self > aNumber; + return self > aDate; return self; }, -args: ["aNumber"], -source: unescape('%3E%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20%3E%3E%20aNumber%3E'), +args: ["aDate"], +source: unescape('%3E%20aDate%0A%09%3Creturn%20self%20%3E%3E%20aDate%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('__lt'), +unescape('__gt_eq'), smalltalk.method({ -selector: unescape('%3C'), +selector: unescape('%3E%3D'), category: 'comparing', -fn: function (aNumber) { +fn: function (aDate) { var self = this; - return self < aNumber; + return self >= aDate; return self; }, -args: ["aNumber"], -source: unescape('%3C%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20%3C%20aNumber%3E'), +args: ["aDate"], +source: unescape('%3E%3D%20aDate%0A%09%3Creturn%20self%20%3E%3E%3D%20aDate%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('__gt_eq'), +unescape('_asDateString'), smalltalk.method({ -selector: unescape('%3E%3D'), -category: 'comparing', -fn: function (aNumber) { +selector: unescape('asDateString'), +category: 'converting', +fn: function () { var self = this; - return self >= aNumber; + return self.toDateString(); return self; }, -args: ["aNumber"], -source: unescape('%3E%3D%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20%3E%3E%3D%20aNumber%3E'), +args: [], +source: unescape('asDateString%0A%09%3Creturn%20self.toDateString%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('__lt_eq'), +unescape('_asLocaleString'), smalltalk.method({ -selector: unescape('%3C%3D'), -category: 'comparing', -fn: function (aNumber) { +selector: unescape('asLocaleString'), +category: 'converting', +fn: function () { var self = this; - return self <= aNumber; + return self.toLocaleString(); return self; }, -args: ["aNumber"], -source: unescape('%3C%3D%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20%3C%3D%20aNumber%3E'), +args: [], +source: unescape('asLocaleString%0A%09%3Creturn%20self.toLocaleString%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('__plus'), +unescape('_asMilliseconds'), smalltalk.method({ -selector: unescape('+'), -category: 'arithmetic', -fn: function (aNumber) { +selector: unescape('asMilliseconds'), +category: 'converting', +fn: function () { var self = this; - return self + aNumber; + return smalltalk.send(self, "_time", []); return self; }, -args: ["aNumber"], -source: unescape('+%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20+%20aNumber%3E'), -messageSends: [], +args: [], +source: unescape('asMilliseconds%0A%09%5Eself%20time'), +messageSends: ["time"], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('__minus'), +unescape('_asNumber'), smalltalk.method({ -selector: unescape('-'), -category: 'arithmetic', -fn: function (aNumber) { +selector: unescape('asNumber'), +category: 'converting', +fn: function () { var self = this; - return self - aNumber; + return smalltalk.send(self, "_asMilliseconds", []); return self; }, -args: ["aNumber"], -source: unescape('-%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20-%20aNumber%3E'), -messageSends: [], +args: [], +source: unescape('asNumber%0A%09%5Eself%20asMilliseconds'), +messageSends: ["asMilliseconds"], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('__star'), +unescape('_asString'), smalltalk.method({ -selector: unescape('*'), -category: 'arithmetic', -fn: function (aNumber) { +selector: unescape('asString'), +category: 'converting', +fn: function () { var self = this; - return self * aNumber; + return self.toString(); return self; }, -args: ["aNumber"], -source: unescape('*%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20*%20aNumber%3E'), +args: [], +source: unescape('asString%0A%09%3Creturn%20self.toString%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('__slash'), +unescape('_asTimeString'), smalltalk.method({ -selector: unescape('/'), -category: 'arithmetic', -fn: function (aNumber) { +selector: unescape('asTimeString'), +category: 'converting', +fn: function () { var self = this; - return self / aNumber; + return self.toTimeString(); return self; }, -args: ["aNumber"], -source: unescape('/%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20/%20aNumber%3E'), +args: [], +source: unescape('asTimeString%0A%09%3Creturn%20self.toTimeString%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_max_'), +unescape('_day'), smalltalk.method({ -selector: unescape('max%3A'), -category: 'arithmetic', -fn: function (aNumber) { +selector: unescape('day'), +category: 'accessing', +fn: function () { var self = this; - return Math.max(self, aNumber); + return smalltalk.send(self, "_dayOfWeek", []); return self; }, -args: ["aNumber"], -source: unescape('max%3A%20aNumber%0A%09%3Creturn%20Math.max%28self%2C%20aNumber%29%3B%3E'), -messageSends: [], +args: [], +source: unescape('day%0A%09%5Eself%20dayOfWeek'), +messageSends: ["dayOfWeek"], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_min_'), +unescape('_day_'), smalltalk.method({ -selector: unescape('min%3A'), -category: 'arithmetic', +selector: unescape('day%3A'), +category: 'accessing', fn: function (aNumber) { var self = this; - return Math.min(self, aNumber); + smalltalk.send(self, "_day_", [aNumber]); return self; }, args: ["aNumber"], -source: unescape('min%3A%20aNumber%0A%09%3Creturn%20Math.min%28self%2C%20aNumber%29%3B%3E'), -messageSends: [], +source: unescape('day%3A%20aNumber%0A%09self%20day%3A%20aNumber'), +messageSends: ["day:"], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_rounded'), +unescape('_dayOfMonth'), smalltalk.method({ -selector: unescape('rounded'), -category: 'converting', +selector: unescape('dayOfMonth'), +category: 'accessing', fn: function () { var self = this; - return Math.round(self); + return self.getDate(); return self; }, args: [], -source: unescape('rounded%0A%09%3Creturn%20Math.round%28self%29%3B%3E'), +source: unescape('dayOfMonth%0A%09%3Creturn%20self.getDate%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_truncated'), +unescape('_dayOfMonth_'), smalltalk.method({ -selector: unescape('truncated'), -category: 'converting', +selector: unescape('dayOfMonth%3A'), +category: 'accessing', +fn: function (aNumber) { + var self = this; + self.setDate(aNumber); + return self; +}, +args: ["aNumber"], +source: unescape('dayOfMonth%3A%20aNumber%0A%09%3Cself.setDate%28aNumber%29%3E'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.Date); + +smalltalk.addMethod( +unescape('_dayOfWeek'), +smalltalk.method({ +selector: unescape('dayOfWeek'), +category: 'accessing', fn: function () { var self = this; - var result = nil; - ($receiver = self >= 0).klass === smalltalk.Boolean ? $receiver ? function () {return result = Math.floor(self);}() : function () {return result = Math.floor(self * -1) * -1;}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return result = Math.floor(self);}, function () {return result = Math.floor(self * -1) * -1;}]); - return result; + return self.getDay() + 1; return self; }, args: [], -source: unescape('truncated%0A%7Cresult%7C%0A%0A%20%20%20%20self%20%3E%3D%200%20%0A%20%20%20%20%20%20%20%20ifTrue%3A%20%5B%3Cresult%20%3D%20Math.floor%28self%29%3B%3E%5D%0A%20%20%20%20%20%20%20%20ifFalse%3A%20%5B%3Cresult%20%3D%20%28Math.floor%28self%20*%20%28-1%29%29%20*%20%28-1%29%29%3B%3E%5D.%0A%0A%20%20%20%20%5E%20result'), -messageSends: ["ifTrue:ifFalse:", unescape("%3E%3D")], +source: unescape('dayOfWeek%0A%09%3Creturn%20self.getDay%28%29%20+%201%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_to_'), +unescape('_dayOfWeek_'), smalltalk.method({ -selector: unescape('to%3A'), -category: 'converting', +selector: unescape('dayOfWeek%3A'), +category: 'accessing', fn: function (aNumber) { var self = this; - var array = nil; - var first = nil; - var last = nil; - var count = nil; - first = smalltalk.send(self, "_truncated", []); - last = ($receiver = smalltalk.send(aNumber, "_truncated", [])).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]); - count = 1; - array = smalltalk.send(smalltalk.Array || Array, "_new", []); - smalltalk.send(($receiver = last).klass === smalltalk.Number ? $receiver - first : smalltalk.send($receiver, "__minus", [first]), "_timesRepeat_", [function () {smalltalk.send(array, "_at_put_", [count, first]);count = ($receiver = count).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return first = ($receiver = first).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);}]); - return array; + return self.setDay(aNumber - 1); return self; }, args: ["aNumber"], -source: unescape('to%3A%20aNumber%0A%09%7C%20array%20first%20last%20count%20%7C%0A%09first%20%3A%3D%20self%20truncated.%0A%09last%20%3A%3D%20aNumber%20truncated%20+%201.%0A%09count%20%3A%3D%201.%0A%09array%20%3A%3D%20Array%20new.%0A%09%28last%20-%20first%29%20timesRepeat%3A%20%5B%0A%09%20%20%20%20array%20at%3A%20count%20put%3A%20first.%0A%09%20%20%20%20count%20%3A%3D%20count%20+%201.%0A%09%20%20%20%20first%20%3A%3D%20first%20+%201%5D.%0A%09%5Earray'), -messageSends: ["truncated", unescape("+"), "new", "timesRepeat:", unescape("-"), "at:put:"], -referencedClasses: ["Array"] +source: unescape('dayOfWeek%3A%20aNumber%0A%09%3Creturn%20self.setDay%28aNumber%20-%201%29%3E'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_timesRepeat_'), +unescape('_hours'), smalltalk.method({ -selector: unescape('timesRepeat%3A'), -category: 'enumerating', -fn: function (aBlock) { - var self = this; - var integer = nil; - var count = nil; - integer = smalltalk.send(self, "_truncated", []); - count = 1; - (function () {while (!function () {return ($receiver = count).klass === smalltalk.Number ? $receiver > self : smalltalk.send($receiver, "__gt", [self]);}()) {(function () {smalltalk.send(aBlock, "_value", []);return count = ($receiver = count).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);}());}}()); +selector: unescape('hours'), +category: 'accessing', +fn: function () { + var self = this; + return self.getHours(); return self; }, -args: ["aBlock"], -source: unescape('timesRepeat%3A%20aBlock%0A%09%7C%20integer%20count%20%7C%0A%09integer%20%3A%3D%20self%20truncated.%0A%09count%20%3A%3D%201.%0A%09%5Bcount%20%3E%20self%5D%20whileFalse%3A%20%5B%0A%09%20%20%20%20aBlock%20value.%0A%09%20%20%20%20count%20%3A%3D%20count%20+%201%5D'), -messageSends: ["truncated", "whileFalse:", unescape("%3E"), "value", unescape("+")], +args: [], +source: unescape('hours%0A%09%3Creturn%20self.getHours%28%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_to_do_'), +unescape('_hours_'), smalltalk.method({ -selector: unescape('to%3Ado%3A'), -category: 'enumerating', -fn: function (stop, aBlock) { +selector: unescape('hours%3A'), +category: 'accessing', +fn: function (aNumber) { var self = this; - var nextValue = nil; - nextValue = self; - (function () {while (function () {return ($receiver = nextValue).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [nextValue]);return nextValue = ($receiver = nextValue).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);}());}}()); + self.setHours(aNumber); return self; }, -args: ["stop", "aBlock"], -source: unescape('to%3A%20stop%20do%3A%20aBlock%0A%09%22Evaluate%20aBlock%20for%20each%20number%20from%20self%20to%20aNumber.%22%0A%09%7C%20nextValue%20%7C%0A%09nextValue%20%3A%3D%20self.%0A%09%5BnextValue%20%3C%3D%20stop%5D%0A%09%09whileTrue%3A%20%0A%09%09%09%5BaBlock%20value%3A%20nextValue.%0A%09%09%09nextValue%20%3A%3D%20nextValue%20+%201%5D'), -messageSends: ["whileTrue:", unescape("%3C%3D"), "value:", unescape("+")], +args: ["aNumber"], +source: unescape('hours%3A%20aNumber%0A%09%3Cself.setHours%28aNumber%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_asString'), +unescape('_milliseconds'), smalltalk.method({ -selector: unescape('asString'), -category: 'converting', +selector: unescape('milliseconds'), +category: 'accessing', fn: function () { var self = this; - return smalltalk.send(self, "_printString", []); + return self.getMilliseconds(); return self; }, args: [], -source: unescape('asString%0A%09%5Eself%20printString'), -messageSends: ["printString"], +source: unescape('milliseconds%0A%09%3Creturn%20self.getMilliseconds%28%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_asJavascript'), +unescape('_milliseconds_'), smalltalk.method({ -selector: unescape('asJavascript'), -category: 'converting', -fn: function () { +selector: unescape('milliseconds%3A'), +category: 'accessing', +fn: function (aNumber) { var self = this; - return smalltalk.send(smalltalk.send(unescape("%28"), "__comma", [smalltalk.send(self, "_printString", [])]), "__comma", [unescape("%29")]); + self.setMilliseconds(aNumber); return self; }, -args: [], -source: unescape('asJavascript%0A%09%5E%27%28%27%2C%20self%20printString%2C%20%27%29%27'), -messageSends: [unescape("%2C"), "printString"], +args: ["aNumber"], +source: unescape('milliseconds%3A%20aNumber%0A%09%3Cself.setMilliseconds%28aNumber%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_printString'), +unescape('_minutes'), smalltalk.method({ -selector: unescape('printString'), -category: 'printing', +selector: unescape('minutes'), +category: 'accessing', fn: function () { var self = this; - return String(self); + return self.getMinutes(); return self; }, args: [], -source: unescape('printString%0A%09%3Creturn%20String%28self%29%3E'), +source: unescape('minutes%0A%09%3Creturn%20self.getMinutes%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_isNumber'), +unescape('_minutes_'), smalltalk.method({ -selector: unescape('isNumber'), -category: 'testing', -fn: function () { +selector: unescape('minutes%3A'), +category: 'accessing', +fn: function (aNumber) { var self = this; - return true; + self.setMinutes(aNumber); return self; }, -args: [], -source: unescape('isNumber%0A%09%5Etrue'), +args: ["aNumber"], +source: unescape('minutes%3A%20aNumber%0A%09%3Cself.setMinutes%28aNumber%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_atRandom'), +unescape('_month'), smalltalk.method({ -selector: unescape('atRandom'), -category: 'converting', +selector: unescape('month'), +category: 'accessing', fn: function () { var self = this; - return ($receiver = smalltalk.send(($receiver = smalltalk.send(smalltalk.send(smalltalk.Random || Random, "_new", []), "_next", [])).klass === smalltalk.Number ? $receiver * self : smalltalk.send($receiver, "__star", [self]), "_truncated", [])).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]); + return self.getMonth() + 1; return self; }, args: [], -source: unescape('atRandom%0A%20%20%20%20%5E%28Random%20new%20next%20*%20self%29%20truncated%20+%201'), -messageSends: [unescape("+"), "truncated", unescape("*"), "next", "new"], -referencedClasses: ["Random"] +source: unescape('month%0A%09%3Creturn%20self.getMonth%28%29%20+%201%3E'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('__at'), +unescape('_month_'), smalltalk.method({ -selector: unescape('@'), -category: 'converting', +selector: unescape('month%3A'), +category: 'accessing', fn: function (aNumber) { var self = this; - return smalltalk.send(smalltalk.Point || Point, "_x_y_", [self, aNumber]); + self.setMonth(aNumber - 1); return self; }, args: ["aNumber"], -source: unescape('@%20aNumber%0A%09%5EPoint%20x%3A%20self%20y%3A%20aNumber'), -messageSends: ["x:y:"], -referencedClasses: ["Point"] +source: unescape('month%3A%20aNumber%0A%09%3Cself.setMonth%28aNumber%20-%201%29%3E'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_asPoint'), +unescape('_printString'), smalltalk.method({ -selector: unescape('asPoint'), -category: 'converting', +selector: unescape('printString'), +category: 'printing', fn: function () { var self = this; - return smalltalk.send(smalltalk.Point || Point, "_x_y_", [self, self]); + return smalltalk.send(self, "_asString", []); return self; }, args: [], -source: unescape('asPoint%0A%09%5EPoint%20x%3A%20self%20y%3A%20self'), -messageSends: ["x:y:"], -referencedClasses: ["Point"] +source: unescape('printString%0A%09%5Eself%20asString'), +messageSends: ["asString"], +referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_clearInterval'), +unescape('_seconds'), smalltalk.method({ -selector: unescape('clearInterval'), -category: 'timeouts/intervals', +selector: unescape('seconds'), +category: 'accessing', fn: function () { var self = this; - clearInterval(Number(self)); + return self.getSeconds(); return self; }, args: [], -source: unescape('clearInterval%0A%09%3CclearInterval%28Number%28self%29%29%3E'), +source: unescape('seconds%0A%09%3Creturn%20self.getSeconds%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_clearTimeout'), +unescape('_seconds_'), smalltalk.method({ -selector: unescape('clearTimeout'), -category: 'timeouts/intervals', -fn: function () { +selector: unescape('seconds%3A'), +category: 'accessing', +fn: function (aNumber) { var self = this; - clearTimeout(Number(self)); + self.setSeconds(aNumber); return self; }, -args: [], -source: unescape('clearTimeout%0A%09%3CclearTimeout%28Number%28self%29%29%3E'), +args: ["aNumber"], +source: unescape('seconds%3A%20aNumber%0A%09%3Cself.setSeconds%28aNumber%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_even'), +unescape('_time'), smalltalk.method({ -selector: unescape('even'), -category: 'testing', +selector: unescape('time'), +category: 'accessing', fn: function () { var self = this; - return smalltalk.send(0, "__eq", [smalltalk.send(self, "_\\\\", [2])]); + return self.getTime(); return self; }, args: [], -source: unescape('even%0A%09%5E%200%20%3D%20%28self%20%5C%5C%202%29'), -messageSends: [unescape("%3D"), unescape("%5C%5C%5C%5C")], +source: unescape('time%0A%09%3Creturn%20self.getTime%28%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_odd'), +unescape('_time_'), smalltalk.method({ -selector: unescape('odd'), -category: 'testing', -fn: function () { +selector: unescape('time%3A'), +category: 'accessing', +fn: function (aNumber) { var self = this; - return smalltalk.send(smalltalk.send(self, "_even", []), "_not", []); + self.setTime(aNumber); return self; }, -args: [], -source: unescape('odd%0A%09%5E%20self%20even%20not'), -messageSends: ["not", "even"], +args: ["aNumber"], +source: unescape('time%3A%20aNumber%0A%09%3Cself.setTime%28aNumber%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_negated'), +unescape('_year'), smalltalk.method({ -selector: unescape('negated'), -category: 'arithmetic', +selector: unescape('year'), +category: 'accessing', fn: function () { var self = this; - return 0 - self; + return self.getFullYear(); return self; }, args: [], -source: unescape('negated%0A%09%5E0%20-%20self'), -messageSends: [unescape("-")], +source: unescape('year%0A%09%3Creturn%20self.getFullYear%28%29%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); smalltalk.addMethod( -unescape('_printShowingDecimalPlaces_'), +unescape('_year_'), smalltalk.method({ -selector: unescape('printShowingDecimalPlaces%3A'), -category: 'printing', -fn: function (placesDesired) { +selector: unescape('year%3A'), +category: 'accessing', +fn: function (aNumber) { var self = this; - return self.toFixed(placesDesired); + self.setFullYear(aNumber); return self; }, -args: ["placesDesired"], -source: unescape('printShowingDecimalPlaces%3A%20placesDesired%0A%09%3Creturn%20self.toFixed%28placesDesired%29%3E'), +args: ["aNumber"], +source: unescape('year%3A%20aNumber%0A%09%3Cself.setFullYear%28aNumber%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date); + smalltalk.addMethod( -unescape('_to_by_'), +unescape('_fromMilliseconds_'), smalltalk.method({ -selector: unescape('to%3Aby%3A'), -category: 'converting', -fn: function (stop, step) { +selector: unescape('fromMilliseconds%3A'), +category: 'instance creation', +fn: function (aNumber) { var self = this; - var array = nil; - var value = nil; - var pos = nil; - value = self; - array = smalltalk.send(smalltalk.Array || Array, "_new", []); - pos = 1; - ($receiver = smalltalk.send(step, "__eq", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}]); - ($receiver = ($receiver = step).klass === smalltalk.Number ? $receiver < 0 : smalltalk.send($receiver, "__lt", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}, function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}]); - return array; + return smalltalk.send(self, "_new_", [aNumber]); return self; }, -args: ["stop", "step"], -source: unescape('to%3A%20stop%20by%3A%20step%0A%09%7C%20array%20value%20pos%20%7C%0A%09value%20%3A%3D%20self.%0A%09array%20%3A%3D%20Array%20new.%0A%09pos%20%3A%3D%201.%0A%09step%20%3D%200%20ifTrue%3A%20%5Bself%20error%3A%20%27step%20must%20be%20non-zero%27%5D.%0A%09step%20%3C%200%0A%09%09ifTrue%3A%20%5B%5B%20value%20%3E%3D%20stop%20%5D%20whileTrue%3A%20%5B%0A%09%20%20%20%20%09%09%09array%20at%3A%20pos%20put%3A%20value.%0A%09%20%20%20%20%09%09%09pos%20%3A%3D%20pos%20+%201.%0A%09%20%20%20%20%09%09%09value%20%3A%3D%20value%20+%20step%5D%5D%0A%09%09ifFalse%3A%20%5B%5B%20value%20%3C%3D%20stop%20%5D%20whileTrue%3A%20%5B%0A%09%20%20%20%20%09%09%09array%20at%3A%20pos%20put%3A%20value.%0A%09%20%20%09%09%09pos%20%3A%3D%20pos%20+%201.%0A%09%20%20%20%20%09%09%09value%20%3A%3D%20value%20+%20step%5D%5D.%0A%09%5Earray'), -messageSends: ["new", "ifTrue:", unescape("%3D"), "error:", "ifTrue:ifFalse:", unescape("%3C"), "whileTrue:", unescape("%3E%3D"), "at:put:", unescape("+"), unescape("%3C%3D")], -referencedClasses: ["Array"] +args: ["aNumber"], +source: unescape('fromMilliseconds%3A%20aNumber%0A%09%5Eself%20new%3A%20aNumber'), +messageSends: ["new:"], +referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_to_by_do_'), +unescape('_fromSeconds_'), smalltalk.method({ -selector: unescape('to%3Aby%3Ado%3A'), -category: 'enumerating', -fn: function (stop, step, aBlock) { +selector: unescape('fromSeconds%3A'), +category: 'instance creation', +fn: function (aNumber) { var self = this; - var value = nil; - value = self; - ($receiver = smalltalk.send(step, "__eq", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}]); - ($receiver = ($receiver = step).klass === smalltalk.Number ? $receiver < 0 : smalltalk.send($receiver, "__lt", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}, function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}]); + return smalltalk.send(self, "_fromMilliseconds_", [($receiver = aNumber).klass === smalltalk.Number ? $receiver * 1000 : smalltalk.send($receiver, "__star", [1000])]); return self; }, -args: ["stop", "step", "aBlock"], -source: unescape('to%3A%20stop%20by%3A%20step%20do%3A%20aBlock%0A%09%7C%20value%20%7C%0A%09value%20%3A%3D%20self.%0A%09step%20%3D%200%20ifTrue%3A%20%5Bself%20error%3A%20%27step%20must%20be%20non-zero%27%5D.%0A%09step%20%3C%200%0A%09%09ifTrue%3A%20%5B%5B%20value%20%3E%3D%20stop%20%5D%20whileTrue%3A%20%5B%0A%09%20%20%20%20%09%09%09aBlock%20value%3A%20value.%0A%09%20%20%20%20%09%09%09value%20%3A%3D%20value%20+%20step%5D%5D%0A%09%09ifFalse%3A%20%5B%5B%20value%20%3C%3D%20stop%20%5D%20whileTrue%3A%20%5B%0A%09%20%20%20%20%09%09%09aBlock%20value%3A%20value.%0A%09%20%20%20%20%09%09%09value%20%3A%3D%20value%20+%20step%5D%5D'), -messageSends: ["ifTrue:", unescape("%3D"), "error:", "ifTrue:ifFalse:", unescape("%3C"), "whileTrue:", unescape("%3E%3D"), "value:", unescape("+"), unescape("%3C%3D")], +args: ["aNumber"], +source: unescape('fromSeconds%3A%20aNumber%0A%09%5Eself%20fromMilliseconds%3A%20aNumber%20*%201000'), +messageSends: ["fromMilliseconds:", unescape("*")], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_fromString_'), smalltalk.method({ -selector: unescape('deepCopy'), -category: 'copying', -fn: function () { +selector: unescape('fromString%3A'), +category: 'instance creation', +fn: function (aString) { var self = this; - return smalltalk.send(self, "_copy", []); + return smalltalk.send(self, "_new_", [aString]); return self; }, -args: [], -source: unescape('deepCopy%0A%09%5Eself%20copy'), -messageSends: ["copy"], +args: ["aString"], +source: unescape('fromString%3A%20aString%0A%09%22Example%3A%20Date%20fromString%28%272011/04/15%2000%3A00%3A00%27%29%22%0A%09%5Eself%20new%3A%20aString'), +messageSends: ["new:"], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_copy'), +unescape('_millisecondsToRun_'), smalltalk.method({ -selector: unescape('copy'), -category: 'copying', -fn: function () { +selector: unescape('millisecondsToRun%3A'), +category: 'instance creation', +fn: function (aBlock) { var self = this; - return self; + var t = nil; + t = smalltalk.send(smalltalk.Date || Date, "_now", []); + smalltalk.send(aBlock, "_value", []); + return ($receiver = smalltalk.send(smalltalk.Date || Date, "_now", [])).klass === smalltalk.Number ? $receiver - t : smalltalk.send($receiver, "__minus", [t]); return self; }, -args: [], -source: unescape('copy%0A%09%5Eself'), -messageSends: [], -referencedClasses: [] +args: ["aBlock"], +source: unescape('millisecondsToRun%3A%20aBlock%0A%09%7C%20t%20%7C%0A%09t%20%3A%3D%20Date%20now.%0A%09aBlock%20value.%0A%09%5EDate%20now%20-%20t'), +messageSends: ["now", "value", unescape("-")], +referencedClasses: ["Date"] }), -smalltalk.Number); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_%5C%5C'), +unescape('_new_'), smalltalk.method({ -selector: unescape('%5C%5C'), -category: 'arithmetic', -fn: function (aNumber) { +selector: unescape('new%3A'), +category: 'instance creation', +fn: function (anObject) { var self = this; - return self % aNumber; + return new Date(anObject); return self; }, -args: ["aNumber"], -source: unescape('%5C%5C%20aNumber%0A%09%3Creturn%20self%20%25%20aNumber%3E'), +args: ["anObject"], +source: unescape('new%3A%20anObject%0A%09%3Creturn%20new%20Date%28anObject%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_sqrt'), +unescape('_now'), smalltalk.method({ -selector: unescape('sqrt'), -category: 'arithmetic', +selector: unescape('now'), +category: 'instance creation', fn: function () { var self = this; - return Math.sqrt(self); + return smalltalk.send(self, "_today", []); return self; }, args: [], -source: unescape('sqrt%0A%09%3Creturn%20Math.sqrt%28self%29%3E'), -messageSends: [], +source: unescape('now%0A%09%5Eself%20today'), +messageSends: ["today"], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date.klass); smalltalk.addMethod( -unescape('_squared'), +unescape('_today'), smalltalk.method({ -selector: unescape('squared'), -category: 'arithmetic', +selector: unescape('today'), +category: 'instance creation', fn: function () { var self = this; - return self * self; + return smalltalk.send(self, "_new", []); return self; }, args: [], -source: unescape('squared%0A%09%5Eself%20*%20self'), -messageSends: [unescape("*")], +source: unescape('today%0A%09%5Eself%20new'), +messageSends: ["new"], referencedClasses: [] }), -smalltalk.Number); +smalltalk.Date.klass); + +smalltalk.addClass('JSObjectProxy', smalltalk.Object, ['jsObject'], 'Kernel-Objects'); +smalltalk.JSObjectProxy.comment=unescape('JSObjectProxy%20handles%20sending%20messages%20to%20JavaScript%20object%2C%20therefore%20accessing%20JavaScript%20objects%20from%20Amber%20is%20transparent.%0AJSOjbectProxy%20makes%20intensive%20use%20of%20%60%23doesNotUnderstand%3A%60.%0A%0A%23%23%20Examples%0A%0AJSObjectProxy%20objects%20are%20instanciated%20by%20Amber%20when%20a%20Smalltalk%20message%20is%20sent%20to%20a%20JavaScript%20object.%0A%0A%20%20%20%20window%20alert%3A%20%27hello%20world%27.%0A%20%20%20%20window%20inspect.%0A%20%20%20%20%28window%20jQuery%3A%20%27body%27%29%20append%3A%20%27hello%20world%27%0A%0ASmalltalk%20messages%20sends%20are%20converted%20to%20JavaScript%20function%20calls%20or%20object%20property%20access%20_%28in%20this%20order%29_.%20If%20n%20one%20of%20them%20match%2C%20a%20%60MessageNotUnderstood%60%20error%20will%20be%20thrown.%20%0A%0A%23%23%20Message%20conversion%20rules%0A%0A-%20%60someUser%20name%60%20becomes%20%20%60someUser.name%60%0A-%20%60someUser%20name%3A%20%27John%27%60%20becomes%20%60someUser%20name%20%3D%20%22John%22%60%0A-%20%60console%20log%3A%20%27hello%20world%27%60%20becomes%20%60console.log%28%27hello%20world%27%29%60%0A-%20%60%28window%20jQuery%3A%20%27foo%27%29%20css%3A%20%27background%27%20color%3A%20%27red%27%60%20becomes%20%60window.jQuery%28%27foo%27%29.css%28%27background%27%2C%20%27red%27%29%60%0A%0A__Note%3A__%20For%20keyword-based%20messages%2C%20only%20the%20first%20keyword%20is%20kept%3A%20%60window%20foo%3A%201%20bar%3A%202%60%20is%20equivalent%20to%20%60window%20foo%3A%201%20baz%3A%202%60.') smalltalk.addMethod( -unescape('_identityHash'), +unescape('_at_'), smalltalk.method({ -selector: unescape('identityHash'), +selector: unescape('at%3A'), category: 'accessing', -fn: function () { +fn: function (aSymbol) { var self = this; - return smalltalk.send(smalltalk.send(self, "_asString", []), "__comma", ["n"]); + var attr = nil; + attr = smalltalk.send(aSymbol, "_asString", []); + return self['@jsObject'][attr]; return self; }, -args: [], -source: unescape('identityHash%0A%09%5Eself%20asString%2C%20%27n%27'), -messageSends: [unescape("%2C"), "asString"], +args: ["aSymbol"], +source: unescape('at%3A%20aSymbol%0A%09%7C%20attr%20%7C%0A%09attr%20%3A%3D%20aSymbol%20asString.%0A%09%3Creturn%20self%5B%27@jsObject%27%5D%5Battr%5D%3E'), +messageSends: ["asString"], referencedClasses: [] }), -smalltalk.Number); +smalltalk.JSObjectProxy); smalltalk.addMethod( -unescape('_negative'), +unescape('_at_put_'), smalltalk.method({ -selector: unescape('negative'), -category: 'testing', -fn: function () { +selector: unescape('at%3Aput%3A'), +category: 'accessing', +fn: function (aSymbol, anObject) { var self = this; - return self < 0; + var attr = nil; + attr = smalltalk.send(aSymbol, "_asString", []); + self['@jsObject'][attr] = anObject; return self; }, -args: [], -source: unescape('negative%0A%09%22Answer%20whether%20the%20receiver%20is%20mathematically%20negative.%22%0A%0A%09%5E%20self%20%3C%200'), -messageSends: [unescape("%3C")], +args: ["aSymbol", "anObject"], +source: unescape('at%3A%20aSymbol%20put%3A%20anObject%0A%09%7C%20attr%20%7C%0A%09attr%20%3A%3D%20aSymbol%20asString.%0A%09%3Cself%5B%27@jsObject%27%5D%5Battr%5D%20%3D%20anObject%3E'), +messageSends: ["asString"], referencedClasses: [] }), -smalltalk.Number); +smalltalk.JSObjectProxy); smalltalk.addMethod( -unescape('_positive'), +unescape('_doesNotUnderstand_'), smalltalk.method({ -selector: unescape('positive'), -category: 'testing', -fn: function () { +selector: unescape('doesNotUnderstand%3A'), +category: 'proxy', +fn: function (aMessage) { var self = this; - return self >= 0; + var obj = nil; + var selector = nil; + var jsSelector = nil; + var arguments = nil; + obj = smalltalk.send(self, "_jsObject", []); + selector = smalltalk.send(aMessage, "_selector", []); + jsSelector = smalltalk.send(selector, "_asJavaScriptSelector", []); + arguments = smalltalk.send(aMessage, "_arguments", []); + if (obj[jsSelector] != undefined) { + return smalltalk.send(obj, jsSelector, arguments); + } + smalltalk.send(self, "_doesNotUnderstand_", [aMessage], smalltalk.Object); return self; }, -args: [], -source: unescape('positive%0A%09%22Answer%20whether%20the%20receiver%20is%20positive%20or%20equal%20to%200.%20%28ST-80%20protocol%29.%22%0A%0A%09%5E%20self%20%3E%3D%200'), -messageSends: [unescape("%3E%3D")], +args: ["aMessage"], +source: unescape('doesNotUnderstand%3A%20aMessage%0A%09%7C%20obj%20selector%20jsSelector%20arguments%20%7C%0A%09obj%20%3A%3D%20self%20jsObject.%0A%09selector%20%3A%3D%20aMessage%20selector.%0A%09jsSelector%20%3A%3D%20selector%20asJavaScriptSelector.%0A%09arguments%20%3A%3D%20aMessage%20arguments.%0A%09%3Cif%28obj%5BjsSelector%5D%20%21%3D%20undefined%29%20%7Breturn%20smalltalk.send%28obj%2C%20jsSelector%2C%20arguments%29%7D%3E.%0A%09super%20doesNotUnderstand%3A%20aMessage'), +messageSends: ["jsObject", "selector", "asJavaScriptSelector", "arguments", "doesNotUnderstand:"], referencedClasses: [] }), -smalltalk.Number); +smalltalk.JSObjectProxy); smalltalk.addMethod( -unescape('_isZero'), +unescape('_inspectOn_'), smalltalk.method({ -selector: unescape('isZero'), -category: 'testing', -fn: function () { +selector: unescape('inspectOn%3A'), +category: 'proxy', +fn: function (anInspector) { var self = this; - return smalltalk.send(self, "__eq", [0]); + var variables = nil; + variables = smalltalk.send(smalltalk.Dictionary || Dictionary, "_new", []); + smalltalk.send(variables, "_at_put_", [unescape("%23self"), smalltalk.send(self, "_jsObject", [])]); + smalltalk.send(anInspector, "_setLabel_", [smalltalk.send(self, "_printString", [])]); + for (var i in self['@jsObject']) { + variables._at_put_(i, self['@jsObject'][i]); + } + smalltalk.send(anInspector, "_setVariables_", [variables]); return self; }, -args: [], -source: unescape('isZero%0A%09%5Eself%20%3D%200'), -messageSends: [unescape("%3D")], -referencedClasses: [] +args: ["anInspector"], +source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self%20jsObject.%0A%09anInspector%20setLabel%3A%20self%20printString.%0A%09%3Cfor%28var%20i%20in%20self%5B%27@jsObject%27%5D%29%20%7B%0A%09%09variables._at_put_%28i%2C%20self%5B%27@jsObject%27%5D%5Bi%5D%29%3B%0A%09%7D%3E.%0A%09anInspector%20setVariables%3A%20variables'), +messageSends: ["new", "at:put:", "jsObject", "setLabel:", "printString", "setVariables:"], +referencedClasses: ["Dictionary"] }), -smalltalk.Number); +smalltalk.JSObjectProxy); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_jsObject'), smalltalk.method({ -selector: unescape('asJSON'), -category: 'converting', -fn: function (){ -var self=this; -return self; -return self;}, +selector: unescape('jsObject'), +category: 'accessing', +fn: function () { + var self = this; + return self['@jsObject']; + return self; +}, args: [], -source: unescape('asJSON%0A%09%5Eself'), +source: unescape('jsObject%0A%09%5EjsObject'), messageSends: [], referencedClasses: [] }), -smalltalk.Number); - +smalltalk.JSObjectProxy); smalltalk.addMethod( -unescape('_pi'), +unescape('_jsObject_'), smalltalk.method({ -selector: unescape('pi'), -category: 'instance creation', -fn: function () { +selector: unescape('jsObject%3A'), +category: 'accessing', +fn: function (aJSObject) { var self = this; - return Math.PI; + self['@jsObject'] = aJSObject; return self; }, -args: [], -source: unescape('pi%0A%09%3Creturn%20Math.PI%3E'), +args: ["aJSObject"], +source: unescape('jsObject%3A%20aJSObject%0A%09jsObject%20%3A%3D%20aJSObject'), messageSends: [], referencedClasses: [] }), -smalltalk.Number.klass); - +smalltalk.JSObjectProxy); -smalltalk.addClass('Boolean', smalltalk.Object, [], 'Kernel-Objects'); -smalltalk.Boolean.comment=unescape('Boolean%20wraps%20the%20JavaScript%20%60Boolean%28%29%60%20constructor.%20The%20%60true%60%20and%20%60false%60%20objects%20are%20the%20JavaScript%20boolean%20objects.%0A%0ABoolean%20defines%20the%20protocol%20for%20logic%20testing%20operations%20and%20conditional%20control%20structures%20for%20the%20logical%20values.%0ABoolean%20instances%20are%20weither%20%60true%60%20or%20%60false%60.') smalltalk.addMethod( -unescape('__eq'), +unescape('_printString'), smalltalk.method({ -selector: unescape('%3D'), -category: 'comparing', -fn: function (aBoolean) { - var self = this; - try { - ($receiver = smalltalk.send(smalltalk.send(aBoolean, "_class", []), "__eq", [smalltalk.send(self, "_class", [])])).klass === smalltalk.Boolean ? !$receiver ? function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}]); - return Boolean(self == true) == aBoolean; - return self; - } catch (e) { - if (e.name === "stReturn" && e.selector === "__eq") { - return e.fn(); - } - throw e; - } -}, -args: ["aBoolean"], -source: unescape('%3D%20aBoolean%0A%09aBoolean%20class%20%3D%20self%20class%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09%3Creturn%20Boolean%28self%20%3D%3D%20true%29%20%3D%3D%20aBoolean%3E'), -messageSends: ["ifFalse:", unescape("%3D"), "class"], -referencedClasses: [] -}), -smalltalk.Boolean); - -smalltalk.addMethod( -unescape('_shallowCopy'), -smalltalk.method({ -selector: unescape('shallowCopy'), -category: 'copying', +selector: unescape('printString'), +category: 'proxy', fn: function () { var self = this; - return self; + return smalltalk.send(smalltalk.send(self, "_jsObject", []), "_toString", []); return self; }, args: [], -source: unescape('shallowCopy%0A%09%5Eself'), -messageSends: [], +source: unescape('printString%0A%09%5Eself%20jsObject%20toString'), +messageSends: ["toString", "jsObject"], referencedClasses: [] }), -smalltalk.Boolean); +smalltalk.JSObjectProxy); + smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_on_'), smalltalk.method({ -selector: unescape('deepCopy'), -category: 'copying', -fn: function () { +selector: unescape('on%3A'), +category: 'instance creation', +fn: function (aJSObject) { var self = this; - return self; + return function ($rec) {smalltalk.send($rec, "_jsObject_", [aJSObject]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", [])); return self; }, -args: [], -source: unescape('deepCopy%0A%09%5Eself'), -messageSends: [], +args: ["aJSObject"], +source: unescape('on%3A%20aJSObject%0A%09%5Eself%20new%0A%09%09jsObject%3A%20aJSObject%3B%0A%09%09yourself'), +messageSends: ["jsObject:", "yourself", "new"], referencedClasses: [] }), -smalltalk.Boolean); +smalltalk.JSObjectProxy.klass); + +smalltalk.addClass('Number', smalltalk.Object, [], 'Kernel-Objects'); +smalltalk.Number.comment=unescape('Number%20holds%20the%20most%20general%20methods%20for%20dealing%20with%20numbers.%20%20%0ANumber%20is%20directly%20mapped%20to%20JavaScript%20Number.%0A%0AMost%20arithmetic%20methods%20like%20%60%23+%60%20%60%23/%60%20%60%23-%60%20%60%23max%3A%60%20are%20directly%20inlined%20into%20javascript.%20%0A%0A%23%23Enumerating%0AA%20Number%20can%20be%20used%20to%20evaluate%20a%20Block%20a%20fixed%20number%20of%20times%3A%0A%0A%095%20timesRepeat%3A%20%5BTranscript%20show%3A%20%27This%20will%20be%20printed%205%20times%27%3B%20cr%5D.%0A%09%0A%091%20to%3A%205%20do%3A%20%5B%3AaNumber%7C%20Transcript%20show%3A%20aNumber%20asString%3B%20cr%5D.%0A%09%0A%091%20to%3A%2010%20by%3A%202%20do%3A%20%5B%3AaNumber%7C%20Transcript%20show%3A%20aNumber%20asString%3B%20cr%5D.') smalltalk.addMethod( -unescape('_ifTrue_'), +unescape('__star'), smalltalk.method({ -selector: unescape('ifTrue%3A'), -category: 'controlling', -fn: function (aBlock) { +selector: unescape('*'), +category: 'arithmetic', +fn: function (aNumber) { var self = this; - return smalltalk.send(self, "_ifTrue_ifFalse_", [aBlock, function () {return nil;}]); + return self * aNumber; return self; }, -args: ["aBlock"], -source: unescape('ifTrue%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself%20ifTrue%3A%20aBlock%20ifFalse%3A%20%5B%5D'), -messageSends: ["ifTrue:ifFalse:"], +args: ["aNumber"], +source: unescape('*%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20*%20aNumber%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Boolean); +smalltalk.Number); smalltalk.addMethod( -unescape('_ifFalse_'), +unescape('__plus'), smalltalk.method({ -selector: unescape('ifFalse%3A'), -category: 'controlling', -fn: function (aBlock) { +selector: unescape('+'), +category: 'arithmetic', +fn: function (aNumber) { var self = this; - return smalltalk.send(self, "_ifTrue_ifFalse_", [function () {return nil;}, aBlock]); + return self + aNumber; return self; }, -args: ["aBlock"], -source: unescape('ifFalse%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself%20ifTrue%3A%20%5B%5D%20ifFalse%3A%20aBlock'), -messageSends: ["ifTrue:ifFalse:"], +args: ["aNumber"], +source: unescape('+%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20+%20aNumber%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Boolean); +smalltalk.Number); smalltalk.addMethod( -unescape('_ifFalse_ifTrue_'), +unescape('__minus'), smalltalk.method({ -selector: unescape('ifFalse%3AifTrue%3A'), -category: 'controlling', -fn: function (aBlock, anotherBlock) { +selector: unescape('-'), +category: 'arithmetic', +fn: function (aNumber) { var self = this; - return smalltalk.send(self, "_ifTrue_ifFalse_", [anotherBlock, aBlock]); + return self - aNumber; return self; }, -args: ["aBlock", "anotherBlock"], -source: unescape('ifFalse%3A%20aBlock%20ifTrue%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself%20ifTrue%3A%20anotherBlock%20ifFalse%3A%20aBlock'), -messageSends: ["ifTrue:ifFalse:"], +args: ["aNumber"], +source: unescape('-%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20-%20aNumber%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Boolean); +smalltalk.Number); smalltalk.addMethod( -unescape('_ifTrue_ifFalse_'), +unescape('__slash'), smalltalk.method({ -selector: unescape('ifTrue%3AifFalse%3A'), -category: 'controlling', -fn: function (aBlock, anotherBlock) { +selector: unescape('/'), +category: 'arithmetic', +fn: function (aNumber) { var self = this; - if (self == true) { - return aBlock(); - } else { - return anotherBlock(); - } + return self / aNumber; return self; }, -args: ["aBlock", "anotherBlock"], -source: unescape('ifTrue%3A%20aBlock%20ifFalse%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3C%0A%09%20%20%20%20if%28self%20%3D%3D%20true%29%20%7B%0A%09%09return%20aBlock%28%29%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%09return%20anotherBlock%28%29%3B%0A%09%20%20%20%20%7D%0A%09%3E'), +args: ["aNumber"], +source: unescape('/%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20/%20aNumber%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Boolean); +smalltalk.Number); smalltalk.addMethod( -unescape('_and_'), +unescape('__lt'), smalltalk.method({ -selector: unescape('and%3A'), -category: 'controlling', -fn: function (aBlock) { +selector: unescape('%3C'), +category: 'comparing', +fn: function (aNumber) { var self = this; - return smalltalk.send(smalltalk.send(self, "__eq", [true]), "_ifTrue_ifFalse_", [aBlock, function () {return false;}]); + return self < aNumber; return self; }, -args: ["aBlock"], -source: unescape('and%3A%20aBlock%0A%09%5Eself%20%3D%20true%0A%09%20%20%20%20ifTrue%3A%20aBlock%0A%09%20%20%20%20ifFalse%3A%20%5Bfalse%5D'), -messageSends: ["ifTrue:ifFalse:", unescape("%3D")], +args: ["aNumber"], +source: unescape('%3C%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20%3C%20aNumber%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Boolean); +smalltalk.Number); smalltalk.addMethod( -unescape('_or_'), +unescape('__lt_eq'), smalltalk.method({ -selector: unescape('or%3A'), -category: 'controlling', -fn: function (aBlock) { +selector: unescape('%3C%3D'), +category: 'comparing', +fn: function (aNumber) { var self = this; - return smalltalk.send(smalltalk.send(self, "__eq", [true]), "_ifTrue_ifFalse_", [function () {return true;}, aBlock]); + return self <= aNumber; return self; }, -args: ["aBlock"], -source: unescape('or%3A%20aBlock%0A%09%5Eself%20%3D%20true%0A%09%20%20%20%20ifTrue%3A%20%5Btrue%5D%0A%09%20%20%20%20ifFalse%3A%20aBlock'), -messageSends: ["ifTrue:ifFalse:", unescape("%3D")], +args: ["aNumber"], +source: unescape('%3C%3D%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20%3C%3D%20aNumber%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Boolean); +smalltalk.Number); smalltalk.addMethod( -unescape('_not'), +unescape('__eq'), smalltalk.method({ -selector: unescape('not'), -category: 'controlling', -fn: function () { +selector: unescape('%3D'), +category: 'comparing', +fn: function (aNumber) { var self = this; - return smalltalk.send(self, "__eq", [false]); - return self; + try { + ($receiver = smalltalk.send(aNumber, "_isNumber", [])).klass === smalltalk.Boolean ? !$receiver ? function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}]); + return Number(self) == aNumber; + return self; + } catch (e) { + if (e.name === "stReturn" && e.selector === "__eq") { + return e.fn(); + } + throw e; + } }, -args: [], -source: unescape('not%0A%09%5Eself%20%3D%20false'), -messageSends: [unescape("%3D")], +args: ["aNumber"], +source: unescape('%3D%20aNumber%0A%09aNumber%20isNumber%20ifFalse%3A%20%5B%5Efalse%5D.%20%0A%09%3Creturn%20Number%28self%29%20%3D%3D%20aNumber%3E'), +messageSends: ["ifFalse:", "isNumber"], referencedClasses: [] }), -smalltalk.Boolean); +smalltalk.Number); smalltalk.addMethod( -unescape('_printString'), +unescape('__gt'), smalltalk.method({ -selector: unescape('printString'), -category: 'printing', -fn: function () { +selector: unescape('%3E'), +category: 'comparing', +fn: function (aNumber) { var self = this; - return self.toString(); + return self > aNumber; return self; }, -args: [], -source: unescape('printString%0A%09%3Creturn%20self.toString%28%29%3E'), +args: ["aNumber"], +source: unescape('%3E%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20%3E%3E%20aNumber%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Boolean); +smalltalk.Number); smalltalk.addMethod( -unescape('_%26'), +unescape('__gt_eq'), smalltalk.method({ -selector: unescape('%26'), -category: 'controlling', -fn: function (aBoolean) { +selector: unescape('%3E%3D'), +category: 'comparing', +fn: function (aNumber) { var self = this; - if (self == true) { - return aBoolean; - } else { - return false; - } + return self >= aNumber; return self; }, -args: ["aBoolean"], -source: unescape('%26%20aBoolean%0A%09%3C%0A%09%20%20%20%20if%28self%20%3D%3D%20true%29%20%7B%0A%09%09return%20aBoolean%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%09return%20false%3B%0A%09%20%20%20%20%7D%0A%09%3E'), +args: ["aNumber"], +source: unescape('%3E%3D%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20%3E%3E%3D%20aNumber%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Boolean); +smalltalk.Number); smalltalk.addMethod( -unescape('_%7C'), +unescape('__at'), smalltalk.method({ -selector: unescape('%7C'), -category: 'controlling', -fn: function (aBoolean) { +selector: unescape('@'), +category: 'converting', +fn: function (aNumber) { var self = this; - if (self == true) { - return true; - } else { - return aBoolean; - } + return smalltalk.send(smalltalk.Point || Point, "_x_y_", [self, aNumber]); return self; }, -args: ["aBoolean"], -source: unescape('%7C%20aBoolean%0A%09%3C%0A%09%20%20%20%20if%28self%20%3D%3D%20true%29%20%7B%0A%09%09return%20true%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%09return%20aBoolean%3B%0A%09%20%20%20%20%7D%0A%09%3E'), -messageSends: [], -referencedClasses: [] +args: ["aNumber"], +source: unescape('@%20aNumber%0A%09%5EPoint%20x%3A%20self%20y%3A%20aNumber'), +messageSends: ["x:y:"], +referencedClasses: ["Point"] }), -smalltalk.Boolean); +smalltalk.Number); smalltalk.addMethod( -unescape('_asJSON'), +unescape('_%5C%5C'), +smalltalk.method({ +selector: unescape('%5C%5C'), +category: 'arithmetic', +fn: function (aNumber) { + var self = this; + return self % aNumber; + return self; +}, +args: ["aNumber"], +source: unescape('%5C%5C%20aNumber%0A%09%3Creturn%20self%20%25%20aNumber%3E'), +messageSends: [], +referencedClasses: [] +}), +smalltalk.Number); + +smalltalk.addMethod( +unescape('_asJSON'), smalltalk.method({ selector: unescape('asJSON'), category: 'converting', @@ -2825,1127 +2951,1205 @@ source: unescape('asJSON%0A%09%5Eself'), messageSends: [], referencedClasses: [] }), -smalltalk.Boolean); - - +smalltalk.Number); -smalltalk.addClass('Date', smalltalk.Object, [], 'Kernel-Objects'); -smalltalk.Date.comment=unescape('The%20Date%20class%20is%20used%20to%20work%20with%20dates%20and%20times.%20Therefore%20%60Date%20today%60%20and%20%60Date%20now%60%20are%20both%20valid%20in%0AAmber%20and%20answer%20the%20same%20date%20object.%0A%0ADate%20wraps%20the%20%60Date%28%29%60%20JavaScript%20constructor%2C%20and%20Smalltalk%20date%20objects%20are%20JavaScript%20date%20objects.') smalltalk.addMethod( -unescape('_year'), +unescape('_asJavascript'), smalltalk.method({ -selector: unescape('year'), -category: 'accessing', +selector: unescape('asJavascript'), +category: 'converting', fn: function () { var self = this; - return self.getFullYear(); + return smalltalk.send(smalltalk.send(unescape("%28"), "__comma", [smalltalk.send(self, "_printString", [])]), "__comma", [unescape("%29")]); return self; }, args: [], -source: unescape('year%0A%09%3Creturn%20self.getFullYear%28%29%3E'), -messageSends: [], +source: unescape('asJavascript%0A%09%5E%27%28%27%2C%20self%20printString%2C%20%27%29%27'), +messageSends: [unescape("%2C"), "printString"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_month'), +unescape('_asPoint'), smalltalk.method({ -selector: unescape('month'), -category: 'accessing', +selector: unescape('asPoint'), +category: 'converting', fn: function () { var self = this; - return self.getMonth() + 1; + return smalltalk.send(smalltalk.Point || Point, "_x_y_", [self, self]); return self; }, args: [], -source: unescape('month%0A%09%3Creturn%20self.getMonth%28%29%20+%201%3E'), -messageSends: [], -referencedClasses: [] +source: unescape('asPoint%0A%09%5EPoint%20x%3A%20self%20y%3A%20self'), +messageSends: ["x:y:"], +referencedClasses: ["Point"] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_month_'), +unescape('_asString'), smalltalk.method({ -selector: unescape('month%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('asString'), +category: 'converting', +fn: function () { var self = this; - self.setMonth(aNumber - 1); + return smalltalk.send(self, "_printString", []); return self; }, -args: ["aNumber"], -source: unescape('month%3A%20aNumber%0A%09%3Cself.setMonth%28aNumber%20-%201%29%3E'), -messageSends: [], +args: [], +source: unescape('asString%0A%09%5Eself%20printString'), +messageSends: ["printString"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_day'), +unescape('_atRandom'), smalltalk.method({ -selector: unescape('day'), -category: 'accessing', +selector: unescape('atRandom'), +category: 'converting', fn: function () { var self = this; - return smalltalk.send(self, "_dayOfWeek", []); + return ($receiver = smalltalk.send(($receiver = smalltalk.send(smalltalk.send(smalltalk.Random || Random, "_new", []), "_next", [])).klass === smalltalk.Number ? $receiver * self : smalltalk.send($receiver, "__star", [self]), "_truncated", [])).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]); return self; }, args: [], -source: unescape('day%0A%09%5Eself%20dayOfWeek'), -messageSends: ["dayOfWeek"], -referencedClasses: [] +source: unescape('atRandom%0A%20%20%20%20%5E%28Random%20new%20next%20*%20self%29%20truncated%20+%201'), +messageSends: [unescape("+"), "truncated", unescape("*"), "next", "new"], +referencedClasses: ["Random"] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_dayOfWeek'), +unescape('_clearInterval'), smalltalk.method({ -selector: unescape('dayOfWeek'), -category: 'accessing', +selector: unescape('clearInterval'), +category: 'timeouts/intervals', fn: function () { var self = this; - return self.getDay() + 1; + clearInterval(Number(self)); return self; }, args: [], -source: unescape('dayOfWeek%0A%09%3Creturn%20self.getDay%28%29%20+%201%3E'), +source: unescape('clearInterval%0A%09%3CclearInterval%28Number%28self%29%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_dayOfWeek_'), +unescape('_clearTimeout'), smalltalk.method({ -selector: unescape('dayOfWeek%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('clearTimeout'), +category: 'timeouts/intervals', +fn: function () { var self = this; - return self.setDay(aNumber - 1); + clearTimeout(Number(self)); return self; }, -args: ["aNumber"], -source: unescape('dayOfWeek%3A%20aNumber%0A%09%3Creturn%20self.setDay%28aNumber%20-%201%29%3E'), +args: [], +source: unescape('clearTimeout%0A%09%3CclearTimeout%28Number%28self%29%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_day_'), +unescape('_copy'), smalltalk.method({ -selector: unescape('day%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('copy'), +category: 'copying', +fn: function () { var self = this; - smalltalk.send(self, "_day_", [aNumber]); return self; -}, -args: ["aNumber"], -source: unescape('day%3A%20aNumber%0A%09self%20day%3A%20aNumber'), -messageSends: ["day:"], -referencedClasses: [] -}), -smalltalk.Date); - -smalltalk.addMethod( -unescape('_year_'), -smalltalk.method({ -selector: unescape('year%3A'), -category: 'accessing', -fn: function (aNumber) { - var self = this; - self.setFullYear(aNumber); return self; }, -args: ["aNumber"], -source: unescape('year%3A%20aNumber%0A%09%3Cself.setFullYear%28aNumber%29%3E'), +args: [], +source: unescape('copy%0A%09%5Eself'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_dayOfMonth'), +unescape('_deepCopy'), smalltalk.method({ -selector: unescape('dayOfMonth'), -category: 'accessing', +selector: unescape('deepCopy'), +category: 'copying', fn: function () { var self = this; - return self.getDate(); + return smalltalk.send(self, "_copy", []); return self; }, args: [], -source: unescape('dayOfMonth%0A%09%3Creturn%20self.getDate%28%29%3E'), -messageSends: [], +source: unescape('deepCopy%0A%09%5Eself%20copy'), +messageSends: ["copy"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_dayOfMonth_'), +unescape('_even'), smalltalk.method({ -selector: unescape('dayOfMonth%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('even'), +category: 'testing', +fn: function () { var self = this; - self.setDate(aNumber); + return smalltalk.send(0, "__eq", [smalltalk.send(self, "_\\\\", [2])]); return self; }, -args: ["aNumber"], -source: unescape('dayOfMonth%3A%20aNumber%0A%09%3Cself.setDate%28aNumber%29%3E'), -messageSends: [], +args: [], +source: unescape('even%0A%09%5E%200%20%3D%20%28self%20%5C%5C%202%29'), +messageSends: [unescape("%3D"), unescape("%5C%5C%5C%5C")], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_asString'), +unescape('_identityHash'), smalltalk.method({ -selector: unescape('asString'), -category: 'converting', +selector: unescape('identityHash'), +category: 'accessing', fn: function () { var self = this; - return self.toString(); + return smalltalk.send(smalltalk.send(self, "_asString", []), "__comma", ["n"]); return self; }, args: [], -source: unescape('asString%0A%09%3Creturn%20self.toString%28%29%3E'), -messageSends: [], +source: unescape('identityHash%0A%09%5Eself%20asString%2C%20%27n%27'), +messageSends: [unescape("%2C"), "asString"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_printString'), +unescape('_isNumber'), smalltalk.method({ -selector: unescape('printString'), -category: 'printing', +selector: unescape('isNumber'), +category: 'testing', fn: function () { var self = this; - return smalltalk.send(self, "_asString", []); + return true; return self; }, args: [], -source: unescape('printString%0A%09%5Eself%20asString'), -messageSends: ["asString"], +source: unescape('isNumber%0A%09%5Etrue'), +messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_asMilliseconds'), +unescape('_isZero'), smalltalk.method({ -selector: unescape('asMilliseconds'), -category: 'converting', +selector: unescape('isZero'), +category: 'testing', fn: function () { var self = this; - return smalltalk.send(self, "_time", []); + return smalltalk.send(self, "__eq", [0]); return self; }, args: [], -source: unescape('asMilliseconds%0A%09%5Eself%20time'), -messageSends: ["time"], +source: unescape('isZero%0A%09%5Eself%20%3D%200'), +messageSends: [unescape("%3D")], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_time'), +unescape('_max_'), smalltalk.method({ -selector: unescape('time'), -category: 'accessing', -fn: function () { +selector: unescape('max%3A'), +category: 'arithmetic', +fn: function (aNumber) { var self = this; - return self.getTime(); + return Math.max(self, aNumber); return self; }, -args: [], -source: unescape('time%0A%09%3Creturn%20self.getTime%28%29%3E'), +args: ["aNumber"], +source: unescape('max%3A%20aNumber%0A%09%3Creturn%20Math.max%28self%2C%20aNumber%29%3B%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_time_'), +unescape('_min_'), smalltalk.method({ -selector: unescape('time%3A'), -category: 'accessing', +selector: unescape('min%3A'), +category: 'arithmetic', fn: function (aNumber) { var self = this; - self.setTime(aNumber); + return Math.min(self, aNumber); return self; }, args: ["aNumber"], -source: unescape('time%3A%20aNumber%0A%09%3Cself.setTime%28aNumber%29%3E'), +source: unescape('min%3A%20aNumber%0A%09%3Creturn%20Math.min%28self%2C%20aNumber%29%3B%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_asDateString'), +unescape('_negated'), smalltalk.method({ -selector: unescape('asDateString'), -category: 'converting', +selector: unescape('negated'), +category: 'arithmetic', fn: function () { var self = this; - return self.toDateString(); + return 0 - self; return self; }, args: [], -source: unescape('asDateString%0A%09%3Creturn%20self.toDateString%28%29%3E'), -messageSends: [], +source: unescape('negated%0A%09%5E0%20-%20self'), +messageSends: [unescape("-")], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_asTimeString'), +unescape('_negative'), smalltalk.method({ -selector: unescape('asTimeString'), -category: 'converting', +selector: unescape('negative'), +category: 'testing', fn: function () { var self = this; - return self.toTimeString(); + return self < 0; return self; }, args: [], -source: unescape('asTimeString%0A%09%3Creturn%20self.toTimeString%28%29%3E'), -messageSends: [], +source: unescape('negative%0A%09%22Answer%20whether%20the%20receiver%20is%20mathematically%20negative.%22%0A%0A%09%5E%20self%20%3C%200'), +messageSends: [unescape("%3C")], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_asLocaleString'), +unescape('_odd'), smalltalk.method({ -selector: unescape('asLocaleString'), -category: 'converting', +selector: unescape('odd'), +category: 'testing', fn: function () { var self = this; - return self.toLocaleString(); + return smalltalk.send(smalltalk.send(self, "_even", []), "_not", []); return self; }, args: [], -source: unescape('asLocaleString%0A%09%3Creturn%20self.toLocaleString%28%29%3E'), -messageSends: [], +source: unescape('odd%0A%09%5E%20self%20even%20not'), +messageSends: ["not", "even"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_asNumber'), +unescape('_positive'), smalltalk.method({ -selector: unescape('asNumber'), -category: 'converting', +selector: unescape('positive'), +category: 'testing', fn: function () { var self = this; - return smalltalk.send(self, "_asMilliseconds", []); + return self >= 0; return self; }, args: [], -source: unescape('asNumber%0A%09%5Eself%20asMilliseconds'), -messageSends: ["asMilliseconds"], +source: unescape('positive%0A%09%22Answer%20whether%20the%20receiver%20is%20positive%20or%20equal%20to%200.%20%28ST-80%20protocol%29.%22%0A%0A%09%5E%20self%20%3E%3D%200'), +messageSends: [unescape("%3E%3D")], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_hours_'), +unescape('_printShowingDecimalPlaces_'), smalltalk.method({ -selector: unescape('hours%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('printShowingDecimalPlaces%3A'), +category: 'printing', +fn: function (placesDesired) { var self = this; - self.setHours(aNumber); + return self.toFixed(placesDesired); return self; }, -args: ["aNumber"], -source: unescape('hours%3A%20aNumber%0A%09%3Cself.setHours%28aNumber%29%3E'), +args: ["placesDesired"], +source: unescape('printShowingDecimalPlaces%3A%20placesDesired%0A%09%3Creturn%20self.toFixed%28placesDesired%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_minutes_'), +unescape('_printString'), smalltalk.method({ -selector: unescape('minutes%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('printString'), +category: 'printing', +fn: function () { var self = this; - self.setMinutes(aNumber); + return String(self); return self; }, -args: ["aNumber"], -source: unescape('minutes%3A%20aNumber%0A%09%3Cself.setMinutes%28aNumber%29%3E'), +args: [], +source: unescape('printString%0A%09%3Creturn%20String%28self%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_seconds_'), +unescape('_rounded'), smalltalk.method({ -selector: unescape('seconds%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('rounded'), +category: 'converting', +fn: function () { var self = this; - self.setSeconds(aNumber); + return Math.round(self); return self; }, -args: ["aNumber"], -source: unescape('seconds%3A%20aNumber%0A%09%3Cself.setSeconds%28aNumber%29%3E'), +args: [], +source: unescape('rounded%0A%09%3Creturn%20Math.round%28self%29%3B%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_milliseconds_'), +unescape('_sqrt'), smalltalk.method({ -selector: unescape('milliseconds%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('sqrt'), +category: 'arithmetic', +fn: function () { var self = this; - self.setMilliseconds(aNumber); + return Math.sqrt(self); return self; }, -args: ["aNumber"], -source: unescape('milliseconds%3A%20aNumber%0A%09%3Cself.setMilliseconds%28aNumber%29%3E'), +args: [], +source: unescape('sqrt%0A%09%3Creturn%20Math.sqrt%28self%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_hours'), +unescape('_squared'), smalltalk.method({ -selector: unescape('hours'), -category: 'accessing', +selector: unescape('squared'), +category: 'arithmetic', fn: function () { var self = this; - return self.getHours(); + return self * self; return self; }, args: [], -source: unescape('hours%0A%09%3Creturn%20self.getHours%28%29%3E'), -messageSends: [], +source: unescape('squared%0A%09%5Eself%20*%20self'), +messageSends: [unescape("*")], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_minutes'), +unescape('_timesRepeat_'), smalltalk.method({ -selector: unescape('minutes'), -category: 'accessing', -fn: function () { +selector: unescape('timesRepeat%3A'), +category: 'enumerating', +fn: function (aBlock) { var self = this; - return self.getMinutes(); + var integer = nil; + var count = nil; + integer = smalltalk.send(self, "_truncated", []); + count = 1; + (function () {while (!function () {return ($receiver = count).klass === smalltalk.Number ? $receiver > self : smalltalk.send($receiver, "__gt", [self]);}()) {(function () {smalltalk.send(aBlock, "_value", []);return count = ($receiver = count).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);}());}}()); return self; }, -args: [], -source: unescape('minutes%0A%09%3Creturn%20self.getMinutes%28%29%3E'), -messageSends: [], +args: ["aBlock"], +source: unescape('timesRepeat%3A%20aBlock%0A%09%7C%20integer%20count%20%7C%0A%09integer%20%3A%3D%20self%20truncated.%0A%09count%20%3A%3D%201.%0A%09%5Bcount%20%3E%20self%5D%20whileFalse%3A%20%5B%0A%09%20%20%20%20aBlock%20value.%0A%09%20%20%20%20count%20%3A%3D%20count%20+%201%5D'), +messageSends: ["truncated", "whileFalse:", unescape("%3E"), "value", unescape("+")], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_seconds'), +unescape('_to_'), smalltalk.method({ -selector: unescape('seconds'), -category: 'accessing', -fn: function () { +selector: unescape('to%3A'), +category: 'converting', +fn: function (aNumber) { var self = this; - return self.getSeconds(); + var array = nil; + var first = nil; + var last = nil; + var count = nil; + first = smalltalk.send(self, "_truncated", []); + last = ($receiver = smalltalk.send(aNumber, "_truncated", [])).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]); + count = 1; + array = smalltalk.send(smalltalk.Array || Array, "_new", []); + smalltalk.send(($receiver = last).klass === smalltalk.Number ? $receiver - first : smalltalk.send($receiver, "__minus", [first]), "_timesRepeat_", [function () {smalltalk.send(array, "_at_put_", [count, first]);count = ($receiver = count).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return first = ($receiver = first).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);}]); + return array; return self; }, -args: [], -source: unescape('seconds%0A%09%3Creturn%20self.getSeconds%28%29%3E'), -messageSends: [], -referencedClasses: [] +args: ["aNumber"], +source: unescape('to%3A%20aNumber%0A%09%7C%20array%20first%20last%20count%20%7C%0A%09first%20%3A%3D%20self%20truncated.%0A%09last%20%3A%3D%20aNumber%20truncated%20+%201.%0A%09count%20%3A%3D%201.%0A%09array%20%3A%3D%20Array%20new.%0A%09%28last%20-%20first%29%20timesRepeat%3A%20%5B%0A%09%20%20%20%20array%20at%3A%20count%20put%3A%20first.%0A%09%20%20%20%20count%20%3A%3D%20count%20+%201.%0A%09%20%20%20%20first%20%3A%3D%20first%20+%201%5D.%0A%09%5Earray'), +messageSends: ["truncated", unescape("+"), "new", "timesRepeat:", unescape("-"), "at:put:"], +referencedClasses: ["Array"] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('_milliseconds'), +unescape('_to_by_'), smalltalk.method({ -selector: unescape('milliseconds'), -category: 'accessing', -fn: function () { +selector: unescape('to%3Aby%3A'), +category: 'converting', +fn: function (stop, step) { var self = this; - return self.getMilliseconds(); + var array = nil; + var value = nil; + var pos = nil; + value = self; + array = smalltalk.send(smalltalk.Array || Array, "_new", []); + pos = 1; + ($receiver = smalltalk.send(step, "__eq", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}]); + ($receiver = ($receiver = step).klass === smalltalk.Number ? $receiver < 0 : smalltalk.send($receiver, "__lt", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}, function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(array, "_at_put_", [pos, value]);pos = ($receiver = pos).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}]); + return array; return self; }, -args: [], -source: unescape('milliseconds%0A%09%3Creturn%20self.getMilliseconds%28%29%3E'), -messageSends: [], -referencedClasses: [] +args: ["stop", "step"], +source: unescape('to%3A%20stop%20by%3A%20step%0A%09%7C%20array%20value%20pos%20%7C%0A%09value%20%3A%3D%20self.%0A%09array%20%3A%3D%20Array%20new.%0A%09pos%20%3A%3D%201.%0A%09step%20%3D%200%20ifTrue%3A%20%5Bself%20error%3A%20%27step%20must%20be%20non-zero%27%5D.%0A%09step%20%3C%200%0A%09%09ifTrue%3A%20%5B%5B%20value%20%3E%3D%20stop%20%5D%20whileTrue%3A%20%5B%0A%09%20%20%20%20%09%09%09array%20at%3A%20pos%20put%3A%20value.%0A%09%20%20%20%20%09%09%09pos%20%3A%3D%20pos%20+%201.%0A%09%20%20%20%20%09%09%09value%20%3A%3D%20value%20+%20step%5D%5D%0A%09%09ifFalse%3A%20%5B%5B%20value%20%3C%3D%20stop%20%5D%20whileTrue%3A%20%5B%0A%09%20%20%20%20%09%09%09array%20at%3A%20pos%20put%3A%20value.%0A%09%20%20%09%09%09pos%20%3A%3D%20pos%20+%201.%0A%09%20%20%20%20%09%09%09value%20%3A%3D%20value%20+%20step%5D%5D.%0A%09%5Earray'), +messageSends: ["new", "ifTrue:", unescape("%3D"), "error:", "ifTrue:ifFalse:", unescape("%3C"), "whileTrue:", unescape("%3E%3D"), "at:put:", unescape("+"), unescape("%3C%3D")], +referencedClasses: ["Array"] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('__lt'), +unescape('_to_by_do_'), smalltalk.method({ -selector: unescape('%3C'), -category: 'comparing', -fn: function (aDate) { +selector: unescape('to%3Aby%3Ado%3A'), +category: 'enumerating', +fn: function (stop, step, aBlock) { var self = this; - return self < aDate; + var value = nil; + value = self; + ($receiver = smalltalk.send(step, "__eq", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(self, "_error_", [unescape("step%20must%20be%20non-zero")]);}]); + ($receiver = ($receiver = step).klass === smalltalk.Number ? $receiver < 0 : smalltalk.send($receiver, "__lt", [0])).klass === smalltalk.Boolean ? $receiver ? function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver >= stop : smalltalk.send($receiver, "__gt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}, function () {return function () {while (function () {return ($receiver = value).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [value]);return value = ($receiver = value).klass === smalltalk.Number ? $receiver + step : smalltalk.send($receiver, "__plus", [step]);}());}}();}]); return self; }, -args: ["aDate"], -source: unescape('%3C%20aDate%0A%09%3Creturn%20self%20%3C%20aDate%3E'), -messageSends: [], +args: ["stop", "step", "aBlock"], +source: unescape('to%3A%20stop%20by%3A%20step%20do%3A%20aBlock%0A%09%7C%20value%20%7C%0A%09value%20%3A%3D%20self.%0A%09step%20%3D%200%20ifTrue%3A%20%5Bself%20error%3A%20%27step%20must%20be%20non-zero%27%5D.%0A%09step%20%3C%200%0A%09%09ifTrue%3A%20%5B%5B%20value%20%3E%3D%20stop%20%5D%20whileTrue%3A%20%5B%0A%09%20%20%20%20%09%09%09aBlock%20value%3A%20value.%0A%09%20%20%20%20%09%09%09value%20%3A%3D%20value%20+%20step%5D%5D%0A%09%09ifFalse%3A%20%5B%5B%20value%20%3C%3D%20stop%20%5D%20whileTrue%3A%20%5B%0A%09%20%20%20%20%09%09%09aBlock%20value%3A%20value.%0A%09%20%20%20%20%09%09%09value%20%3A%3D%20value%20+%20step%5D%5D'), +messageSends: ["ifTrue:", unescape("%3D"), "error:", "ifTrue:ifFalse:", unescape("%3C"), "whileTrue:", unescape("%3E%3D"), "value:", unescape("+"), unescape("%3C%3D")], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('__gt'), +unescape('_to_do_'), smalltalk.method({ -selector: unescape('%3E'), -category: 'comparing', -fn: function (aDate) { +selector: unescape('to%3Ado%3A'), +category: 'enumerating', +fn: function (stop, aBlock) { var self = this; - return self > aDate; + var nextValue = nil; + nextValue = self; + (function () {while (function () {return ($receiver = nextValue).klass === smalltalk.Number ? $receiver <= stop : smalltalk.send($receiver, "__lt_eq", [stop]);}()) {(function () {smalltalk.send(aBlock, "_value_", [nextValue]);return nextValue = ($receiver = nextValue).klass === smalltalk.Number ? $receiver + 1 : smalltalk.send($receiver, "__plus", [1]);}());}}()); return self; }, -args: ["aDate"], -source: unescape('%3E%20aDate%0A%09%3Creturn%20self%20%3E%3E%20aDate%3E'), -messageSends: [], +args: ["stop", "aBlock"], +source: unescape('to%3A%20stop%20do%3A%20aBlock%0A%09%22Evaluate%20aBlock%20for%20each%20number%20from%20self%20to%20aNumber.%22%0A%09%7C%20nextValue%20%7C%0A%09nextValue%20%3A%3D%20self.%0A%09%5BnextValue%20%3C%3D%20stop%5D%0A%09%09whileTrue%3A%20%0A%09%09%09%5BaBlock%20value%3A%20nextValue.%0A%09%09%09nextValue%20%3A%3D%20nextValue%20+%201%5D'), +messageSends: ["whileTrue:", unescape("%3C%3D"), "value:", unescape("+")], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); smalltalk.addMethod( -unescape('__lt_eq'), +unescape('_truncated'), smalltalk.method({ -selector: unescape('%3C%3D'), -category: 'comparing', -fn: function (aDate) { +selector: unescape('truncated'), +category: 'converting', +fn: function () { var self = this; - return self <= aDate; - return self; + var result = nil; + ($receiver = self >= 0).klass === smalltalk.Boolean ? $receiver ? function () {return result = Math.floor(self);}() : function () {return result = Math.floor(self * -1) * -1;}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return result = Math.floor(self);}, function () {return result = Math.floor(self * -1) * -1;}]); + return result; + return self; }, -args: ["aDate"], -source: unescape('%3C%3D%20aDate%0A%09%3Creturn%20self%20%3C%3D%20aDate%3E'), -messageSends: [], +args: [], +source: unescape('truncated%0A%7Cresult%7C%0A%0A%20%20%20%20self%20%3E%3D%200%20%0A%20%20%20%20%20%20%20%20ifTrue%3A%20%5B%3Cresult%20%3D%20Math.floor%28self%29%3B%3E%5D%0A%20%20%20%20%20%20%20%20ifFalse%3A%20%5B%3Cresult%20%3D%20%28Math.floor%28self%20*%20%28-1%29%29%20*%20%28-1%29%29%3B%3E%5D.%0A%0A%20%20%20%20%5E%20result'), +messageSends: ["ifTrue:ifFalse:", unescape("%3E%3D")], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number); + smalltalk.addMethod( -unescape('__gt_eq'), +unescape('_pi'), smalltalk.method({ -selector: unescape('%3E%3D'), -category: 'comparing', -fn: function (aDate) { +selector: unescape('pi'), +category: 'instance creation', +fn: function () { var self = this; - return self >= aDate; + return Math.PI; return self; }, -args: ["aDate"], -source: unescape('%3E%3D%20aDate%0A%09%3Creturn%20self%20%3E%3E%3D%20aDate%3E'), +args: [], +source: unescape('pi%0A%09%3Creturn%20Math.PI%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Number.klass); + +smalltalk.addClass('Package', smalltalk.Object, ['commitPathJs', 'commitPathSt'], 'Kernel-Objects'); +smalltalk.Package.comment=unescape('A%20Package%20is%20similar%20to%20a%20%22class%20category%22%20typically%20found%20in%20other%20Smalltalks%20like%20Pharo%20or%20Squeak.%20Amber%20does%20not%20have%20class%20categories%20anymore%2C%20it%20had%20in%20the%20beginning%20but%20now%20each%20class%20in%20the%20system%20knows%20which%20package%20it%20belongs%20to.%0A%0AA%20Package%20has%20a%20name%2C%20an%20Array%20of%20%22requires%22%2C%20a%20comment%20and%20a%20Dictionary%20with%20other%20optional%20key%20value%20attributes.%20A%20Package%20can%20also%20be%20queried%20for%20its%20classes%2C%20but%20it%20will%20then%20resort%20to%20a%20reverse%20scan%20of%20all%20classes%20to%20find%20them.%0APackages%20are%20manipulated%20through%20%22Smalltalk%20current%22%2C%20like%20for%20example%20finding%20one%20based%20on%20a%20name%3A%0A%0A%09Smalltalk%20current%20packageAt%3A%20%27Kernel%27%0A%0A...but%20you%20can%20also%20use%3A%0A%0A%09Package%20named%3A%20%27Kernel%27%0A%0AA%20Package%20differs%20slightly%20from%20a%20Monticello%20package%20which%20can%20span%20multiple%20class%20categories%20using%20a%20naming%20convention%20based%20on%20hyphenation.%20But%20just%20as%20in%20Monticello%20a%20Package%20supports%20%22class%20extensions%22%20so%20a%20Package%0Acan%20define%20behaviors%20in%20foreign%20classes%20using%20a%20naming%20convention%20for%20method%20categories%20where%20the%20category%20starts%20with%20an%20asterisk%20and%20then%20the%20name%20of%20the%20owning%20package%20follows.%20This%20can%20easily%20be%20seen%20in%20for%20example%20class%0AString%20where%20the%20method%20category%20%22*IDE%22%20defines%20%23inspectOn%3A%20which%20thus%20is%20a%20method%20belonging%20to%20the%20IDE%20package.%0A%0AYou%20can%20fetch%20a%20package%20from%20the%20server%3A%0A%0A%09Package%20fetch%3A%20%27Additional-Examples%27') smalltalk.addMethod( -unescape('__minus'), +unescape('_classes'), smalltalk.method({ -selector: unescape('-'), -category: 'arithmetic', -fn: function (aDate) { +selector: unescape('classes'), +category: 'classes', +fn: function () { var self = this; - return self - aDate; + return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_classes", []), "_select_", [function (c) {return smalltalk.send(smalltalk.send(c, "_package", []), "__eq_eq", [self]);}]); return self; }, -args: ["aDate"], -source: unescape('-%20aDate%0A%09%3Creturn%20self%20-%20aDate%3E'), -messageSends: [], -referencedClasses: [] +args: [], +source: unescape('classes%0A%09%22We%20need%20to%20do%20a%20reverse%20scan.%22%0A%09%5ESmalltalk%20current%20classes%20select%3A%20%5B%3Ac%20%7C%20c%20package%20%3D%3D%20self%5D'), +messageSends: ["select:", "classes", "current", unescape("%3D%3D"), "package"], +referencedClasses: ["Smalltalk"] }), -smalltalk.Date); +smalltalk.Package); smalltalk.addMethod( -unescape('__plus'), +unescape('_commitPathJs'), smalltalk.method({ -selector: unescape('+'), -category: 'arithmetic', -fn: function (aDate) { +selector: unescape('commitPathJs'), +category: 'accessing', +fn: function () { var self = this; - return self + aDate; + return ($receiver = self['@commitPathJs']) == nil || + $receiver == undefined ? function () {return smalltalk.send(smalltalk.send(self, "_class", []), "_defaultCommitPathJs", []);}() : $receiver; return self; }, -args: ["aDate"], -source: unescape('+%20aDate%0A%09%3Creturn%20self%20+%20aDate%3E'), -messageSends: [], +args: [], +source: unescape('commitPathJs%0A%09%5E%20commitPathJs%20ifNil%3A%20%5Bself%20class%20defaultCommitPathJs%5D'), +messageSends: ["ifNil:", "defaultCommitPathJs", "class"], referencedClasses: [] }), -smalltalk.Date); - +smalltalk.Package); smalltalk.addMethod( -unescape('_new_'), +unescape('_commitPathJs_'), smalltalk.method({ -selector: unescape('new%3A'), -category: 'instance creation', -fn: function (anObject) { +selector: unescape('commitPathJs%3A'), +category: 'accessing', +fn: function (aString) { var self = this; - return new Date(anObject); + self['@commitPathJs'] = aString; return self; }, -args: ["anObject"], -source: unescape('new%3A%20anObject%0A%09%3Creturn%20new%20Date%28anObject%29%3E'), +args: ["aString"], +source: unescape('commitPathJs%3A%20aString%0A%09commitPathJs%A0%3A%3D%20aString'), messageSends: [], referencedClasses: [] }), -smalltalk.Date.klass); +smalltalk.Package); smalltalk.addMethod( -unescape('_fromString_'), +unescape('_commitPathSt'), smalltalk.method({ -selector: unescape('fromString%3A'), -category: 'instance creation', -fn: function (aString) { +selector: unescape('commitPathSt'), +category: 'accessing', +fn: function () { var self = this; - return smalltalk.send(self, "_new_", [aString]); + return ($receiver = self['@commitPathSt']) == nil || + $receiver == undefined ? function () {return smalltalk.send(smalltalk.send(self, "_class", []), "_defaultCommitPathSt", []);}() : $receiver; return self; }, -args: ["aString"], -source: unescape('fromString%3A%20aString%0A%09%22Example%3A%20Date%20fromString%28%272011/04/15%2000%3A00%3A00%27%29%22%0A%09%5Eself%20new%3A%20aString'), -messageSends: ["new:"], +args: [], +source: unescape('commitPathSt%0A%09%5E%20commitPathSt%20ifNil%3A%20%5Bself%20class%20defaultCommitPathSt%5D'), +messageSends: ["ifNil:", "defaultCommitPathSt", "class"], referencedClasses: [] }), -smalltalk.Date.klass); +smalltalk.Package); smalltalk.addMethod( -unescape('_fromSeconds_'), +unescape('_commitPathSt_'), smalltalk.method({ -selector: unescape('fromSeconds%3A'), -category: 'instance creation', -fn: function (aNumber) { +selector: unescape('commitPathSt%3A'), +category: 'accessing', +fn: function (aString) { var self = this; - return smalltalk.send(self, "_fromMilliseconds_", [($receiver = aNumber).klass === smalltalk.Number ? $receiver * 1000 : smalltalk.send($receiver, "__star", [1000])]); + self['@commitPathSt'] = aString; return self; }, -args: ["aNumber"], -source: unescape('fromSeconds%3A%20aNumber%0A%09%5Eself%20fromMilliseconds%3A%20aNumber%20*%201000'), -messageSends: ["fromMilliseconds:", unescape("*")], +args: ["aString"], +source: unescape('commitPathSt%3A%20aString%0A%09commitPathSt%A0%3A%3D%20aString'), +messageSends: [], referencedClasses: [] }), -smalltalk.Date.klass); +smalltalk.Package); smalltalk.addMethod( -unescape('_fromMilliseconds_'), +unescape('_dependencies'), smalltalk.method({ -selector: unescape('fromMilliseconds%3A'), -category: 'instance creation', -fn: function (aNumber) { +selector: unescape('dependencies'), +category: 'accessing', +fn: function () { var self = this; - return smalltalk.send(self, "_new_", [aNumber]); + return smalltalk.send(self, "_propertyAt_ifAbsent_", ["dependencies", function () {return [];}]); return self; }, -args: ["aNumber"], -source: unescape('fromMilliseconds%3A%20aNumber%0A%09%5Eself%20new%3A%20aNumber'), -messageSends: ["new:"], +args: [], +source: unescape('dependencies%0A%09%5Eself%20propertyAt%3A%20%27dependencies%27%20ifAbsent%3A%20%5B%23%28%29%5D'), +messageSends: ["propertyAt:ifAbsent:"], referencedClasses: [] }), -smalltalk.Date.klass); +smalltalk.Package); smalltalk.addMethod( -unescape('_today'), +unescape('_dependencies_'), smalltalk.method({ -selector: unescape('today'), -category: 'instance creation', -fn: function () { +selector: unescape('dependencies%3A'), +category: 'accessing', +fn: function (anArray) { var self = this; - return smalltalk.send(self, "_new", []); + return smalltalk.send(self, "_propertyAt_put_", ["dependencies", anArray]); return self; }, -args: [], -source: unescape('today%0A%09%5Eself%20new'), -messageSends: ["new"], +args: ["anArray"], +source: unescape('dependencies%3A%20anArray%0A%09%5Eself%20propertyAt%3A%20%27dependencies%27%20put%3A%20anArray'), +messageSends: ["propertyAt:put:"], referencedClasses: [] }), -smalltalk.Date.klass); +smalltalk.Package); smalltalk.addMethod( -unescape('_now'), +unescape('_jsProperties'), smalltalk.method({ -selector: unescape('now'), -category: 'instance creation', +selector: unescape('jsProperties'), +category: 'private', fn: function () { var self = this; - return smalltalk.send(self, "_today", []); + return self.properties; return self; }, args: [], -source: unescape('now%0A%09%5Eself%20today'), -messageSends: ["today"], +source: unescape('jsProperties%0A%09%3Creturn%20self.properties%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.Date.klass); +smalltalk.Package); smalltalk.addMethod( -unescape('_millisecondsToRun_'), +unescape('_jsProperties_'), smalltalk.method({ -selector: unescape('millisecondsToRun%3A'), -category: 'instance creation', -fn: function (aBlock) { +selector: unescape('jsProperties%3A'), +category: 'private', +fn: function (aJSObject) { var self = this; - var t = nil; - t = smalltalk.send(smalltalk.Date || Date, "_now", []); - smalltalk.send(aBlock, "_value", []); - return ($receiver = smalltalk.send(smalltalk.Date || Date, "_now", [])).klass === smalltalk.Number ? $receiver - t : smalltalk.send($receiver, "__minus", [t]); + return self.properties = aJSObject; return self; }, -args: ["aBlock"], -source: unescape('millisecondsToRun%3A%20aBlock%0A%09%7C%20t%20%7C%0A%09t%20%3A%3D%20Date%20now.%0A%09aBlock%20value.%0A%09%5EDate%20now%20-%20t'), -messageSends: ["now", "value", unescape("-")], -referencedClasses: ["Date"] +args: ["aJSObject"], +source: unescape('jsProperties%3A%20aJSObject%0A%09%3Creturn%20self.properties%20%3D%20aJSObject%3E'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Date.klass); - +smalltalk.Package); -smalltalk.addClass('UndefinedObject', smalltalk.Object, [], 'Kernel-Objects'); -smalltalk.UndefinedObject.comment=unescape('UndefinedObject%20describes%20the%20behavior%20of%20its%20sole%20instance%2C%20%60nil%60.%20%60nil%60%20represents%20a%20prior%20value%20for%20variables%20that%20have%20not%20been%20initialized%2C%20or%20for%20results%20which%20are%20meaningless.%0A%0A%60nil%60%20is%20the%20Smalltalk%20representation%20of%20the%20%60undefined%60%20JavaScript%20object.') smalltalk.addMethod( -unescape('_subclass_instanceVariableNames_'), +unescape('_name'), smalltalk.method({ -selector: unescape('subclass%3AinstanceVariableNames%3A'), -category: 'class creation', -fn: function (aString, anotherString) { +selector: unescape('name'), +category: 'accessing', +fn: function () { var self = this; - return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]); + return self.pkgName; return self; }, -args: ["aString", "anotherString"], -source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20package%3A%20nil'), -messageSends: ["subclass:instanceVariableNames:package:"], +args: [], +source: unescape('name%0A%09%3Creturn%20self.pkgName%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_subclass_instanceVariableNames_category_'), +unescape('_name_'), smalltalk.method({ -selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'), -category: 'class creation', -fn: function (aString, aString2, aString3) { +selector: unescape('name%3A'), +category: 'accessing', +fn: function (aString) { var self = this; - smalltalk.send(self, "_deprecatedAPI", []); - return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]); + self.pkgName = aString; return self; }, -args: ["aString", "aString2", "aString3"], -source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%22Kept%20for%20compatibility.%22%0A%09self%20deprecatedAPI.%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'), -messageSends: ["deprecatedAPI", "subclass:instanceVariableNames:package:"], +args: ["aString"], +source: unescape('name%3A%20aString%0A%09%3Cself.pkgName%20%3D%20aString%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_shallowCopy'), +unescape('_printString'), smalltalk.method({ -selector: unescape('shallowCopy'), -category: 'copying', +selector: unescape('printString'), +category: 'printing', fn: function () { var self = this; - return self; + return smalltalk.send(self, "_name", []); return self; }, args: [], -source: unescape('shallowCopy%0A%09%5Eself'), -messageSends: [], +source: unescape('printString%0A%09%5Eself%20name'), +messageSends: ["name"], referencedClasses: [] }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_deepCopy'), +unescape('_properties'), smalltalk.method({ -selector: unescape('deepCopy'), -category: 'copying', +selector: unescape('properties'), +category: 'accessing', fn: function () { var self = this; - return self; + return smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_readJSObject_", [smalltalk.send(self, "_basicAt_", ["properties"])]); return self; }, args: [], -source: unescape('deepCopy%0A%09%5Eself'), -messageSends: [], -referencedClasses: [] +source: unescape('properties%0A%09%5ESmalltalk%20current%20readJSObject%3A%20%28self%20basicAt%3A%20%27properties%27%29'), +messageSends: ["readJSObject:", "current", "basicAt:"], +referencedClasses: ["Smalltalk"] }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_ifNil_'), +unescape('_properties_'), smalltalk.method({ -selector: unescape('ifNil%3A'), -category: 'testing', -fn: function (aBlock) { +selector: unescape('properties%3A'), +category: 'accessing', +fn: function (aDict) { var self = this; - return smalltalk.send(self, "_ifNil_ifNotNil_", [aBlock, function () {return nil;}]); + var object = nil; + object = {}; + smalltalk.send(aDict, "_keysAndValuesDo_", [function (key, value) {return object[key] = value;}]); + return self.properties = object; return self; }, -args: ["aBlock"], -source: unescape('ifNil%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself%20ifNil%3A%20aBlock%20ifNotNil%3A%20%5B%5D'), -messageSends: ["ifNil:ifNotNil:"], +args: ["aDict"], +source: unescape('properties%3A%20aDict%0A%09%22We%20store%20it%20as%20a%20javascript%20object.%22%0A%09%0A%09%7C%20object%20%7C%0A%09%3Cobject%20%3D%20%7B%7D%3B%3E.%0A%09aDict%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%09%3Cobject%5Bkey%5D%20%3D%20value%3E.%0A%09%5D.%0A%09%3Creturn%20self.properties%20%3D%20object%3E'), +messageSends: ["keysAndValuesDo:"], referencedClasses: [] }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_ifNotNil_'), +unescape('_propertiesAsJSON'), smalltalk.method({ -selector: unescape('ifNotNil%3A'), -category: 'testing', -fn: function (aBlock) { +selector: unescape('propertiesAsJSON'), +category: 'private', +fn: function () { var self = this; - return self; + return JSON.stringify(self.properties); return self; }, -args: ["aBlock"], -source: unescape('ifNotNil%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself'), +args: [], +source: unescape('propertiesAsJSON%0A%09%3Creturn%20JSON.stringify%28self.properties%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_ifNil_ifNotNil_'), +unescape('_propertyAt_'), smalltalk.method({ -selector: unescape('ifNil%3AifNotNil%3A'), -category: 'testing', -fn: function (aBlock, anotherBlock) { +selector: unescape('propertyAt%3A'), +category: 'properties', +fn: function (key) { var self = this; - return smalltalk.send(aBlock, "_value", []); + return self.properties[key]; return self; }, -args: ["aBlock", "anotherBlock"], -source: unescape('ifNil%3A%20aBlock%20ifNotNil%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EaBlock%20value'), -messageSends: ["value"], +args: ["key"], +source: unescape('propertyAt%3A%20key%0A%0A%09%3Creturn%20self.properties%5Bkey%5D%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_ifNotNil_ifNil_'), +unescape('_propertyAt_ifAbsent_'), smalltalk.method({ -selector: unescape('ifNotNil%3AifNil%3A'), -category: 'testing', -fn: function (aBlock, anotherBlock) { +selector: unescape('propertyAt%3AifAbsent%3A'), +category: 'properties', +fn: function (key, block) { var self = this; - return smalltalk.send(anotherBlock, "_value", []); + return ($receiver = smalltalk.send(self, "_propertyAt_", [key])) == nil || + $receiver == undefined ? function () {return smalltalk.send(block, "_value", []);}() : $receiver; return self; }, -args: ["aBlock", "anotherBlock"], -source: unescape('ifNotNil%3A%20aBlock%20ifNil%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EanotherBlock%20value'), -messageSends: ["value"], +args: ["key", "block"], +source: unescape('propertyAt%3A%20key%20ifAbsent%3A%20block%0A%0A%09%5E%28self%20propertyAt%3A%20key%29%20ifNil%3A%20%5Bblock%20value%5D'), +messageSends: ["ifNil:", "propertyAt:", "value"], referencedClasses: [] }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_isNil'), +unescape('_propertyAt_put_'), smalltalk.method({ -selector: unescape('isNil'), -category: 'testing', -fn: function () { +selector: unescape('propertyAt%3Aput%3A'), +category: 'properties', +fn: function (key, value) { var self = this; - return true; + return self.properties[key] = value; return self; }, -args: [], -source: unescape('isNil%0A%09%5Etrue'), +args: ["key", "value"], +source: unescape('propertyAt%3A%20key%20put%3A%20value%0A%0A%09%3Creturn%20self.properties%5Bkey%5D%20%3D%20value%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.UndefinedObject); +smalltalk.Package); smalltalk.addMethod( -unescape('_notNil'), +unescape('_sortedClasses'), smalltalk.method({ -selector: unescape('notNil'), -category: 'testing', -fn: function () { - var self = this; - return false; - return self; -}, +selector: unescape('sortedClasses'), +category: 'classes', +fn: function (){ +var self=this; +return smalltalk.send(smalltalk.send(self, "_class", []), "_sortedClasses_", [smalltalk.send(self, "_classes", [])]); +return self;}, args: [], -source: unescape('notNil%0A%09%5Efalse'), -messageSends: [], +source: unescape('sortedClasses%0A%09%22Answer%20all%20classes%20in%20the%20receiver%2C%20sorted%20by%20superclass/subclasses%20and%20by%20class%20name%20for%20common%20subclasses%20%28Issue%20%23143%29%22%0A%0A%09%5Eself%20class%20sortedClasses%3A%20self%20classes'), +messageSends: ["sortedClasses:", "class", "classes"], referencedClasses: [] }), -smalltalk.UndefinedObject); +smalltalk.Package); + +smalltalk.Package.klass.iVarNames = ['defaultCommitPathJs','defaultCommitPathSt']; smalltalk.addMethod( -unescape('_printString'), +unescape('_commitToLocalStorage_'), smalltalk.method({ -selector: unescape('printString'), -category: 'printing', -fn: function () { +selector: unescape('commitToLocalStorage%3A'), +category: 'loading-storing', +fn: function (aPackageName) { var self = this; - return "nil"; + var key = nil; + var sourceCode = nil; + key = smalltalk.send("smalltalk.packages.", "__comma", [aPackageName]); + sourceCode = smalltalk.send(smalltalk.send(smalltalk.Exporter || Exporter, "_new", []), "_exportPackage_", [aPackageName]); + localStorage[key] = escape(sourceCode); return self; }, -args: [], -source: unescape('printString%0A%20%20%20%20%5E%27nil%27'), -messageSends: [], -referencedClasses: [] +args: ["aPackageName"], +source: unescape('commitToLocalStorage%3A%20aPackageName%0A%09%7C%20key%20sourceCode%20%7C%0A%09key%20%3A%3D%20%27smalltalk.packages.%27%20%2C%20aPackageName.%0A%09sourceCode%20%3A%3D%20Exporter%20new%20exportPackage%3A%20aPackageName.%0A%09%3ClocalStorage%5Bkey%5D%20%3D%20escape%28sourceCode%29%3E'), +messageSends: [unescape("%2C"), "exportPackage:", "new"], +referencedClasses: ["Exporter"] }), -smalltalk.UndefinedObject); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_subclass_instanceVariableNames_package_'), +unescape('_defaultCommitPathJs'), smalltalk.method({ -selector: unescape('subclass%3AinstanceVariableNames%3Apackage%3A'), -category: 'class creation', -fn: function (aString, aString2, aString3) { +selector: unescape('defaultCommitPathJs'), +category: 'commit paths', +fn: function () { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.ClassBuilder || ClassBuilder, "_new", []), "_superclass_subclass_instanceVariableNames_package_", [self, aString, aString2, aString3]); + return ($receiver = self['@defaultCommitPathJs']) == nil || + $receiver == undefined ? function () {return self['@defaultCommitPathJs'] = "js";}() : $receiver; return self; }, -args: ["aString", "aString2", "aString3"], -source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3%0A%09%5EClassBuilder%20new%0A%09%20%20%20%20superclass%3A%20self%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'), -messageSends: ["superclass:subclass:instanceVariableNames:package:", "new"], -referencedClasses: ["ClassBuilder"] -}), -smalltalk.UndefinedObject); - -smalltalk.addMethod( -unescape('_asJSON'), -smalltalk.method({ -selector: unescape('asJSON'), -category: 'converting', -fn: function (){ -var self=this; -return (typeof null == 'undefined' ? nil : null); -return self;}, args: [], -source: unescape('asJSON%0A%09%5Enull'), -messageSends: [], +source: unescape('defaultCommitPathJs%0A%09%5E%20defaultCommitPathJs%20ifNil%3A%20%5B%20defaultCommitPathJs%20%3A%3D%20%27js%27%5D'), +messageSends: ["ifNil:"], referencedClasses: [] }), -smalltalk.UndefinedObject); - +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_new'), +unescape('_defaultCommitPathJs_'), smalltalk.method({ -selector: unescape('new'), -category: 'instance creation', -fn: function () { +selector: unescape('defaultCommitPathJs%3A'), +category: 'commit paths', +fn: function (aString) { var self = this; - smalltalk.send(self, "_error_", ["You cannot create new instances of UndefinedObject. Use nil"]); + self['@defaultCommitPathJs'] = aString; return self; }, -args: [], -source: unescape('new%0A%09%20%20%20%20self%20error%3A%20%27You%20cannot%20create%20new%20instances%20of%20UndefinedObject.%20Use%20nil%27'), -messageSends: ["error:"], +args: ["aString"], +source: unescape('defaultCommitPathJs%3A%20aString%0A%09defaultCommitPathJs%20%3A%3D%20aString'), +messageSends: [], referencedClasses: [] }), -smalltalk.UndefinedObject.klass); - +smalltalk.Package.klass); -smalltalk.addClass('Date', smalltalk.Object, [], 'Kernel-Objects'); -smalltalk.Date.comment=unescape('The%20Date%20class%20is%20used%20to%20work%20with%20dates%20and%20times.%20Therefore%20%60Date%20today%60%20and%20%60Date%20now%60%20are%20both%20valid%20in%0AAmber%20and%20answer%20the%20same%20date%20object.%0A%0ADate%20wraps%20the%20%60Date%28%29%60%20JavaScript%20constructor%2C%20and%20Smalltalk%20date%20objects%20are%20JavaScript%20date%20objects.') smalltalk.addMethod( -unescape('_year'), +unescape('_defaultCommitPathSt'), smalltalk.method({ -selector: unescape('year'), -category: 'accessing', +selector: unescape('defaultCommitPathSt'), +category: 'commit paths', fn: function () { var self = this; - return self.getFullYear(); + return ($receiver = self['@defaultCommitPathSt']) == nil || + $receiver == undefined ? function () {return self['@defaultCommitPathSt'] = "st";}() : $receiver; return self; }, args: [], -source: unescape('year%0A%09%3Creturn%20self.getFullYear%28%29%3E'), -messageSends: [], +source: unescape('defaultCommitPathSt%0A%09%5E%20defaultCommitPathSt%20ifNil%3A%20%5B%20defaultCommitPathSt%20%3A%3D%20%27st%27%5D'), +messageSends: ["ifNil:"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_month'), +unescape('_defaultCommitPathSt_'), smalltalk.method({ -selector: unescape('month'), -category: 'accessing', -fn: function () { +selector: unescape('defaultCommitPathSt%3A'), +category: 'commit paths', +fn: function (aString) { var self = this; - return self.getMonth() + 1; + self['@defaultCommitPathSt'] = aString; return self; }, -args: [], -source: unescape('month%0A%09%3Creturn%20self.getMonth%28%29%20+%201%3E'), +args: ["aString"], +source: unescape('defaultCommitPathSt%3A%20aString%0A%09defaultCommitPathSt%20%3A%3D%20aString'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_month_'), +unescape('_fetch_'), smalltalk.method({ -selector: unescape('month%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('fetch%3A'), +category: 'loading-storing', +fn: function (aPackageName) { var self = this; - self.setMonth(aNumber - 1); + smalltalk.send(self, "_fetch_prefix_", [aPackageName, smalltalk.send(smalltalk.send(self, "_defaultCommitPathJs", []), "__comma", [unescape("/")])]); return self; }, -args: ["aNumber"], -source: unescape('month%3A%20aNumber%0A%09%3Cself.setMonth%28aNumber%20-%201%29%3E'), -messageSends: [], +args: ["aPackageName"], +source: unescape('fetch%3A%20aPackageName%0A%09self%20fetch%3A%20aPackageName%20prefix%3A%20self%20defaultCommitPathJs%2C%20%27/%27'), +messageSends: ["fetch:prefix:", unescape("%2C"), "defaultCommitPathJs"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_day'), +unescape('_fetch_prefix_'), smalltalk.method({ -selector: unescape('day'), -category: 'accessing', -fn: function () { - var self = this; - return smalltalk.send(self, "_dayOfWeek", []); +selector: unescape('fetch%3Aprefix%3A'), +category: 'loading-storing', +fn: function (aPackageName, aPrefix) { + var self = this; + smalltalk.send(typeof jQuery == "undefined" ? nil : jQuery, "_getScript_onSuccess_", [smalltalk.send(smalltalk.send(aPrefix, "__comma", [aPackageName]), "__comma", [".js"]), function () {return smalltalk.send(smalltalk.Package || Package, "_init_", [aPackageName]);}]); return self; }, -args: [], -source: unescape('day%0A%09%5Eself%20dayOfWeek'), -messageSends: ["dayOfWeek"], +args: ["aPackageName", "aPrefix"], +source: unescape('fetch%3A%20aPackageName%20prefix%3A%20aPrefix%0A%09jQuery%20getScript%3A%20%28aPrefix%20%2C%20aPackageName%20%2C%20%27.js%27%29%20onSuccess%3A%20%5B%20Package%20init%3A%20aPackageName%20%5D'), +messageSends: ["getScript:onSuccess:", unescape("%2C"), "init:"], +referencedClasses: ["Package"] +}), +smalltalk.Package.klass); + +smalltalk.addMethod( +unescape('_init_'), +smalltalk.method({ +selector: unescape('init%3A'), +category: 'loading-storing', +fn: function (aPackageName) { + var self = this; + (function ($rec) {smalltalk.send($rec, "_do_", [function (each) {return smalltalk.init(each);}]);return smalltalk.send($rec, "_do_", [function (each) {return smalltalk.send(each, "_initialize", []);}]);}(smalltalk.send(smalltalk.send(typeof smalltalk == "undefined" ? nil : smalltalk, "_classes", []), "_select_", [function (each) {return each.pkg.pkgName == aPackageName;}]))); + return self; +}, +args: ["aPackageName"], +source: unescape('init%3A%20aPackageName%0A%09%28smalltalk%20classes%20select%3A%20%5B%20%3Aeach%20%7C%20%3Ceach.pkg.pkgName%20%3D%3D%20aPackageName%3E%20%5D%29%0A%09%09do%3A%20%5B%20%3Aeach%20%7C%20%3Csmalltalk.init%28each%29%3E%20%5D%3B%0A%09%09do%3A%20%5B%20%3Aeach%20%7C%20each%20initialize%20%5D'), +messageSends: ["do:", "initialize", "select:", "classes"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_dayOfWeek'), +unescape('_named_'), smalltalk.method({ -selector: unescape('dayOfWeek'), -category: 'accessing', +selector: unescape('named%3A'), +category: 'not yet classified', +fn: function (aPackageName) { + var self = this; + return smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_packageAt_", [aPackageName]); + return self; +}, +args: ["aPackageName"], +source: unescape('named%3A%20aPackageName%0A%0A%09%5ESmalltalk%20current%20packageAt%3A%20aPackageName'), +messageSends: ["packageAt:", "current"], +referencedClasses: ["Smalltalk"] +}), +smalltalk.Package.klass); + +smalltalk.addMethod( +unescape('_named_ifAbsent_'), +smalltalk.method({ +selector: unescape('named%3AifAbsent%3A'), +category: 'not yet classified', +fn: function (aPackageName, aBlock) { + var self = this; + return smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_packageAt_ifAbsent_", [aPackageName, aBlock]); + return self; +}, +args: ["aPackageName", "aBlock"], +source: unescape('named%3A%20aPackageName%20ifAbsent%3A%20aBlock%0A%0A%09%5ESmalltalk%20current%20packageAt%3A%20aPackageName%20ifAbsent%3A%20aBlock'), +messageSends: ["packageAt:ifAbsent:", "current"], +referencedClasses: ["Smalltalk"] +}), +smalltalk.Package.klass); + +smalltalk.addMethod( +unescape('_resetCommitPaths'), +smalltalk.method({ +selector: unescape('resetCommitPaths'), +category: 'commit paths', fn: function () { var self = this; - return self.getDay() + 1; + self['@defaultCommitPathJs'] = nil; + self['@defaultCommitPathSt'] = nil; return self; }, args: [], -source: unescape('dayOfWeek%0A%09%3Creturn%20self.getDay%28%29%20+%201%3E'), +source: unescape('resetCommitPaths%0A%20%20%20%20%20%20%20%20defaultCommitPathJs%20%3A%3D%20nil.%0A%20%20%20%20%20%20%20%20defaultCommitPathSt%20%3A%3D%20nil.'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Package.klass); smalltalk.addMethod( -unescape('_dayOfWeek_'), +unescape('_sortedClasses_'), smalltalk.method({ -selector: unescape('dayOfWeek%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('sortedClasses%3A'), +category: 'sorting', +fn: function (classes){ +var self=this; +var children=nil; +var others=nil; +var nodes=nil; +var expandedClasses=nil; +(children=[]); +(others=[]); +smalltalk.send(classes, "_do_", [(function(each){return ((($receiver = smalltalk.send(classes, "_includes_", [smalltalk.send(each, "_superclass", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(children, "_add_", [each]);})() : (function(){return smalltalk.send(others, "_add_", [each]);})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return smalltalk.send(children, "_add_", [each]);}), (function(){return smalltalk.send(others, "_add_", [each]);})]));})]); +(nodes=smalltalk.send(children, "_collect_", [(function(each){return smalltalk.send((smalltalk.ClassSorterNode || ClassSorterNode), "_on_classes_level_", [each, others, (0)]);})])); +(nodes=smalltalk.send(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", [])]));})])); +(expandedClasses=smalltalk.send((smalltalk.Array || Array), "_new", [])); +smalltalk.send(nodes, "_do_", [(function(aNode){return smalltalk.send(aNode, "_traverseClassesWith_", [expandedClasses]);})]); +return expandedClasses; +return self;}, +args: ["classes"], +source: unescape('sortedClasses%3A%20classes%0A%09%22Answer%20classes%2C%20sorted%20by%20superclass/subclasses%20and%20by%20class%20name%20for%20common%20subclasses%20%28Issue%20%23143%29%22%0A%0A%09%7C%20children%20others%20nodes%20expandedClasses%20%7C%0A%09children%20%3A%3D%20%23%28%29.%0A%09others%20%3A%3D%20%23%28%29.%0A%09classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%28classes%20includes%3A%20each%20superclass%29%0A%09%09%09ifFalse%3A%20%5Bchildren%20add%3A%20each%5D%0A%09%09%09ifTrue%3A%20%5Bothers%20add%3A%20each%5D%5D.%0A%09nodes%20%3A%3D%20children%20collect%3A%20%5B%3Aeach%20%7C%0A%09%09ClassSorterNode%20on%3A%20each%20classes%3A%20others%20level%3A%200%5D.%0A%09nodes%20%3A%3D%20nodes%20sorted%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20theClass%20name%20%3C%3D%20b%20theClass%20name%20%5D.%0A%09expandedClasses%20%3A%3D%20Array%20new.%0A%09nodes%20do%3A%20%5B%3AaNode%20%7C%0A%09%09aNode%20traverseClassesWith%3A%20expandedClasses%5D.%0A%09%5EexpandedClasses'), +messageSends: ["do:", "ifFalse:ifTrue:", "includes:", "superclass", "add:", "collect:", "on:classes:level:", "sorted:", unescape("%3C%3D"), "name", "theClass", "new", "traverseClassesWith:"], +referencedClasses: ["ClassSorterNode", "Array"] +}), +smalltalk.Package.klass); + + +smalltalk.addClass('Point', smalltalk.Object, ['x', 'y'], 'Kernel-Objects'); +smalltalk.Point.comment=unescape('A%20%60Point%60%20represents%20an%20x-y%20pair%20of%20numbers%20usually%20designating%20a%20geometric%20coordinate.%0APoints%20are%20traditionally%20created%20using%20the%20binary%20%60%23@%60%20message%20to%20a%20number%3A%0A%0A%09100@120%0A%0APoints%20can%20then%20be%20arithmetically%20manipulated%3A%0A%0A%09100@100%20+%20%2810@10%29%0A%0A...or%20for%20example%3A%0A%0A%09%28100@100%29%20*%202%0A%0A**NOTE%3A**%20Creating%20a%20Point%20with%20a%20negative%20y-value%20will%20need%20a%20space%20after%20%60@%60%20in%20order%20to%20avoid%20a%20parsing%20error%3A%0A%0A%09100@%20-100%20%22but%20100@-100%20would%20not%20parse%22%0A%0AAmber%20does%20not%20have%20much%20behavior%20in%20this%20class%20out-of-the-box.') +smalltalk.addMethod( +unescape('__star'), +smalltalk.method({ +selector: unescape('*'), +category: 'arithmetic', +fn: function (aPoint) { var self = this; - return self.setDay(aNumber - 1); + return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver * smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__star", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver * smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__star", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); return self; }, -args: ["aNumber"], -source: unescape('dayOfWeek%3A%20aNumber%0A%09%3Creturn%20self.setDay%28aNumber%20-%201%29%3E'), -messageSends: [], -referencedClasses: [] +args: ["aPoint"], +source: unescape('*%20aPoint%0A%09%5EPoint%20x%3A%20self%20x%20*%20aPoint%20asPoint%20x%20y%3A%20self%20y%20*%20aPoint%20asPoint%20y'), +messageSends: ["x:y:", unescape("*"), "x", "asPoint", "y"], +referencedClasses: ["Point"] }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_day_'), +unescape('__plus'), smalltalk.method({ -selector: unescape('day%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('+'), +category: 'arithmetic', +fn: function (aPoint) { var self = this; - smalltalk.send(self, "_day_", [aNumber]); + return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver + smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver + smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); return self; }, -args: ["aNumber"], -source: unescape('day%3A%20aNumber%0A%09self%20day%3A%20aNumber'), -messageSends: ["day:"], -referencedClasses: [] +args: ["aPoint"], +source: unescape('+%20aPoint%0A%09%5EPoint%20x%3A%20self%20x%20+%20aPoint%20asPoint%20x%20y%3A%20self%20y%20+%20aPoint%20asPoint%20y'), +messageSends: ["x:y:", unescape("+"), "x", "asPoint", "y"], +referencedClasses: ["Point"] }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_year_'), +unescape('__minus'), smalltalk.method({ -selector: unescape('year%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('-'), +category: 'arithmetic', +fn: function (aPoint) { var self = this; - self.setFullYear(aNumber); + return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver - smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__minus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver - smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__minus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); return self; }, -args: ["aNumber"], -source: unescape('year%3A%20aNumber%0A%09%3Cself.setFullYear%28aNumber%29%3E'), -messageSends: [], -referencedClasses: [] +args: ["aPoint"], +source: unescape('-%20aPoint%0A%09%5EPoint%20x%3A%20self%20x%20-%20aPoint%20asPoint%20x%20y%3A%20self%20y%20-%20aPoint%20asPoint%20y'), +messageSends: ["x:y:", unescape("-"), "x", "asPoint", "y"], +referencedClasses: ["Point"] }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_dayOfMonth'), +unescape('__slash'), smalltalk.method({ -selector: unescape('dayOfMonth'), -category: 'accessing', -fn: function () { +selector: unescape('/'), +category: 'arithmetic', +fn: function (aPoint) { var self = this; - return self.getDate(); + return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver / smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__slash", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver / smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__slash", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); return self; }, -args: [], -source: unescape('dayOfMonth%0A%09%3Creturn%20self.getDate%28%29%3E'), -messageSends: [], -referencedClasses: [] +args: ["aPoint"], +source: unescape('/%20aPoint%0A%09%5EPoint%20x%3A%20self%20x%20/%20aPoint%20asPoint%20x%20y%3A%20self%20y%20/%20aPoint%20asPoint%20y'), +messageSends: ["x:y:", unescape("/"), "x", "asPoint", "y"], +referencedClasses: ["Point"] }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_dayOfMonth_'), +unescape('__eq'), smalltalk.method({ -selector: unescape('dayOfMonth%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('%3D'), +category: 'arithmetic', +fn: function (aPoint) { var self = this; - self.setDate(aNumber); + return smalltalk.send(smalltalk.send(smalltalk.send(aPoint, "_class", []), "__eq", [smalltalk.send(self, "_class", [])]), "_and_", [function () {return smalltalk.send(smalltalk.send(smalltalk.send(aPoint, "_x", []), "__eq", [smalltalk.send(self, "_x", [])]), "_&", [smalltalk.send(smalltalk.send(aPoint, "_y", []), "__eq", [smalltalk.send(self, "_y", [])])]);}]); return self; }, -args: ["aNumber"], -source: unescape('dayOfMonth%3A%20aNumber%0A%09%3Cself.setDate%28aNumber%29%3E'), -messageSends: [], +args: ["aPoint"], +source: unescape('%3D%20aPoint%0A%09%5EaPoint%20class%20%3D%20self%20class%20and%3A%20%5B%0A%09%09%28aPoint%20x%20%3D%20self%20x%29%20%26%20%28aPoint%20y%20%3D%20self%20y%29%5D'), +messageSends: ["and:", unescape("%3D"), "class", unescape("%26"), "x", "y"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_asString'), +unescape('_asPoint'), smalltalk.method({ -selector: unescape('asString'), +selector: unescape('asPoint'), category: 'converting', fn: function () { var self = this; - return self.toString(); + return self; return self; }, args: [], -source: unescape('asString%0A%09%3Creturn%20self.toString%28%29%3E'), +source: unescape('asPoint%0A%09%5Eself'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( unescape('_printString'), @@ -3954,918 +4158,740 @@ selector: unescape('printString'), category: 'printing', fn: function () { var self = this; - return smalltalk.send(self, "_asString", []); + return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (stream) {smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@x'], "_printString", []), "__comma", [unescape("@")])]);($receiver = smalltalk.send(smalltalk.send(self['@y'], "_notNil", []), "_and_", [function () {return smalltalk.send(self['@y'], "_negative", []);}])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(stream, "_space", []);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(stream, "_space", []);}]);return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(self['@y'], "_printString", [])]);}]); return self; }, args: [], -source: unescape('printString%0A%09%5Eself%20asString'), -messageSends: ["asString"], -referencedClasses: [] +source: unescape('printString%0A%09%22Print%20receiver%20in%20classic%20x@y%20notation.%22%0A%0A%09%5EString%20streamContents%3A%20%5B%3Astream%20%7C%0A%09%09stream%20nextPutAll%3A%20x%20printString%2C%20%27@%27.%0A%09%09%28y%20notNil%20and%3A%20%5By%20negative%5D%29%0A%09%09%09ifTrue%3A%20%5B%0A%09%09%09%09%22Avoid%20ambiguous%20@-%20construct%22%0A%09%09%09%09stream%20space%5D.%0A%09%09stream%20nextPutAll%3A%20y%20printString%5D'), +messageSends: ["streamContents:", "nextPutAll:", unescape("%2C"), "printString", "ifTrue:", "and:", "notNil", "negative", "space"], +referencedClasses: ["String"] }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_asMilliseconds'), +unescape('_translateBy_'), smalltalk.method({ -selector: unescape('asMilliseconds'), -category: 'converting', -fn: function () { - var self = this; - return smalltalk.send(self, "_time", []); - return self; -}, -args: [], -source: unescape('asMilliseconds%0A%09%5Eself%20time'), -messageSends: ["time"], +selector: unescape('translateBy%3A'), +category: 'transforming', +fn: function (delta){ +var self=this; +return smalltalk.send(((($receiver = smalltalk.send(delta, "_x", [])).klass === smalltalk.Number) ? $receiver +self['@x'] : smalltalk.send($receiver, "__plus", [self['@x']])), "__at", [((($receiver = smalltalk.send(delta, "_y", [])).klass === smalltalk.Number) ? $receiver +self['@y'] : smalltalk.send($receiver, "__plus", [self['@y']]))]); +return self;}, +args: ["delta"], +source: unescape('translateBy%3A%20delta%20%0A%09%22Answer%20a%20Point%20translated%20by%20delta%20%28an%20instance%20of%20Point%29.%22%0A%09%5E%28delta%20x%20+%20x%29%20@%20%28delta%20y%20+%20y%29'), +messageSends: [unescape("@"), unescape("+"), "x", "y"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_time'), +unescape('_x'), smalltalk.method({ -selector: unescape('time'), +selector: unescape('x'), category: 'accessing', fn: function () { var self = this; - return self.getTime(); + return self['@x']; return self; }, args: [], -source: unescape('time%0A%09%3Creturn%20self.getTime%28%29%3E'), +source: unescape('x%0A%09%5Ex'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_time_'), +unescape('_x_'), smalltalk.method({ -selector: unescape('time%3A'), +selector: unescape('x%3A'), category: 'accessing', fn: function (aNumber) { var self = this; - self.setTime(aNumber); + self['@x'] = aNumber; return self; }, args: ["aNumber"], -source: unescape('time%3A%20aNumber%0A%09%3Cself.setTime%28aNumber%29%3E'), +source: unescape('x%3A%20aNumber%0A%09x%20%3A%3D%20aNumber'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_asDateString'), +unescape('_y'), smalltalk.method({ -selector: unescape('asDateString'), -category: 'converting', +selector: unescape('y'), +category: 'accessing', fn: function () { var self = this; - return self.toDateString(); + return self['@y']; return self; }, args: [], -source: unescape('asDateString%0A%09%3Creturn%20self.toDateString%28%29%3E'), +source: unescape('y%0A%09%5Ey'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Point); smalltalk.addMethod( -unescape('_asTimeString'), +unescape('_y_'), smalltalk.method({ -selector: unescape('asTimeString'), -category: 'converting', -fn: function () { +selector: unescape('y%3A'), +category: 'accessing', +fn: function (aNumber) { var self = this; - return self.toTimeString(); + self['@y'] = aNumber; return self; }, -args: [], -source: unescape('asTimeString%0A%09%3Creturn%20self.toTimeString%28%29%3E'), +args: ["aNumber"], +source: unescape('y%3A%20aNumber%0A%09y%20%3A%3D%20aNumber'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Point); -smalltalk.addMethod( -unescape('_asLocaleString'), -smalltalk.method({ -selector: unescape('asLocaleString'), -category: 'converting', -fn: function () { - var self = this; - return self.toLocaleString(); - return self; -}, -args: [], -source: unescape('asLocaleString%0A%09%3Creturn%20self.toLocaleString%28%29%3E'), -messageSends: [], -referencedClasses: [] -}), -smalltalk.Date); smalltalk.addMethod( -unescape('_asNumber'), +unescape('_x_y_'), smalltalk.method({ -selector: unescape('asNumber'), -category: 'converting', -fn: function () { +selector: unescape('x%3Ay%3A'), +category: 'instance creation', +fn: function (aNumber, anotherNumber) { var self = this; - return smalltalk.send(self, "_asMilliseconds", []); + return function ($rec) {smalltalk.send($rec, "_x_", [aNumber]);smalltalk.send($rec, "_y_", [anotherNumber]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", [])); return self; }, -args: [], -source: unescape('asNumber%0A%09%5Eself%20asMilliseconds'), -messageSends: ["asMilliseconds"], +args: ["aNumber", "anotherNumber"], +source: unescape('x%3A%20aNumber%20y%3A%20anotherNumber%0A%09%5Eself%20new%0A%09%09x%3A%20aNumber%3B%0A%09%09y%3A%20anotherNumber%3B%0A%09%09yourself'), +messageSends: ["x:", "y:", "yourself", "new"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Point.klass); + +smalltalk.addClass('Random', smalltalk.Object, [], 'Kernel-Objects'); +smalltalk.Random.comment=unescape('%60Random%60%20is%20a%20random%20number%20generator%20and%20is%20implemented%20as%20a%20trivial%20wrapper%20around%20javascript%20%60Math.random%28%29%60%20and%20is%20used%20like%20this%3A%0A%0A%09Random%20new%20next%0A%0AThis%20will%20return%20a%20float%20x%20where%20x%20%3C%201%20and%20x%20%3E%200.%20If%20you%20want%20a%20random%20integer%20from%201%20to%2010%20you%20can%20use%20%60%23atRandom%60%0A%0A%0910%20atRandom%0A%0A...and%20if%20you%20want%20a%20random%20number%20in%20a%20specific%20interval%20this%20also%20works%3A%0A%0A%09%283%20to%3A%207%29%20atRandom%0A%0A...but%20be%20aware%20that%20%60%23to%3A%60%20does%20not%20create%20an%20Interval%20as%20in%20other%20Smalltalk%20implementations%20but%20in%20fact%20an%20%60Array%60%20of%20numbers%2C%20so%20it%27s%20better%20to%20use%3A%0A%0A%095%20atRandom%20+%202%0A%0ASince%20%60%23atRandom%60%20is%20implemented%20in%20%60SequencableCollection%60%20you%20can%20easy%20pick%20an%20element%20at%20random%3A%0A%0A%09%23%28%27a%27%20%27b%27%20%27c%27%29%20atRandom%0A%0A...or%20perhaps%20a%20letter%20from%20a%20%60String%60%3A%0A%0A%09%27abc%27%20atRandom%0A%0ASince%20Amber%20does%20not%20have%20Characters%20this%20will%20return%20a%20%60String%60%20of%20length%201%20like%20for%20example%20%60%27b%27%60.') smalltalk.addMethod( -unescape('_hours_'), +unescape('_next'), smalltalk.method({ -selector: unescape('hours%3A'), +selector: unescape('next'), category: 'accessing', -fn: function (aNumber) { +fn: function () { var self = this; - self.setHours(aNumber); + return Math.random(); return self; }, -args: ["aNumber"], -source: unescape('hours%3A%20aNumber%0A%09%3Cself.setHours%28aNumber%29%3E'), +args: [], +source: unescape('next%0A%09%3Creturn%20Math.random%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Random); smalltalk.addMethod( -unescape('_minutes_'), +unescape('_next_'), smalltalk.method({ -selector: unescape('minutes%3A'), +selector: unescape('next%3A'), category: 'accessing', -fn: function (aNumber) { +fn: function (anInteger) { var self = this; - self.setMinutes(aNumber); + return smalltalk.send(smalltalk.send(1, "_to_", [anInteger]), "_collect_", [function (each) {return smalltalk.send(self, "_next", []);}]); return self; }, -args: ["aNumber"], -source: unescape('minutes%3A%20aNumber%0A%09%3Cself.setMinutes%28aNumber%29%3E'), -messageSends: [], +args: ["anInteger"], +source: unescape('next%3A%20anInteger%0A%20%20%20%20%5E%281%20to%3A%20anInteger%29%20collect%3A%20%5B%3Aeach%20%7C%20self%20next%5D'), +messageSends: ["collect:", "to:", "next"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Random); + + +smalltalk.addClass('Smalltalk', smalltalk.Object, [], 'Kernel-Objects'); +smalltalk.Smalltalk.comment=unescape('Smalltalk%20has%20only%20one%20instance%2C%20accessed%20with%20%60Smalltalk%20current%60.%20%0AIt%20represents%20the%20global%20JavaScript%20variable%20%60smalltalk%60%20declared%20in%20%60js/boot.js%60.%0A%0AThe%20%60smalltalk%60%20object%20holds%20all%20class%20and%20packages%20defined%20in%20the%20system.%0A%0A%23%23%20Classes%0A%0AClasses%20can%20be%20accessed%20using%20the%20following%20methods%3A%0A%0A-%20%60%23classes%60%20answers%20the%20full%20list%20of%20Smalltalk%20classes%20in%20the%20system%0A-%20%60%23at%3A%60%20answers%20a%20specific%20class%20of%20%60nil%60%0A%0A%23%23%20Packages%0A%0APackages%20can%20be%20accessed%20using%20the%20following%20methods%3A%0A%0A-%20%60%23packages%60%20answers%20the%20full%20list%20of%20packages%0A-%20%60%23packageAt%3A%60%20answers%20a%20specific%20class%20of%20%60nil%60%0A%0A__note%3A__%20classes%20and%20packages%20are%20accessed%20using%20strings%2C%20not%20symbols%0A%0A%23%23%20Parsing%0A%0AThe%20%60%23parse%3A%60%20method%20is%20used%20to%20parse%20Smalltalk%20source%20code.%20%0AIt%20requires%20the%20%60Compiler%60%20package%20and%20the%20%60js/parser.js%60%20parser%20file%20in%20order%20to%20work') smalltalk.addMethod( -unescape('_seconds_'), +unescape('_at_'), smalltalk.method({ -selector: unescape('seconds%3A'), +selector: unescape('at%3A'), category: 'accessing', -fn: function (aNumber) { +fn: function (aString) { var self = this; - self.setSeconds(aNumber); + return self[aString]; return self; }, -args: ["aNumber"], -source: unescape('seconds%3A%20aNumber%0A%09%3Cself.setSeconds%28aNumber%29%3E'), +args: ["aString"], +source: unescape('at%3A%20aString%0A%09%3Creturn%20self%5BaString%5D%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_milliseconds_'), +unescape('_basicParse_'), smalltalk.method({ -selector: unescape('milliseconds%3A'), +selector: unescape('basicParse%3A'), category: 'accessing', -fn: function (aNumber) { +fn: function (aString) { var self = this; - self.setMilliseconds(aNumber); + return smalltalk.parser.parse(aString); return self; }, -args: ["aNumber"], -source: unescape('milliseconds%3A%20aNumber%0A%09%3Cself.setMilliseconds%28aNumber%29%3E'), +args: ["aString"], +source: unescape('basicParse%3A%20aString%0A%09%3Creturn%20smalltalk.parser.parse%28aString%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_hours'), +unescape('_classes'), smalltalk.method({ -selector: unescape('hours'), +selector: unescape('classes'), category: 'accessing', fn: function () { var self = this; - return self.getHours(); + return self.classes(); return self; }, args: [], -source: unescape('hours%0A%09%3Creturn%20self.getHours%28%29%3E'), +source: unescape('classes%0A%09%3Creturn%20self.classes%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_minutes'), +unescape('_createPackage_'), smalltalk.method({ -selector: unescape('minutes'), -category: 'accessing', -fn: function () { +selector: unescape('createPackage%3A'), +category: 'private', +fn: function (packageName) { var self = this; - return self.getMinutes(); + return smalltalk.addPackage(packageName, nil); return self; }, -args: [], -source: unescape('minutes%0A%09%3Creturn%20self.getMinutes%28%29%3E'), +args: ["packageName"], +source: unescape('createPackage%3A%20packageName%0A%09%22Create%20and%20bind%20a%20new%20package%20with%20given%20name%20and%20return%20it.%22%0A%0A%20%20%20%20%20%20%3Creturn%20smalltalk.addPackage%28packageName%2C%20nil%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_seconds'), +unescape('_createPackage_properties_'), smalltalk.method({ -selector: unescape('seconds'), -category: 'accessing', -fn: function () { +selector: unescape('createPackage%3Aproperties%3A'), +category: 'private', +fn: function (packageName, aDict) { var self = this; - return self.getSeconds(); + var object = nil; + object = {}; + smalltalk.send(aDict, "_keysAndValuesDo_", [function (key, value) {return object[key] = value;}]); + return smalltalk.addPackage(packageName, object); return self; }, -args: [], -source: unescape('seconds%0A%09%3Creturn%20self.getSeconds%28%29%3E'), -messageSends: [], +args: ["packageName", "aDict"], +source: unescape('createPackage%3A%20packageName%20properties%3A%20aDict%0A%09%22Create%20and%20bind%20a%20new%20package%20with%20given%20name%20and%20return%20it.%22%0A%0A%09%7C%20object%20%7C%0A%09%3Cobject%20%3D%20%7B%7D%3B%3E.%0A%09aDict%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%09%3Cobject%5Bkey%5D%20%3D%20value%3E.%0A%09%5D.%0A%20%20%20%20%20%20%20%3Creturn%20smalltalk.addPackage%28packageName%2C%20object%29%3E'), +messageSends: ["keysAndValuesDo:"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_milliseconds'), +unescape('_deletePackage_'), smalltalk.method({ -selector: unescape('milliseconds'), -category: 'accessing', -fn: function () { +selector: unescape('deletePackage%3A'), +category: 'private', +fn: function (packageName) { var self = this; - return self.getMilliseconds(); + delete smalltalk.packages[packageName]; return self; }, -args: [], -source: unescape('milliseconds%0A%09%3Creturn%20self.getMilliseconds%28%29%3E'), +args: ["packageName"], +source: unescape('deletePackage%3A%20packageName%0A%09%22Deletes%20a%20package%20by%20deleting%20its%20binding%2C%20but%20does%20not%20check%20if%20it%20contains%20classes%20etc.%0A%09To%20remove%20a%20package%2C%20use%20%23removePackage%20instead.%22%0A%0A%20%20%20%20%20%20%20%3Cdelete%20smalltalk.packages%5BpackageName%5D%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('__lt'), +unescape('_packageAt_'), smalltalk.method({ -selector: unescape('%3C'), -category: 'comparing', -fn: function (aDate) { +selector: unescape('packageAt%3A'), +category: 'packages', +fn: function (packageName) { var self = this; - return self < aDate; + return self.packages[packageName]; return self; }, -args: ["aDate"], -source: unescape('%3C%20aDate%0A%09%3Creturn%20self%20%3C%20aDate%3E'), +args: ["packageName"], +source: unescape('packageAt%3A%20packageName%0A%20%20%20%20%20%20%20%3Creturn%20self.packages%5BpackageName%5D%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('__gt'), +unescape('_packageAt_ifAbsent_'), smalltalk.method({ -selector: unescape('%3E'), -category: 'comparing', -fn: function (aDate) { +selector: unescape('packageAt%3AifAbsent%3A'), +category: 'packages', +fn: function (packageName, aBlock) { var self = this; - return self > aDate; + return smalltalk.send(smalltalk.send(self, "_packageAt_", [packageName]), "_ifNil_", [aBlock]); return self; }, -args: ["aDate"], -source: unescape('%3E%20aDate%0A%09%3Creturn%20self%20%3E%3E%20aDate%3E'), -messageSends: [], +args: ["packageName", "aBlock"], +source: unescape('packageAt%3A%20packageName%20ifAbsent%3A%20aBlock%0A%20%20%20%20%20%20%20%5E%28self%20packageAt%3A%20packageName%29%20ifNil%3A%20aBlock'), +messageSends: ["ifNil:", "packageAt:"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('__lt_eq'), +unescape('_packages'), smalltalk.method({ -selector: unescape('%3C%3D'), -category: 'comparing', -fn: function (aDate) { +selector: unescape('packages'), +category: 'packages', +fn: function () { var self = this; - return self <= aDate; + return self.packages.all(); return self; }, -args: ["aDate"], -source: unescape('%3C%3D%20aDate%0A%09%3Creturn%20self%20%3C%3D%20aDate%3E'), +args: [], +source: unescape('packages%0A%09%22Return%20all%20Package%20instances%20in%20the%20system.%22%0A%0A%09%3Creturn%20self.packages.all%28%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('__gt_eq'), +unescape('_parse_'), smalltalk.method({ -selector: unescape('%3E%3D'), -category: 'comparing', -fn: function (aDate) { +selector: unescape('parse%3A'), +category: 'accessing', +fn: function (aString) { var self = this; - return self >= aDate; + var result = nil; + smalltalk.send(self, "_try_catch_", [function () {return result = smalltalk.send(self, "_basicParse_", [aString]);}, function (ex) {return smalltalk.send(smalltalk.send(self, "_parseError_parsing_", [ex, aString]), "_signal", []);}]); + return result; return self; }, -args: ["aDate"], -source: unescape('%3E%3D%20aDate%0A%09%3Creturn%20self%20%3E%3E%3D%20aDate%3E'), -messageSends: [], +args: ["aString"], +source: unescape('parse%3A%20aString%0A%09%7C%20result%20%7C%20%0A%09self%20try%3A%20%5Bresult%20%3A%3D%20self%20basicParse%3A%20aString%5D%20catch%3A%20%5B%3Aex%20%7C%20%28self%20parseError%3A%20ex%20parsing%3A%20aString%29%20signal%5D.%0A%09%5Eresult'), +messageSends: ["try:catch:", "basicParse:", "signal", "parseError:parsing:"], referencedClasses: [] }), -smalltalk.Date); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('__minus'), +unescape('_parseError_parsing_'), smalltalk.method({ -selector: unescape('-'), -category: 'arithmetic', -fn: function (aDate) { - var self = this; - return self - aDate; - return self; -}, -args: ["aDate"], -source: unescape('-%20aDate%0A%09%3Creturn%20self%20-%20aDate%3E'), -messageSends: [], -referencedClasses: [] -}), -smalltalk.Date); - -smalltalk.addMethod( -unescape('__plus'), -smalltalk.method({ -selector: unescape('+'), -category: 'arithmetic', -fn: function (aDate) { +selector: unescape('parseError%3Aparsing%3A'), +category: 'accessing', +fn: function (anException, aString) { var self = this; - return self + aDate; + var row = nil; + var col = nil; + var message = nil; + var lines = nil; + var badLine = nil; + var code = nil; + row = anException.line; + col = anException.column; + message = anException.message; + lines = smalltalk.send(aString, "_lines", []); + badLine = smalltalk.send(lines, "_at_", [row]); + badLine = smalltalk.send(smalltalk.send(smalltalk.send(badLine, "_copyFrom_to_", [1, ($receiver = col).klass === smalltalk.Number ? $receiver - 1 : smalltalk.send($receiver, "__minus", [1])]), "__comma", [unescape("%20%3D%3D%3D%3E")]), "__comma", [smalltalk.send(badLine, "_copyFrom_to_", [col, smalltalk.send(badLine, "_size", [])])]); + smalltalk.send(lines, "_at_put_", [row, badLine]); + code = smalltalk.send(smalltalk.String || String, "_streamContents_", [function (s) {return smalltalk.send(lines, "_withIndexDo_", [function (l, i) {return smalltalk.send(s, "_nextPutAll_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(i, "_asString", []), "__comma", [": "]), "__comma", [l]), "__comma", [smalltalk.send(smalltalk.String || String, "_lf", [])])]);}]);}]); + return smalltalk.send(smalltalk.send(smalltalk.Error || Error, "_new", []), "_messageText_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("Parse error on line ", "__comma", [row]), "__comma", [" column "]), "__comma", [col]), "__comma", [" : "]), "__comma", [message]), "__comma", [unescape("%20Below%20is%20code%20with%20line%20numbers%20and%20%3D%3D%3D%3E%20marker%20inserted%3A")]), "__comma", [smalltalk.send(smalltalk.String || String, "_lf", [])]), "__comma", [code])]); return self; }, -args: ["aDate"], -source: unescape('+%20aDate%0A%09%3Creturn%20self%20+%20aDate%3E'), -messageSends: [], -referencedClasses: [] +args: ["anException", "aString"], +source: unescape('parseError%3A%20anException%20parsing%3A%20aString%0A%09%7C%20row%20col%20message%20lines%20badLine%20code%20%7C%0A%09%3Crow%20%3D%20anException.line%3B%0A%09col%20%3D%20anException.column%3B%0A%09message%20%3D%20anException.message%3B%3E.%0A%09lines%20%3A%3D%20aString%20lines.%0A%09badLine%20%3A%3D%20lines%20at%3A%20row.%0A%09badLine%20%3A%3D%20%28badLine%20copyFrom%3A%201%20to%3A%20col%20-%201%29%2C%20%27%20%3D%3D%3D%3E%27%2C%20%28badLine%20copyFrom%3A%20%20col%20to%3A%20badLine%20size%29.%0A%09lines%20at%3A%20row%20put%3A%20badLine.%0A%09code%20%3A%3D%20String%20streamContents%3A%20%5B%3As%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lines%20withIndexDo%3A%20%5B%3Al%20%3Ai%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20s%20nextPutAll%3A%20i%20asString%2C%20%27%3A%20%27%2C%20l%2C%20String%20lf%5D%5D.%0A%09%5E%20Error%20new%20messageText%3A%20%28%27Parse%20error%20on%20line%20%27%20%2C%20row%20%2C%20%27%20column%20%27%20%2C%20col%20%2C%20%27%20%3A%20%27%20%2C%20message%20%2C%20%27%20Below%20is%20code%20with%20line%20numbers%20and%20%3D%3D%3D%3E%20marker%20inserted%3A%27%20%2C%20String%20lf%2C%20code%29'), +messageSends: ["lines", "at:", unescape("%2C"), "copyFrom:to:", unescape("-"), "size", "at:put:", "streamContents:", "withIndexDo:", "nextPutAll:", "asString", "lf", "messageText:", "new"], +referencedClasses: ["String", "Error"] }), -smalltalk.Date); - +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_new_'), +unescape('_readJSObject_'), smalltalk.method({ -selector: unescape('new%3A'), -category: 'instance creation', +selector: unescape('readJSObject%3A'), +category: 'accessing', fn: function (anObject) { var self = this; - return new Date(anObject); + return self.readJSObject(anObject); return self; }, args: ["anObject"], -source: unescape('new%3A%20anObject%0A%09%3Creturn%20new%20Date%28anObject%29%3E'), +source: unescape('readJSObject%3A%20anObject%0A%09%3Creturn%20self.readJSObject%28anObject%29%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.Date.klass); - -smalltalk.addMethod( -unescape('_fromString_'), -smalltalk.method({ -selector: unescape('fromString%3A'), -category: 'instance creation', -fn: function (aString) { - var self = this; - return smalltalk.send(self, "_new_", [aString]); - return self; -}, -args: ["aString"], -source: unescape('fromString%3A%20aString%0A%09%22Example%3A%20Date%20fromString%28%272011/04/15%2000%3A00%3A00%27%29%22%0A%09%5Eself%20new%3A%20aString'), -messageSends: ["new:"], -referencedClasses: [] -}), -smalltalk.Date.klass); - -smalltalk.addMethod( -unescape('_fromSeconds_'), -smalltalk.method({ -selector: unescape('fromSeconds%3A'), -category: 'instance creation', -fn: function (aNumber) { - var self = this; - return smalltalk.send(self, "_fromMilliseconds_", [($receiver = aNumber).klass === smalltalk.Number ? $receiver * 1000 : smalltalk.send($receiver, "__star", [1000])]); - return self; -}, -args: ["aNumber"], -source: unescape('fromSeconds%3A%20aNumber%0A%09%5Eself%20fromMilliseconds%3A%20aNumber%20*%201000'), -messageSends: ["fromMilliseconds:", unescape("*")], -referencedClasses: [] -}), -smalltalk.Date.klass); - -smalltalk.addMethod( -unescape('_fromMilliseconds_'), -smalltalk.method({ -selector: unescape('fromMilliseconds%3A'), -category: 'instance creation', -fn: function (aNumber) { - var self = this; - return smalltalk.send(self, "_new_", [aNumber]); - return self; -}, -args: ["aNumber"], -source: unescape('fromMilliseconds%3A%20aNumber%0A%09%5Eself%20new%3A%20aNumber'), -messageSends: ["new:"], -referencedClasses: [] -}), -smalltalk.Date.klass); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_today'), +unescape('_removeClass_'), smalltalk.method({ -selector: unescape('today'), -category: 'instance creation', -fn: function () { +selector: unescape('removeClass%3A'), +category: 'classes', +fn: function (aClass) { var self = this; - return smalltalk.send(self, "_new", []); + ($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_asString", []), "__comma", [unescape("%20is%20a%20Metaclass%20and%20cannot%20be%20removed%21")])]);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_asString", []), "__comma", [unescape("%20is%20a%20Metaclass%20and%20cannot%20be%20removed%21")])]);}]); + smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [function (each) {return smalltalk.send(aClass, "_removeCompiledMethod_", [each]);}]); + smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [function (each) {return smalltalk.send(smalltalk.send(aClass, "_class", []), "_removeCompiledMethod_", [each]);}]); + smalltalk.send(self, "_basicDelete_", [smalltalk.send(aClass, "_name", [])]); return self; }, -args: [], -source: unescape('today%0A%09%5Eself%20new'), -messageSends: ["new"], +args: ["aClass"], +source: unescape('removeClass%3A%20aClass%0A%09aClass%20isMetaclass%20ifTrue%3A%20%5Bself%20error%3A%20aClass%20asString%2C%20%27%20is%20a%20Metaclass%20and%20cannot%20be%20removed%21%27%5D.%0A%09aClass%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09aClass%20removeCompiledMethod%3A%20each%5D.%0A%09aClass%20class%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09aClass%20class%20removeCompiledMethod%3A%20each%5D.%0A%09self%20basicDelete%3A%20aClass%20name'), +messageSends: ["ifTrue:", "isMetaclass", "error:", unescape("%2C"), "asString", "do:", "values", "methodDictionary", "removeCompiledMethod:", "class", "basicDelete:", "name"], referencedClasses: [] }), -smalltalk.Date.klass); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_now'), +unescape('_removePackage_'), smalltalk.method({ -selector: unescape('now'), -category: 'instance creation', -fn: function () { +selector: unescape('removePackage%3A'), +category: 'packages', +fn: function (packageName) { var self = this; - return smalltalk.send(self, "_today", []); + var pkg = nil; + pkg = smalltalk.send(self, "_packageAt_ifAbsent_", [packageName, function () {return smalltalk.send(self, "_error_", [smalltalk.send("Missing package: ", "__comma", [packageName])]);}]); + smalltalk.send(smalltalk.send(pkg, "_classes", []), "_do_", [function (each) {return smalltalk.send(self, "_removeClass_", [each]);}]); + smalltalk.send(self, "_deletePackage_", [packageName]); return self; }, -args: [], -source: unescape('now%0A%09%5Eself%20today'), -messageSends: ["today"], +args: ["packageName"], +source: unescape('removePackage%3A%20packageName%0A%09%22Removes%20a%20package%20and%20all%20its%20classes.%22%0A%0A%09%7C%20pkg%20%7C%0A%09pkg%20%3A%3D%20self%20packageAt%3A%20packageName%20ifAbsent%3A%20%5Bself%20error%3A%20%27Missing%20package%3A%20%27%2C%20packageName%5D.%0A%09pkg%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%20%20%20%20%20%20%20%20%09self%20removeClass%3A%20each%5D.%0A%09self%20deletePackage%3A%20packageName'), +messageSends: ["packageAt:ifAbsent:", "error:", unescape("%2C"), "do:", "classes", "removeClass:", "deletePackage:"], referencedClasses: [] }), -smalltalk.Date.klass); - -smalltalk.addMethod( -unescape('_millisecondsToRun_'), -smalltalk.method({ -selector: unescape('millisecondsToRun%3A'), -category: 'instance creation', -fn: function (aBlock) { - var self = this; - var t = nil; - t = smalltalk.send(smalltalk.Date || Date, "_now", []); - smalltalk.send(aBlock, "_value", []); - return ($receiver = smalltalk.send(smalltalk.Date || Date, "_now", [])).klass === smalltalk.Number ? $receiver - t : smalltalk.send($receiver, "__minus", [t]); - return self; -}, -args: ["aBlock"], -source: unescape('millisecondsToRun%3A%20aBlock%0A%09%7C%20t%20%7C%0A%09t%20%3A%3D%20Date%20now.%0A%09aBlock%20value.%0A%09%5EDate%20now%20-%20t'), -messageSends: ["now", "value", unescape("-")], -referencedClasses: ["Date"] -}), -smalltalk.Date.klass); - +smalltalk.Smalltalk); -smalltalk.addClass('JSObjectProxy', smalltalk.Object, ['jsObject'], 'Kernel-Objects'); -smalltalk.JSObjectProxy.comment=unescape('JSObjectProxy%20handles%20sending%20messages%20to%20JavaScript%20object%2C%20therefore%20accessing%20JavaScript%20objects%20from%20Amber%20is%20transparent.%0AJSOjbectProxy%20makes%20intensive%20use%20of%20%60%23doesNotUnderstand%3A%60.%0A%0A%23%23%20Examples%0A%0AJSObjectProxy%20objects%20are%20instanciated%20by%20Amber%20when%20a%20Smalltalk%20message%20is%20sent%20to%20a%20JavaScript%20object.%0A%0A%20%20%20%20window%20alert%3A%20%27hello%20world%27.%0A%20%20%20%20window%20inspect.%0A%20%20%20%20%28window%20jQuery%3A%20%27body%27%29%20append%3A%20%27hello%20world%27%0A%0ASmalltalk%20messages%20sends%20are%20converted%20to%20JavaScript%20function%20calls%20or%20object%20property%20access%20_%28in%20this%20order%29_.%20If%20n%20one%20of%20them%20match%2C%20a%20%60MessageNotUnderstood%60%20error%20will%20be%20thrown.%20%0A%0A%23%23%20Message%20conversion%20rules%0A%0A-%20%60someUser%20name%60%20becomes%20%20%60someUser.name%60%0A-%20%60someUser%20name%3A%20%27John%27%60%20becomes%20%60someUser%20name%20%3D%20%22John%22%60%0A-%20%60console%20log%3A%20%27hello%20world%27%60%20becomes%20%60console.log%28%27hello%20world%27%29%60%0A-%20%60%28window%20jQuery%3A%20%27foo%27%29%20css%3A%20%27background%27%20color%3A%20%27red%27%60%20becomes%20%60window.jQuery%28%27foo%27%29.css%28%27background%27%2C%20%27red%27%29%60%0A%0A__Note%3A__%20For%20keyword-based%20messages%2C%20only%20the%20first%20keyword%20is%20kept%3A%20%60window%20foo%3A%201%20bar%3A%202%60%20is%20equivalent%20to%20%60window%20foo%3A%201%20baz%3A%202%60.') smalltalk.addMethod( -unescape('_jsObject_'), +unescape('_renamePackage_to_'), smalltalk.method({ -selector: unescape('jsObject%3A'), -category: 'accessing', -fn: function (aJSObject) { +selector: unescape('renamePackage%3Ato%3A'), +category: 'packages', +fn: function (packageName, newName) { var self = this; - self['@jsObject'] = aJSObject; + var pkg = nil; + pkg = smalltalk.send(self, "_packageAt_ifAbsent_", [packageName, function () {return smalltalk.send(self, "_error_", [smalltalk.send("Missing package: ", "__comma", [packageName])]);}]); + ($receiver = smalltalk.send(self, "_packageAt_", [newName])) != nil && + $receiver != undefined ? function () {return smalltalk.send(self, "_error_", [smalltalk.send("Already exists a package called: ", "__comma", [newName])]);}() : nil; + smalltalk.packages[newName] = smalltalk.packages[packageName]; + smalltalk.send(pkg, "_name_", [newName]); + smalltalk.send(self, "_deletePackage_", [packageName]); return self; }, -args: ["aJSObject"], -source: unescape('jsObject%3A%20aJSObject%0A%09jsObject%20%3A%3D%20aJSObject'), -messageSends: [], +args: ["packageName", "newName"], +source: unescape('renamePackage%3A%20packageName%20to%3A%20newName%0A%09%22Rename%20a%20package.%22%0A%0A%09%7C%20pkg%20%7C%0A%09pkg%20%3A%3D%20self%20packageAt%3A%20packageName%20ifAbsent%3A%20%5Bself%20error%3A%20%27Missing%20package%3A%20%27%2C%20packageName%5D.%0A%09%28self%20packageAt%3A%20newName%29%20ifNotNil%3A%20%5Bself%20error%3A%20%27Already%20exists%20a%20package%20called%3A%20%27%2C%20newName%5D.%0A%09%3Csmalltalk.packages%5BnewName%5D%20%3D%20smalltalk.packages%5BpackageName%5D%3E.%0A%09pkg%20name%3A%20newName.%0A%09self%20deletePackage%3A%20packageName.'), +messageSends: ["packageAt:ifAbsent:", "error:", unescape("%2C"), "ifNotNil:", "packageAt:", "name:", "deletePackage:"], referencedClasses: [] }), -smalltalk.JSObjectProxy); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_jsObject'), +unescape('_reservedWords'), smalltalk.method({ -selector: unescape('jsObject'), +selector: unescape('reservedWords'), category: 'accessing', fn: function () { var self = this; - return self['@jsObject']; + return self.reservedWords; return self; }, args: [], -source: unescape('jsObject%0A%09%5EjsObject'), +source: unescape('reservedWords%0A%09%22JavaScript%20reserved%20words%22%0A%09%3Creturn%20self.reservedWords%3E'), messageSends: [], referencedClasses: [] }), -smalltalk.JSObjectProxy); - -smalltalk.addMethod( -unescape('_printString'), -smalltalk.method({ -selector: unescape('printString'), -category: 'proxy', -fn: function () { - var self = this; - return smalltalk.send(smalltalk.send(self, "_jsObject", []), "_toString", []); - return self; -}, -args: [], -source: unescape('printString%0A%09%5Eself%20jsObject%20toString'), -messageSends: ["toString", "jsObject"], -referencedClasses: [] -}), -smalltalk.JSObjectProxy); - -smalltalk.addMethod( -unescape('_inspectOn_'), -smalltalk.method({ -selector: unescape('inspectOn%3A'), -category: 'proxy', -fn: function (anInspector) { - var self = this; - var variables = nil; - variables = smalltalk.send(smalltalk.Dictionary || Dictionary, "_new", []); - smalltalk.send(variables, "_at_put_", [unescape("%23self"), smalltalk.send(self, "_jsObject", [])]); - smalltalk.send(anInspector, "_setLabel_", [smalltalk.send(self, "_printString", [])]); - for (var i in self['@jsObject']) { - variables._at_put_(i, self['@jsObject'][i]); - } - smalltalk.send(anInspector, "_setVariables_", [variables]); - return self; -}, -args: ["anInspector"], -source: unescape('inspectOn%3A%20anInspector%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20Dictionary%20new.%0A%09variables%20at%3A%20%27%23self%27%20put%3A%20self%20jsObject.%0A%09anInspector%20setLabel%3A%20self%20printString.%0A%09%3Cfor%28var%20i%20in%20self%5B%27@jsObject%27%5D%29%20%7B%0A%09%09variables._at_put_%28i%2C%20self%5B%27@jsObject%27%5D%5Bi%5D%29%3B%0A%09%7D%3E.%0A%09anInspector%20setVariables%3A%20variables'), -messageSends: ["new", "at:put:", "jsObject", "setLabel:", "printString", "setVariables:"], -referencedClasses: ["Dictionary"] -}), -smalltalk.JSObjectProxy); +smalltalk.Smalltalk); smalltalk.addMethod( -unescape('_doesNotUnderstand_'), +unescape('_send_to_arguments_'), smalltalk.method({ -selector: unescape('doesNotUnderstand%3A'), -category: 'proxy', -fn: function (aMessage) { +selector: unescape('send%3Ato%3Aarguments%3A'), +category: 'accessing', +fn: function (aSelector, anObject, aCollection) { var self = this; - var obj = nil; var selector = nil; - var jsSelector = nil; - var arguments = nil; - obj = smalltalk.send(self, "_jsObject", []); - selector = smalltalk.send(aMessage, "_selector", []); - jsSelector = smalltalk.send(selector, "_asJavaScriptSelector", []); - arguments = smalltalk.send(aMessage, "_arguments", []); - if (obj[jsSelector] != undefined) { - return smalltalk.send(obj, jsSelector, arguments); - } - smalltalk.send(self, "_doesNotUnderstand_", [aMessage], smalltalk.Object); + selector = smalltalk.send(smalltalk.send(aSelector, "_asString", []), "_asSelector", []); + self.send(anObject, selector, aCollection); return self; }, -args: ["aMessage"], -source: unescape('doesNotUnderstand%3A%20aMessage%0A%09%7C%20obj%20selector%20jsSelector%20arguments%20%7C%0A%09obj%20%3A%3D%20self%20jsObject.%0A%09selector%20%3A%3D%20aMessage%20selector.%0A%09jsSelector%20%3A%3D%20selector%20asJavaScriptSelector.%0A%09arguments%20%3A%3D%20aMessage%20arguments.%0A%09%3Cif%28obj%5BjsSelector%5D%20%21%3D%20undefined%29%20%7Breturn%20smalltalk.send%28obj%2C%20jsSelector%2C%20arguments%29%7D%3E.%0A%09super%20doesNotUnderstand%3A%20aMessage'), -messageSends: ["jsObject", "selector", "asJavaScriptSelector", "arguments", "doesNotUnderstand:"], +args: ["aSelector", "anObject", "aCollection"], +source: unescape('send%3A%20aSelector%20to%3A%20anObject%20arguments%3A%20aCollection%0A%09%7C%20selector%20%7C%0A%09selector%20%3A%3D%20aSelector%20asString%20asSelector.%0A%09%3Cself.send%28anObject%2C%20selector%2C%20aCollection%29%3E'), +messageSends: ["asSelector", "asString"], referencedClasses: [] }), -smalltalk.JSObjectProxy); +smalltalk.Smalltalk); -smalltalk.addMethod( -unescape('_at_'), -smalltalk.method({ -selector: unescape('at%3A'), -category: 'accessing', -fn: function (aSymbol) { - var self = this; - var attr = nil; - attr = smalltalk.send(aSymbol, "_asString", []); - return self['@jsObject'][attr]; - return self; -}, -args: ["aSymbol"], -source: unescape('at%3A%20aSymbol%0A%09%7C%20attr%20%7C%0A%09attr%20%3A%3D%20aSymbol%20asString.%0A%09%3Creturn%20self%5B%27@jsObject%27%5D%5Battr%5D%3E'), -messageSends: ["asString"], -referencedClasses: [] -}), -smalltalk.JSObjectProxy); +smalltalk.Smalltalk.klass.iVarNames = ['current']; smalltalk.addMethod( -unescape('_at_put_'), +unescape('_current'), smalltalk.method({ -selector: unescape('at%3Aput%3A'), +selector: unescape('current'), category: 'accessing', -fn: function (aSymbol, anObject) { +fn: function () { var self = this; - var attr = nil; - attr = smalltalk.send(aSymbol, "_asString", []); - self['@jsObject'][attr] = anObject; + return smalltalk; return self; }, -args: ["aSymbol", "anObject"], -source: unescape('at%3A%20aSymbol%20put%3A%20anObject%0A%09%7C%20attr%20%7C%0A%09attr%20%3A%3D%20aSymbol%20asString.%0A%09%3Cself%5B%27@jsObject%27%5D%5Battr%5D%20%3D%20anObject%3E'), -messageSends: ["asString"], +args: [], +source: unescape('current%0A%09%3Creturn%20smalltalk%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.JSObjectProxy); +smalltalk.Smalltalk.klass); +smalltalk.addClass('UndefinedObject', smalltalk.Object, [], 'Kernel-Objects'); +smalltalk.UndefinedObject.comment=unescape('UndefinedObject%20describes%20the%20behavior%20of%20its%20sole%20instance%2C%20%60nil%60.%20%60nil%60%20represents%20a%20prior%20value%20for%20variables%20that%20have%20not%20been%20initialized%2C%20or%20for%20results%20which%20are%20meaningless.%0A%0A%60nil%60%20is%20the%20Smalltalk%20representation%20of%20the%20%60undefined%60%20JavaScript%20object.') smalltalk.addMethod( -unescape('_on_'), +unescape('_asJSON'), smalltalk.method({ -selector: unescape('on%3A'), -category: 'instance creation', -fn: function (aJSObject) { - var self = this; - return function ($rec) {smalltalk.send($rec, "_jsObject_", [aJSObject]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", [])); - return self; -}, -args: ["aJSObject"], -source: unescape('on%3A%20aJSObject%0A%09%5Eself%20new%0A%09%09jsObject%3A%20aJSObject%3B%0A%09%09yourself'), -messageSends: ["jsObject:", "yourself", "new"], +selector: unescape('asJSON'), +category: 'converting', +fn: function (){ +var self=this; +return (typeof null == 'undefined' ? nil : null); +return self;}, +args: [], +source: unescape('asJSON%0A%09%5Enull'), +messageSends: [], referencedClasses: [] }), -smalltalk.JSObjectProxy.klass); - +smalltalk.UndefinedObject); -smalltalk.addClass('Point', smalltalk.Object, ['x', 'y'], 'Kernel-Objects'); -smalltalk.Point.comment=unescape('A%20%60Point%60%20represents%20an%20x-y%20pair%20of%20numbers%20usually%20designating%20a%20geometric%20coordinate.%0APoints%20are%20traditionally%20created%20using%20the%20binary%20%60%23@%60%20message%20to%20a%20number%3A%0A%0A%09100@120%0A%0APoints%20can%20then%20be%20arithmetically%20manipulated%3A%0A%0A%09100@100%20+%20%2810@10%29%0A%0A...or%20for%20example%3A%0A%0A%09%28100@100%29%20*%202%0A%0A**NOTE%3A**%20Creating%20a%20Point%20with%20a%20negative%20y-value%20will%20need%20a%20space%20after%20%60@%60%20in%20order%20to%20avoid%20a%20parsing%20error%3A%0A%0A%09100@%20-100%20%22but%20100@-100%20would%20not%20parse%22%0A%0AAmber%20does%20not%20have%20much%20behavior%20in%20this%20class%20out-of-the-box.') smalltalk.addMethod( -unescape('_x'), +unescape('_deepCopy'), smalltalk.method({ -selector: unescape('x'), -category: 'accessing', +selector: unescape('deepCopy'), +category: 'copying', fn: function () { var self = this; - return self['@x']; + return self; return self; }, args: [], -source: unescape('x%0A%09%5Ex'), +source: unescape('deepCopy%0A%09%5Eself'), messageSends: [], referencedClasses: [] }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('_y'), +unescape('_ifNil_'), smalltalk.method({ -selector: unescape('y'), -category: 'accessing', -fn: function () { +selector: unescape('ifNil%3A'), +category: 'testing', +fn: function (aBlock) { var self = this; - return self['@y']; + return smalltalk.send(self, "_ifNil_ifNotNil_", [aBlock, function () {return nil;}]); return self; }, -args: [], -source: unescape('y%0A%09%5Ey'), -messageSends: [], +args: ["aBlock"], +source: unescape('ifNil%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself%20ifNil%3A%20aBlock%20ifNotNil%3A%20%5B%5D'), +messageSends: ["ifNil:ifNotNil:"], referencedClasses: [] }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('_y_'), +unescape('_ifNil_ifNotNil_'), smalltalk.method({ -selector: unescape('y%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('ifNil%3AifNotNil%3A'), +category: 'testing', +fn: function (aBlock, anotherBlock) { var self = this; - self['@y'] = aNumber; + return smalltalk.send(aBlock, "_value", []); return self; }, -args: ["aNumber"], -source: unescape('y%3A%20aNumber%0A%09y%20%3A%3D%20aNumber'), -messageSends: [], +args: ["aBlock", "anotherBlock"], +source: unescape('ifNil%3A%20aBlock%20ifNotNil%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EaBlock%20value'), +messageSends: ["value"], referencedClasses: [] }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('_x_'), +unescape('_ifNotNil_'), smalltalk.method({ -selector: unescape('x%3A'), -category: 'accessing', -fn: function (aNumber) { +selector: unescape('ifNotNil%3A'), +category: 'testing', +fn: function (aBlock) { var self = this; - self['@x'] = aNumber; + return self; return self; }, -args: ["aNumber"], -source: unescape('x%3A%20aNumber%0A%09x%20%3A%3D%20aNumber'), +args: ["aBlock"], +source: unescape('ifNotNil%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself'), messageSends: [], referencedClasses: [] }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('__star'), +unescape('_ifNotNil_ifNil_'), smalltalk.method({ -selector: unescape('*'), -category: 'arithmetic', -fn: function (aPoint) { +selector: unescape('ifNotNil%3AifNil%3A'), +category: 'testing', +fn: function (aBlock, anotherBlock) { var self = this; - return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver * smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__star", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver * smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__star", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); + return smalltalk.send(anotherBlock, "_value", []); return self; }, -args: ["aPoint"], -source: unescape('*%20aPoint%0A%09%5EPoint%20x%3A%20self%20x%20*%20aPoint%20asPoint%20x%20y%3A%20self%20y%20*%20aPoint%20asPoint%20y'), -messageSends: ["x:y:", unescape("*"), "x", "asPoint", "y"], -referencedClasses: ["Point"] +args: ["aBlock", "anotherBlock"], +source: unescape('ifNotNil%3A%20aBlock%20ifNil%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EanotherBlock%20value'), +messageSends: ["value"], +referencedClasses: [] }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('__plus'), +unescape('_isNil'), smalltalk.method({ -selector: unescape('+'), -category: 'arithmetic', -fn: function (aPoint) { +selector: unescape('isNil'), +category: 'testing', +fn: function () { var self = this; - return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver + smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver + smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); + return true; return self; }, -args: ["aPoint"], -source: unescape('+%20aPoint%0A%09%5EPoint%20x%3A%20self%20x%20+%20aPoint%20asPoint%20x%20y%3A%20self%20y%20+%20aPoint%20asPoint%20y'), -messageSends: ["x:y:", unescape("+"), "x", "asPoint", "y"], -referencedClasses: ["Point"] +args: [], +source: unescape('isNil%0A%09%5Etrue'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('__minus'), +unescape('_notNil'), smalltalk.method({ -selector: unescape('-'), -category: 'arithmetic', -fn: function (aPoint) { +selector: unescape('notNil'), +category: 'testing', +fn: function () { var self = this; - return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver - smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__minus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver - smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__minus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); + return false; return self; }, -args: ["aPoint"], -source: unescape('-%20aPoint%0A%09%5EPoint%20x%3A%20self%20x%20-%20aPoint%20asPoint%20x%20y%3A%20self%20y%20-%20aPoint%20asPoint%20y'), -messageSends: ["x:y:", unescape("-"), "x", "asPoint", "y"], -referencedClasses: ["Point"] +args: [], +source: unescape('notNil%0A%09%5Efalse'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('__slash'), +unescape('_printString'), smalltalk.method({ -selector: unescape('/'), -category: 'arithmetic', -fn: function (aPoint) { +selector: unescape('printString'), +category: 'printing', +fn: function () { var self = this; - return smalltalk.send(smalltalk.Point || Point, "_x_y_", [($receiver = smalltalk.send(self, "_x", [])).klass === smalltalk.Number ? $receiver / smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", []) : smalltalk.send($receiver, "__slash", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), ($receiver = smalltalk.send(self, "_y", [])).klass === smalltalk.Number ? $receiver / smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", []) : smalltalk.send($receiver, "__slash", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]); + return "nil"; return self; }, -args: ["aPoint"], -source: unescape('/%20aPoint%0A%09%5EPoint%20x%3A%20self%20x%20/%20aPoint%20asPoint%20x%20y%3A%20self%20y%20/%20aPoint%20asPoint%20y'), -messageSends: ["x:y:", unescape("/"), "x", "asPoint", "y"], -referencedClasses: ["Point"] +args: [], +source: unescape('printString%0A%20%20%20%20%5E%27nil%27'), +messageSends: [], +referencedClasses: [] }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('_asPoint'), +unescape('_shallowCopy'), smalltalk.method({ -selector: unescape('asPoint'), -category: 'converting', +selector: unescape('shallowCopy'), +category: 'copying', fn: function () { var self = this; return self; return self; }, args: [], -source: unescape('asPoint%0A%09%5Eself'), +source: unescape('shallowCopy%0A%09%5Eself'), messageSends: [], referencedClasses: [] }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('__eq'), +unescape('_subclass_instanceVariableNames_'), smalltalk.method({ -selector: unescape('%3D'), -category: 'arithmetic', -fn: function (aPoint) { +selector: unescape('subclass%3AinstanceVariableNames%3A'), +category: 'class creation', +fn: function (aString, anotherString) { var self = this; - return smalltalk.send(smalltalk.send(smalltalk.send(aPoint, "_class", []), "__eq", [smalltalk.send(self, "_class", [])]), "_and_", [function () {return smalltalk.send(smalltalk.send(smalltalk.send(aPoint, "_x", []), "__eq", [smalltalk.send(self, "_x", [])]), "_&", [smalltalk.send(smalltalk.send(aPoint, "_y", []), "__eq", [smalltalk.send(self, "_y", [])])]);}]); + return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]); return self; }, -args: ["aPoint"], -source: unescape('%3D%20aPoint%0A%09%5EaPoint%20class%20%3D%20self%20class%20and%3A%20%5B%0A%09%09%28aPoint%20x%20%3D%20self%20x%29%20%26%20%28aPoint%20y%20%3D%20self%20y%29%5D'), -messageSends: ["and:", unescape("%3D"), "class", unescape("%26"), "x", "y"], +args: ["aString", "anotherString"], +source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20package%3A%20nil'), +messageSends: ["subclass:instanceVariableNames:package:"], referencedClasses: [] }), -smalltalk.Point); +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('_printString'), +unescape('_subclass_instanceVariableNames_category_'), smalltalk.method({ -selector: unescape('printString'), -category: 'printing', -fn: function () { +selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'), +category: 'class creation', +fn: function (aString, aString2, aString3) { var self = this; - return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (stream) {smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(smalltalk.send(self['@x'], "_printString", []), "__comma", [unescape("@")])]);($receiver = smalltalk.send(smalltalk.send(self['@y'], "_notNil", []), "_and_", [function () {return smalltalk.send(self['@y'], "_negative", []);}])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(stream, "_space", []);}() : nil : smalltalk.send($receiver, "_ifTrue_", [function () {return smalltalk.send(stream, "_space", []);}]);return smalltalk.send(stream, "_nextPutAll_", [smalltalk.send(self['@y'], "_printString", [])]);}]); + smalltalk.send(self, "_deprecatedAPI", []); + return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]); return self; }, -args: [], -source: unescape('printString%0A%09%22Print%20receiver%20in%20classic%20x@y%20notation.%22%0A%0A%09%5EString%20streamContents%3A%20%5B%3Astream%20%7C%0A%09%09stream%20nextPutAll%3A%20x%20printString%2C%20%27@%27.%0A%09%09%28y%20notNil%20and%3A%20%5By%20negative%5D%29%0A%09%09%09ifTrue%3A%20%5B%0A%09%09%09%09%22Avoid%20ambiguous%20@-%20construct%22%0A%09%09%09%09stream%20space%5D.%0A%09%09stream%20nextPutAll%3A%20y%20printString%5D'), -messageSends: ["streamContents:", "nextPutAll:", unescape("%2C"), "printString", "ifTrue:", "and:", "notNil", "negative", "space"], -referencedClasses: ["String"] -}), -smalltalk.Point); - -smalltalk.addMethod( -unescape('_translateBy_'), -smalltalk.method({ -selector: unescape('translateBy%3A'), -category: 'transforming', -fn: function (delta){ -var self=this; -return smalltalk.send(((($receiver = smalltalk.send(delta, "_x", [])).klass === smalltalk.Number) ? $receiver +self['@x'] : smalltalk.send($receiver, "__plus", [self['@x']])), "__at", [((($receiver = smalltalk.send(delta, "_y", [])).klass === smalltalk.Number) ? $receiver +self['@y'] : smalltalk.send($receiver, "__plus", [self['@y']]))]); -return self;}, -args: ["delta"], -source: unescape('translateBy%3A%20delta%20%0A%09%22Answer%20a%20Point%20translated%20by%20delta%20%28an%20instance%20of%20Point%29.%22%0A%09%5E%28delta%20x%20+%20x%29%20@%20%28delta%20y%20+%20y%29'), -messageSends: [unescape("@"), unescape("+"), "x", "y"], +args: ["aString", "aString2", "aString3"], +source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%22Kept%20for%20compatibility.%22%0A%09self%20deprecatedAPI.%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'), +messageSends: ["deprecatedAPI", "subclass:instanceVariableNames:package:"], referencedClasses: [] }), -smalltalk.Point); - +smalltalk.UndefinedObject); smalltalk.addMethod( -unescape('_x_y_'), +unescape('_subclass_instanceVariableNames_package_'), smalltalk.method({ -selector: unescape('x%3Ay%3A'), -category: 'instance creation', -fn: function (aNumber, anotherNumber) { +selector: unescape('subclass%3AinstanceVariableNames%3Apackage%3A'), +category: 'class creation', +fn: function (aString, aString2, aString3) { var self = this; - return function ($rec) {smalltalk.send($rec, "_x_", [aNumber]);smalltalk.send($rec, "_y_", [anotherNumber]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", [])); + return smalltalk.send(smalltalk.send(smalltalk.ClassBuilder || ClassBuilder, "_new", []), "_superclass_subclass_instanceVariableNames_package_", [self, aString, aString2, aString3]); return self; }, -args: ["aNumber", "anotherNumber"], -source: unescape('x%3A%20aNumber%20y%3A%20anotherNumber%0A%09%5Eself%20new%0A%09%09x%3A%20aNumber%3B%0A%09%09y%3A%20anotherNumber%3B%0A%09%09yourself'), -messageSends: ["x:", "y:", "yourself", "new"], -referencedClasses: [] +args: ["aString", "aString2", "aString3"], +source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3%0A%09%5EClassBuilder%20new%0A%09%20%20%20%20superclass%3A%20self%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'), +messageSends: ["superclass:subclass:instanceVariableNames:package:", "new"], +referencedClasses: ["ClassBuilder"] }), -smalltalk.Point.klass); +smalltalk.UndefinedObject); -smalltalk.addClass('Random', smalltalk.Object, [], 'Kernel-Objects'); -smalltalk.Random.comment=unescape('%60Random%60%20is%20a%20random%20number%20generator%20and%20is%20implemented%20as%20a%20trivial%20wrapper%20around%20javascript%20%60Math.random%28%29%60%20and%20is%20used%20like%20this%3A%0A%0A%09Random%20new%20next%0A%0AThis%20will%20return%20a%20float%20x%20where%20x%20%3C%201%20and%20x%20%3E%200.%20If%20you%20want%20a%20random%20integer%20from%201%20to%2010%20you%20can%20use%20%60%23atRandom%60%0A%0A%0910%20atRandom%0A%0A...and%20if%20you%20want%20a%20random%20number%20in%20a%20specific%20interval%20this%20also%20works%3A%0A%0A%09%283%20to%3A%207%29%20atRandom%0A%0A...but%20be%20aware%20that%20%60%23to%3A%60%20does%20not%20create%20an%20Interval%20as%20in%20other%20Smalltalk%20implementations%20but%20in%20fact%20an%20%60Array%60%20of%20numbers%2C%20so%20it%27s%20better%20to%20use%3A%0A%0A%095%20atRandom%20+%202%0A%0ASince%20%60%23atRandom%60%20is%20implemented%20in%20%60SequencableCollection%60%20you%20can%20easy%20pick%20an%20element%20at%20random%3A%0A%0A%09%23%28%27a%27%20%27b%27%20%27c%27%29%20atRandom%0A%0A...or%20perhaps%20a%20letter%20from%20a%20%60String%60%3A%0A%0A%09%27abc%27%20atRandom%0A%0ASince%20Amber%20does%20not%20have%20Characters%20this%20will%20return%20a%20%60String%60%20of%20length%201%20like%20for%20example%20%60%27b%27%60.') smalltalk.addMethod( -unescape('_next'), +unescape('_new'), smalltalk.method({ -selector: unescape('next'), -category: 'accessing', +selector: unescape('new'), +category: 'instance creation', fn: function () { var self = this; - return Math.random(); + smalltalk.send(self, "_error_", ["You cannot create new instances of UndefinedObject. Use nil"]); return self; }, args: [], -source: unescape('next%0A%09%3Creturn%20Math.random%28%29%3E'), -messageSends: [], -referencedClasses: [] -}), -smalltalk.Random); - -smalltalk.addMethod( -unescape('_next_'), -smalltalk.method({ -selector: unescape('next%3A'), -category: 'accessing', -fn: function (anInteger) { - var self = this; - return smalltalk.send(smalltalk.send(1, "_to_", [anInteger]), "_collect_", [function (each) {return smalltalk.send(self, "_next", []);}]); - return self; -}, -args: ["anInteger"], -source: unescape('next%3A%20anInteger%0A%20%20%20%20%5E%281%20to%3A%20anInteger%29%20collect%3A%20%5B%3Aeach%20%7C%20self%20next%5D'), -messageSends: ["collect:", "to:", "next"], +source: unescape('new%0A%09%20%20%20%20self%20error%3A%20%27You%20cannot%20create%20new%20instances%20of%20UndefinedObject.%20Use%20nil%27'), +messageSends: ["error:"], referencedClasses: [] }), -smalltalk.Random); - +smalltalk.UndefinedObject.klass); diff --git a/amber/src/js/Kernel-Tests.deploy.js b/amber/src/js/Kernel-Tests.deploy.js index 5bc5f5c80be..7844c658503 100644 --- a/amber/src/js/Kernel-Tests.deploy.js +++ b/amber/src/js/Kernel-Tests.deploy.js @@ -24,173 +24,237 @@ smalltalk.ArrayTest); -smalltalk.addClass('StringTest', smalltalk.TestCase, [], 'Kernel-Tests'); +smalltalk.addClass('BlockClosureTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testJoin'), +unescape('_testCompiledSource'), smalltalk.method({ -selector: unescape('testJoin'), +selector: unescape('testCompiledSource'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("hello%2Cworld"), smalltalk.send(unescape("%2C"), "_join_", [["hello", "world"]])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((function(){return (1) + (1);}), "_compiledSource", []), "_includesSubString_", ["function"])]); return self;} }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testStreamContents'), +unescape('_testEnsure'), smalltalk.method({ -selector: unescape('testStreamContents'), +selector: unescape('testEnsure'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", ["hello world", smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(aStream){return (function($rec){smalltalk.send($rec, "_nextPutAll_", ["hello"]);smalltalk.send($rec, "_space", []);return smalltalk.send($rec, "_nextPutAll_", ["world"]);})(aStream);})])]); +smalltalk.send(self, "_assert_", [smalltalk.send((function(){return smalltalk.send((smalltalk.Error || Error), "_new", []);}), "_ensure_", [(function(){return true;})])]); return self;} }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testIncludesSubString'), +unescape('_testNumArgs'), smalltalk.method({ -selector: unescape('testIncludesSubString'), +selector: unescape('testNumArgs'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send("amber", "_includesSubString_", ["ber"])]); -smalltalk.send(self, "_deny_", [smalltalk.send("amber", "_includesSubString_", ["zork"])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(){return nil;}), "_numArgs", []), (0)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a, b){return nil;}), "_numArgs", []), (2)]); return self;} }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testEquality'), +unescape('_testOnDo'), smalltalk.method({ -selector: unescape('testEquality'), +selector: unescape('testOnDo'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send("hello", "__eq", ["hello"])]); -smalltalk.send(self, "_deny_", [smalltalk.send("hello", "__eq", ["world"])]); -smalltalk.send(self, "_assert_", [smalltalk.send("hello", "__eq", [smalltalk.send("hello", "_yourself", [])])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_yourself", []), "__eq", ["hello"])]); -smalltalk.send(self, "_deny_", [smalltalk.send("", "__eq", [(0)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((function(){return smalltalk.send(smalltalk.send((smalltalk.Error || Error), "_new", []), "_signal", []);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return true;})])]); return self;} }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testCopyWithoutAll'), +unescape('_testValue'), smalltalk.method({ -selector: unescape('testCopyWithoutAll'), +selector: unescape('testValue'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", ["hello world", smalltalk.send(unescape("*hello*%20*world*"), "_copyWithoutAll_", [unescape("*")])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(){return (1) + (1);}), "_value", []), (2)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(x){return ((($receiver = x).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]));}), "_value_", [(2)]), (3)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(x, y){return ((($receiver = x).klass === smalltalk.Number) ? $receiver *y : smalltalk.send($receiver, "__star", [y]));}), "_value_value_", [(2), (4)]), (8)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a, b, c){return (1);}), "_value", []), (1)]); return self;} }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testAt'), +unescape('_testValueWithPossibleArguments'), smalltalk.method({ -selector: unescape('testAt'), +selector: unescape('testValueWithPossibleArguments'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_at_", [(1)]), "__eq", ["h"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_at_", [(5)]), "__eq", ["o"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_at_ifAbsent_", [(6), (function(){return nil;})]), "__eq", [nil])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(){return (1);}), "_valueWithPossibleArguments_", [[(3), (4)]]), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a){return ((($receiver = a).klass === smalltalk.Number) ? $receiver +(4) : smalltalk.send($receiver, "__plus", [(4)]));}), "_valueWithPossibleArguments_", [[(3), (4)]]), (7)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a, b){return ((($receiver = a).klass === smalltalk.Number) ? $receiver +b : smalltalk.send($receiver, "__plus", [b]));}), "_valueWithPossibleArguments_", [[(3), (4), (5)]]), (7)]); return self;} }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testAtPut'), +unescape('_testWhileFalse'), smalltalk.method({ -selector: unescape('testAtPut'), +selector: unescape('testWhileFalse'), fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_at_put_", [(1), "a"]);}), (smalltalk.Error || Error)]); +var i=nil; +(i=(0)); +(function(){while(!(function(){return ((($receiver = i).klass === smalltalk.Number) ? $receiver >(5) : smalltalk.send($receiver, "__gt", [(5)]));})()) {(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})(); +smalltalk.send(self, "_assert_equals_", [i, (6)]); +(i=(0)); +(function(){while(!(function(){(i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));return ((($receiver = i).klass === smalltalk.Number) ? $receiver >(5) : smalltalk.send($receiver, "__gt", [(5)]));})()) {}})(); +smalltalk.send(self, "_assert_equals_", [i, (6)]); return self;} }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testSize'), +unescape('_testWhileTrue'), smalltalk.method({ -selector: unescape('testSize'), +selector: unescape('testWhileTrue'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send("smalltalk", "_size", []), (9)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send("", "_size", []), (0)]); +var i=nil; +(i=(0)); +(function(){while((function(){return ((($receiver = i).klass === smalltalk.Number) ? $receiver <(5) : smalltalk.send($receiver, "__lt", [(5)]));})()) {(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})(); +smalltalk.send(self, "_assert_equals_", [i, (5)]); +(i=(0)); +(function(){while((function(){(i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));return ((($receiver = i).klass === smalltalk.Number) ? $receiver <(5) : smalltalk.send($receiver, "__lt", [(5)]));})()) {}})(); +smalltalk.send(self, "_assert_equals_", [i, (5)]); return self;} }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); + + +smalltalk.addClass('BooleanTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testAddRemove'), +unescape('_testEquality'), smalltalk.method({ -selector: unescape('testAddRemove'), +selector: unescape('testEquality'), fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_add_", ["a"]);}), (smalltalk.Error || Error)]); -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_remove_", ["h"]);}), (smalltalk.Error || Error)]); +smalltalk.send(self, "_deny_", [smalltalk.send((0), "__eq", [false])]); +smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [(0)])]); +smalltalk.send(self, "_deny_", [smalltalk.send("", "__eq", [false])]); +smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [""])]); +smalltalk.send(self, "_assert_", [smalltalk.send(true, "__eq", [true])]); +smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [true])]); +smalltalk.send(self, "_deny_", [smalltalk.send(true, "__eq", [false])]); +smalltalk.send(self, "_assert_", [smalltalk.send(false, "__eq", [false])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(true, "_yourself", []), "__eq", [true])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(true, "_yourself", []), "__eq", [smalltalk.send(true, "_yourself", [])])]); return self;} }), -smalltalk.StringTest); +smalltalk.BooleanTest); smalltalk.addMethod( -unescape('_testAsArray'), +unescape('_testIfTrueIfFalse'), smalltalk.method({ -selector: unescape('testAsArray'), +selector: unescape('testIfTrueIfFalse'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_asArray", []), "__eq", [["h", "e", "l", "l", "o"]])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return "alternative block";})])), "__eq", ["alternative block"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return "alternative block";})])), "__eq", [nil])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return "alternative block";})])), "__eq", [nil])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return "alternative block";})])), "__eq", ["alternative block"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block2"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block2"])]); return self;} }), -smalltalk.StringTest); +smalltalk.BooleanTest); +smalltalk.addMethod( +unescape('_testLogic'), +smalltalk.method({ +selector: unescape('testLogic'), +fn: function () { +var self=this; +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_&", [true])]);smalltalk.send($rec, "_deny_", [smalltalk.send(true, "_&", [false])]);smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_&", [true])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_&", [false])]);})(self); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_|", [true])]);smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_|", [false])]);smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_|", [true])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_|", [false])]);})(self); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_&", [(1) > (0)])]);smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_&", [false])]);return smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_&", [(1) > (2)])]);})(self); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_|", [(1) > (0)])]);smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_|", [false])]);return smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_|", [(1) > (2)])]);})(self); +return self;} +}), +smalltalk.BooleanTest); + +smalltalk.addMethod( +unescape('_testLogicKeywords'), +smalltalk.method({ +selector: unescape('testLogicKeywords'), +fn: function () { +var self=this; +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_and_", [(function(){return true;})])]);smalltalk.send($rec, "_deny_", [smalltalk.send(true, "_and_", [(function(){return false;})])]);smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_and_", [(function(){return true;})])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_and_", [(function(){return false;})])]);})(self); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_or_", [(function(){return true;})])]);smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_or_", [(function(){return false;})])]);smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_or_", [(function(){return true;})])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_or_", [(function(){return false;})])]);})(self); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_and_", [(function(){return (1) > (0);})])]);smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_and_", [(function(){return false;})])]);return smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_and_", [(function(){return (1) > (2);})])]);})(self); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_or_", [(function(){return (1) > (0);})])]);smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_or_", [(function(){return false;})])]);return smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_or_", [(function(){return (1) > (2);})])]);})(self); +return self;} +}), +smalltalk.BooleanTest); -smalltalk.addClass('DictionaryTest', smalltalk.TestCase, [], 'Kernel-Tests'); + +smalltalk.addClass('ClassBuilderTest', smalltalk.TestCase, ['builder', 'theClass'], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testPrintString'), +unescape('_setUp'), smalltalk.method({ -selector: unescape('testPrintString'), +selector: unescape('setUp'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("a%20Dictionary%28%27firstname%27%20-%3E%20%27James%27%20%2C%20%27lastname%27%20-%3E%20%27Bond%27%29"), (function($rec){smalltalk.send($rec, "_at_put_", ["firstname", "James"]);smalltalk.send($rec, "_at_put_", ["lastname", "Bond"]);return smalltalk.send($rec, "_printString", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))]); +(self['@builder']=smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", [])); return self;} }), -smalltalk.DictionaryTest); +smalltalk.ClassBuilderTest); smalltalk.addMethod( -unescape('_testEquality'), +unescape('_tearDown'), smalltalk.method({ -selector: unescape('testEquality'), +selector: unescape('tearDown'), fn: function () { var self=this; -var d1=nil; -var d2=nil; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []), "__eq", [smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])])]); -(d1=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (2)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); -(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (2)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); -smalltalk.send(self, "_assert_", [smalltalk.send(d1, "__eq", [d2])]); -(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (3)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); -smalltalk.send(self, "_deny_", [smalltalk.send(d1, "__eq", [d2])]); -(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(2), (2)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); -smalltalk.send(self, "_deny_", [smalltalk.send(d1, "__eq", [d2])]); -(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (2)]);smalltalk.send($rec, "_at_put_", [(3), (4)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); -smalltalk.send(self, "_deny_", [smalltalk.send(d1, "__eq", [d2])]); +(($receiver = self['@theClass']) != nil && $receiver != undefined) ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removeClass_", [self['@theClass']]);return (self['@theClass']=nil);})() : nil; return self;} }), -smalltalk.DictionaryTest); +smalltalk.ClassBuilderTest); smalltalk.addMethod( -unescape('_testDynamicDictionaries'), +unescape('_testClassCopy'), smalltalk.method({ -selector: unescape('testDynamicDictionaries'), +selector: unescape('testClassCopy'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.HashedCollection._fromPairs_([smalltalk.send("hello", "__minus_gt", [(1)])]), "_asDictionary", []), "__eq", [smalltalk.send((smalltalk.Dictionary || Dictionary), "_with_", [smalltalk.send("hello", "__minus_gt", [(1)])])])]); +(self['@theClass']=smalltalk.send(self['@builder'], "_copyClass_named_", [(smalltalk.ObjectMock || ObjectMock), "ObjectMock2"])); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(self['@theClass'], "_superclass", []), "__eq_eq", [smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_superclass", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(self['@theClass'], "_instanceVariableNames", []), "__eq_eq", [smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_instanceVariableNames", [])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(self['@theClass'], "_name", []), "ObjectMock2"]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(self['@theClass'], "_package", []), "__eq_eq", [smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_package", [])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self['@theClass'], "_methodDictionary", []), "_keys", []), smalltalk.send(smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_methodDictionary", []), "_keys", [])]); return self;} }), -smalltalk.DictionaryTest); +smalltalk.ClassBuilderTest); + +smalltalk.addMethod( +unescape('_testInstanceVariableNames'), +smalltalk.method({ +selector: unescape('testInstanceVariableNames'), +fn: function () { +var self=this; +smalltalk.send(self, "_assert_equals_", [smalltalk.send(self['@builder'], "_instanceVariableNamesFor_", [" hello world "]), ["hello", "world"]]); +return self;} +}), +smalltalk.ClassBuilderTest); + + +smalltalk.addClass('DictionaryTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( unescape('_testAccessing'), smalltalk.method({ @@ -212,34 +276,34 @@ return self;} smalltalk.DictionaryTest); smalltalk.addMethod( -unescape('_testSize'), +unescape('_testDynamicDictionaries'), smalltalk.method({ -selector: unescape('testSize'), +selector: unescape('testDynamicDictionaries'), fn: function () { var self=this; -var d=nil; -(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_size", []), "__eq", [(0)])]); -smalltalk.send(d, "_at_put_", [(1), (2)]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_size", []), "__eq", [(1)])]); -smalltalk.send(d, "_at_put_", [(2), (3)]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_size", []), "__eq", [(2)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.HashedCollection._fromPairs_([smalltalk.send("hello", "__minus_gt", [(1)])]), "_asDictionary", []), "__eq", [smalltalk.send((smalltalk.Dictionary || Dictionary), "_with_", [smalltalk.send("hello", "__minus_gt", [(1)])])])]); return self;} }), smalltalk.DictionaryTest); smalltalk.addMethod( -unescape('_testValues'), +unescape('_testEquality'), smalltalk.method({ -selector: unescape('testValues'), +selector: unescape('testEquality'), fn: function () { var self=this; -var d=nil; -(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); -smalltalk.send(d, "_at_put_", [(1), (2)]); -smalltalk.send(d, "_at_put_", [(2), (3)]); -smalltalk.send(d, "_at_put_", [(3), (4)]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_values", []), "__eq", [[(2), (3), (4)]])]); +var d1=nil; +var d2=nil; +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []), "__eq", [smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])])]); +(d1=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (2)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); +(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (2)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); +smalltalk.send(self, "_assert_", [smalltalk.send(d1, "__eq", [d2])]); +(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (3)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); +smalltalk.send(self, "_deny_", [smalltalk.send(d1, "__eq", [d2])]); +(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(2), (2)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); +smalltalk.send(self, "_deny_", [smalltalk.send(d1, "__eq", [d2])]); +(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (2)]);smalltalk.send($rec, "_at_put_", [(3), (4)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); +smalltalk.send(self, "_deny_", [smalltalk.send(d1, "__eq", [d2])]); return self;} }), smalltalk.DictionaryTest); @@ -260,575 +324,479 @@ return self;} }), smalltalk.DictionaryTest); - - -smalltalk.addClass('BooleanTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testLogic'), +unescape('_testPrintString'), smalltalk.method({ -selector: unescape('testLogic'), +selector: unescape('testPrintString'), fn: function () { var self=this; -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_&", [true])]);smalltalk.send($rec, "_deny_", [smalltalk.send(true, "_&", [false])]);smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_&", [true])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_&", [false])]);})(self); -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_|", [true])]);smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_|", [false])]);smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_|", [true])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_|", [false])]);})(self); -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_&", [(1) > (0)])]);smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_&", [false])]);return smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_&", [(1) > (2)])]);})(self); -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_|", [(1) > (0)])]);smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_|", [false])]);return smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_|", [(1) > (2)])]);})(self); +smalltalk.send(self, "_assert_equals_", [unescape("a%20Dictionary%28%27firstname%27%20-%3E%20%27James%27%20%2C%20%27lastname%27%20-%3E%20%27Bond%27%29"), (function($rec){smalltalk.send($rec, "_at_put_", ["firstname", "James"]);smalltalk.send($rec, "_at_put_", ["lastname", "Bond"]);return smalltalk.send($rec, "_printString", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))]); return self;} }), -smalltalk.BooleanTest); +smalltalk.DictionaryTest); smalltalk.addMethod( -unescape('_testEquality'), +unescape('_testRemoveKey'), smalltalk.method({ -selector: unescape('testEquality'), -fn: function () { +selector: unescape('testRemoveKey'), +fn: function (){ var self=this; -smalltalk.send(self, "_deny_", [smalltalk.send((0), "__eq", [false])]); -smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [(0)])]); -smalltalk.send(self, "_deny_", [smalltalk.send("", "__eq", [false])]); -smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [""])]); -smalltalk.send(self, "_assert_", [smalltalk.send(true, "__eq", [true])]); -smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [true])]); -smalltalk.send(self, "_deny_", [smalltalk.send(true, "__eq", [false])]); -smalltalk.send(self, "_assert_", [smalltalk.send(false, "__eq", [false])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(true, "_yourself", []), "__eq", [true])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(true, "_yourself", []), "__eq", [smalltalk.send(true, "_yourself", [])])]); +var d=nil; +var key=nil; +(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); +smalltalk.send(d, "_at_put_", [(1), (2)]); +smalltalk.send(d, "_at_put_", [(2), (3)]); +smalltalk.send(d, "_at_put_", [(3), (4)]); +(key=(2)); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_keys", []), "__eq", [[(1), (2), (3)]])]); +smalltalk.send(d, "_removeKey_", [key]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_keys", []), "__eq", [[(1), (3)]])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_values", []), "__eq", [[(2), (4)]])]); +smalltalk.send(self, "_deny_", [smalltalk.send(d, "_includesKey_", [(2)])]); return self;} }), -smalltalk.BooleanTest); +smalltalk.DictionaryTest); smalltalk.addMethod( -unescape('_testLogicKeywords'), +unescape('_testRemoveKeyIfAbsent'), smalltalk.method({ -selector: unescape('testLogicKeywords'), -fn: function () { +selector: unescape('testRemoveKeyIfAbsent'), +fn: function (){ var self=this; -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_and_", [(function(){return true;})])]);smalltalk.send($rec, "_deny_", [smalltalk.send(true, "_and_", [(function(){return false;})])]);smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_and_", [(function(){return true;})])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_and_", [(function(){return false;})])]);})(self); -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_or_", [(function(){return true;})])]);smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_or_", [(function(){return false;})])]);smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_or_", [(function(){return true;})])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_or_", [(function(){return false;})])]);})(self); -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_and_", [(function(){return (1) > (0);})])]);smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_and_", [(function(){return false;})])]);return smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_and_", [(function(){return (1) > (2);})])]);})(self); -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_or_", [(function(){return (1) > (0);})])]);smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_or_", [(function(){return false;})])]);return smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_or_", [(function(){return (1) > (2);})])]);})(self); +var d=nil; +var key=nil; +(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); +smalltalk.send(d, "_at_put_", [(1), (2)]); +smalltalk.send(d, "_at_put_", [(2), (3)]); +smalltalk.send(d, "_at_put_", [(3), (4)]); +(key=(2)); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_removeKey_", [key]), "__eq", [(3)])]); +(key=(3)); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_removeKey_ifAbsent_", [key, (function(){return (42);})]), "__eq", [(4)])]); +(key="why"); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_removeKey_ifAbsent_", [key, (function(){return (42);})]), "__eq", [(42)])]); return self;} }), -smalltalk.BooleanTest); +smalltalk.DictionaryTest); smalltalk.addMethod( -unescape('_testIfTrueIfFalse'), +unescape('_testSize'), smalltalk.method({ -selector: unescape('testIfTrueIfFalse'), +selector: unescape('testSize'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return "alternative block";})])), "__eq", ["alternative block"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return "alternative block";})])), "__eq", [nil])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return "alternative block";})])), "__eq", [nil])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return "alternative block";})])), "__eq", ["alternative block"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block2"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block2"])]); +var d=nil; +(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_size", []), "__eq", [(0)])]); +smalltalk.send(d, "_at_put_", [(1), (2)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_size", []), "__eq", [(1)])]); +smalltalk.send(d, "_at_put_", [(2), (3)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_size", []), "__eq", [(2)])]); return self;} }), -smalltalk.BooleanTest); - - +smalltalk.DictionaryTest); -smalltalk.addClass('NumberTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testPrintShowingDecimalPlaces'), +unescape('_testValues'), smalltalk.method({ -selector: unescape('testPrintShowingDecimalPlaces'), +selector: unescape('testValues'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", ["23.00", smalltalk.send((23), "_printShowingDecimalPlaces_", [(2)])]); -smalltalk.send(self, "_assert_equals_", ["23.57", smalltalk.send((23.5698), "_printShowingDecimalPlaces_", [(2)])]); -smalltalk.send(self, "_assert_equals_", [unescape("-234.56700"), smalltalk.send(smalltalk.send((234.567), "_negated", []), "_printShowingDecimalPlaces_", [(5)])]); -smalltalk.send(self, "_assert_equals_", ["23", smalltalk.send((23.4567), "_printShowingDecimalPlaces_", [(0)])]); -smalltalk.send(self, "_assert_equals_", ["24", smalltalk.send((23.5567), "_printShowingDecimalPlaces_", [(0)])]); -smalltalk.send(self, "_assert_equals_", [unescape("-23"), smalltalk.send(smalltalk.send((23.4567), "_negated", []), "_printShowingDecimalPlaces_", [(0)])]); -smalltalk.send(self, "_assert_equals_", [unescape("-24"), smalltalk.send(smalltalk.send((23.5567), "_negated", []), "_printShowingDecimalPlaces_", [(0)])]); -smalltalk.send(self, "_assert_equals_", ["100000000.0", smalltalk.send((100000000), "_printShowingDecimalPlaces_", [(1)])]); -smalltalk.send(self, "_assert_equals_", ["0.98000", smalltalk.send((0.98), "_printShowingDecimalPlaces_", [(5)])]); -smalltalk.send(self, "_assert_equals_", [unescape("-0.98"), smalltalk.send(smalltalk.send((0.98), "_negated", []), "_printShowingDecimalPlaces_", [(2)])]); -smalltalk.send(self, "_assert_equals_", ["2.57", smalltalk.send((2.567), "_printShowingDecimalPlaces_", [(2)])]); -smalltalk.send(self, "_assert_equals_", [unescape("-2.57"), smalltalk.send((-2.567), "_printShowingDecimalPlaces_", [(2)])]); -smalltalk.send(self, "_assert_equals_", ["0.00", smalltalk.send((0), "_printShowingDecimalPlaces_", [(2)])]); +var d=nil; +(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); +smalltalk.send(d, "_at_put_", [(1), (2)]); +smalltalk.send(d, "_at_put_", [(2), (3)]); +smalltalk.send(d, "_at_put_", [(3), (4)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_values", []), "__eq", [[(2), (3), (4)]])]); return self;} }), -smalltalk.NumberTest); +smalltalk.DictionaryTest); -smalltalk.addMethod( -unescape('_testEquality'), -smalltalk.method({ -selector: unescape('testEquality'), -fn: function () { -var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq", [(1)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((0), "__eq", [(0)])]); -smalltalk.send(self, "_deny_", [smalltalk.send((1), "__eq", [(0)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq", [(1)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq", [smalltalk.send((1), "_yourself", [])])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq", [smalltalk.send((1), "_yourself", [])])]); -smalltalk.send(self, "_deny_", [smalltalk.send((0), "__eq", [false])]); -smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [(0)])]); -smalltalk.send(self, "_deny_", [smalltalk.send("", "__eq", [(0)])]); -smalltalk.send(self, "_deny_", [smalltalk.send((0), "__eq", [""])]); -return self;} -}), -smalltalk.NumberTest); -smalltalk.addMethod( -unescape('_testArithmetic'), -smalltalk.method({ -selector: unescape('testArithmetic'), -fn: function () { -var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send((1.5) + (1), "__eq", [(2.5)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((2) - (1), "__eq", [(1)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((-2) - (1), "__eq", [(-3)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((12) / (2), "__eq", [(6)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((3) * (4), "__eq", [(12)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = (1) + (2)).klass === smalltalk.Number) ? $receiver *(3) : smalltalk.send($receiver, "__star", [(3)])), "__eq", [(9)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((1) + (2) * (3), "__eq", [(7)])]); -return self;} -}), -smalltalk.NumberTest); +smalltalk.addClass('JSObjectProxyTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testRounded'), +unescape('_jsObject'), smalltalk.method({ -selector: unescape('testRounded'), +selector: unescape('jsObject'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "_rounded", []), "__eq", [(3)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.212), "_rounded", []), "__eq", [(3)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.51), "_rounded", []), "__eq", [(4)])]); +return jsObject = {a: 1, b: function() {return 2;}, c: function(object) {return object;}}; return self;} }), -smalltalk.NumberTest); +smalltalk.JSObjectProxyTest); smalltalk.addMethod( -unescape('_testNegated'), +unescape('_testDNU'), smalltalk.method({ -selector: unescape('testNegated'), +selector: unescape('testDNU'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "_negated", []), "__eq", [(-3)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((-3), "_negated", []), "__eq", [(3)])]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send(self, "_jsObject", []), "_foo", []);}), (smalltalk.MessageNotUnderstood || MessageNotUnderstood)]); return self;} }), -smalltalk.NumberTest); +smalltalk.JSObjectProxyTest); smalltalk.addMethod( -unescape('_testComparison'), +unescape('_testMessageSend'), smalltalk.method({ -selector: unescape('testComparison'), +selector: unescape('testMessageSend'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [(3) > (2)]); -smalltalk.send(self, "_assert_", [(2) < (3)]); -smalltalk.send(self, "_deny_", [(3) < (2)]); -smalltalk.send(self, "_deny_", [(2) > (3)]); -smalltalk.send(self, "_assert_", [(3) >= (3)]); -smalltalk.send(self, "_assert_", [(3.1) >= (3)]); -smalltalk.send(self, "_assert_", [(3) <= (3)]); -smalltalk.send(self, "_assert_", [(3) <= (3.1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self, "_jsObject", []), "_a", []), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self, "_jsObject", []), "_b", []), (2)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self, "_jsObject", []), "_c_", [(3)]), (3)]); return self;} }), -smalltalk.NumberTest); +smalltalk.JSObjectProxyTest); smalltalk.addMethod( -unescape('_testTruncated'), +unescape('_testMethodWithArguments'), smalltalk.method({ -selector: unescape('testTruncated'), +selector: unescape('testMethodWithArguments'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "_truncated", []), "__eq", [(3)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.212), "_truncated", []), "__eq", [(3)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.51), "_truncated", []), "__eq", [(3)])]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_hasClass_", ["amber"])]); +smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["amber"]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_hasClass_", ["amber"])]); +smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_removeClass_", ["amber"]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_hasClass_", ["amber"])]); return self;} }), -smalltalk.NumberTest); +smalltalk.JSObjectProxyTest); smalltalk.addMethod( -unescape('_testCopying'), +unescape('_testPrinting'), smalltalk.method({ -selector: unescape('testCopying'), +selector: unescape('testPrinting'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_copy", []), "__eq_eq", [(1)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_deepCopy", []), "__eq_eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_jsObject", []), "_printString", []), "__eq", [unescape("%5Bobject%20Object%5D")])]); return self;} }), -smalltalk.NumberTest); +smalltalk.JSObjectProxyTest); smalltalk.addMethod( -unescape('_testMinMax'), +unescape('_testPropertyThatReturnsEmptyString'), smalltalk.method({ -selector: unescape('testMinMax'), +selector: unescape('testPropertyThatReturnsEmptyString'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((2), "_max_", [(5)]), (5)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((2), "_min_", [(5)]), (2)]); +document.location.hash = ''; +smalltalk.send(self, "_assert_equals_", ["", smalltalk.send(smalltalk.send((typeof document == 'undefined' ? nil : document), "_location", []), "_hash", [])]); +smalltalk.send(smalltalk.send((typeof document == 'undefined' ? nil : document), "_location", []), "_hash_", ["test"]); +smalltalk.send(self, "_assert_equals_", [unescape("%23test"), smalltalk.send(smalltalk.send((typeof document == 'undefined' ? nil : document), "_location", []), "_hash", [])]); return self;} }), -smalltalk.NumberTest); +smalltalk.JSObjectProxyTest); smalltalk.addMethod( -unescape('_testIdentity'), +unescape('_testYourself'), smalltalk.method({ -selector: unescape('testIdentity'), +selector: unescape('testYourself'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq_eq", [(1)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((0), "__eq_eq", [(0)])]); -smalltalk.send(self, "_deny_", [smalltalk.send((1), "__eq_eq", [(0)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq_eq", [(1)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq_eq", [smalltalk.send((1), "_yourself", [])])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq_eq", [smalltalk.send((1), "_yourself", [])])]); -smalltalk.send(self, "_deny_", [smalltalk.send((1), "__eq_eq", [(2)])]); +var body=nil; +(body=(function($rec){smalltalk.send($rec, "_addClass_", ["amber"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send("body", "_asJQuery", []))); +smalltalk.send(self, "_assert_", [smalltalk.send(body, "_hasClass_", ["amber"])]); +smalltalk.send(body, "_removeClass_", ["amber"]); +smalltalk.send(self, "_deny_", [smalltalk.send(body, "_hasClass_", ["amber"])]); return self;} }), -smalltalk.NumberTest); +smalltalk.JSObjectProxyTest); -smalltalk.addMethod( -unescape('_testSqrt'), -smalltalk.method({ -selector: unescape('testSqrt'), -fn: function () { -var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((4), "_sqrt", []), "__eq", [(2)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((16), "_sqrt", []), "__eq", [(4)])]); -return self;} -}), -smalltalk.NumberTest); -smalltalk.addMethod( -unescape('_testSquared'), -smalltalk.method({ -selector: unescape('testSquared'), -fn: function () { -var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((4), "_squared", []), "__eq", [(16)])]); -return self;} -}), -smalltalk.NumberTest); +smalltalk.addClass('NumberTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testTimesRepeat'), +unescape('_testArithmetic'), smalltalk.method({ -selector: unescape('testTimesRepeat'), +selector: unescape('testArithmetic'), fn: function () { var self=this; -var i=nil; -(i=(0)); -smalltalk.send((0), "_timesRepeat_", [(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})]); -smalltalk.send(self, "_assert_equals_", [i, (0)]); -smalltalk.send((5), "_timesRepeat_", [(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})]); -smalltalk.send(self, "_assert_equals_", [i, (5)]); +smalltalk.send(self, "_assert_", [smalltalk.send((1.5) + (1), "__eq", [(2.5)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((2) - (1), "__eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((-2) - (1), "__eq", [(-3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((12) / (2), "__eq", [(6)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((3) * (4), "__eq", [(12)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = (1) + (2)).klass === smalltalk.Number) ? $receiver *(3) : smalltalk.send($receiver, "__star", [(3)])), "__eq", [(9)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((1) + (2) * (3), "__eq", [(7)])]); return self;} }), smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testTo'), +unescape('_testComparison'), smalltalk.method({ -selector: unescape('testTo'), +selector: unescape('testComparison'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((1), "_to_", [(5)]), [(1), (2), (3), (4), (5)]]); +smalltalk.send(self, "_assert_", [(3) > (2)]); +smalltalk.send(self, "_assert_", [(2) < (3)]); +smalltalk.send(self, "_deny_", [(3) < (2)]); +smalltalk.send(self, "_deny_", [(2) > (3)]); +smalltalk.send(self, "_assert_", [(3) >= (3)]); +smalltalk.send(self, "_assert_", [(3.1) >= (3)]); +smalltalk.send(self, "_assert_", [(3) <= (3)]); +smalltalk.send(self, "_assert_", [(3) <= (3.1)]); return self;} }), smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testToBy'), +unescape('_testCopying'), smalltalk.method({ -selector: unescape('testToBy'), +selector: unescape('testCopying'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((0), "_to_by_", [(6), (2)]), [(0), (2), (4), (6)]]); -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send((1), "_to_by_", [(4), (0)]);}), (smalltalk.Error || Error)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_copy", []), "__eq_eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_deepCopy", []), "__eq_eq", [(1)])]); return self;} }), smalltalk.NumberTest); - - -smalltalk.addClass('JSObjectProxyTest', smalltalk.TestCase, [], 'Kernel-Tests'); -smalltalk.addMethod( -unescape('_jsObject'), -smalltalk.method({ -selector: unescape('jsObject'), -fn: function () { -var self=this; -return jsObject = {a: 1, b: function() {return 2;}, c: function(object) {return object;}}; -return self;} -}), -smalltalk.JSObjectProxyTest); - -smalltalk.addMethod( -unescape('_testMethodWithArguments'), -smalltalk.method({ -selector: unescape('testMethodWithArguments'), -fn: function () { -var self=this; -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_hasClass_", ["amber"])]); -smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["amber"]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_hasClass_", ["amber"])]); -smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_removeClass_", ["amber"]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_hasClass_", ["amber"])]); -return self;} -}), -smalltalk.JSObjectProxyTest); - -smalltalk.addMethod( -unescape('_testYourself'), -smalltalk.method({ -selector: unescape('testYourself'), -fn: function () { -var self=this; -var body=nil; -(body=(function($rec){smalltalk.send($rec, "_addClass_", ["amber"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send("body", "_asJQuery", []))); -smalltalk.send(self, "_assert_", [smalltalk.send(body, "_hasClass_", ["amber"])]); -smalltalk.send(body, "_removeClass_", ["amber"]); -smalltalk.send(self, "_deny_", [smalltalk.send(body, "_hasClass_", ["amber"])]); -return self;} -}), -smalltalk.JSObjectProxyTest); - -smalltalk.addMethod( -unescape('_testPropertyThatReturnsEmptyString'), -smalltalk.method({ -selector: unescape('testPropertyThatReturnsEmptyString'), -fn: function () { -var self=this; -document.location.hash = ''; -smalltalk.send(self, "_assert_equals_", ["", smalltalk.send(smalltalk.send((typeof document == 'undefined' ? nil : document), "_location", []), "_hash", [])]); -smalltalk.send(smalltalk.send((typeof document == 'undefined' ? nil : document), "_location", []), "_hash_", ["test"]); -smalltalk.send(self, "_assert_equals_", [unescape("%23test"), smalltalk.send(smalltalk.send((typeof document == 'undefined' ? nil : document), "_location", []), "_hash", [])]); -return self;} -}), -smalltalk.JSObjectProxyTest); - smalltalk.addMethod( -unescape('_testDNU'), +unescape('_testEquality'), smalltalk.method({ -selector: unescape('testDNU'), +selector: unescape('testEquality'), fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send(self, "_jsObject", []), "_foo", []);}), (smalltalk.MessageNotUnderstood || MessageNotUnderstood)]); +smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((0), "__eq", [(0)])]); +smalltalk.send(self, "_deny_", [smalltalk.send((1), "__eq", [(0)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq", [smalltalk.send((1), "_yourself", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq", [smalltalk.send((1), "_yourself", [])])]); +smalltalk.send(self, "_deny_", [smalltalk.send((0), "__eq", [false])]); +smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [(0)])]); +smalltalk.send(self, "_deny_", [smalltalk.send("", "__eq", [(0)])]); +smalltalk.send(self, "_deny_", [smalltalk.send((0), "__eq", [""])]); return self;} }), -smalltalk.JSObjectProxyTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testMessageSend'), +unescape('_testIdentity'), smalltalk.method({ -selector: unescape('testMessageSend'), +selector: unescape('testIdentity'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self, "_jsObject", []), "_a", []), (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self, "_jsObject", []), "_b", []), (2)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self, "_jsObject", []), "_c_", [(3)]), (3)]); +smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq_eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((0), "__eq_eq", [(0)])]); +smalltalk.send(self, "_deny_", [smalltalk.send((1), "__eq_eq", [(0)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq_eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq_eq", [smalltalk.send((1), "_yourself", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq_eq", [smalltalk.send((1), "_yourself", [])])]); +smalltalk.send(self, "_deny_", [smalltalk.send((1), "__eq_eq", [(2)])]); return self;} }), -smalltalk.JSObjectProxyTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testPrinting'), +unescape('_testMinMax'), smalltalk.method({ -selector: unescape('testPrinting'), +selector: unescape('testMinMax'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_jsObject", []), "_printString", []), "__eq", [unescape("%5Bobject%20Object%5D")])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((2), "_max_", [(5)]), (5)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((2), "_min_", [(5)]), (2)]); return self;} }), -smalltalk.JSObjectProxyTest); - - +smalltalk.NumberTest); -smalltalk.addClass('PackageTest', smalltalk.TestCase, ['zorkPackage', 'grulPackage', 'backUpCommitPathJs', 'backUpCommitPathSt'], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_setUp'), +unescape('_testNegated'), smalltalk.method({ -selector: unescape('setUp'), +selector: unescape('testNegated'), fn: function () { var self=this; -(self['@backUpCommitPathJs']=smalltalk.send((smalltalk.Package || Package), "_defaultCommitPathJs", [])); -(self['@backUpCommitPathSt']=smalltalk.send((smalltalk.Package || Package), "_defaultCommitPathSt", [])); -smalltalk.send((smalltalk.Package || Package), "_resetCommitPaths", []); -(self['@zorkPackage']=smalltalk.send(smalltalk.send((smalltalk.Package || Package), "_new", []), "_name_", ["Zork"])); -(self['@grulPackage']=(function($rec){smalltalk.send($rec, "_name_", ["Grul"]);smalltalk.send($rec, "_commitPathJs_", [unescape("server/grul/js")]);smalltalk.send($rec, "_commitPathSt_", [unescape("grul/st")]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Package || Package), "_new", []))); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "_negated", []), "__eq", [(-3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((-3), "_negated", []), "__eq", [(3)])]); return self;} }), -smalltalk.PackageTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_tearDown'), +unescape('_testPrintShowingDecimalPlaces'), smalltalk.method({ -selector: unescape('tearDown'), +selector: unescape('testPrintShowingDecimalPlaces'), fn: function () { var self=this; -(function($rec){smalltalk.send($rec, "_defaultCommitPathJs_", [self['@backUpCommitPathJs']]);return smalltalk.send($rec, "_defaultCommitPathSt_", [self['@backUpCommitPathSt']]);})((smalltalk.Package || Package)); +smalltalk.send(self, "_assert_equals_", ["23.00", smalltalk.send((23), "_printShowingDecimalPlaces_", [(2)])]); +smalltalk.send(self, "_assert_equals_", ["23.57", smalltalk.send((23.5698), "_printShowingDecimalPlaces_", [(2)])]); +smalltalk.send(self, "_assert_equals_", [unescape("-234.56700"), smalltalk.send(smalltalk.send((234.567), "_negated", []), "_printShowingDecimalPlaces_", [(5)])]); +smalltalk.send(self, "_assert_equals_", ["23", smalltalk.send((23.4567), "_printShowingDecimalPlaces_", [(0)])]); +smalltalk.send(self, "_assert_equals_", ["24", smalltalk.send((23.5567), "_printShowingDecimalPlaces_", [(0)])]); +smalltalk.send(self, "_assert_equals_", [unescape("-23"), smalltalk.send(smalltalk.send((23.4567), "_negated", []), "_printShowingDecimalPlaces_", [(0)])]); +smalltalk.send(self, "_assert_equals_", [unescape("-24"), smalltalk.send(smalltalk.send((23.5567), "_negated", []), "_printShowingDecimalPlaces_", [(0)])]); +smalltalk.send(self, "_assert_equals_", ["100000000.0", smalltalk.send((100000000), "_printShowingDecimalPlaces_", [(1)])]); +smalltalk.send(self, "_assert_equals_", ["0.98000", smalltalk.send((0.98), "_printShowingDecimalPlaces_", [(5)])]); +smalltalk.send(self, "_assert_equals_", [unescape("-0.98"), smalltalk.send(smalltalk.send((0.98), "_negated", []), "_printShowingDecimalPlaces_", [(2)])]); +smalltalk.send(self, "_assert_equals_", ["2.57", smalltalk.send((2.567), "_printShowingDecimalPlaces_", [(2)])]); +smalltalk.send(self, "_assert_equals_", [unescape("-2.57"), smalltalk.send((-2.567), "_printShowingDecimalPlaces_", [(2)])]); +smalltalk.send(self, "_assert_equals_", ["0.00", smalltalk.send((0), "_printShowingDecimalPlaces_", [(2)])]); return self;} }), -smalltalk.PackageTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testGrulCommitPathStShouldBeGrulSt'), +unescape('_testRounded'), smalltalk.method({ -selector: unescape('testGrulCommitPathStShouldBeGrulSt'), +selector: unescape('testRounded'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("grul/st"), smalltalk.send(self['@grulPackage'], "_commitPathSt", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "_rounded", []), "__eq", [(3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.212), "_rounded", []), "__eq", [(3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.51), "_rounded", []), "__eq", [(4)])]); return self;} }), -smalltalk.PackageTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testZorkCommitPathStShouldBeSt'), +unescape('_testSqrt'), smalltalk.method({ -selector: unescape('testZorkCommitPathStShouldBeSt'), +selector: unescape('testSqrt'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", ["st", smalltalk.send(self['@zorkPackage'], "_commitPathSt", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((4), "_sqrt", []), "__eq", [(2)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((16), "_sqrt", []), "__eq", [(4)])]); return self;} }), -smalltalk.PackageTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testZorkCommitPathJsShouldBeJs'), +unescape('_testSquared'), smalltalk.method({ -selector: unescape('testZorkCommitPathJsShouldBeJs'), +selector: unescape('testSquared'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", ["js", smalltalk.send(self['@zorkPackage'], "_commitPathJs", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((4), "_squared", []), "__eq", [(16)])]); return self;} }), -smalltalk.PackageTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testGrulCommitPathJsShouldBeServerGrulJs'), +unescape('_testTimesRepeat'), smalltalk.method({ -selector: unescape('testGrulCommitPathJsShouldBeServerGrulJs'), +selector: unescape('testTimesRepeat'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("server/grul/js"), smalltalk.send(self['@grulPackage'], "_commitPathJs", [])]); +var i=nil; +(i=(0)); +smalltalk.send((0), "_timesRepeat_", [(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})]); +smalltalk.send(self, "_assert_equals_", [i, (0)]); +smalltalk.send((5), "_timesRepeat_", [(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})]); +smalltalk.send(self, "_assert_equals_", [i, (5)]); return self;} }), -smalltalk.PackageTest); - - +smalltalk.NumberTest); -smalltalk.addClass('BlockClosureTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testValue'), +unescape('_testTo'), smalltalk.method({ -selector: unescape('testValue'), +selector: unescape('testTo'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(){return (1) + (1);}), "_value", []), (2)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(x){return ((($receiver = x).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]));}), "_value_", [(2)]), (3)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(x, y){return ((($receiver = x).klass === smalltalk.Number) ? $receiver *y : smalltalk.send($receiver, "__star", [y]));}), "_value_value_", [(2), (4)]), (8)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a, b, c){return (1);}), "_value", []), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((1), "_to_", [(5)]), [(1), (2), (3), (4), (5)]]); return self;} }), -smalltalk.BlockClosureTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testOnDo'), +unescape('_testToBy'), smalltalk.method({ -selector: unescape('testOnDo'), +selector: unescape('testToBy'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send((function(){return smalltalk.send(smalltalk.send((smalltalk.Error || Error), "_new", []), "_signal", []);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return true;})])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((0), "_to_by_", [(6), (2)]), [(0), (2), (4), (6)]]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send((1), "_to_by_", [(4), (0)]);}), (smalltalk.Error || Error)]); return self;} }), -smalltalk.BlockClosureTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testEnsure'), +unescape('_testTruncated'), smalltalk.method({ -selector: unescape('testEnsure'), +selector: unescape('testTruncated'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send((function(){return smalltalk.send((smalltalk.Error || Error), "_new", []);}), "_ensure_", [(function(){return true;})])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "_truncated", []), "__eq", [(3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.212), "_truncated", []), "__eq", [(3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.51), "_truncated", []), "__eq", [(3)])]); return self;} }), -smalltalk.BlockClosureTest); +smalltalk.NumberTest); + + +smalltalk.addClass('ObjectMock', smalltalk.Object, ['foo', 'bar'], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testNumArgs'), +unescape('_foo'), smalltalk.method({ -selector: unescape('testNumArgs'), +selector: unescape('foo'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(){return nil;}), "_numArgs", []), (0)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a, b){return nil;}), "_numArgs", []), (2)]); +return self['@foo']; return self;} }), -smalltalk.BlockClosureTest); +smalltalk.ObjectMock); smalltalk.addMethod( -unescape('_testValueWithPossibleArguments'), +unescape('_foo_'), smalltalk.method({ -selector: unescape('testValueWithPossibleArguments'), -fn: function () { +selector: unescape('foo%3A'), +fn: function (anObject) { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(){return (1);}), "_valueWithPossibleArguments_", [[(3), (4)]]), (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a){return ((($receiver = a).klass === smalltalk.Number) ? $receiver +(4) : smalltalk.send($receiver, "__plus", [(4)]));}), "_valueWithPossibleArguments_", [[(3), (4)]]), (7)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a, b){return ((($receiver = a).klass === smalltalk.Number) ? $receiver +b : smalltalk.send($receiver, "__plus", [b]));}), "_valueWithPossibleArguments_", [[(3), (4), (5)]]), (7)]); +(self['@foo']=anObject); return self;} }), -smalltalk.BlockClosureTest); +smalltalk.ObjectMock); + + +smalltalk.addClass('ObjectTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testWhileTrue'), +unescape('_testBasicAccess'), smalltalk.method({ -selector: unescape('testWhileTrue'), +selector: unescape('testBasicAccess'), fn: function () { var self=this; -var i=nil; -(i=(0)); -(function(){while((function(){return ((($receiver = i).klass === smalltalk.Number) ? $receiver <(5) : smalltalk.send($receiver, "__lt", [(5)]));})()) {(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})(); -smalltalk.send(self, "_assert_equals_", [i, (5)]); -(i=(0)); -(function(){while((function(){(i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));return ((($receiver = i).klass === smalltalk.Number) ? $receiver <(5) : smalltalk.send($receiver, "__lt", [(5)]));})()) {}})(); -smalltalk.send(self, "_assert_equals_", [i, (5)]); +var o=nil; +(o=smalltalk.send((smalltalk.Object || Object), "_new", [])); +smalltalk.send(o, "_basicAt_put_", ["a", (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicAt_", ["a"]), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicAt_", ["b"]), nil]); return self;} }), -smalltalk.BlockClosureTest); +smalltalk.ObjectTest); smalltalk.addMethod( -unescape('_testWhileFalse'), +unescape('_testBasicPerform'), smalltalk.method({ -selector: unescape('testWhileFalse'), +selector: unescape('testBasicPerform'), fn: function () { var self=this; -var i=nil; -(i=(0)); -(function(){while(!(function(){return ((($receiver = i).klass === smalltalk.Number) ? $receiver >(5) : smalltalk.send($receiver, "__gt", [(5)]));})()) {(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})(); -smalltalk.send(self, "_assert_equals_", [i, (6)]); -(i=(0)); -(function(){while(!(function(){(i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));return ((($receiver = i).klass === smalltalk.Number) ? $receiver >(5) : smalltalk.send($receiver, "__gt", [(5)]));})()) {}})(); -smalltalk.send(self, "_assert_equals_", [i, (6)]); +var o=nil; +(o=smalltalk.send((smalltalk.Object || Object), "_new", [])); +smalltalk.send(o, "_basicAt_put_", ["func", (function(){return "hello";})]); +smalltalk.send(o, "_basicAt_put_", ["func2", (function(a){return ((($receiver = a).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]));})]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicPerform_", ["func"]), "hello"]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicPerform_withArguments_", ["func2", [(3)]]), (4)]); return self;} }), -smalltalk.BlockClosureTest); +smalltalk.ObjectTest); smalltalk.addMethod( -unescape('_testCompiledSource'), +unescape('_testDNU'), smalltalk.method({ -selector: unescape('testCompiledSource'), +selector: unescape('testDNU'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((function(){return (1) + (1);}), "_compiledSource", []), "_includesSubString_", ["function"])]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.Object || Object), "_new", []), "_foo", []);}), (smalltalk.MessageNotUnderstood || MessageNotUnderstood)]); return self;} }), -smalltalk.BlockClosureTest); - - +smalltalk.ObjectTest); -smalltalk.addClass('ObjectTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( unescape('_testEquality'), smalltalk.method({ @@ -845,6 +813,17 @@ return self;} }), smalltalk.ObjectTest); +smalltalk.addMethod( +unescape('_testHalt'), +smalltalk.method({ +selector: unescape('testHalt'), +fn: function () { +var self=this; +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.Object || Object), "_new", []), "_halt", []);}), (smalltalk.Error || Error)]); +return self;} +}), +smalltalk.ObjectTest); + smalltalk.addMethod( unescape('_testIdentity'), smalltalk.method({ @@ -860,27 +839,32 @@ return self;} smalltalk.ObjectTest); smalltalk.addMethod( -unescape('_testHalt'), +unescape('_testIfNil'), smalltalk.method({ -selector: unescape('testHalt'), +selector: unescape('testIfNil'), fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.Object || Object), "_new", []), "_halt", []);}), (smalltalk.Error || Error)]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send((smalltalk.Object || Object), "_new", []), "_isNil", [])]); +smalltalk.send(self, "_deny_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver, "__eq", [true])]); +smalltalk.send(self, "_assert_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) != nil && $receiver != undefined) ? (function(){return true;})() : nil, "__eq", [true])]); +smalltalk.send(self, "_assert_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) == nil || $receiver == undefined) ? (function(){return false;})() : (function(){return true;})(), "__eq", [true])]); +smalltalk.send(self, "_assert_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) == nil || $receiver == undefined) ? (function(){return false;})() : (function(){return true;})(), "__eq", [true])]); return self;} }), smalltalk.ObjectTest); smalltalk.addMethod( -unescape('_testBasicAccess'), +unescape('_testInstVars'), smalltalk.method({ -selector: unescape('testBasicAccess'), +selector: unescape('testInstVars'), fn: function () { var self=this; var o=nil; -(o=smalltalk.send((smalltalk.Object || Object), "_new", [])); -smalltalk.send(o, "_basicAt_put_", ["a", (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicAt_", ["a"]), (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicAt_", ["b"]), nil]); +(o=smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_new", [])); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_instVarAt_", [smalltalk.symbolFor("foo")]), nil]); +smalltalk.send(o, "_instVarAt_put_", [smalltalk.symbolFor("foo"), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_instVarAt_", [smalltalk.symbolFor("foo")]), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_instVarAt_", ["foo"]), (1)]); return self;} }), smalltalk.ObjectTest); @@ -896,6 +880,19 @@ return self;} }), smalltalk.ObjectTest); +smalltalk.addMethod( +unescape('_testYourself'), +smalltalk.method({ +selector: unescape('testYourself'), +fn: function () { +var self=this; +var o=nil; +(o=smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_new", [])); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(o, "_yourself", []), "__eq_eq", [o])]); +return self;} +}), +smalltalk.ObjectTest); + smalltalk.addMethod( unescape('_testidentityHash'), smalltalk.method({ @@ -912,558 +909,605 @@ return self;} }), smalltalk.ObjectTest); + + +smalltalk.addClass('PackageTest', smalltalk.TestCase, ['zorkPackage', 'grulPackage', 'backUpCommitPathJs', 'backUpCommitPathSt'], 'Kernel-Tests'); +smalltalk.addMethod( +unescape('_setUp'), +smalltalk.method({ +selector: unescape('setUp'), +fn: function () { +var self=this; +(self['@backUpCommitPathJs']=smalltalk.send((smalltalk.Package || Package), "_defaultCommitPathJs", [])); +(self['@backUpCommitPathSt']=smalltalk.send((smalltalk.Package || Package), "_defaultCommitPathSt", [])); +smalltalk.send((smalltalk.Package || Package), "_resetCommitPaths", []); +(self['@zorkPackage']=smalltalk.send(smalltalk.send((smalltalk.Package || Package), "_new", []), "_name_", ["Zork"])); +(self['@grulPackage']=(function($rec){smalltalk.send($rec, "_name_", ["Grul"]);smalltalk.send($rec, "_commitPathJs_", [unescape("server/grul/js")]);smalltalk.send($rec, "_commitPathSt_", [unescape("grul/st")]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Package || Package), "_new", []))); +return self;} +}), +smalltalk.PackageTest); + smalltalk.addMethod( -unescape('_testBasicPerform'), +unescape('_tearDown'), smalltalk.method({ -selector: unescape('testBasicPerform'), +selector: unescape('tearDown'), fn: function () { var self=this; -var o=nil; -(o=smalltalk.send((smalltalk.Object || Object), "_new", [])); -smalltalk.send(o, "_basicAt_put_", ["func", (function(){return "hello";})]); -smalltalk.send(o, "_basicAt_put_", ["func2", (function(a){return ((($receiver = a).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]));})]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicPerform_", ["func"]), "hello"]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicPerform_withArguments_", ["func2", [(3)]]), (4)]); +(function($rec){smalltalk.send($rec, "_defaultCommitPathJs_", [self['@backUpCommitPathJs']]);return smalltalk.send($rec, "_defaultCommitPathSt_", [self['@backUpCommitPathSt']]);})((smalltalk.Package || Package)); +return self;} +}), +smalltalk.PackageTest); + +smalltalk.addMethod( +unescape('_testGrulCommitPathJsShouldBeServerGrulJs'), +smalltalk.method({ +selector: unescape('testGrulCommitPathJsShouldBeServerGrulJs'), +fn: function () { +var self=this; +smalltalk.send(self, "_assert_equals_", [unescape("server/grul/js"), smalltalk.send(self['@grulPackage'], "_commitPathJs", [])]); +return self;} +}), +smalltalk.PackageTest); + +smalltalk.addMethod( +unescape('_testGrulCommitPathStShouldBeGrulSt'), +smalltalk.method({ +selector: unescape('testGrulCommitPathStShouldBeGrulSt'), +fn: function () { +var self=this; +smalltalk.send(self, "_assert_equals_", [unescape("grul/st"), smalltalk.send(self['@grulPackage'], "_commitPathSt", [])]); +return self;} +}), +smalltalk.PackageTest); + +smalltalk.addMethod( +unescape('_testZorkCommitPathJsShouldBeJs'), +smalltalk.method({ +selector: unescape('testZorkCommitPathJsShouldBeJs'), +fn: function () { +var self=this; +smalltalk.send(self, "_assert_equals_", ["js", smalltalk.send(self['@zorkPackage'], "_commitPathJs", [])]); +return self;} +}), +smalltalk.PackageTest); + +smalltalk.addMethod( +unescape('_testZorkCommitPathStShouldBeSt'), +smalltalk.method({ +selector: unescape('testZorkCommitPathStShouldBeSt'), +fn: function () { +var self=this; +smalltalk.send(self, "_assert_equals_", ["st", smalltalk.send(self['@zorkPackage'], "_commitPathSt", [])]); return self;} }), -smalltalk.ObjectTest); +smalltalk.PackageTest); + + +smalltalk.addClass('PackageWithDefaultCommitPathChangedTest', smalltalk.PackageTest, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testIfNil'), +unescape('_setUp'), smalltalk.method({ -selector: unescape('testIfNil'), +selector: unescape('setUp'), fn: function () { var self=this; -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send((smalltalk.Object || Object), "_new", []), "_isNil", [])]); -smalltalk.send(self, "_deny_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver, "__eq", [true])]); -smalltalk.send(self, "_assert_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) != nil && $receiver != undefined) ? (function(){return true;})() : nil, "__eq", [true])]); -smalltalk.send(self, "_assert_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) == nil || $receiver == undefined) ? (function(){return false;})() : (function(){return true;})(), "__eq", [true])]); -smalltalk.send(self, "_assert_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) == nil || $receiver == undefined) ? (function(){return false;})() : (function(){return true;})(), "__eq", [true])]); +smalltalk.send(self, "_setUp", [], smalltalk.PackageTest); +(function($rec){smalltalk.send($rec, "_defaultCommitPathJs_", [unescape("javascripts/")]);return smalltalk.send($rec, "_defaultCommitPathSt_", [unescape("smalltalk/")]);})((smalltalk.Package || Package)); return self;} }), -smalltalk.ObjectTest); +smalltalk.PackageWithDefaultCommitPathChangedTest); smalltalk.addMethod( -unescape('_testInstVars'), +unescape('_testGrulCommitPathJsShouldBeServerGrulJs'), smalltalk.method({ -selector: unescape('testInstVars'), +selector: unescape('testGrulCommitPathJsShouldBeServerGrulJs'), fn: function () { var self=this; -var o=nil; -(o=smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_new", [])); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_instVarAt_", [smalltalk.symbolFor("foo")]), nil]); -smalltalk.send(o, "_instVarAt_put_", [smalltalk.symbolFor("foo"), (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_instVarAt_", [smalltalk.symbolFor("foo")]), (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_instVarAt_", ["foo"]), (1)]); +smalltalk.send(self, "_assert_equals_", [unescape("server/grul/js"), smalltalk.send(self['@grulPackage'], "_commitPathJs", [])]); return self;} }), -smalltalk.ObjectTest); +smalltalk.PackageWithDefaultCommitPathChangedTest); smalltalk.addMethod( -unescape('_testYourself'), +unescape('_testGrulCommitPathStShouldBeGrulSt'), smalltalk.method({ -selector: unescape('testYourself'), +selector: unescape('testGrulCommitPathStShouldBeGrulSt'), fn: function () { var self=this; -var o=nil; -(o=smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_new", [])); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(o, "_yourself", []), "__eq_eq", [o])]); +smalltalk.send(self, "_assert_equals_", [unescape("grul/st"), smalltalk.send(self['@grulPackage'], "_commitPathSt", [])]); return self;} }), -smalltalk.ObjectTest); +smalltalk.PackageWithDefaultCommitPathChangedTest); smalltalk.addMethod( -unescape('_testDNU'), +unescape('_testZorkCommitPathJsShouldBeJavascript'), smalltalk.method({ -selector: unescape('testDNU'), +selector: unescape('testZorkCommitPathJsShouldBeJavascript'), fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.Object || Object), "_new", []), "_foo", []);}), (smalltalk.MessageNotUnderstood || MessageNotUnderstood)]); +smalltalk.send(self, "_assert_equals_", [unescape("javascripts/"), smalltalk.send(self['@zorkPackage'], "_commitPathJs", [])]); return self;} }), -smalltalk.ObjectTest); - - +smalltalk.PackageWithDefaultCommitPathChangedTest); -smalltalk.addClass('SymbolTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testEquality'), +unescape('_testZorkCommitPathStShouldBeSmalltalk'), smalltalk.method({ -selector: unescape('testEquality'), +selector: unescape('testZorkCommitPathStShouldBeSmalltalk'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.symbolFor("hello")])]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.symbolFor("world")])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", [])])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", []), "__eq", [smalltalk.symbolFor("hello")])]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", ["hello"])]); -smalltalk.send(self, "_deny_", [smalltalk.send("hello", "__eq", [smalltalk.symbolFor("hello")])]); +smalltalk.send(self, "_assert_equals_", [unescape("smalltalk/"), smalltalk.send(self['@zorkPackage'], "_commitPathSt", [])]); return self;} }), -smalltalk.SymbolTest); +smalltalk.PackageWithDefaultCommitPathChangedTest); + smalltalk.addMethod( -unescape('_testAt'), +unescape('_shouldInheritSelectors'), smalltalk.method({ -selector: unescape('testAt'), +selector: unescape('shouldInheritSelectors'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_at_", [(1)]), "__eq", ["h"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_at_", [(5)]), "__eq", ["o"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_at_ifAbsent_", [(6), (function(){return nil;})]), "__eq", [nil])]); +return false; return self;} }), -smalltalk.SymbolTest); +smalltalk.PackageWithDefaultCommitPathChangedTest.klass); + +smalltalk.addClass('PointTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testAtPut'), +unescape('_testAccessing'), smalltalk.method({ -selector: unescape('testAtPut'), +selector: unescape('testAccessing'), fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_at_put_", [(1), "a"]);}), (smalltalk.Error || Error)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_x_y_", [(3), (4)]), "_x", []), (3)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_x_y_", [(3), (4)]), "_y", []), (4)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_new", []), "_x_", [(3)]), "_x", []), (3)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_new", []), "_y_", [(4)]), "_y", []), (4)]); return self;} }), -smalltalk.SymbolTest); +smalltalk.PointTest); smalltalk.addMethod( -unescape('_testIdentity'), +unescape('_testArithmetic'), smalltalk.method({ -selector: unescape('testIdentity'), +selector: unescape('testArithmetic'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq_eq", [smalltalk.symbolFor("hello")])]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq_eq", [smalltalk.symbolFor("world")])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", [])])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", []), "__eq", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_asString", []), "_asSymbol", [])])]); +smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((3), "__at", [(4)])).klass === smalltalk.Number) ? $receiver *smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__star", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(9), (16)])]); +smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((3), "__at", [(4)])).klass === smalltalk.Number) ? $receiver +smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__plus", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(6), (8)])]); +smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((3), "__at", [(4)])).klass === smalltalk.Number) ? $receiver -smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__minus", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(0), (0)])]); +smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((6), "__at", [(8)])).klass === smalltalk.Number) ? $receiver /smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__slash", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(2), (2)])]); return self;} }), -smalltalk.SymbolTest); +smalltalk.PointTest); smalltalk.addMethod( -unescape('_testComparing'), +unescape('_testAt'), smalltalk.method({ -selector: unescape('testComparing'), +selector: unescape('testAt'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >smalltalk.symbolFor("aa") : smalltalk.send($receiver, "__gt", [smalltalk.symbolFor("aa")]))]); -smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__gt", [smalltalk.symbolFor("ba")]))]); -smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver <smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt", [smalltalk.symbolFor("ba")]))]); -smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("bb")).klass === smalltalk.Number) ? $receiver <smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt", [smalltalk.symbolFor("ba")]))]); -smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >=smalltalk.symbolFor("aa") : smalltalk.send($receiver, "__gt_eq", [smalltalk.symbolFor("aa")]))]); -smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >=smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__gt_eq", [smalltalk.symbolFor("ba")]))]); -smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver <=smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt_eq", [smalltalk.symbolFor("ba")]))]); -smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("bb")).klass === smalltalk.Number) ? $receiver <=smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt_eq", [smalltalk.symbolFor("ba")]))]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((3), "__at", [(4)]), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(3), (4)])]); return self;} }), -smalltalk.SymbolTest); +smalltalk.PointTest); smalltalk.addMethod( -unescape('_testSize'), +unescape('_testEgality'), smalltalk.method({ -selector: unescape('testSize'), +selector: unescape('testEgality'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.symbolFor("a"), "_size", []), (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.symbolFor("aaaaa"), "_size", []), (5)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "__at", [(4)]), "__eq", [smalltalk.send((3), "__at", [(4)])])]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send((3), "__at", [(5)]), "__eq", [smalltalk.send((3), "__at", [(6)])])]); return self;} }), -smalltalk.SymbolTest); +smalltalk.PointTest); smalltalk.addMethod( -unescape('_testAsString'), +unescape('_testTranslateBy'), smalltalk.method({ -selector: unescape('testAsString'), -fn: function () { +selector: unescape('testTranslateBy'), +fn: function (){ var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.symbolFor("hello"), "_asString", []), "hello"]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((3), "__at", [(4)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send((0), "__at", [(1)])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((3), "__at", [(2)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send((0), "__at", [smalltalk.send((1), "_negated", [])])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((5), "__at", [(6)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send((2), "__at", [(3)])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((0), "__at", [(3)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send(smalltalk.send((3), "_negated", []), "__at", [(0)])])]); return self;} }), -smalltalk.SymbolTest); +smalltalk.PointTest); + + +smalltalk.addClass('RandomTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testAsSymbol'), +unescape('_textNext'), smalltalk.method({ -selector: unescape('testAsSymbol'), +selector: unescape('textNext'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq_eq", [smalltalk.send(smalltalk.symbolFor("hello"), "_asSymbol", [])])]); +smalltalk.send((10000), "_timesRepeat_", [(function(){var current=nil; +var next=nil; +(next=smalltalk.send(smalltalk.send((smalltalk.Random || Random), "_new", []), "_next", []));smalltalk.send(self, "_assert_", [((($receiver = next).klass === smalltalk.Number) ? $receiver >=(0) : smalltalk.send($receiver, "__gt_eq", [(0)]))]);smalltalk.send(self, "_assert_", [((($receiver = next).klass === smalltalk.Number) ? $receiver <(1) : smalltalk.send($receiver, "__lt", [(1)]))]);smalltalk.send(self, "_deny_", [smalltalk.send(current, "__eq", [next])]);return smalltalk.send(next, "__eq", [current]);})]); return self;} }), -smalltalk.SymbolTest); +smalltalk.RandomTest); + + +smalltalk.addClass('SetTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testCopying'), +unescape('_testAddRemove'), smalltalk.method({ -selector: unescape('testCopying'), +selector: unescape('testAddRemove'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_copy", []), "__eq_eq", [smalltalk.symbolFor("hello")])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_deepCopy", []), "__eq_eq", [smalltalk.symbolFor("hello")])]); +var set=nil; +(set=smalltalk.send((smalltalk.Set || Set), "_new", [])); +smalltalk.send(self, "_assert_", [smalltalk.send(set, "_isEmpty", [])]); +smalltalk.send(set, "_add_", [(3)]); +smalltalk.send(self, "_assert_", [smalltalk.send(set, "_includes_", [(3)])]); +smalltalk.send(set, "_add_", [(5)]); +smalltalk.send(self, "_assert_", [smalltalk.send(set, "_includes_", [(5)])]); +smalltalk.send(set, "_remove_", [(3)]); +smalltalk.send(self, "_deny_", [smalltalk.send(set, "_includes_", [(3)])]); return self;} }), -smalltalk.SymbolTest); +smalltalk.SetTest); smalltalk.addMethod( -unescape('_testIsSymbolIsString'), +unescape('_testAt'), smalltalk.method({ -selector: unescape('testIsSymbolIsString'), +selector: unescape('testAt'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "_isSymbol", [])]); -smalltalk.send(self, "_deny_", [smalltalk.send("hello", "_isSymbol", [])]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "_isString", [])]); -smalltalk.send(self, "_assert_", [smalltalk.send("hello", "_isString", [])]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_new", []), "_at_put_", [(1), (2)]);}), (smalltalk.Error || Error)]); return self;} }), -smalltalk.SymbolTest); - - +smalltalk.SetTest); -smalltalk.addClass('ObjectMock', smalltalk.Object, ['foo', 'bar'], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_foo'), +unescape('_testSize'), smalltalk.method({ -selector: unescape('foo'), +selector: unescape('testSize'), fn: function () { var self=this; -return self['@foo']; +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_new", []), "_size", []), (0)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_withAll_", [[(1), (2), (3), (4)]]), "_size", []), (4)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_withAll_", [[(1), (1), (1), (1)]]), "_size", []), (1)]); return self;} }), -smalltalk.ObjectMock); +smalltalk.SetTest); smalltalk.addMethod( -unescape('_foo_'), +unescape('_testUnicity'), smalltalk.method({ -selector: unescape('foo%3A'), -fn: function (anObject) { +selector: unescape('testUnicity'), +fn: function () { var self=this; -(self['@foo']=anObject); +var set=nil; +(set=smalltalk.send((smalltalk.Set || Set), "_new", [])); +smalltalk.send(set, "_add_", [(21)]); +smalltalk.send(set, "_add_", ["hello"]); +smalltalk.send(set, "_add_", [(21)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(set, "_size", []), "__eq", [(2)])]); +smalltalk.send(set, "_add_", ["hello"]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(set, "_size", []), "__eq", [(2)])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(set, "_asArray", []), [(21), "hello"]]); return self;} }), -smalltalk.ObjectMock); +smalltalk.SetTest); -smalltalk.addClass('UndefinedTest', smalltalk.TestCase, [], 'Kernel-Tests'); +smalltalk.addClass('StringTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testIsNil'), +unescape('_testAddRemove'), smalltalk.method({ -selector: unescape('testIsNil'), +selector: unescape('testAddRemove'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(nil, "_isNil", [])]); -smalltalk.send(self, "_deny_", [smalltalk.send(nil, "_notNil", [])]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_add_", ["a"]);}), (smalltalk.Error || Error)]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_remove_", ["h"]);}), (smalltalk.Error || Error)]); return self;} }), -smalltalk.UndefinedTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testIfNil'), +unescape('_testAsArray'), smalltalk.method({ -selector: unescape('testIfNil'), +selector: unescape('testAsArray'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [(($receiver = nil) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver, true]); -smalltalk.send(self, "_deny_", [smalltalk.send((($receiver = nil) != nil && $receiver != undefined) ? (function(){return true;})() : nil, "__eq", [true])]); -smalltalk.send(self, "_assert_equals_", [(($receiver = nil) == nil || $receiver == undefined) ? (function(){return true;})() : (function(){return false;})(), true]); -smalltalk.send(self, "_deny_", [smalltalk.send((($receiver = nil) == nil || $receiver == undefined) ? (function(){return false;})() : (function(){return true;})(), "__eq", [true])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_asArray", []), "__eq", [["h", "e", "l", "l", "o"]])]); return self;} }), -smalltalk.UndefinedTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testCopying'), +unescape('_testAt'), smalltalk.method({ -selector: unescape('testCopying'), +selector: unescape('testAt'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(nil, "_copy", []), nil]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_at_", [(1)]), "__eq", ["h"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_at_", [(5)]), "__eq", ["o"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_at_ifAbsent_", [(6), (function(){return nil;})]), "__eq", [nil])]); return self;} }), -smalltalk.UndefinedTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testDeepCopy'), +unescape('_testAtPut'), smalltalk.method({ -selector: unescape('testDeepCopy'), +selector: unescape('testAtPut'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(nil, "_deepCopy", []), "__eq", [nil])]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_at_put_", [(1), "a"]);}), (smalltalk.Error || Error)]); return self;} }), -smalltalk.UndefinedTest); - - +smalltalk.StringTest); -smalltalk.addClass('PointTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testAccessing'), +unescape('_testCopyWithoutAll'), smalltalk.method({ -selector: unescape('testAccessing'), +selector: unescape('testCopyWithoutAll'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_x_y_", [(3), (4)]), "_x", []), (3)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_x_y_", [(3), (4)]), "_y", []), (4)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_new", []), "_x_", [(3)]), "_x", []), (3)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_new", []), "_y_", [(4)]), "_y", []), (4)]); +smalltalk.send(self, "_assert_equals_", ["hello world", smalltalk.send(unescape("*hello*%20*world*"), "_copyWithoutAll_", [unescape("*")])]); return self;} }), -smalltalk.PointTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testAt'), +unescape('_testEquality'), smalltalk.method({ -selector: unescape('testAt'), +selector: unescape('testEquality'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((3), "__at", [(4)]), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(3), (4)])]); +smalltalk.send(self, "_assert_", [smalltalk.send("hello", "__eq", ["hello"])]); +smalltalk.send(self, "_deny_", [smalltalk.send("hello", "__eq", ["world"])]); +smalltalk.send(self, "_assert_", [smalltalk.send("hello", "__eq", [smalltalk.send("hello", "_yourself", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_yourself", []), "__eq", ["hello"])]); +smalltalk.send(self, "_deny_", [smalltalk.send("", "__eq", [(0)])]); return self;} }), -smalltalk.PointTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testEgality'), +unescape('_testIncludesSubString'), smalltalk.method({ -selector: unescape('testEgality'), +selector: unescape('testIncludesSubString'), fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "__at", [(4)]), "__eq", [smalltalk.send((3), "__at", [(4)])])]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send((3), "__at", [(5)]), "__eq", [smalltalk.send((3), "__at", [(6)])])]); +smalltalk.send(self, "_assert_", [smalltalk.send("amber", "_includesSubString_", ["ber"])]); +smalltalk.send(self, "_deny_", [smalltalk.send("amber", "_includesSubString_", ["zork"])]); return self;} }), -smalltalk.PointTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testArithmetic'), +unescape('_testJoin'), smalltalk.method({ -selector: unescape('testArithmetic'), +selector: unescape('testJoin'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((3), "__at", [(4)])).klass === smalltalk.Number) ? $receiver *smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__star", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(9), (16)])]); -smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((3), "__at", [(4)])).klass === smalltalk.Number) ? $receiver +smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__plus", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(6), (8)])]); -smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((3), "__at", [(4)])).klass === smalltalk.Number) ? $receiver -smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__minus", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(0), (0)])]); -smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((6), "__at", [(8)])).klass === smalltalk.Number) ? $receiver /smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__slash", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(2), (2)])]); +smalltalk.send(self, "_assert_equals_", [unescape("hello%2Cworld"), smalltalk.send(unescape("%2C"), "_join_", [["hello", "world"]])]); return self;} }), -smalltalk.PointTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testTranslateBy'), +unescape('_testSize'), smalltalk.method({ -selector: unescape('testTranslateBy'), -fn: function (){ +selector: unescape('testSize'), +fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((3), "__at", [(4)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send((0), "__at", [(1)])])]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((3), "__at", [(2)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send((0), "__at", [smalltalk.send((1), "_negated", [])])])]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((5), "__at", [(6)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send((2), "__at", [(3)])])]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((0), "__at", [(3)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send(smalltalk.send((3), "_negated", []), "__at", [(0)])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send("smalltalk", "_size", []), (9)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send("", "_size", []), (0)]); return self;} }), -smalltalk.PointTest); - - +smalltalk.StringTest); -smalltalk.addClass('RandomTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_textNext'), +unescape('_testStreamContents'), smalltalk.method({ -selector: unescape('textNext'), +selector: unescape('testStreamContents'), fn: function () { var self=this; -smalltalk.send((10000), "_timesRepeat_", [(function(){var current=nil; -var next=nil; -(next=smalltalk.send(smalltalk.send((smalltalk.Random || Random), "_new", []), "_next", []));smalltalk.send(self, "_assert_", [((($receiver = next).klass === smalltalk.Number) ? $receiver >=(0) : smalltalk.send($receiver, "__gt_eq", [(0)]))]);smalltalk.send(self, "_assert_", [((($receiver = next).klass === smalltalk.Number) ? $receiver <(1) : smalltalk.send($receiver, "__lt", [(1)]))]);smalltalk.send(self, "_deny_", [smalltalk.send(current, "__eq", [next])]);return smalltalk.send(next, "__eq", [current]);})]); +smalltalk.send(self, "_assert_equals_", ["hello world", smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(aStream){return (function($rec){smalltalk.send($rec, "_nextPutAll_", ["hello"]);smalltalk.send($rec, "_space", []);return smalltalk.send($rec, "_nextPutAll_", ["world"]);})(aStream);})])]); return self;} }), -smalltalk.RandomTest); +smalltalk.StringTest); -smalltalk.addClass('ClassBuilderTest', smalltalk.TestCase, ['builder', 'theClass'], 'Kernel-Tests'); +smalltalk.addClass('SymbolTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_setUp'), +unescape('_testAsString'), smalltalk.method({ -selector: unescape('setUp'), +selector: unescape('testAsString'), fn: function () { var self=this; -(self['@builder']=smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", [])); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.symbolFor("hello"), "_asString", []), "hello"]); return self;} }), -smalltalk.ClassBuilderTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_tearDown'), +unescape('_testAsSymbol'), smalltalk.method({ -selector: unescape('tearDown'), +selector: unescape('testAsSymbol'), fn: function () { var self=this; -(($receiver = self['@theClass']) != nil && $receiver != undefined) ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removeClass_", [self['@theClass']]);return (self['@theClass']=nil);})() : nil; +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq_eq", [smalltalk.send(smalltalk.symbolFor("hello"), "_asSymbol", [])])]); return self;} }), -smalltalk.ClassBuilderTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_testClassCopy'), +unescape('_testAt'), smalltalk.method({ -selector: unescape('testClassCopy'), +selector: unescape('testAt'), fn: function () { var self=this; -(self['@theClass']=smalltalk.send(self['@builder'], "_copyClass_named_", [(smalltalk.ObjectMock || ObjectMock), "ObjectMock2"])); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(self['@theClass'], "_superclass", []), "__eq_eq", [smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_superclass", [])])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(self['@theClass'], "_instanceVariableNames", []), "__eq_eq", [smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_instanceVariableNames", [])])]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(self['@theClass'], "_name", []), "ObjectMock2"]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(self['@theClass'], "_package", []), "__eq_eq", [smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_package", [])])]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self['@theClass'], "_methodDictionary", []), "_keys", []), smalltalk.send(smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_methodDictionary", []), "_keys", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_at_", [(1)]), "__eq", ["h"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_at_", [(5)]), "__eq", ["o"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_at_ifAbsent_", [(6), (function(){return nil;})]), "__eq", [nil])]); return self;} }), -smalltalk.ClassBuilderTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_testInstanceVariableNames'), +unescape('_testAtPut'), smalltalk.method({ -selector: unescape('testInstanceVariableNames'), +selector: unescape('testAtPut'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(self['@builder'], "_instanceVariableNamesFor_", [" hello world "]), ["hello", "world"]]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_at_put_", [(1), "a"]);}), (smalltalk.Error || Error)]); return self;} }), -smalltalk.ClassBuilderTest); - - +smalltalk.SymbolTest); -smalltalk.addClass('SetTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testUnicity'), +unescape('_testComparing'), smalltalk.method({ -selector: unescape('testUnicity'), +selector: unescape('testComparing'), fn: function () { var self=this; -var set=nil; -(set=smalltalk.send((smalltalk.Set || Set), "_new", [])); -smalltalk.send(set, "_add_", [(21)]); -smalltalk.send(set, "_add_", ["hello"]); -smalltalk.send(set, "_add_", [(21)]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(set, "_size", []), "__eq", [(2)])]); -smalltalk.send(set, "_add_", ["hello"]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(set, "_size", []), "__eq", [(2)])]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(set, "_asArray", []), [(21), "hello"]]); +smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >smalltalk.symbolFor("aa") : smalltalk.send($receiver, "__gt", [smalltalk.symbolFor("aa")]))]); +smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__gt", [smalltalk.symbolFor("ba")]))]); +smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver <smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt", [smalltalk.symbolFor("ba")]))]); +smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("bb")).klass === smalltalk.Number) ? $receiver <smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt", [smalltalk.symbolFor("ba")]))]); +smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >=smalltalk.symbolFor("aa") : smalltalk.send($receiver, "__gt_eq", [smalltalk.symbolFor("aa")]))]); +smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >=smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__gt_eq", [smalltalk.symbolFor("ba")]))]); +smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver <=smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt_eq", [smalltalk.symbolFor("ba")]))]); +smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("bb")).klass === smalltalk.Number) ? $receiver <=smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt_eq", [smalltalk.symbolFor("ba")]))]); return self;} }), -smalltalk.SetTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_testAt'), +unescape('_testCopying'), smalltalk.method({ -selector: unescape('testAt'), +selector: unescape('testCopying'), fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_new", []), "_at_put_", [(1), (2)]);}), (smalltalk.Error || Error)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_copy", []), "__eq_eq", [smalltalk.symbolFor("hello")])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_deepCopy", []), "__eq_eq", [smalltalk.symbolFor("hello")])]); return self;} }), -smalltalk.SetTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_testAddRemove'), +unescape('_testEquality'), smalltalk.method({ -selector: unescape('testAddRemove'), +selector: unescape('testEquality'), fn: function () { var self=this; -var set=nil; -(set=smalltalk.send((smalltalk.Set || Set), "_new", [])); -smalltalk.send(self, "_assert_", [smalltalk.send(set, "_isEmpty", [])]); -smalltalk.send(set, "_add_", [(3)]); -smalltalk.send(self, "_assert_", [smalltalk.send(set, "_includes_", [(3)])]); -smalltalk.send(set, "_add_", [(5)]); -smalltalk.send(self, "_assert_", [smalltalk.send(set, "_includes_", [(5)])]); -smalltalk.send(set, "_remove_", [(3)]); -smalltalk.send(self, "_deny_", [smalltalk.send(set, "_includes_", [(3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.symbolFor("hello")])]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.symbolFor("world")])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", []), "__eq", [smalltalk.symbolFor("hello")])]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", ["hello"])]); +smalltalk.send(self, "_deny_", [smalltalk.send("hello", "__eq", [smalltalk.symbolFor("hello")])]); return self;} }), -smalltalk.SetTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_testSize'), +unescape('_testIdentity'), smalltalk.method({ -selector: unescape('testSize'), +selector: unescape('testIdentity'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_new", []), "_size", []), (0)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_withAll_", [[(1), (2), (3), (4)]]), "_size", []), (4)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_withAll_", [[(1), (1), (1), (1)]]), "_size", []), (1)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq_eq", [smalltalk.symbolFor("hello")])]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq_eq", [smalltalk.symbolFor("world")])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", []), "__eq", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_asString", []), "_asSymbol", [])])]); return self;} }), -smalltalk.SetTest); - - +smalltalk.SymbolTest); -smalltalk.addClass('PackageWithDefaultCommitPathChangedTest', smalltalk.PackageTest, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_setUp'), +unescape('_testIsSymbolIsString'), smalltalk.method({ -selector: unescape('setUp'), +selector: unescape('testIsSymbolIsString'), fn: function () { var self=this; -smalltalk.send(self, "_setUp", [], smalltalk.PackageTest); -(function($rec){smalltalk.send($rec, "_defaultCommitPathJs_", [unescape("javascripts/")]);return smalltalk.send($rec, "_defaultCommitPathSt_", [unescape("smalltalk/")]);})((smalltalk.Package || Package)); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "_isSymbol", [])]); +smalltalk.send(self, "_deny_", [smalltalk.send("hello", "_isSymbol", [])]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "_isString", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send("hello", "_isString", [])]); return self;} }), -smalltalk.PackageWithDefaultCommitPathChangedTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_testGrulCommitPathJsShouldBeServerGrulJs'), +unescape('_testSize'), smalltalk.method({ -selector: unescape('testGrulCommitPathJsShouldBeServerGrulJs'), +selector: unescape('testSize'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("server/grul/js"), smalltalk.send(self['@grulPackage'], "_commitPathJs", [])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.symbolFor("a"), "_size", []), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.symbolFor("aaaaa"), "_size", []), (5)]); return self;} }), -smalltalk.PackageWithDefaultCommitPathChangedTest); +smalltalk.SymbolTest); + + +smalltalk.addClass('UndefinedTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testGrulCommitPathStShouldBeGrulSt'), +unescape('_testCopying'), smalltalk.method({ -selector: unescape('testGrulCommitPathStShouldBeGrulSt'), +selector: unescape('testCopying'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("grul/st"), smalltalk.send(self['@grulPackage'], "_commitPathSt", [])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(nil, "_copy", []), nil]); return self;} }), -smalltalk.PackageWithDefaultCommitPathChangedTest); +smalltalk.UndefinedTest); smalltalk.addMethod( -unescape('_testZorkCommitPathJsShouldBeJavascript'), +unescape('_testDeepCopy'), smalltalk.method({ -selector: unescape('testZorkCommitPathJsShouldBeJavascript'), +selector: unescape('testDeepCopy'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("javascripts/"), smalltalk.send(self['@zorkPackage'], "_commitPathJs", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(nil, "_deepCopy", []), "__eq", [nil])]); return self;} }), -smalltalk.PackageWithDefaultCommitPathChangedTest); +smalltalk.UndefinedTest); smalltalk.addMethod( -unescape('_testZorkCommitPathStShouldBeSmalltalk'), +unescape('_testIfNil'), smalltalk.method({ -selector: unescape('testZorkCommitPathStShouldBeSmalltalk'), +selector: unescape('testIfNil'), fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("smalltalk/"), smalltalk.send(self['@zorkPackage'], "_commitPathSt", [])]); +smalltalk.send(self, "_assert_equals_", [(($receiver = nil) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver, true]); +smalltalk.send(self, "_deny_", [smalltalk.send((($receiver = nil) != nil && $receiver != undefined) ? (function(){return true;})() : nil, "__eq", [true])]); +smalltalk.send(self, "_assert_equals_", [(($receiver = nil) == nil || $receiver == undefined) ? (function(){return true;})() : (function(){return false;})(), true]); +smalltalk.send(self, "_deny_", [smalltalk.send((($receiver = nil) == nil || $receiver == undefined) ? (function(){return false;})() : (function(){return true;})(), "__eq", [true])]); return self;} }), -smalltalk.PackageWithDefaultCommitPathChangedTest); - +smalltalk.UndefinedTest); smalltalk.addMethod( -unescape('_shouldInheritSelectors'), +unescape('_testIsNil'), smalltalk.method({ -selector: unescape('shouldInheritSelectors'), +selector: unescape('testIsNil'), fn: function () { var self=this; -return false; +smalltalk.send(self, "_assert_", [smalltalk.send(nil, "_isNil", [])]); +smalltalk.send(self, "_deny_", [smalltalk.send(nil, "_notNil", [])]); return self;} }), -smalltalk.PackageWithDefaultCommitPathChangedTest.klass); +smalltalk.UndefinedTest); + diff --git a/amber/src/js/Kernel-Tests.js b/amber/src/js/Kernel-Tests.js index 1ee5cf12f7f..dc760504174 100644 --- a/amber/src/js/Kernel-Tests.js +++ b/amber/src/js/Kernel-Tests.js @@ -34,446 +34,357 @@ smalltalk.ArrayTest); -smalltalk.addClass('StringTest', smalltalk.TestCase, [], 'Kernel-Tests'); +smalltalk.addClass('BlockClosureTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testJoin'), +unescape('_testCompiledSource'), smalltalk.method({ -selector: unescape('testJoin'), +selector: unescape('testCompiledSource'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("hello%2Cworld"), smalltalk.send(unescape("%2C"), "_join_", [["hello", "world"]])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((function(){return (1) + (1);}), "_compiledSource", []), "_includesSubString_", ["function"])]); return self;}, args: [], -source: unescape('testJoin%0A%09self%20assert%3A%20%27hello%2Cworld%27%20equals%3A%20%28%27%2C%27%20join%3A%20%23%28%27hello%27%20%27world%27%29%29'), -messageSends: ["assert:equals:", "join:"], +source: unescape('testCompiledSource%0A%09self%20assert%3A%20%28%5B1+1%5D%20compiledSource%20includesSubString%3A%20%27function%27%29'), +messageSends: ["assert:", "includesSubString:", "compiledSource", unescape("+")], referencedClasses: [] }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testStreamContents'), +unescape('_testEnsure'), smalltalk.method({ -selector: unescape('testStreamContents'), +selector: unescape('testEnsure'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", ["hello world", smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(aStream){return (function($rec){smalltalk.send($rec, "_nextPutAll_", ["hello"]);smalltalk.send($rec, "_space", []);return smalltalk.send($rec, "_nextPutAll_", ["world"]);})(aStream);})])]); +smalltalk.send(self, "_assert_", [smalltalk.send((function(){return smalltalk.send((smalltalk.Error || Error), "_new", []);}), "_ensure_", [(function(){return true;})])]); return self;}, args: [], -source: unescape('testStreamContents%0A%09self%20%0A%09%09assert%3A%20%27hello%20world%27%20%0A%09%09equals%3A%20%28String%20streamContents%3A%20%5B%3AaStream%7C%20aStream%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27hello%27%3B%20space%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27world%27%5D%29'), -messageSends: ["assert:equals:", "streamContents:", "nextPutAll:", "space"], -referencedClasses: ["String"] +source: unescape('testEnsure%0A%09self%20assert%3A%20%28%5BError%20new%5D%20ensure%3A%20%5Btrue%5D%29'), +messageSends: ["assert:", "ensure:", "new"], +referencedClasses: ["Error"] }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testIncludesSubString'), +unescape('_testNumArgs'), smalltalk.method({ -selector: unescape('testIncludesSubString'), +selector: unescape('testNumArgs'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send("amber", "_includesSubString_", ["ber"])]); -smalltalk.send(self, "_deny_", [smalltalk.send("amber", "_includesSubString_", ["zork"])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(){return nil;}), "_numArgs", []), (0)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a, b){return nil;}), "_numArgs", []), (2)]); return self;}, args: [], -source: unescape('testIncludesSubString%0A%09self%20assert%3A%20%28%27amber%27%20includesSubString%3A%20%27ber%27%29.%0A%09self%20deny%3A%20%28%27amber%27%20includesSubString%3A%20%27zork%27%29.'), -messageSends: ["assert:", "includesSubString:", "deny:"], +source: unescape('testNumArgs%0A%09self%20assert%3A%20%5B%5D%20numArgs%20equals%3A%200.%0A%09self%20assert%3A%20%5B%3Aa%20%3Ab%20%7C%20%5D%20numArgs%20equals%3A%202'), +messageSends: ["assert:equals:", "numArgs"], referencedClasses: [] }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testEquality'), +unescape('_testOnDo'), smalltalk.method({ -selector: unescape('testEquality'), +selector: unescape('testOnDo'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send("hello", "__eq", ["hello"])]); -smalltalk.send(self, "_deny_", [smalltalk.send("hello", "__eq", ["world"])]); -smalltalk.send(self, "_assert_", [smalltalk.send("hello", "__eq", [smalltalk.send("hello", "_yourself", [])])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_yourself", []), "__eq", ["hello"])]); -smalltalk.send(self, "_deny_", [smalltalk.send("", "__eq", [(0)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((function(){return smalltalk.send(smalltalk.send((smalltalk.Error || Error), "_new", []), "_signal", []);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return true;})])]); return self;}, args: [], -source: unescape('testEquality%0A%09self%20assert%3A%20%27hello%27%20%3D%20%27hello%27.%0A%09self%20deny%3A%20%27hello%27%20%3D%20%27world%27.%0A%0A%09self%20assert%3A%20%27hello%27%20%20%3D%20%27hello%27%20yourself.%0A%09self%20assert%3A%20%27hello%27%20yourself%20%3D%20%27hello%27.%0A%0A%09%22test%20JS%20falsy%20value%22%0A%09self%20deny%3A%20%27%27%20%3D%200'), -messageSends: ["assert:", unescape("%3D"), "deny:", "yourself"], -referencedClasses: [] +source: unescape('testOnDo%0A%09self%20assert%3A%20%28%5BError%20new%20signal%5D%20on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%20true%5D%29'), +messageSends: ["assert:", "on:do:", "signal", "new"], +referencedClasses: ["Error"] }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testCopyWithoutAll'), +unescape('_testValue'), smalltalk.method({ -selector: unescape('testCopyWithoutAll'), +selector: unescape('testValue'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", ["hello world", smalltalk.send(unescape("*hello*%20*world*"), "_copyWithoutAll_", [unescape("*")])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(){return (1) + (1);}), "_value", []), (2)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(x){return ((($receiver = x).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]));}), "_value_", [(2)]), (3)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(x, y){return ((($receiver = x).klass === smalltalk.Number) ? $receiver *y : smalltalk.send($receiver, "__star", [y]));}), "_value_value_", [(2), (4)]), (8)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a, b, c){return (1);}), "_value", []), (1)]); return self;}, args: [], -source: unescape('testCopyWithoutAll%0A%09self%20%0A%09%09assert%3A%20%27hello%20world%27%20%0A%09%09equals%3A%20%28%27*hello*%20*world*%27%20copyWithoutAll%3A%20%27*%27%29'), -messageSends: ["assert:equals:", "copyWithoutAll:"], +source: unescape('testValue%0A%09self%20assert%3A%20%28%5B1+1%5D%20value%29%20equals%3A%202.%0A%09self%20assert%3A%20%28%5B%3Ax%20%7C%20x%20+1%5D%20value%3A%202%29%20equals%3A%203.%0A%09self%20assert%3A%20%28%5B%3Ax%20%3Ay%20%7C%20x*y%5D%20value%3A%202%20value%3A%204%29%20equals%3A%208.%20%0A%0A%09%22Arguments%20are%20optional%20in%20Amber.%20This%20isn%27t%20ANSI%20compliant.%22%0A%0A%09self%20assert%3A%20%28%5B%3Aa%20%3Ab%20%3Ac%20%7C%201%5D%20value%29%20equals%3A%201'), +messageSends: ["assert:equals:", "value", unescape("+"), "value:", "value:value:", unescape("*")], referencedClasses: [] }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testAt'), +unescape('_testValueWithPossibleArguments'), smalltalk.method({ -selector: unescape('testAt'), +selector: unescape('testValueWithPossibleArguments'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_at_", [(1)]), "__eq", ["h"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_at_", [(5)]), "__eq", ["o"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_at_ifAbsent_", [(6), (function(){return nil;})]), "__eq", [nil])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(){return (1);}), "_valueWithPossibleArguments_", [[(3), (4)]]), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a){return ((($receiver = a).klass === smalltalk.Number) ? $receiver +(4) : smalltalk.send($receiver, "__plus", [(4)]));}), "_valueWithPossibleArguments_", [[(3), (4)]]), (7)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a, b){return ((($receiver = a).klass === smalltalk.Number) ? $receiver +b : smalltalk.send($receiver, "__plus", [b]));}), "_valueWithPossibleArguments_", [[(3), (4), (5)]]), (7)]); return self;}, args: [], -source: unescape('testAt%0A%09self%20assert%3A%20%28%27hello%27%20at%3A%201%29%20%3D%20%27h%27.%0A%09self%20assert%3A%20%28%27hello%27%20at%3A%205%29%20%3D%20%27o%27.%0A%09self%20assert%3A%20%28%27hello%27%20at%3A%206%20ifAbsent%3A%20%5Bnil%5D%29%20%3D%20nil'), -messageSends: ["assert:", unescape("%3D"), "at:", "at:ifAbsent:"], +source: unescape('testValueWithPossibleArguments%0A%09self%20assert%3A%20%28%5B1%5D%20valueWithPossibleArguments%3A%20%23%283%204%29%29%20equals%3A%201.%0A%09self%20assert%3A%20%28%5B%3Aa%20%7C%20a%20+%204%5D%20valueWithPossibleArguments%3A%20%23%283%204%29%29%20equals%3A%207.%0A%09self%20assert%3A%20%28%5B%3Aa%20%3Ab%20%7C%20a%20+%20b%5D%20valueWithPossibleArguments%3A%20%23%283%204%205%29%29%20equals%3A%207.'), +messageSends: ["assert:equals:", "valueWithPossibleArguments:", unescape("+")], referencedClasses: [] }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testAtPut'), +unescape('_testWhileFalse'), smalltalk.method({ -selector: unescape('testAtPut'), +selector: unescape('testWhileFalse'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_at_put_", [(1), "a"]);}), (smalltalk.Error || Error)]); +var i=nil; +(i=(0)); +(function(){while(!(function(){return ((($receiver = i).klass === smalltalk.Number) ? $receiver >(5) : smalltalk.send($receiver, "__gt", [(5)]));})()) {(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})(); +smalltalk.send(self, "_assert_equals_", [i, (6)]); +(i=(0)); +(function(){while(!(function(){(i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));return ((($receiver = i).klass === smalltalk.Number) ? $receiver >(5) : smalltalk.send($receiver, "__gt", [(5)]));})()) {}})(); +smalltalk.send(self, "_assert_equals_", [i, (6)]); return self;}, args: [], -source: unescape('testAtPut%0A%09%22String%20instances%20are%20read-only%22%0A%09self%20should%3A%20%5B%27hello%27%20at%3A%201%20put%3A%20%27a%27%5D%20raise%3A%20Error'), -messageSends: ["should:raise:", "at:put:"], -referencedClasses: ["Error"] +source: unescape('testWhileFalse%0A%09%7C%20i%20%7C%0A%09i%20%3A%3D%200.%0A%09%5Bi%20%3E%205%5D%20whileFalse%3A%20%5Bi%20%3A%3D%20i%20+%201%5D.%0A%09self%20assert%3A%20i%20equals%3A%206.%0A%0A%09i%20%3A%3D%200.%0A%09%5Bi%20%3A%3D%20i%20+%201.%20i%20%3E%205%5D%20whileFalse.%0A%09self%20assert%3A%20i%20equals%3A%206'), +messageSends: ["whileFalse:", unescape("%3E"), unescape("+"), "assert:equals:", "whileFalse"], +referencedClasses: [] }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); smalltalk.addMethod( -unescape('_testSize'), +unescape('_testWhileTrue'), smalltalk.method({ -selector: unescape('testSize'), +selector: unescape('testWhileTrue'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send("smalltalk", "_size", []), (9)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send("", "_size", []), (0)]); +var i=nil; +(i=(0)); +(function(){while((function(){return ((($receiver = i).klass === smalltalk.Number) ? $receiver <(5) : smalltalk.send($receiver, "__lt", [(5)]));})()) {(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})(); +smalltalk.send(self, "_assert_equals_", [i, (5)]); +(i=(0)); +(function(){while((function(){(i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));return ((($receiver = i).klass === smalltalk.Number) ? $receiver <(5) : smalltalk.send($receiver, "__lt", [(5)]));})()) {}})(); +smalltalk.send(self, "_assert_equals_", [i, (5)]); return self;}, args: [], -source: unescape('testSize%0A%09self%20assert%3A%20%27smalltalk%27%20size%20equals%3A%209.%0A%09self%20assert%3A%20%27%27%20size%20equals%3A%200'), -messageSends: ["assert:equals:", "size"], +source: unescape('testWhileTrue%0A%09%7C%20i%20%7C%0A%09i%20%3A%3D%200.%0A%09%5Bi%20%3C%205%5D%20whileTrue%3A%20%5Bi%20%3A%3D%20i%20+%201%5D.%0A%09self%20assert%3A%20i%20equals%3A%205.%0A%0A%09i%20%3A%3D%200.%0A%09%5Bi%20%3A%3D%20i%20+%201.%20i%20%3C%205%5D%20whileTrue.%0A%09self%20assert%3A%20i%20equals%3A%205'), +messageSends: ["whileTrue:", unescape("%3C"), unescape("+"), "assert:equals:", "whileTrue"], referencedClasses: [] }), -smalltalk.StringTest); +smalltalk.BlockClosureTest); + + +smalltalk.addClass('BooleanTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testAddRemove'), +unescape('_testEquality'), smalltalk.method({ -selector: unescape('testAddRemove'), +selector: unescape('testEquality'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_add_", ["a"]);}), (smalltalk.Error || Error)]); -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_remove_", ["h"]);}), (smalltalk.Error || Error)]); +smalltalk.send(self, "_deny_", [smalltalk.send((0), "__eq", [false])]); +smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [(0)])]); +smalltalk.send(self, "_deny_", [smalltalk.send("", "__eq", [false])]); +smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [""])]); +smalltalk.send(self, "_assert_", [smalltalk.send(true, "__eq", [true])]); +smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [true])]); +smalltalk.send(self, "_deny_", [smalltalk.send(true, "__eq", [false])]); +smalltalk.send(self, "_assert_", [smalltalk.send(false, "__eq", [false])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(true, "_yourself", []), "__eq", [true])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(true, "_yourself", []), "__eq", [smalltalk.send(true, "_yourself", [])])]); return self;}, args: [], -source: unescape('testAddRemove%0A%09self%20should%3A%20%5B%27hello%27%20add%3A%20%27a%27%5D%20raise%3A%20Error.%0A%09self%20should%3A%20%5B%27hello%27%20remove%3A%20%27h%27%5D%20raise%3A%20Error'), -messageSends: ["should:raise:", "add:", "remove:"], -referencedClasses: ["Error"] +source: unescape('testEquality%0A%09%22We%27re%20on%20top%20of%20JS...just%20be%20sure%20to%20check%20the%20basics%21%22%0A%0A%09self%20deny%3A%200%20%3D%20false.%20%0A%09self%20deny%3A%20false%20%3D%200.%0A%09self%20deny%3A%20%27%27%20%3D%20false.%0A%09self%20deny%3A%20false%20%3D%20%27%27.%0A%0A%09self%20assert%3A%20true%20%3D%20true.%0A%09self%20deny%3A%20false%20%3D%20true.%0A%09self%20deny%3A%20true%20%3D%20false.%0A%09self%20assert%3A%20false%20%3D%20false.%0A%0A%09%22JS%20may%20do%20some%20type%20coercing%20after%20sending%20a%20message%22%0A%09self%20assert%3A%20true%20yourself%20%3D%20true.%0A%09self%20assert%3A%20true%20yourself%20%3D%20true%20yourself'), +messageSends: ["deny:", unescape("%3D"), "assert:", "yourself"], +referencedClasses: [] }), -smalltalk.StringTest); +smalltalk.BooleanTest); smalltalk.addMethod( -unescape('_testAsArray'), +unescape('_testIfTrueIfFalse'), smalltalk.method({ -selector: unescape('testAsArray'), +selector: unescape('testIfTrueIfFalse'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_asArray", []), "__eq", [["h", "e", "l", "l", "o"]])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return "alternative block";})])), "__eq", ["alternative block"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return "alternative block";})])), "__eq", [nil])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return "alternative block";})])), "__eq", [nil])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return "alternative block";})])), "__eq", ["alternative block"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block2"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block2"])]); return self;}, args: [], -source: unescape('testAsArray%0A%09self%20assert%3A%20%27hello%27%20asArray%20%3D%20%23%28%27h%27%20%27e%27%20%27l%27%20%27l%27%20%27o%27%29.'), -messageSends: ["assert:", unescape("%3D"), "asArray"], +source: unescape('testIfTrueIfFalse%0A%20%0A%09self%20assert%3A%20%28true%20ifTrue%3A%20%5B%27alternative%20block%27%5D%29%20%3D%20%27alternative%20block%27.%0A%09self%20assert%3A%20%28true%20ifFalse%3A%20%5B%27alternative%20block%27%5D%29%20%3D%20nil.%0A%0A%09self%20assert%3A%20%28false%20ifTrue%3A%20%5B%27alternative%20block%27%5D%29%20%3D%20nil.%0A%09self%20assert%3A%20%28false%20ifFalse%3A%20%5B%27alternative%20block%27%5D%29%20%3D%20%27alternative%20block%27.%0A%0A%09self%20assert%3A%20%28false%20ifTrue%3A%20%5B%27alternative%20block%27%5D%20ifFalse%3A%20%5B%27alternative%20block2%27%5D%29%20%3D%20%27alternative%20block2%27.%0A%09self%20assert%3A%20%28false%20ifFalse%3A%20%5B%27alternative%20block%27%5D%20ifTrue%3A%20%5B%27alternative%20block2%27%5D%29%20%3D%20%27alternative%20block%27.%0A%0A%09self%20assert%3A%20%28true%20ifTrue%3A%20%5B%27alternative%20block%27%5D%20ifFalse%3A%20%5B%27alternative%20block2%27%5D%29%20%3D%20%27alternative%20block%27.%0A%09self%20assert%3A%20%28true%20ifFalse%3A%20%5B%27alternative%20block%27%5D%20ifTrue%3A%20%5B%27alternative%20block2%27%5D%29%20%3D%20%27alternative%20block2%27.'), +messageSends: ["assert:", unescape("%3D"), "ifTrue:", "ifFalse:", "ifTrue:ifFalse:", "ifFalse:ifTrue:"], referencedClasses: [] }), -smalltalk.StringTest); - - +smalltalk.BooleanTest); -smalltalk.addClass('DictionaryTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testPrintString'), +unescape('_testLogic'), smalltalk.method({ -selector: unescape('testPrintString'), +selector: unescape('testLogic'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("a%20Dictionary%28%27firstname%27%20-%3E%20%27James%27%20%2C%20%27lastname%27%20-%3E%20%27Bond%27%29"), (function($rec){smalltalk.send($rec, "_at_put_", ["firstname", "James"]);smalltalk.send($rec, "_at_put_", ["lastname", "Bond"]);return smalltalk.send($rec, "_printString", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))]); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_&", [true])]);smalltalk.send($rec, "_deny_", [smalltalk.send(true, "_&", [false])]);smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_&", [true])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_&", [false])]);})(self); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_|", [true])]);smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_|", [false])]);smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_|", [true])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_|", [false])]);})(self); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_&", [(1) > (0)])]);smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_&", [false])]);return smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_&", [(1) > (2)])]);})(self); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_|", [(1) > (0)])]);smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_|", [false])]);return smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_|", [(1) > (2)])]);})(self); return self;}, args: [], -source: unescape('testPrintString%0A%09self%0A%09%09assert%3A%20%27a%20Dictionary%28%27%27firstname%27%27%20-%3E%20%27%27James%27%27%20%2C%20%27%27lastname%27%27%20-%3E%20%27%27Bond%27%27%29%27%20%0A%09%09equals%3A%20%28Dictionary%20new%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09at%3A%27firstname%27%20put%3A%20%27James%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09at%3A%27lastname%27%20put%3A%20%27Bond%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09printString%29'), -messageSends: ["assert:equals:", "at:put:", "printString", "new"], -referencedClasses: ["Dictionary"] +source: unescape('testLogic%0A%20%0A%09%22Trivial%20logic%20table%22%0A%09self%20assert%3A%20%28true%20%26%20true%29%3B%20deny%3A%20%28true%20%26%20false%29%3B%20deny%3A%20%28false%20%26%20true%29%3B%20deny%3A%20%28false%20%26%20false%29.%0A%09self%20assert%3A%20%28true%20%7C%20true%29%3B%20assert%3A%20%28true%20%7C%20false%29%3B%20assert%3A%20%28false%20%7C%20true%29%3B%20deny%3A%20%28false%20%7C%20false%29.%0A%20%20%20%20%20%20%20%20%22Checking%20that%20expressions%20work%20fine%20too%22%0A%09self%20assert%3A%20%28true%20%26%20%281%20%3E%200%29%29%3B%20deny%3A%20%28%281%20%3E%200%29%20%26%20false%29%3B%20deny%3A%20%28%281%20%3E%200%29%20%26%20%281%20%3E%202%29%29.%0A%20%20%20%20%20%20%20%20self%20assert%3A%20%28false%20%7C%20%281%20%3E%200%29%29%3B%20assert%3A%20%28%281%20%3E%200%29%20%7C%20false%29%3B%20assert%3A%20%28%281%20%3E%200%29%20%7C%20%281%20%3E%202%29%29'), +messageSends: ["assert:", unescape("%26"), "deny:", unescape("%7C"), unescape("%3E")], +referencedClasses: [] }), -smalltalk.DictionaryTest); +smalltalk.BooleanTest); smalltalk.addMethod( -unescape('_testEquality'), +unescape('_testLogicKeywords'), smalltalk.method({ -selector: unescape('testEquality'), +selector: unescape('testLogicKeywords'), category: 'tests', fn: function () { var self=this; -var d1=nil; -var d2=nil; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []), "__eq", [smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])])]); -(d1=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (2)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); -(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (2)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); -smalltalk.send(self, "_assert_", [smalltalk.send(d1, "__eq", [d2])]); -(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (3)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); -smalltalk.send(self, "_deny_", [smalltalk.send(d1, "__eq", [d2])]); -(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(2), (2)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); -smalltalk.send(self, "_deny_", [smalltalk.send(d1, "__eq", [d2])]); -(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (2)]);smalltalk.send($rec, "_at_put_", [(3), (4)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); -smalltalk.send(self, "_deny_", [smalltalk.send(d1, "__eq", [d2])]); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_and_", [(function(){return true;})])]);smalltalk.send($rec, "_deny_", [smalltalk.send(true, "_and_", [(function(){return false;})])]);smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_and_", [(function(){return true;})])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_and_", [(function(){return false;})])]);})(self); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_or_", [(function(){return true;})])]);smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_or_", [(function(){return false;})])]);smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_or_", [(function(){return true;})])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_or_", [(function(){return false;})])]);})(self); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_and_", [(function(){return (1) > (0);})])]);smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_and_", [(function(){return false;})])]);return smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_and_", [(function(){return (1) > (2);})])]);})(self); +(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_or_", [(function(){return (1) > (0);})])]);smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_or_", [(function(){return false;})])]);return smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_or_", [(function(){return (1) > (2);})])]);})(self); return self;}, args: [], -source: unescape('testEquality%0A%09%7C%20d1%20d2%20%7C%0A%0A%09self%20assert%3A%20Dictionary%20new%20%3D%20Dictionary%20new.%0A%09%09%0A%09d1%20%3A%3D%20Dictionary%20new%20at%3A%201%20put%3A%202%3B%20yourself.%0A%09d2%20%3A%3D%20Dictionary%20new%20at%3A%201%20put%3A%202%3B%20yourself.%0A%09self%20assert%3A%20d1%20%3D%20d2.%0A%0A%09d2%20%3A%3D%20Dictionary%20new%20at%3A%201%20put%3A%203%3B%20yourself.%0A%09self%20deny%3A%20d1%20%3D%20d2.%0A%0A%09d2%20%3A%3D%20Dictionary%20new%20at%3A%202%20put%3A%202%3B%20yourself.%0A%09self%20deny%3A%20d1%20%3D%20d2.%0A%0A%09d2%20%3A%3D%20Dictionary%20new%20at%3A%201%20put%3A%202%3B%20at%3A%203%20put%3A%204%3B%20yourself.%0A%09self%20deny%3A%20d1%20%3D%20d2.'), -messageSends: ["assert:", unescape("%3D"), "new", "at:put:", "yourself", "deny:"], -referencedClasses: ["Dictionary"] +source: unescape('testLogicKeywords%0A%20%0A%09%22Trivial%20logic%20table%22%0A%09self%20%0A%09%09assert%3A%20%28true%20and%3A%20%5B%20true%5D%29%3B%20%0A%09%09deny%3A%20%28true%20and%3A%20%5B%20false%20%5D%29%3B%20%0A%09%09deny%3A%20%28false%20and%3A%20%5B%20true%20%5D%29%3B%20%0A%09%09deny%3A%20%28false%20and%3A%20%5B%20false%20%5D%29.%0A%09self%20%0A%09%09assert%3A%20%28true%20or%3A%20%5B%20true%20%5D%29%3B%20%0A%09%09assert%3A%20%28true%20or%3A%20%5B%20false%20%5D%29%3B%20%0A%09%09assert%3A%20%28false%20or%3A%20%5B%20true%20%5D%29%3B%20%0A%09%09deny%3A%20%28false%20or%3A%20%5B%20false%20%5D%29.%0A%20%20%20%20%20%20%20%20%0A%09%22Checking%20that%20expressions%20work%20fine%20too%22%0A%09self%20%0A%09%09assert%3A%20%28true%20and%3A%20%5B%201%20%3E%200%20%5D%29%3B%20%0A%09%09deny%3A%20%28%281%20%3E%200%29%20and%3A%20%5B%20false%20%5D%29%3B%20%0A%09%09deny%3A%20%28%281%20%3E%200%29%20and%3A%20%5B%201%20%3E%202%20%5D%29.%0A%20%20%20%20%20%20%20%20self%20%0A%09%09assert%3A%20%28false%20or%3A%20%5B%201%20%3E%200%20%5D%29%3B%20%0A%09%09assert%3A%20%28%281%20%3E%200%29%20or%3A%20%5B%20false%20%5D%29%3B%20%0A%09%09assert%3A%20%28%281%20%3E%200%29%20or%3A%20%5B%201%20%3E%202%20%5D%29'), +messageSends: ["assert:", "and:", "deny:", "or:", unescape("%3E")], +referencedClasses: [] }), -smalltalk.DictionaryTest); +smalltalk.BooleanTest); + + +smalltalk.addClass('ClassBuilderTest', smalltalk.TestCase, ['builder', 'theClass'], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testDynamicDictionaries'), +unescape('_setUp'), smalltalk.method({ -selector: unescape('testDynamicDictionaries'), -category: 'tests', +selector: unescape('setUp'), +category: 'running', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.HashedCollection._fromPairs_([smalltalk.send("hello", "__minus_gt", [(1)])]), "_asDictionary", []), "__eq", [smalltalk.send((smalltalk.Dictionary || Dictionary), "_with_", [smalltalk.send("hello", "__minus_gt", [(1)])])])]); +(self['@builder']=smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", [])); return self;}, args: [], -source: unescape('testDynamicDictionaries%0A%09self%20assert%3A%20%23%7B%27hello%27%20-%3E%201%7D%20asDictionary%20%3D%20%28Dictionary%20with%3A%20%27hello%27%20-%3E%201%29'), -messageSends: ["assert:", unescape("%3D"), "asDictionary", unescape("-%3E"), "with:"], -referencedClasses: ["Dictionary"] +source: unescape('setUp%0A%09builder%20%3A%3D%20ClassBuilder%20new'), +messageSends: ["new"], +referencedClasses: ["ClassBuilder"] }), -smalltalk.DictionaryTest); +smalltalk.ClassBuilderTest); smalltalk.addMethod( -unescape('_testAccessing'), +unescape('_tearDown'), smalltalk.method({ -selector: unescape('testAccessing'), -category: 'tests', +selector: unescape('tearDown'), +category: 'running', fn: function () { var self=this; -var d=nil; -(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); -smalltalk.send(d, "_at_put_", ["hello", "world"]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_at_", ["hello"]), "__eq", ["world"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_at_ifAbsent_", ["hello", (function(){return nil;})]), "__eq", ["world"])]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send(d, "_at_ifAbsent_", ["foo", (function(){return nil;})]), "__eq", ["world"])]); -smalltalk.send(d, "_at_put_", [(1), (2)]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_at_", [(1)]), "__eq", [(2)])]); -smalltalk.send(d, "_at_put_", [smalltalk.send((1), "__at", [(3)]), (3)]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_at_", [smalltalk.send((1), "__at", [(3)])]), "__eq", [(3)])]); +(($receiver = self['@theClass']) != nil && $receiver != undefined) ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removeClass_", [self['@theClass']]);return (self['@theClass']=nil);})() : nil; return self;}, args: [], -source: unescape('testAccessing%0A%09%7C%20d%20%7C%0A%0A%09d%20%3A%3D%20Dictionary%20new.%0A%0A%09d%20at%3A%20%27hello%27%20put%3A%20%27world%27.%0A%09self%20assert%3A%20%28d%20at%3A%20%27hello%27%29%20%3D%20%27world%27.%0A%09self%20assert%3A%20%28d%20at%3A%20%27hello%27%20ifAbsent%3A%20%5Bnil%5D%29%20%3D%20%27world%27.%0A%09self%20deny%3A%20%28d%20at%3A%20%27foo%27%20ifAbsent%3A%20%5Bnil%5D%29%20%3D%20%27world%27.%0A%0A%09d%20at%3A%201%20put%3A%202.%0A%09self%20assert%3A%20%28d%20at%3A%201%29%20%3D%202.%0A%0A%09d%20at%3A%201@3%20put%3A%203.%0A%09self%20assert%3A%20%28d%20at%3A%201@3%29%20%3D%203'), -messageSends: ["new", "at:put:", "assert:", unescape("%3D"), "at:", "at:ifAbsent:", "deny:", unescape("@")], -referencedClasses: ["Dictionary"] +source: unescape('tearDown%0A%09theClass%20ifNotNil%3A%20%5BSmalltalk%20current%20removeClass%3A%20theClass.%20theClass%20%3A%3D%20nil%5D'), +messageSends: ["ifNotNil:", "removeClass:", "current"], +referencedClasses: ["Smalltalk"] }), -smalltalk.DictionaryTest); +smalltalk.ClassBuilderTest); smalltalk.addMethod( -unescape('_testSize'), +unescape('_testClassCopy'), smalltalk.method({ -selector: unescape('testSize'), -category: 'tests', +selector: unescape('testClassCopy'), +category: 'running', fn: function () { var self=this; -var d=nil; -(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_size", []), "__eq", [(0)])]); -smalltalk.send(d, "_at_put_", [(1), (2)]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_size", []), "__eq", [(1)])]); -smalltalk.send(d, "_at_put_", [(2), (3)]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_size", []), "__eq", [(2)])]); +(self['@theClass']=smalltalk.send(self['@builder'], "_copyClass_named_", [(smalltalk.ObjectMock || ObjectMock), "ObjectMock2"])); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(self['@theClass'], "_superclass", []), "__eq_eq", [smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_superclass", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(self['@theClass'], "_instanceVariableNames", []), "__eq_eq", [smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_instanceVariableNames", [])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(self['@theClass'], "_name", []), "ObjectMock2"]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(self['@theClass'], "_package", []), "__eq_eq", [smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_package", [])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self['@theClass'], "_methodDictionary", []), "_keys", []), smalltalk.send(smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_methodDictionary", []), "_keys", [])]); return self;}, args: [], -source: unescape('testSize%0A%09%7C%20d%20%7C%0A%0A%09d%20%3A%3D%20Dictionary%20new.%0A%09self%20assert%3A%20d%20size%20%3D%200.%0A%0A%09d%20at%3A%201%20put%3A%202.%0A%09self%20assert%3A%20d%20size%20%3D%201.%0A%0A%09d%20at%3A%202%20put%3A%203.%0A%09self%20assert%3A%20d%20size%20%3D%202.'), -messageSends: ["new", "assert:", unescape("%3D"), "size", "at:put:"], -referencedClasses: ["Dictionary"] +source: unescape('testClassCopy%0A%09theClass%20%3A%3D%20builder%20copyClass%3A%20ObjectMock%20named%3A%20%27ObjectMock2%27.%0A%09self%20assert%3A%20theClass%20superclass%20%3D%3D%20ObjectMock%20superclass.%0A%09self%20assert%3A%20theClass%20instanceVariableNames%20%3D%3D%20ObjectMock%20instanceVariableNames.%0A%09self%20assert%3A%20theClass%20name%20equals%3A%20%27ObjectMock2%27.%0A%09self%20assert%3A%20theClass%20package%20%3D%3D%20ObjectMock%20package.%0A%09self%20assert%3A%20theClass%20methodDictionary%20keys%20equals%3A%20ObjectMock%20methodDictionary%20keys'), +messageSends: ["copyClass:named:", "assert:", unescape("%3D%3D"), "superclass", "instanceVariableNames", "assert:equals:", "name", "package", "keys", "methodDictionary"], +referencedClasses: ["ObjectMock"] }), -smalltalk.DictionaryTest); +smalltalk.ClassBuilderTest); smalltalk.addMethod( -unescape('_testValues'), +unescape('_testInstanceVariableNames'), smalltalk.method({ -selector: unescape('testValues'), -category: 'tests', +selector: unescape('testInstanceVariableNames'), +category: 'running', fn: function () { var self=this; -var d=nil; -(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); -smalltalk.send(d, "_at_put_", [(1), (2)]); -smalltalk.send(d, "_at_put_", [(2), (3)]); -smalltalk.send(d, "_at_put_", [(3), (4)]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_values", []), "__eq", [[(2), (3), (4)]])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(self['@builder'], "_instanceVariableNamesFor_", [" hello world "]), ["hello", "world"]]); return self;}, args: [], -source: unescape('testValues%0A%09%7C%20d%20%7C%0A%0A%09d%20%3A%3D%20Dictionary%20new.%0A%09d%20at%3A%201%20put%3A%202.%0A%09d%20at%3A%202%20put%3A%203.%0A%09d%20at%3A%203%20put%3A%204.%0A%0A%09self%20assert%3A%20d%20values%20%3D%20%23%282%203%204%29'), -messageSends: ["new", "at:put:", "assert:", unescape("%3D"), "values"], -referencedClasses: ["Dictionary"] +source: unescape('testInstanceVariableNames%0A%09self%20assert%3A%20%28builder%20instanceVariableNamesFor%3A%20%27%20%20hello%20%20%20world%20%20%20%27%29%20equals%3A%20%23%28%27hello%27%20%27world%27%29'), +messageSends: ["assert:equals:", "instanceVariableNamesFor:"], +referencedClasses: [] }), -smalltalk.DictionaryTest); +smalltalk.ClassBuilderTest); + + +smalltalk.addClass('DictionaryTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testKeys'), +unescape('_testAccessing'), smalltalk.method({ -selector: unescape('testKeys'), +selector: unescape('testAccessing'), category: 'tests', fn: function () { var self=this; var d=nil; (d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); +smalltalk.send(d, "_at_put_", ["hello", "world"]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_at_", ["hello"]), "__eq", ["world"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_at_ifAbsent_", ["hello", (function(){return nil;})]), "__eq", ["world"])]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send(d, "_at_ifAbsent_", ["foo", (function(){return nil;})]), "__eq", ["world"])]); smalltalk.send(d, "_at_put_", [(1), (2)]); -smalltalk.send(d, "_at_put_", [(2), (3)]); -smalltalk.send(d, "_at_put_", [(3), (4)]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_keys", []), "__eq", [[(1), (2), (3)]])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_at_", [(1)]), "__eq", [(2)])]); +smalltalk.send(d, "_at_put_", [smalltalk.send((1), "__at", [(3)]), (3)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_at_", [smalltalk.send((1), "__at", [(3)])]), "__eq", [(3)])]); return self;}, args: [], -source: unescape('testKeys%0A%09%7C%20d%20%7C%0A%0A%09d%20%3A%3D%20Dictionary%20new.%0A%09d%20at%3A%201%20put%3A%202.%0A%09d%20at%3A%202%20put%3A%203.%0A%09d%20at%3A%203%20put%3A%204.%0A%0A%09self%20assert%3A%20d%20keys%20%3D%20%23%281%202%203%29'), -messageSends: ["new", "at:put:", "assert:", unescape("%3D"), "keys"], +source: unescape('testAccessing%0A%09%7C%20d%20%7C%0A%0A%09d%20%3A%3D%20Dictionary%20new.%0A%0A%09d%20at%3A%20%27hello%27%20put%3A%20%27world%27.%0A%09self%20assert%3A%20%28d%20at%3A%20%27hello%27%29%20%3D%20%27world%27.%0A%09self%20assert%3A%20%28d%20at%3A%20%27hello%27%20ifAbsent%3A%20%5Bnil%5D%29%20%3D%20%27world%27.%0A%09self%20deny%3A%20%28d%20at%3A%20%27foo%27%20ifAbsent%3A%20%5Bnil%5D%29%20%3D%20%27world%27.%0A%0A%09d%20at%3A%201%20put%3A%202.%0A%09self%20assert%3A%20%28d%20at%3A%201%29%20%3D%202.%0A%0A%09d%20at%3A%201@3%20put%3A%203.%0A%09self%20assert%3A%20%28d%20at%3A%201@3%29%20%3D%203'), +messageSends: ["new", "at:put:", "assert:", unescape("%3D"), "at:", "at:ifAbsent:", "deny:", unescape("@")], referencedClasses: ["Dictionary"] }), smalltalk.DictionaryTest); - - -smalltalk.addClass('BooleanTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testLogic'), -smalltalk.method({ -selector: unescape('testLogic'), -category: 'tests', -fn: function () { -var self=this; -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_&", [true])]);smalltalk.send($rec, "_deny_", [smalltalk.send(true, "_&", [false])]);smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_&", [true])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_&", [false])]);})(self); -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_|", [true])]);smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_|", [false])]);smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_|", [true])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_|", [false])]);})(self); -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_&", [(1) > (0)])]);smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_&", [false])]);return smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_&", [(1) > (2)])]);})(self); -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_|", [(1) > (0)])]);smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_|", [false])]);return smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_|", [(1) > (2)])]);})(self); -return self;}, -args: [], -source: unescape('testLogic%0A%20%0A%09%22Trivial%20logic%20table%22%0A%09self%20assert%3A%20%28true%20%26%20true%29%3B%20deny%3A%20%28true%20%26%20false%29%3B%20deny%3A%20%28false%20%26%20true%29%3B%20deny%3A%20%28false%20%26%20false%29.%0A%09self%20assert%3A%20%28true%20%7C%20true%29%3B%20assert%3A%20%28true%20%7C%20false%29%3B%20assert%3A%20%28false%20%7C%20true%29%3B%20deny%3A%20%28false%20%7C%20false%29.%0A%20%20%20%20%20%20%20%20%22Checking%20that%20expressions%20work%20fine%20too%22%0A%09self%20assert%3A%20%28true%20%26%20%281%20%3E%200%29%29%3B%20deny%3A%20%28%281%20%3E%200%29%20%26%20false%29%3B%20deny%3A%20%28%281%20%3E%200%29%20%26%20%281%20%3E%202%29%29.%0A%20%20%20%20%20%20%20%20self%20assert%3A%20%28false%20%7C%20%281%20%3E%200%29%29%3B%20assert%3A%20%28%281%20%3E%200%29%20%7C%20false%29%3B%20assert%3A%20%28%281%20%3E%200%29%20%7C%20%281%20%3E%202%29%29'), -messageSends: ["assert:", unescape("%26"), "deny:", unescape("%7C"), unescape("%3E")], -referencedClasses: [] -}), -smalltalk.BooleanTest); - -smalltalk.addMethod( -unescape('_testEquality'), -smalltalk.method({ -selector: unescape('testEquality'), -category: 'tests', -fn: function () { -var self=this; -smalltalk.send(self, "_deny_", [smalltalk.send((0), "__eq", [false])]); -smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [(0)])]); -smalltalk.send(self, "_deny_", [smalltalk.send("", "__eq", [false])]); -smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [""])]); -smalltalk.send(self, "_assert_", [smalltalk.send(true, "__eq", [true])]); -smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [true])]); -smalltalk.send(self, "_deny_", [smalltalk.send(true, "__eq", [false])]); -smalltalk.send(self, "_assert_", [smalltalk.send(false, "__eq", [false])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(true, "_yourself", []), "__eq", [true])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(true, "_yourself", []), "__eq", [smalltalk.send(true, "_yourself", [])])]); -return self;}, -args: [], -source: unescape('testEquality%0A%09%22We%27re%20on%20top%20of%20JS...just%20be%20sure%20to%20check%20the%20basics%21%22%0A%0A%09self%20deny%3A%200%20%3D%20false.%20%0A%09self%20deny%3A%20false%20%3D%200.%0A%09self%20deny%3A%20%27%27%20%3D%20false.%0A%09self%20deny%3A%20false%20%3D%20%27%27.%0A%0A%09self%20assert%3A%20true%20%3D%20true.%0A%09self%20deny%3A%20false%20%3D%20true.%0A%09self%20deny%3A%20true%20%3D%20false.%0A%09self%20assert%3A%20false%20%3D%20false.%0A%0A%09%22JS%20may%20do%20some%20type%20coercing%20after%20sending%20a%20message%22%0A%09self%20assert%3A%20true%20yourself%20%3D%20true.%0A%09self%20assert%3A%20true%20yourself%20%3D%20true%20yourself'), -messageSends: ["deny:", unescape("%3D"), "assert:", "yourself"], -referencedClasses: [] -}), -smalltalk.BooleanTest); - -smalltalk.addMethod( -unescape('_testLogicKeywords'), -smalltalk.method({ -selector: unescape('testLogicKeywords'), -category: 'tests', -fn: function () { -var self=this; -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_and_", [(function(){return true;})])]);smalltalk.send($rec, "_deny_", [smalltalk.send(true, "_and_", [(function(){return false;})])]);smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_and_", [(function(){return true;})])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_and_", [(function(){return false;})])]);})(self); -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_or_", [(function(){return true;})])]);smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_or_", [(function(){return false;})])]);smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_or_", [(function(){return true;})])]);return smalltalk.send($rec, "_deny_", [smalltalk.send(false, "_or_", [(function(){return false;})])]);})(self); -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(true, "_and_", [(function(){return (1) > (0);})])]);smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_and_", [(function(){return false;})])]);return smalltalk.send($rec, "_deny_", [smalltalk.send((1) > (0), "_and_", [(function(){return (1) > (2);})])]);})(self); -(function($rec){smalltalk.send($rec, "_assert_", [smalltalk.send(false, "_or_", [(function(){return (1) > (0);})])]);smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_or_", [(function(){return false;})])]);return smalltalk.send($rec, "_assert_", [smalltalk.send((1) > (0), "_or_", [(function(){return (1) > (2);})])]);})(self); -return self;}, -args: [], -source: unescape('testLogicKeywords%0A%20%0A%09%22Trivial%20logic%20table%22%0A%09self%20%0A%09%09assert%3A%20%28true%20and%3A%20%5B%20true%5D%29%3B%20%0A%09%09deny%3A%20%28true%20and%3A%20%5B%20false%20%5D%29%3B%20%0A%09%09deny%3A%20%28false%20and%3A%20%5B%20true%20%5D%29%3B%20%0A%09%09deny%3A%20%28false%20and%3A%20%5B%20false%20%5D%29.%0A%09self%20%0A%09%09assert%3A%20%28true%20or%3A%20%5B%20true%20%5D%29%3B%20%0A%09%09assert%3A%20%28true%20or%3A%20%5B%20false%20%5D%29%3B%20%0A%09%09assert%3A%20%28false%20or%3A%20%5B%20true%20%5D%29%3B%20%0A%09%09deny%3A%20%28false%20or%3A%20%5B%20false%20%5D%29.%0A%20%20%20%20%20%20%20%20%0A%09%22Checking%20that%20expressions%20work%20fine%20too%22%0A%09self%20%0A%09%09assert%3A%20%28true%20and%3A%20%5B%201%20%3E%200%20%5D%29%3B%20%0A%09%09deny%3A%20%28%281%20%3E%200%29%20and%3A%20%5B%20false%20%5D%29%3B%20%0A%09%09deny%3A%20%28%281%20%3E%200%29%20and%3A%20%5B%201%20%3E%202%20%5D%29.%0A%20%20%20%20%20%20%20%20self%20%0A%09%09assert%3A%20%28false%20or%3A%20%5B%201%20%3E%200%20%5D%29%3B%20%0A%09%09assert%3A%20%28%281%20%3E%200%29%20or%3A%20%5B%20false%20%5D%29%3B%20%0A%09%09assert%3A%20%28%281%20%3E%200%29%20or%3A%20%5B%201%20%3E%202%20%5D%29'), -messageSends: ["assert:", "and:", "deny:", "or:", unescape("%3E")], -referencedClasses: [] -}), -smalltalk.BooleanTest); - -smalltalk.addMethod( -unescape('_testIfTrueIfFalse'), -smalltalk.method({ -selector: unescape('testIfTrueIfFalse'), -category: 'tests', -fn: function () { -var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return "alternative block";})])), "__eq", ["alternative block"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return "alternative block";})])), "__eq", [nil])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return "alternative block";})])), "__eq", [nil])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return "alternative block";})])), "__eq", ["alternative block"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block2"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = false).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = true).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return "alternative block";})() : (function(){return "alternative block2";})()) : smalltalk.send($receiver, "_ifFalse_ifTrue_", [(function(){return "alternative block";}), (function(){return "alternative block2";})])), "__eq", ["alternative block2"])]); -return self;}, -args: [], -source: unescape('testIfTrueIfFalse%0A%20%0A%09self%20assert%3A%20%28true%20ifTrue%3A%20%5B%27alternative%20block%27%5D%29%20%3D%20%27alternative%20block%27.%0A%09self%20assert%3A%20%28true%20ifFalse%3A%20%5B%27alternative%20block%27%5D%29%20%3D%20nil.%0A%0A%09self%20assert%3A%20%28false%20ifTrue%3A%20%5B%27alternative%20block%27%5D%29%20%3D%20nil.%0A%09self%20assert%3A%20%28false%20ifFalse%3A%20%5B%27alternative%20block%27%5D%29%20%3D%20%27alternative%20block%27.%0A%0A%09self%20assert%3A%20%28false%20ifTrue%3A%20%5B%27alternative%20block%27%5D%20ifFalse%3A%20%5B%27alternative%20block2%27%5D%29%20%3D%20%27alternative%20block2%27.%0A%09self%20assert%3A%20%28false%20ifFalse%3A%20%5B%27alternative%20block%27%5D%20ifTrue%3A%20%5B%27alternative%20block2%27%5D%29%20%3D%20%27alternative%20block%27.%0A%0A%09self%20assert%3A%20%28true%20ifTrue%3A%20%5B%27alternative%20block%27%5D%20ifFalse%3A%20%5B%27alternative%20block2%27%5D%29%20%3D%20%27alternative%20block%27.%0A%09self%20assert%3A%20%28true%20ifFalse%3A%20%5B%27alternative%20block%27%5D%20ifTrue%3A%20%5B%27alternative%20block2%27%5D%29%20%3D%20%27alternative%20block2%27.'), -messageSends: ["assert:", unescape("%3D"), "ifTrue:", "ifFalse:", "ifTrue:ifFalse:", "ifFalse:ifTrue:"], -referencedClasses: [] -}), -smalltalk.BooleanTest); - - - -smalltalk.addClass('NumberTest', smalltalk.TestCase, [], 'Kernel-Tests'); -smalltalk.addMethod( -unescape('_testPrintShowingDecimalPlaces'), +unescape('_testDynamicDictionaries'), smalltalk.method({ -selector: unescape('testPrintShowingDecimalPlaces'), +selector: unescape('testDynamicDictionaries'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", ["23.00", smalltalk.send((23), "_printShowingDecimalPlaces_", [(2)])]); -smalltalk.send(self, "_assert_equals_", ["23.57", smalltalk.send((23.5698), "_printShowingDecimalPlaces_", [(2)])]); -smalltalk.send(self, "_assert_equals_", [unescape("-234.56700"), smalltalk.send(smalltalk.send((234.567), "_negated", []), "_printShowingDecimalPlaces_", [(5)])]); -smalltalk.send(self, "_assert_equals_", ["23", smalltalk.send((23.4567), "_printShowingDecimalPlaces_", [(0)])]); -smalltalk.send(self, "_assert_equals_", ["24", smalltalk.send((23.5567), "_printShowingDecimalPlaces_", [(0)])]); -smalltalk.send(self, "_assert_equals_", [unescape("-23"), smalltalk.send(smalltalk.send((23.4567), "_negated", []), "_printShowingDecimalPlaces_", [(0)])]); -smalltalk.send(self, "_assert_equals_", [unescape("-24"), smalltalk.send(smalltalk.send((23.5567), "_negated", []), "_printShowingDecimalPlaces_", [(0)])]); -smalltalk.send(self, "_assert_equals_", ["100000000.0", smalltalk.send((100000000), "_printShowingDecimalPlaces_", [(1)])]); -smalltalk.send(self, "_assert_equals_", ["0.98000", smalltalk.send((0.98), "_printShowingDecimalPlaces_", [(5)])]); -smalltalk.send(self, "_assert_equals_", [unescape("-0.98"), smalltalk.send(smalltalk.send((0.98), "_negated", []), "_printShowingDecimalPlaces_", [(2)])]); -smalltalk.send(self, "_assert_equals_", ["2.57", smalltalk.send((2.567), "_printShowingDecimalPlaces_", [(2)])]); -smalltalk.send(self, "_assert_equals_", [unescape("-2.57"), smalltalk.send((-2.567), "_printShowingDecimalPlaces_", [(2)])]); -smalltalk.send(self, "_assert_equals_", ["0.00", smalltalk.send((0), "_printShowingDecimalPlaces_", [(2)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.HashedCollection._fromPairs_([smalltalk.send("hello", "__minus_gt", [(1)])]), "_asDictionary", []), "__eq", [smalltalk.send((smalltalk.Dictionary || Dictionary), "_with_", [smalltalk.send("hello", "__minus_gt", [(1)])])])]); return self;}, args: [], -source: unescape('testPrintShowingDecimalPlaces%0A%09self%20assert%3A%20%2723.00%27%20equals%3A%20%2823%20printShowingDecimalPlaces%3A%202%29.%0A%09self%20assert%3A%20%2723.57%27%20equals%3A%20%2823.5698%20printShowingDecimalPlaces%3A%202%29.%0A%09self%20assert%3A%20%27-234.56700%27%20equals%3A%28%20234.567%20negated%20printShowingDecimalPlaces%3A%205%29.%0A%09self%20assert%3A%20%2723%27%20equals%3A%20%2823.4567%20printShowingDecimalPlaces%3A%200%29.%0A%09self%20assert%3A%20%2724%27%20equals%3A%20%2823.5567%20printShowingDecimalPlaces%3A%200%29.%0A%09self%20assert%3A%20%27-23%27%20equals%3A%20%2823.4567%20negated%20printShowingDecimalPlaces%3A%200%29.%0A%09self%20assert%3A%20%27-24%27%20equals%3A%20%2823.5567%20negated%20printShowingDecimalPlaces%3A%200%29.%0A%09self%20assert%3A%20%27100000000.0%27%20equals%3A%20%28100000000%20printShowingDecimalPlaces%3A%201%29.%0A%09self%20assert%3A%20%270.98000%27%20equals%3A%20%280.98%20printShowingDecimalPlaces%3A%205%29.%0A%09self%20assert%3A%20%27-0.98%27%20equals%3A%20%280.98%20negated%20printShowingDecimalPlaces%3A%202%29.%0A%09self%20assert%3A%20%272.57%27%20equals%3A%20%282.567%20printShowingDecimalPlaces%3A%202%29.%0A%09self%20assert%3A%20%27-2.57%27%20equals%3A%20%28-2.567%20printShowingDecimalPlaces%3A%202%29.%0A%09self%20assert%3A%20%270.00%27%20equals%3A%20%280%20printShowingDecimalPlaces%3A%202%29.'), -messageSends: ["assert:equals:", "printShowingDecimalPlaces:", "negated"], -referencedClasses: [] +source: unescape('testDynamicDictionaries%0A%09self%20assert%3A%20%23%7B%27hello%27%20-%3E%201%7D%20asDictionary%20%3D%20%28Dictionary%20with%3A%20%27hello%27%20-%3E%201%29'), +messageSends: ["assert:", unescape("%3D"), "asDictionary", unescape("-%3E"), "with:"], +referencedClasses: ["Dictionary"] }), -smalltalk.NumberTest); +smalltalk.DictionaryTest); smalltalk.addMethod( unescape('_testEquality'), @@ -482,648 +393,680 @@ selector: unescape('testEquality'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq", [(1)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((0), "__eq", [(0)])]); -smalltalk.send(self, "_deny_", [smalltalk.send((1), "__eq", [(0)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq", [(1)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq", [smalltalk.send((1), "_yourself", [])])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq", [smalltalk.send((1), "_yourself", [])])]); -smalltalk.send(self, "_deny_", [smalltalk.send((0), "__eq", [false])]); -smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [(0)])]); -smalltalk.send(self, "_deny_", [smalltalk.send("", "__eq", [(0)])]); -smalltalk.send(self, "_deny_", [smalltalk.send((0), "__eq", [""])]); -return self;}, -args: [], -source: unescape('testEquality%0A%09self%20assert%3A%201%20%3D%201.%0A%09self%20assert%3A%200%20%3D%200.%0A%09self%20deny%3A%201%20%3D%200.%0A%0A%09self%20assert%3A%201%20yourself%20%3D%201.%0A%09self%20assert%3A%201%20%3D%201%20yourself.%0A%09self%20assert%3A%201%20yourself%20%3D%201%20yourself.%0A%09%0A%09self%20deny%3A%200%20%3D%20false.%0A%09self%20deny%3A%20false%20%3D%200.%0A%09self%20deny%3A%20%27%27%20%3D%200.%0A%09self%20deny%3A%200%20%3D%20%27%27'), -messageSends: ["assert:", unescape("%3D"), "deny:", "yourself"], -referencedClasses: [] -}), -smalltalk.NumberTest); - -smalltalk.addMethod( -unescape('_testArithmetic'), -smalltalk.method({ -selector: unescape('testArithmetic'), -category: 'tests', -fn: function () { -var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send((1.5) + (1), "__eq", [(2.5)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((2) - (1), "__eq", [(1)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((-2) - (1), "__eq", [(-3)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((12) / (2), "__eq", [(6)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((3) * (4), "__eq", [(12)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = (1) + (2)).klass === smalltalk.Number) ? $receiver *(3) : smalltalk.send($receiver, "__star", [(3)])), "__eq", [(9)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((1) + (2) * (3), "__eq", [(7)])]); +var d1=nil; +var d2=nil; +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []), "__eq", [smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])])]); +(d1=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (2)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); +(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (2)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); +smalltalk.send(self, "_assert_", [smalltalk.send(d1, "__eq", [d2])]); +(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (3)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); +smalltalk.send(self, "_deny_", [smalltalk.send(d1, "__eq", [d2])]); +(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(2), (2)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); +smalltalk.send(self, "_deny_", [smalltalk.send(d1, "__eq", [d2])]); +(d2=(function($rec){smalltalk.send($rec, "_at_put_", [(1), (2)]);smalltalk.send($rec, "_at_put_", [(3), (4)]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))); +smalltalk.send(self, "_deny_", [smalltalk.send(d1, "__eq", [d2])]); return self;}, args: [], -source: unescape('testArithmetic%0A%09%0A%09%22We%20rely%20on%20JS%20here%2C%20so%20we%20won%27t%20test%20complex%20behavior%2C%20just%20check%20if%20%0A%09message%20sends%20are%20corrects%22%0A%0A%09self%20assert%3A%201.5%20+%201%20%3D%202.5.%0A%09self%20assert%3A%202%20-%201%20%3D%201.%0A%09self%20assert%3A%20-2%20-%201%20%3D%20-3.%0A%09self%20assert%3A%2012%20/%202%20%3D%206.%0A%09self%20assert%3A%203%20*%204%20%3D%2012.%0A%0A%09%22Simple%20parenthesis%20and%20execution%20order%22%0A%0A%09self%20assert%3A%201%20+%202%20*%203%20%3D%209.%0A%09self%20assert%3A%201%20+%20%282%20*%203%29%20%3D%207'), -messageSends: ["assert:", unescape("%3D"), unescape("+"), unescape("-"), unescape("/"), unescape("*")], -referencedClasses: [] +source: unescape('testEquality%0A%09%7C%20d1%20d2%20%7C%0A%0A%09self%20assert%3A%20Dictionary%20new%20%3D%20Dictionary%20new.%0A%09%09%0A%09d1%20%3A%3D%20Dictionary%20new%20at%3A%201%20put%3A%202%3B%20yourself.%0A%09d2%20%3A%3D%20Dictionary%20new%20at%3A%201%20put%3A%202%3B%20yourself.%0A%09self%20assert%3A%20d1%20%3D%20d2.%0A%0A%09d2%20%3A%3D%20Dictionary%20new%20at%3A%201%20put%3A%203%3B%20yourself.%0A%09self%20deny%3A%20d1%20%3D%20d2.%0A%0A%09d2%20%3A%3D%20Dictionary%20new%20at%3A%202%20put%3A%202%3B%20yourself.%0A%09self%20deny%3A%20d1%20%3D%20d2.%0A%0A%09d2%20%3A%3D%20Dictionary%20new%20at%3A%201%20put%3A%202%3B%20at%3A%203%20put%3A%204%3B%20yourself.%0A%09self%20deny%3A%20d1%20%3D%20d2.'), +messageSends: ["assert:", unescape("%3D"), "new", "at:put:", "yourself", "deny:"], +referencedClasses: ["Dictionary"] }), -smalltalk.NumberTest); +smalltalk.DictionaryTest); smalltalk.addMethod( -unescape('_testRounded'), +unescape('_testKeys'), smalltalk.method({ -selector: unescape('testRounded'), +selector: unescape('testKeys'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "_rounded", []), "__eq", [(3)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.212), "_rounded", []), "__eq", [(3)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.51), "_rounded", []), "__eq", [(4)])]); +var d=nil; +(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); +smalltalk.send(d, "_at_put_", [(1), (2)]); +smalltalk.send(d, "_at_put_", [(2), (3)]); +smalltalk.send(d, "_at_put_", [(3), (4)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_keys", []), "__eq", [[(1), (2), (3)]])]); return self;}, args: [], -source: unescape('testRounded%0A%09%0A%09self%20assert%3A%203%20rounded%20%3D%203.%0A%09self%20assert%3A%203.212%20rounded%20%3D%203.%0A%09self%20assert%3A%203.51%20rounded%20%3D%204'), -messageSends: ["assert:", unescape("%3D"), "rounded"], -referencedClasses: [] +source: unescape('testKeys%0A%09%7C%20d%20%7C%0A%0A%09d%20%3A%3D%20Dictionary%20new.%0A%09d%20at%3A%201%20put%3A%202.%0A%09d%20at%3A%202%20put%3A%203.%0A%09d%20at%3A%203%20put%3A%204.%0A%0A%09self%20assert%3A%20d%20keys%20%3D%20%23%281%202%203%29'), +messageSends: ["new", "at:put:", "assert:", unescape("%3D"), "keys"], +referencedClasses: ["Dictionary"] }), -smalltalk.NumberTest); +smalltalk.DictionaryTest); smalltalk.addMethod( -unescape('_testNegated'), +unescape('_testPrintString'), smalltalk.method({ -selector: unescape('testNegated'), +selector: unescape('testPrintString'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "_negated", []), "__eq", [(-3)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((-3), "_negated", []), "__eq", [(3)])]); +smalltalk.send(self, "_assert_equals_", [unescape("a%20Dictionary%28%27firstname%27%20-%3E%20%27James%27%20%2C%20%27lastname%27%20-%3E%20%27Bond%27%29"), (function($rec){smalltalk.send($rec, "_at_put_", ["firstname", "James"]);smalltalk.send($rec, "_at_put_", ["lastname", "Bond"]);return smalltalk.send($rec, "_printString", []);})(smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", []))]); return self;}, args: [], -source: unescape('testNegated%0A%09self%20assert%3A%203%20negated%20%3D%20-3.%0A%09self%20assert%3A%20-3%20negated%20%3D%203'), -messageSends: ["assert:", unescape("%3D"), "negated"], -referencedClasses: [] +source: unescape('testPrintString%0A%09self%0A%09%09assert%3A%20%27a%20Dictionary%28%27%27firstname%27%27%20-%3E%20%27%27James%27%27%20%2C%20%27%27lastname%27%27%20-%3E%20%27%27Bond%27%27%29%27%20%0A%09%09equals%3A%20%28Dictionary%20new%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09at%3A%27firstname%27%20put%3A%20%27James%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09at%3A%27lastname%27%20put%3A%20%27Bond%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09printString%29'), +messageSends: ["assert:equals:", "at:put:", "printString", "new"], +referencedClasses: ["Dictionary"] }), -smalltalk.NumberTest); +smalltalk.DictionaryTest); smalltalk.addMethod( -unescape('_testComparison'), +unescape('_testRemoveKey'), smalltalk.method({ -selector: unescape('testComparison'), +selector: unescape('testRemoveKey'), category: 'tests', -fn: function () { +fn: function (){ var self=this; -smalltalk.send(self, "_assert_", [(3) > (2)]); -smalltalk.send(self, "_assert_", [(2) < (3)]); -smalltalk.send(self, "_deny_", [(3) < (2)]); -smalltalk.send(self, "_deny_", [(2) > (3)]); -smalltalk.send(self, "_assert_", [(3) >= (3)]); -smalltalk.send(self, "_assert_", [(3.1) >= (3)]); -smalltalk.send(self, "_assert_", [(3) <= (3)]); -smalltalk.send(self, "_assert_", [(3) <= (3.1)]); +var d=nil; +var key=nil; +(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); +smalltalk.send(d, "_at_put_", [(1), (2)]); +smalltalk.send(d, "_at_put_", [(2), (3)]); +smalltalk.send(d, "_at_put_", [(3), (4)]); +(key=(2)); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_keys", []), "__eq", [[(1), (2), (3)]])]); +smalltalk.send(d, "_removeKey_", [key]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_keys", []), "__eq", [[(1), (3)]])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_values", []), "__eq", [[(2), (4)]])]); +smalltalk.send(self, "_deny_", [smalltalk.send(d, "_includesKey_", [(2)])]); return self;}, args: [], -source: unescape('testComparison%0A%0A%09self%20assert%3A%203%20%3E%202.%0A%09self%20assert%3A%202%20%3C%203.%0A%09%0A%09self%20deny%3A%203%20%3C%202.%0A%09self%20deny%3A%202%20%3E%203.%0A%0A%09self%20assert%3A%203%20%3E%3D%203.%0A%09self%20assert%3A%203.1%20%3E%3D%203.%0A%09self%20assert%3A%203%20%3C%3D%203.%0A%09self%20assert%3A%203%20%3C%3D%203.1'), -messageSends: ["assert:", unescape("%3E"), unescape("%3C"), "deny:", unescape("%3E%3D"), unescape("%3C%3D")], -referencedClasses: [] +source: unescape('testRemoveKey%0A%20%20%20%20%7C%20d%20key%20%7C%0A%0A%20%20%20%20d%20%3A%3D%20Dictionary%20new.%0A%20%20%20%20d%20at%3A%201%20put%3A%202.%0A%20%20%20%20d%20at%3A%202%20put%3A%203.%0A%20%20%20%20d%20at%3A%203%20put%3A%204.%0A%0A%20%20%20%20key%20%3A%3D%202.%0A%0A%20%20%20%20self%20assert%3A%20d%20keys%20%3D%20%23%281%202%203%29.%0A%0A%20%20%20%20d%20removeKey%3A%20key.%0A%20%20%20%20self%20assert%3A%20d%20keys%20%3D%20%23%281%203%29.%0A%20%20%20%20self%20assert%3A%20d%20values%20%3D%20%23%282%204%29.%0A%20%20%20%20self%20deny%3A%20%28d%20includesKey%3A%202%29'), +messageSends: ["new", "at:put:", "assert:", unescape("%3D"), "keys", "removeKey:", "values", "deny:", "includesKey:"], +referencedClasses: ["Dictionary"] }), -smalltalk.NumberTest); +smalltalk.DictionaryTest); smalltalk.addMethod( -unescape('_testTruncated'), +unescape('_testRemoveKeyIfAbsent'), smalltalk.method({ -selector: unescape('testTruncated'), +selector: unescape('testRemoveKeyIfAbsent'), category: 'tests', -fn: function () { +fn: function (){ var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "_truncated", []), "__eq", [(3)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.212), "_truncated", []), "__eq", [(3)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.51), "_truncated", []), "__eq", [(3)])]); +var d=nil; +var key=nil; +(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); +smalltalk.send(d, "_at_put_", [(1), (2)]); +smalltalk.send(d, "_at_put_", [(2), (3)]); +smalltalk.send(d, "_at_put_", [(3), (4)]); +(key=(2)); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_removeKey_", [key]), "__eq", [(3)])]); +(key=(3)); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_removeKey_ifAbsent_", [key, (function(){return (42);})]), "__eq", [(4)])]); +(key="why"); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_removeKey_ifAbsent_", [key, (function(){return (42);})]), "__eq", [(42)])]); return self;}, args: [], -source: unescape('testTruncated%0A%09%0A%09self%20assert%3A%203%20truncated%20%3D%203.%0A%09self%20assert%3A%203.212%20truncated%20%3D%203.%0A%09self%20assert%3A%203.51%20truncated%20%3D%203'), -messageSends: ["assert:", unescape("%3D"), "truncated"], -referencedClasses: [] +source: unescape('testRemoveKeyIfAbsent%0A%20%20%20%20%7C%20d%20key%20%7C%0A%0A%20%20%20%20d%20%3A%3D%20Dictionary%20new.%0A%20%20%20%20d%20at%3A%201%20put%3A%202.%0A%20%20%20%20d%20at%3A%202%20put%3A%203.%0A%20%20%20%20d%20at%3A%203%20put%3A%204.%0A%0A%20%20%20%20key%20%3A%3D%202.%0A%20%20%20%20self%20assert%3A%20%28d%20removeKey%3A%20key%29%20%3D%203.%0A%0A%20%20%20%20key%20%3A%3D%203.%0A%20%20%20%20self%20assert%3A%20%28d%20removeKey%3A%20key%20ifAbsent%3A%20%5B42%5D%29%20%3D%204.%0A%0A%20%20%20%20key%20%3A%3D%20%27why%27.%0A%20%20%20%20self%20assert%3A%20%28d%20removeKey%3A%20key%20ifAbsent%3A%20%5B42%5D%20%29%20%3D%2042.'), +messageSends: ["new", "at:put:", "assert:", unescape("%3D"), "removeKey:", "removeKey:ifAbsent:"], +referencedClasses: ["Dictionary"] }), -smalltalk.NumberTest); +smalltalk.DictionaryTest); smalltalk.addMethod( -unescape('_testCopying'), +unescape('_testSize'), smalltalk.method({ -selector: unescape('testCopying'), +selector: unescape('testSize'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_copy", []), "__eq_eq", [(1)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_deepCopy", []), "__eq_eq", [(1)])]); +var d=nil; +(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_size", []), "__eq", [(0)])]); +smalltalk.send(d, "_at_put_", [(1), (2)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_size", []), "__eq", [(1)])]); +smalltalk.send(d, "_at_put_", [(2), (3)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_size", []), "__eq", [(2)])]); return self;}, args: [], -source: unescape('testCopying%0A%09self%20assert%3A%201%20copy%20%3D%3D%201.%0A%09self%20assert%3A%201%20deepCopy%20%3D%3D%201'), -messageSends: ["assert:", unescape("%3D%3D"), "copy", "deepCopy"], -referencedClasses: [] +source: unescape('testSize%0A%09%7C%20d%20%7C%0A%0A%09d%20%3A%3D%20Dictionary%20new.%0A%09self%20assert%3A%20d%20size%20%3D%200.%0A%0A%09d%20at%3A%201%20put%3A%202.%0A%09self%20assert%3A%20d%20size%20%3D%201.%0A%0A%09d%20at%3A%202%20put%3A%203.%0A%09self%20assert%3A%20d%20size%20%3D%202.'), +messageSends: ["new", "assert:", unescape("%3D"), "size", "at:put:"], +referencedClasses: ["Dictionary"] }), -smalltalk.NumberTest); +smalltalk.DictionaryTest); smalltalk.addMethod( -unescape('_testMinMax'), +unescape('_testValues'), smalltalk.method({ -selector: unescape('testMinMax'), +selector: unescape('testValues'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((2), "_max_", [(5)]), (5)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((2), "_min_", [(5)]), (2)]); +var d=nil; +(d=smalltalk.send((smalltalk.Dictionary || Dictionary), "_new", [])); +smalltalk.send(d, "_at_put_", [(1), (2)]); +smalltalk.send(d, "_at_put_", [(2), (3)]); +smalltalk.send(d, "_at_put_", [(3), (4)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(d, "_values", []), "__eq", [[(2), (3), (4)]])]); return self;}, args: [], -source: unescape('testMinMax%0A%09%0A%09self%20assert%3A%20%282%20max%3A%205%29%20equals%3A%205.%0A%09self%20assert%3A%20%282%20min%3A%205%29%20equals%3A%202'), -messageSends: ["assert:equals:", "max:", "min:"], -referencedClasses: [] +source: unescape('testValues%0A%09%7C%20d%20%7C%0A%0A%09d%20%3A%3D%20Dictionary%20new.%0A%09d%20at%3A%201%20put%3A%202.%0A%09d%20at%3A%202%20put%3A%203.%0A%09d%20at%3A%203%20put%3A%204.%0A%0A%09self%20assert%3A%20d%20values%20%3D%20%23%282%203%204%29'), +messageSends: ["new", "at:put:", "assert:", unescape("%3D"), "values"], +referencedClasses: ["Dictionary"] }), -smalltalk.NumberTest); +smalltalk.DictionaryTest); + + +smalltalk.addClass('JSObjectProxyTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testIdentity'), +unescape('_jsObject'), smalltalk.method({ -selector: unescape('testIdentity'), -category: 'tests', +selector: unescape('jsObject'), +category: 'accessing', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq_eq", [(1)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((0), "__eq_eq", [(0)])]); -smalltalk.send(self, "_deny_", [smalltalk.send((1), "__eq_eq", [(0)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq_eq", [(1)])]); -smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq_eq", [smalltalk.send((1), "_yourself", [])])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq_eq", [smalltalk.send((1), "_yourself", [])])]); -smalltalk.send(self, "_deny_", [smalltalk.send((1), "__eq_eq", [(2)])]); +return jsObject = {a: 1, b: function() {return 2;}, c: function(object) {return object;}}; return self;}, args: [], -source: unescape('testIdentity%0A%09self%20assert%3A%201%20%3D%3D%201.%0A%09self%20assert%3A%200%20%3D%3D%200.%0A%09self%20deny%3A%201%20%3D%3D%200.%0A%0A%09self%20assert%3A%201%20yourself%20%3D%3D%201.%0A%09self%20assert%3A%201%20%3D%3D%201%20yourself.%0A%09self%20assert%3A%201%20yourself%20%3D%3D%201%20yourself.%0A%09%0A%09self%20deny%3A%201%20%3D%3D%202'), -messageSends: ["assert:", unescape("%3D%3D"), "deny:", "yourself"], +source: unescape('jsObject%0A%09%3Creturn%20jsObject%20%3D%20%7Ba%3A%201%2C%20b%3A%20function%28%29%20%7Breturn%202%3B%7D%2C%20c%3A%20function%28object%29%20%7Breturn%20object%3B%7D%7D%3E'), +messageSends: [], referencedClasses: [] }), -smalltalk.NumberTest); +smalltalk.JSObjectProxyTest); smalltalk.addMethod( -unescape('_testSqrt'), +unescape('_testDNU'), smalltalk.method({ -selector: unescape('testSqrt'), +selector: unescape('testDNU'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((4), "_sqrt", []), "__eq", [(2)])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((16), "_sqrt", []), "__eq", [(4)])]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send(self, "_jsObject", []), "_foo", []);}), (smalltalk.MessageNotUnderstood || MessageNotUnderstood)]); return self;}, args: [], -source: unescape('testSqrt%0A%09%0A%09self%20assert%3A%204%20sqrt%20%3D%202.%0A%09self%20assert%3A%2016%20sqrt%20%3D%204'), -messageSends: ["assert:", unescape("%3D"), "sqrt"], -referencedClasses: [] +source: unescape('testDNU%0A%09self%20should%3A%20%5Bself%20jsObject%20foo%5D%20raise%3A%20MessageNotUnderstood'), +messageSends: ["should:raise:", "foo", "jsObject"], +referencedClasses: ["MessageNotUnderstood"] }), -smalltalk.NumberTest); +smalltalk.JSObjectProxyTest); smalltalk.addMethod( -unescape('_testSquared'), +unescape('_testMessageSend'), smalltalk.method({ -selector: unescape('testSquared'), +selector: unescape('testMessageSend'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((4), "_squared", []), "__eq", [(16)])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self, "_jsObject", []), "_a", []), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self, "_jsObject", []), "_b", []), (2)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self, "_jsObject", []), "_c_", [(3)]), (3)]); return self;}, args: [], -source: unescape('testSquared%0A%09%0A%09self%20assert%3A%204%20squared%20%3D%2016'), -messageSends: ["assert:", unescape("%3D"), "squared"], +source: unescape('testMessageSend%0A%0A%09self%20assert%3A%20self%20jsObject%20a%20equals%3A%201.%0A%09self%20assert%3A%20self%20jsObject%20b%20equals%3A%202.%0A%09self%20assert%3A%20%28self%20jsObject%20c%3A%203%29%20equals%3A%203'), +messageSends: ["assert:equals:", "a", "jsObject", "b", "c:"], referencedClasses: [] }), -smalltalk.NumberTest); +smalltalk.JSObjectProxyTest); smalltalk.addMethod( -unescape('_testTimesRepeat'), +unescape('_testMethodWithArguments'), smalltalk.method({ -selector: unescape('testTimesRepeat'), +selector: unescape('testMethodWithArguments'), category: 'tests', fn: function () { var self=this; -var i=nil; -(i=(0)); -smalltalk.send((0), "_timesRepeat_", [(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})]); -smalltalk.send(self, "_assert_equals_", [i, (0)]); -smalltalk.send((5), "_timesRepeat_", [(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})]); -smalltalk.send(self, "_assert_equals_", [i, (5)]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_hasClass_", ["amber"])]); +smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["amber"]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_hasClass_", ["amber"])]); +smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_removeClass_", ["amber"]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_hasClass_", ["amber"])]); return self;}, args: [], -source: unescape('testTimesRepeat%0A%09%7C%20i%20%7C%0A%0A%09i%20%3A%3D%200.%0A%090%20timesRepeat%3A%20%5Bi%20%3A%3D%20i%20+%201%5D.%0A%09self%20assert%3A%20i%20equals%3A%200.%0A%0A%095%20timesRepeat%3A%20%5Bi%20%3A%3D%20i%20+%201%5D.%0A%09self%20assert%3A%20i%20equals%3A%205'), -messageSends: ["timesRepeat:", unescape("+"), "assert:equals:"], +source: unescape('testMethodWithArguments%0A%09self%20deny%3A%20%28%27body%27%20asJQuery%20hasClass%3A%20%27amber%27%29.%0A%0A%09%27body%27%20asJQuery%20addClass%3A%20%27amber%27.%0A%09self%20assert%3A%20%28%27body%27%20asJQuery%20hasClass%3A%20%27amber%27%29.%0A%0A%09%27body%27%20asJQuery%20removeClass%3A%20%27amber%27.%0A%09self%20deny%3A%20%28%27body%27%20asJQuery%20hasClass%3A%20%27amber%27%29.'), +messageSends: ["deny:", "hasClass:", "asJQuery", "addClass:", "assert:", "removeClass:"], referencedClasses: [] }), -smalltalk.NumberTest); +smalltalk.JSObjectProxyTest); smalltalk.addMethod( -unescape('_testTo'), +unescape('_testPrinting'), smalltalk.method({ -selector: unescape('testTo'), +selector: unescape('testPrinting'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((1), "_to_", [(5)]), [(1), (2), (3), (4), (5)]]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_jsObject", []), "_printString", []), "__eq", [unescape("%5Bobject%20Object%5D")])]); return self;}, args: [], -source: unescape('testTo%0A%09self%20assert%3A%20%281%20to%3A%205%29%20equals%3A%20%23%281%202%203%204%205%29'), -messageSends: ["assert:equals:", "to:"], +source: unescape('testPrinting%0A%09self%20assert%3A%20self%20jsObject%20printString%20%3D%20%27%5Bobject%20Object%5D%27'), +messageSends: ["assert:", unescape("%3D"), "printString", "jsObject"], referencedClasses: [] }), -smalltalk.NumberTest); +smalltalk.JSObjectProxyTest); smalltalk.addMethod( -unescape('_testToBy'), +unescape('_testPropertyThatReturnsEmptyString'), smalltalk.method({ -selector: unescape('testToBy'), +selector: unescape('testPropertyThatReturnsEmptyString'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((0), "_to_by_", [(6), (2)]), [(0), (2), (4), (6)]]); -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send((1), "_to_by_", [(4), (0)]);}), (smalltalk.Error || Error)]); +document.location.hash = ''; +smalltalk.send(self, "_assert_equals_", ["", smalltalk.send(smalltalk.send((typeof document == 'undefined' ? nil : document), "_location", []), "_hash", [])]); +smalltalk.send(smalltalk.send((typeof document == 'undefined' ? nil : document), "_location", []), "_hash_", ["test"]); +smalltalk.send(self, "_assert_equals_", [unescape("%23test"), smalltalk.send(smalltalk.send((typeof document == 'undefined' ? nil : document), "_location", []), "_hash", [])]); return self;}, args: [], -source: unescape('testToBy%0A%09self%20assert%3A%20%280%20to%3A%206%20by%3A%202%29%20equals%3A%20%23%280%202%204%206%29.%0A%0A%09self%20should%3A%20%5B1%20to%3A%204%20by%3A%200%5D%20raise%3A%20Error'), -messageSends: ["assert:equals:", "to:by:", "should:raise:"], -referencedClasses: ["Error"] +source: unescape('testPropertyThatReturnsEmptyString%0A%09%3Cdocument.location.hash%20%3D%20%27%27%3E.%0A%09self%20assert%3A%20%27%27%20equals%3A%20document%20location%20hash.%0A%0A%09document%20location%20hash%3A%20%27test%27.%0A%09self%20assert%3A%20%27%23test%27%20equals%3A%20document%20location%20hash.'), +messageSends: ["assert:equals:", "hash", "location", "hash:"], +referencedClasses: [] }), -smalltalk.NumberTest); - - +smalltalk.JSObjectProxyTest); -smalltalk.addClass('JSObjectProxyTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_jsObject'), +unescape('_testYourself'), smalltalk.method({ -selector: unescape('jsObject'), -category: 'accessing', +selector: unescape('testYourself'), +category: 'tests', fn: function () { var self=this; -return jsObject = {a: 1, b: function() {return 2;}, c: function(object) {return object;}}; +var body=nil; +(body=(function($rec){smalltalk.send($rec, "_addClass_", ["amber"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send("body", "_asJQuery", []))); +smalltalk.send(self, "_assert_", [smalltalk.send(body, "_hasClass_", ["amber"])]); +smalltalk.send(body, "_removeClass_", ["amber"]); +smalltalk.send(self, "_deny_", [smalltalk.send(body, "_hasClass_", ["amber"])]); return self;}, args: [], -source: unescape('jsObject%0A%09%3Creturn%20jsObject%20%3D%20%7Ba%3A%201%2C%20b%3A%20function%28%29%20%7Breturn%202%3B%7D%2C%20c%3A%20function%28object%29%20%7Breturn%20object%3B%7D%7D%3E'), -messageSends: [], +source: unescape('testYourself%0A%09%7Cbody%7C%0A%09body%20%3A%3D%20%27body%27%20asJQuery%0A%09%09%09%09addClass%3A%20%27amber%27%3B%0A%09%09%09%09yourself.%0A%0A%09self%20assert%3A%20%28body%20hasClass%3A%20%27amber%27%29.%0A%0A%09body%20removeClass%3A%20%27amber%27.%0A%09self%20deny%3A%20%28body%20hasClass%3A%20%27amber%27%29.'), +messageSends: ["addClass:", "yourself", "asJQuery", "assert:", "hasClass:", "removeClass:", "deny:"], referencedClasses: [] }), smalltalk.JSObjectProxyTest); + + +smalltalk.addClass('NumberTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testMethodWithArguments'), +unescape('_testArithmetic'), smalltalk.method({ -selector: unescape('testMethodWithArguments'), +selector: unescape('testArithmetic'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_hasClass_", ["amber"])]); -smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_addClass_", ["amber"]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_hasClass_", ["amber"])]); -smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_removeClass_", ["amber"]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send("body", "_asJQuery", []), "_hasClass_", ["amber"])]); +smalltalk.send(self, "_assert_", [smalltalk.send((1.5) + (1), "__eq", [(2.5)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((2) - (1), "__eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((-2) - (1), "__eq", [(-3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((12) / (2), "__eq", [(6)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((3) * (4), "__eq", [(12)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(((($receiver = (1) + (2)).klass === smalltalk.Number) ? $receiver *(3) : smalltalk.send($receiver, "__star", [(3)])), "__eq", [(9)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((1) + (2) * (3), "__eq", [(7)])]); return self;}, args: [], -source: unescape('testMethodWithArguments%0A%09self%20deny%3A%20%28%27body%27%20asJQuery%20hasClass%3A%20%27amber%27%29.%0A%0A%09%27body%27%20asJQuery%20addClass%3A%20%27amber%27.%0A%09self%20assert%3A%20%28%27body%27%20asJQuery%20hasClass%3A%20%27amber%27%29.%0A%0A%09%27body%27%20asJQuery%20removeClass%3A%20%27amber%27.%0A%09self%20deny%3A%20%28%27body%27%20asJQuery%20hasClass%3A%20%27amber%27%29.'), -messageSends: ["deny:", "hasClass:", "asJQuery", "addClass:", "assert:", "removeClass:"], +source: unescape('testArithmetic%0A%09%0A%09%22We%20rely%20on%20JS%20here%2C%20so%20we%20won%27t%20test%20complex%20behavior%2C%20just%20check%20if%20%0A%09message%20sends%20are%20corrects%22%0A%0A%09self%20assert%3A%201.5%20+%201%20%3D%202.5.%0A%09self%20assert%3A%202%20-%201%20%3D%201.%0A%09self%20assert%3A%20-2%20-%201%20%3D%20-3.%0A%09self%20assert%3A%2012%20/%202%20%3D%206.%0A%09self%20assert%3A%203%20*%204%20%3D%2012.%0A%0A%09%22Simple%20parenthesis%20and%20execution%20order%22%0A%0A%09self%20assert%3A%201%20+%202%20*%203%20%3D%209.%0A%09self%20assert%3A%201%20+%20%282%20*%203%29%20%3D%207'), +messageSends: ["assert:", unescape("%3D"), unescape("+"), unescape("-"), unescape("/"), unescape("*")], referencedClasses: [] }), -smalltalk.JSObjectProxyTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testYourself'), +unescape('_testComparison'), smalltalk.method({ -selector: unescape('testYourself'), +selector: unescape('testComparison'), category: 'tests', fn: function () { var self=this; -var body=nil; -(body=(function($rec){smalltalk.send($rec, "_addClass_", ["amber"]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send("body", "_asJQuery", []))); -smalltalk.send(self, "_assert_", [smalltalk.send(body, "_hasClass_", ["amber"])]); -smalltalk.send(body, "_removeClass_", ["amber"]); -smalltalk.send(self, "_deny_", [smalltalk.send(body, "_hasClass_", ["amber"])]); +smalltalk.send(self, "_assert_", [(3) > (2)]); +smalltalk.send(self, "_assert_", [(2) < (3)]); +smalltalk.send(self, "_deny_", [(3) < (2)]); +smalltalk.send(self, "_deny_", [(2) > (3)]); +smalltalk.send(self, "_assert_", [(3) >= (3)]); +smalltalk.send(self, "_assert_", [(3.1) >= (3)]); +smalltalk.send(self, "_assert_", [(3) <= (3)]); +smalltalk.send(self, "_assert_", [(3) <= (3.1)]); return self;}, args: [], -source: unescape('testYourself%0A%09%7Cbody%7C%0A%09body%20%3A%3D%20%27body%27%20asJQuery%0A%09%09%09%09addClass%3A%20%27amber%27%3B%0A%09%09%09%09yourself.%0A%0A%09self%20assert%3A%20%28body%20hasClass%3A%20%27amber%27%29.%0A%0A%09body%20removeClass%3A%20%27amber%27.%0A%09self%20deny%3A%20%28body%20hasClass%3A%20%27amber%27%29.'), -messageSends: ["addClass:", "yourself", "asJQuery", "assert:", "hasClass:", "removeClass:", "deny:"], +source: unescape('testComparison%0A%0A%09self%20assert%3A%203%20%3E%202.%0A%09self%20assert%3A%202%20%3C%203.%0A%09%0A%09self%20deny%3A%203%20%3C%202.%0A%09self%20deny%3A%202%20%3E%203.%0A%0A%09self%20assert%3A%203%20%3E%3D%203.%0A%09self%20assert%3A%203.1%20%3E%3D%203.%0A%09self%20assert%3A%203%20%3C%3D%203.%0A%09self%20assert%3A%203%20%3C%3D%203.1'), +messageSends: ["assert:", unescape("%3E"), unescape("%3C"), "deny:", unescape("%3E%3D"), unescape("%3C%3D")], referencedClasses: [] }), -smalltalk.JSObjectProxyTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testPropertyThatReturnsEmptyString'), +unescape('_testCopying'), smalltalk.method({ -selector: unescape('testPropertyThatReturnsEmptyString'), +selector: unescape('testCopying'), category: 'tests', fn: function () { var self=this; -document.location.hash = ''; -smalltalk.send(self, "_assert_equals_", ["", smalltalk.send(smalltalk.send((typeof document == 'undefined' ? nil : document), "_location", []), "_hash", [])]); -smalltalk.send(smalltalk.send((typeof document == 'undefined' ? nil : document), "_location", []), "_hash_", ["test"]); -smalltalk.send(self, "_assert_equals_", [unescape("%23test"), smalltalk.send(smalltalk.send((typeof document == 'undefined' ? nil : document), "_location", []), "_hash", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_copy", []), "__eq_eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_deepCopy", []), "__eq_eq", [(1)])]); return self;}, args: [], -source: unescape('testPropertyThatReturnsEmptyString%0A%09%3Cdocument.location.hash%20%3D%20%27%27%3E.%0A%09self%20assert%3A%20%27%27%20equals%3A%20document%20location%20hash.%0A%0A%09document%20location%20hash%3A%20%27test%27.%0A%09self%20assert%3A%20%27%23test%27%20equals%3A%20document%20location%20hash.'), -messageSends: ["assert:equals:", "hash", "location", "hash:"], +source: unescape('testCopying%0A%09self%20assert%3A%201%20copy%20%3D%3D%201.%0A%09self%20assert%3A%201%20deepCopy%20%3D%3D%201'), +messageSends: ["assert:", unescape("%3D%3D"), "copy", "deepCopy"], referencedClasses: [] }), -smalltalk.JSObjectProxyTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testDNU'), +unescape('_testEquality'), smalltalk.method({ -selector: unescape('testDNU'), +selector: unescape('testEquality'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send(self, "_jsObject", []), "_foo", []);}), (smalltalk.MessageNotUnderstood || MessageNotUnderstood)]); +smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((0), "__eq", [(0)])]); +smalltalk.send(self, "_deny_", [smalltalk.send((1), "__eq", [(0)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq", [smalltalk.send((1), "_yourself", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq", [smalltalk.send((1), "_yourself", [])])]); +smalltalk.send(self, "_deny_", [smalltalk.send((0), "__eq", [false])]); +smalltalk.send(self, "_deny_", [smalltalk.send(false, "__eq", [(0)])]); +smalltalk.send(self, "_deny_", [smalltalk.send("", "__eq", [(0)])]); +smalltalk.send(self, "_deny_", [smalltalk.send((0), "__eq", [""])]); return self;}, args: [], -source: unescape('testDNU%0A%09self%20should%3A%20%5Bself%20jsObject%20foo%5D%20raise%3A%20MessageNotUnderstood'), -messageSends: ["should:raise:", "foo", "jsObject"], -referencedClasses: ["MessageNotUnderstood"] +source: unescape('testEquality%0A%09self%20assert%3A%201%20%3D%201.%0A%09self%20assert%3A%200%20%3D%200.%0A%09self%20deny%3A%201%20%3D%200.%0A%0A%09self%20assert%3A%201%20yourself%20%3D%201.%0A%09self%20assert%3A%201%20%3D%201%20yourself.%0A%09self%20assert%3A%201%20yourself%20%3D%201%20yourself.%0A%09%0A%09self%20deny%3A%200%20%3D%20false.%0A%09self%20deny%3A%20false%20%3D%200.%0A%09self%20deny%3A%20%27%27%20%3D%200.%0A%09self%20deny%3A%200%20%3D%20%27%27'), +messageSends: ["assert:", unescape("%3D"), "deny:", "yourself"], +referencedClasses: [] }), -smalltalk.JSObjectProxyTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testMessageSend'), +unescape('_testIdentity'), smalltalk.method({ -selector: unescape('testMessageSend'), +selector: unescape('testIdentity'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self, "_jsObject", []), "_a", []), (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self, "_jsObject", []), "_b", []), (2)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self, "_jsObject", []), "_c_", [(3)]), (3)]); +smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq_eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((0), "__eq_eq", [(0)])]); +smalltalk.send(self, "_deny_", [smalltalk.send((1), "__eq_eq", [(0)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq_eq", [(1)])]); +smalltalk.send(self, "_assert_", [smalltalk.send((1), "__eq_eq", [smalltalk.send((1), "_yourself", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "_yourself", []), "__eq_eq", [smalltalk.send((1), "_yourself", [])])]); +smalltalk.send(self, "_deny_", [smalltalk.send((1), "__eq_eq", [(2)])]); return self;}, args: [], -source: unescape('testMessageSend%0A%0A%09self%20assert%3A%20self%20jsObject%20a%20equals%3A%201.%0A%09self%20assert%3A%20self%20jsObject%20b%20equals%3A%202.%0A%09self%20assert%3A%20%28self%20jsObject%20c%3A%203%29%20equals%3A%203'), -messageSends: ["assert:equals:", "a", "jsObject", "b", "c:"], +source: unescape('testIdentity%0A%09self%20assert%3A%201%20%3D%3D%201.%0A%09self%20assert%3A%200%20%3D%3D%200.%0A%09self%20deny%3A%201%20%3D%3D%200.%0A%0A%09self%20assert%3A%201%20yourself%20%3D%3D%201.%0A%09self%20assert%3A%201%20%3D%3D%201%20yourself.%0A%09self%20assert%3A%201%20yourself%20%3D%3D%201%20yourself.%0A%09%0A%09self%20deny%3A%201%20%3D%3D%202'), +messageSends: ["assert:", unescape("%3D%3D"), "deny:", "yourself"], referencedClasses: [] }), -smalltalk.JSObjectProxyTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testPrinting'), +unescape('_testMinMax'), smalltalk.method({ -selector: unescape('testPrinting'), +selector: unescape('testMinMax'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_jsObject", []), "_printString", []), "__eq", [unescape("%5Bobject%20Object%5D")])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((2), "_max_", [(5)]), (5)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((2), "_min_", [(5)]), (2)]); return self;}, args: [], -source: unescape('testPrinting%0A%09self%20assert%3A%20self%20jsObject%20printString%20%3D%20%27%5Bobject%20Object%5D%27'), -messageSends: ["assert:", unescape("%3D"), "printString", "jsObject"], +source: unescape('testMinMax%0A%09%0A%09self%20assert%3A%20%282%20max%3A%205%29%20equals%3A%205.%0A%09self%20assert%3A%20%282%20min%3A%205%29%20equals%3A%202'), +messageSends: ["assert:equals:", "max:", "min:"], referencedClasses: [] }), -smalltalk.JSObjectProxyTest); - - +smalltalk.NumberTest); -smalltalk.addClass('PackageTest', smalltalk.TestCase, ['zorkPackage', 'grulPackage', 'backUpCommitPathJs', 'backUpCommitPathSt'], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_setUp'), +unescape('_testNegated'), smalltalk.method({ -selector: unescape('setUp'), -category: 'running', +selector: unescape('testNegated'), +category: 'tests', fn: function () { var self=this; -(self['@backUpCommitPathJs']=smalltalk.send((smalltalk.Package || Package), "_defaultCommitPathJs", [])); -(self['@backUpCommitPathSt']=smalltalk.send((smalltalk.Package || Package), "_defaultCommitPathSt", [])); -smalltalk.send((smalltalk.Package || Package), "_resetCommitPaths", []); -(self['@zorkPackage']=smalltalk.send(smalltalk.send((smalltalk.Package || Package), "_new", []), "_name_", ["Zork"])); -(self['@grulPackage']=(function($rec){smalltalk.send($rec, "_name_", ["Grul"]);smalltalk.send($rec, "_commitPathJs_", [unescape("server/grul/js")]);smalltalk.send($rec, "_commitPathSt_", [unescape("grul/st")]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Package || Package), "_new", []))); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "_negated", []), "__eq", [(-3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((-3), "_negated", []), "__eq", [(3)])]); return self;}, args: [], -source: unescape('setUp%0A%09backUpCommitPathJs%20%3A%3D%20Package%20defaultCommitPathJs.%0A%09backUpCommitPathSt%20%3A%3D%20Package%20defaultCommitPathSt.%0A%0A%09Package%20resetCommitPaths.%0A%0A%09zorkPackage%20%3A%3D%20Package%20new%20name%3A%20%27Zork%27.%0A%09grulPackage%20%3A%3D%20Package%20new%20%0A%09%09%09%09%09name%3A%20%27Grul%27%3B%0A%09%09%09%09%09commitPathJs%3A%20%27server/grul/js%27%3B%0A%09%09%09%09%09commitPathSt%3A%20%27grul/st%27%3B%0A%09%09%09%09%09yourself'), -messageSends: ["defaultCommitPathJs", "defaultCommitPathSt", "resetCommitPaths", "name:", "new", "commitPathJs:", "commitPathSt:", "yourself"], -referencedClasses: ["Package"] +source: unescape('testNegated%0A%09self%20assert%3A%203%20negated%20%3D%20-3.%0A%09self%20assert%3A%20-3%20negated%20%3D%203'), +messageSends: ["assert:", unescape("%3D"), "negated"], +referencedClasses: [] }), -smalltalk.PackageTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_tearDown'), +unescape('_testPrintShowingDecimalPlaces'), smalltalk.method({ -selector: unescape('tearDown'), -category: 'running', +selector: unescape('testPrintShowingDecimalPlaces'), +category: 'tests', fn: function () { var self=this; -(function($rec){smalltalk.send($rec, "_defaultCommitPathJs_", [self['@backUpCommitPathJs']]);return smalltalk.send($rec, "_defaultCommitPathSt_", [self['@backUpCommitPathSt']]);})((smalltalk.Package || Package)); +smalltalk.send(self, "_assert_equals_", ["23.00", smalltalk.send((23), "_printShowingDecimalPlaces_", [(2)])]); +smalltalk.send(self, "_assert_equals_", ["23.57", smalltalk.send((23.5698), "_printShowingDecimalPlaces_", [(2)])]); +smalltalk.send(self, "_assert_equals_", [unescape("-234.56700"), smalltalk.send(smalltalk.send((234.567), "_negated", []), "_printShowingDecimalPlaces_", [(5)])]); +smalltalk.send(self, "_assert_equals_", ["23", smalltalk.send((23.4567), "_printShowingDecimalPlaces_", [(0)])]); +smalltalk.send(self, "_assert_equals_", ["24", smalltalk.send((23.5567), "_printShowingDecimalPlaces_", [(0)])]); +smalltalk.send(self, "_assert_equals_", [unescape("-23"), smalltalk.send(smalltalk.send((23.4567), "_negated", []), "_printShowingDecimalPlaces_", [(0)])]); +smalltalk.send(self, "_assert_equals_", [unescape("-24"), smalltalk.send(smalltalk.send((23.5567), "_negated", []), "_printShowingDecimalPlaces_", [(0)])]); +smalltalk.send(self, "_assert_equals_", ["100000000.0", smalltalk.send((100000000), "_printShowingDecimalPlaces_", [(1)])]); +smalltalk.send(self, "_assert_equals_", ["0.98000", smalltalk.send((0.98), "_printShowingDecimalPlaces_", [(5)])]); +smalltalk.send(self, "_assert_equals_", [unescape("-0.98"), smalltalk.send(smalltalk.send((0.98), "_negated", []), "_printShowingDecimalPlaces_", [(2)])]); +smalltalk.send(self, "_assert_equals_", ["2.57", smalltalk.send((2.567), "_printShowingDecimalPlaces_", [(2)])]); +smalltalk.send(self, "_assert_equals_", [unescape("-2.57"), smalltalk.send((-2.567), "_printShowingDecimalPlaces_", [(2)])]); +smalltalk.send(self, "_assert_equals_", ["0.00", smalltalk.send((0), "_printShowingDecimalPlaces_", [(2)])]); return self;}, args: [], -source: unescape('tearDown%0A%09%20Package%20%0A%09%09defaultCommitPathJs%3A%20backUpCommitPathJs%3B%0A%09%09defaultCommitPathSt%3A%20backUpCommitPathSt'), -messageSends: ["defaultCommitPathJs:", "defaultCommitPathSt:"], -referencedClasses: ["Package"] +source: unescape('testPrintShowingDecimalPlaces%0A%09self%20assert%3A%20%2723.00%27%20equals%3A%20%2823%20printShowingDecimalPlaces%3A%202%29.%0A%09self%20assert%3A%20%2723.57%27%20equals%3A%20%2823.5698%20printShowingDecimalPlaces%3A%202%29.%0A%09self%20assert%3A%20%27-234.56700%27%20equals%3A%28%20234.567%20negated%20printShowingDecimalPlaces%3A%205%29.%0A%09self%20assert%3A%20%2723%27%20equals%3A%20%2823.4567%20printShowingDecimalPlaces%3A%200%29.%0A%09self%20assert%3A%20%2724%27%20equals%3A%20%2823.5567%20printShowingDecimalPlaces%3A%200%29.%0A%09self%20assert%3A%20%27-23%27%20equals%3A%20%2823.4567%20negated%20printShowingDecimalPlaces%3A%200%29.%0A%09self%20assert%3A%20%27-24%27%20equals%3A%20%2823.5567%20negated%20printShowingDecimalPlaces%3A%200%29.%0A%09self%20assert%3A%20%27100000000.0%27%20equals%3A%20%28100000000%20printShowingDecimalPlaces%3A%201%29.%0A%09self%20assert%3A%20%270.98000%27%20equals%3A%20%280.98%20printShowingDecimalPlaces%3A%205%29.%0A%09self%20assert%3A%20%27-0.98%27%20equals%3A%20%280.98%20negated%20printShowingDecimalPlaces%3A%202%29.%0A%09self%20assert%3A%20%272.57%27%20equals%3A%20%282.567%20printShowingDecimalPlaces%3A%202%29.%0A%09self%20assert%3A%20%27-2.57%27%20equals%3A%20%28-2.567%20printShowingDecimalPlaces%3A%202%29.%0A%09self%20assert%3A%20%270.00%27%20equals%3A%20%280%20printShowingDecimalPlaces%3A%202%29.'), +messageSends: ["assert:equals:", "printShowingDecimalPlaces:", "negated"], +referencedClasses: [] }), -smalltalk.PackageTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testGrulCommitPathStShouldBeGrulSt'), +unescape('_testRounded'), smalltalk.method({ -selector: unescape('testGrulCommitPathStShouldBeGrulSt'), +selector: unescape('testRounded'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("grul/st"), smalltalk.send(self['@grulPackage'], "_commitPathSt", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "_rounded", []), "__eq", [(3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.212), "_rounded", []), "__eq", [(3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.51), "_rounded", []), "__eq", [(4)])]); return self;}, args: [], -source: unescape('testGrulCommitPathStShouldBeGrulSt%0A%09self%20assert%3A%20%27grul/st%27%20equals%3A%20grulPackage%20commitPathSt'), -messageSends: ["assert:equals:", "commitPathSt"], +source: unescape('testRounded%0A%09%0A%09self%20assert%3A%203%20rounded%20%3D%203.%0A%09self%20assert%3A%203.212%20rounded%20%3D%203.%0A%09self%20assert%3A%203.51%20rounded%20%3D%204'), +messageSends: ["assert:", unescape("%3D"), "rounded"], referencedClasses: [] }), -smalltalk.PackageTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testZorkCommitPathStShouldBeSt'), +unescape('_testSqrt'), smalltalk.method({ -selector: unescape('testZorkCommitPathStShouldBeSt'), +selector: unescape('testSqrt'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", ["st", smalltalk.send(self['@zorkPackage'], "_commitPathSt", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((4), "_sqrt", []), "__eq", [(2)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((16), "_sqrt", []), "__eq", [(4)])]); return self;}, args: [], -source: unescape('testZorkCommitPathStShouldBeSt%0A%09self%20assert%3A%20%27st%27%20equals%3A%20zorkPackage%20commitPathSt'), -messageSends: ["assert:equals:", "commitPathSt"], +source: unescape('testSqrt%0A%09%0A%09self%20assert%3A%204%20sqrt%20%3D%202.%0A%09self%20assert%3A%2016%20sqrt%20%3D%204'), +messageSends: ["assert:", unescape("%3D"), "sqrt"], referencedClasses: [] }), -smalltalk.PackageTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testZorkCommitPathJsShouldBeJs'), +unescape('_testSquared'), smalltalk.method({ -selector: unescape('testZorkCommitPathJsShouldBeJs'), +selector: unescape('testSquared'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", ["js", smalltalk.send(self['@zorkPackage'], "_commitPathJs", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((4), "_squared", []), "__eq", [(16)])]); return self;}, args: [], -source: unescape('testZorkCommitPathJsShouldBeJs%0A%09self%20assert%3A%20%27js%27%20equals%3A%20zorkPackage%20commitPathJs'), -messageSends: ["assert:equals:", "commitPathJs"], +source: unescape('testSquared%0A%09%0A%09self%20assert%3A%204%20squared%20%3D%2016'), +messageSends: ["assert:", unescape("%3D"), "squared"], referencedClasses: [] }), -smalltalk.PackageTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testGrulCommitPathJsShouldBeServerGrulJs'), +unescape('_testTimesRepeat'), smalltalk.method({ -selector: unescape('testGrulCommitPathJsShouldBeServerGrulJs'), +selector: unescape('testTimesRepeat'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("server/grul/js"), smalltalk.send(self['@grulPackage'], "_commitPathJs", [])]); +var i=nil; +(i=(0)); +smalltalk.send((0), "_timesRepeat_", [(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})]); +smalltalk.send(self, "_assert_equals_", [i, (0)]); +smalltalk.send((5), "_timesRepeat_", [(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})]); +smalltalk.send(self, "_assert_equals_", [i, (5)]); return self;}, args: [], -source: unescape('testGrulCommitPathJsShouldBeServerGrulJs%0A%09self%20assert%3A%20%27server/grul/js%27%20equals%3A%20grulPackage%20commitPathJs'), -messageSends: ["assert:equals:", "commitPathJs"], +source: unescape('testTimesRepeat%0A%09%7C%20i%20%7C%0A%0A%09i%20%3A%3D%200.%0A%090%20timesRepeat%3A%20%5Bi%20%3A%3D%20i%20+%201%5D.%0A%09self%20assert%3A%20i%20equals%3A%200.%0A%0A%095%20timesRepeat%3A%20%5Bi%20%3A%3D%20i%20+%201%5D.%0A%09self%20assert%3A%20i%20equals%3A%205'), +messageSends: ["timesRepeat:", unescape("+"), "assert:equals:"], referencedClasses: [] }), -smalltalk.PackageTest); - - +smalltalk.NumberTest); -smalltalk.addClass('BlockClosureTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testValue'), +unescape('_testTo'), smalltalk.method({ -selector: unescape('testValue'), +selector: unescape('testTo'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(){return (1) + (1);}), "_value", []), (2)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(x){return ((($receiver = x).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]));}), "_value_", [(2)]), (3)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(x, y){return ((($receiver = x).klass === smalltalk.Number) ? $receiver *y : smalltalk.send($receiver, "__star", [y]));}), "_value_value_", [(2), (4)]), (8)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a, b, c){return (1);}), "_value", []), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((1), "_to_", [(5)]), [(1), (2), (3), (4), (5)]]); return self;}, args: [], -source: unescape('testValue%0A%09self%20assert%3A%20%28%5B1+1%5D%20value%29%20equals%3A%202.%0A%09self%20assert%3A%20%28%5B%3Ax%20%7C%20x%20+1%5D%20value%3A%202%29%20equals%3A%203.%0A%09self%20assert%3A%20%28%5B%3Ax%20%3Ay%20%7C%20x*y%5D%20value%3A%202%20value%3A%204%29%20equals%3A%208.%20%0A%0A%09%22Arguments%20are%20optional%20in%20Amber.%20This%20isn%27t%20ANSI%20compliant.%22%0A%0A%09self%20assert%3A%20%28%5B%3Aa%20%3Ab%20%3Ac%20%7C%201%5D%20value%29%20equals%3A%201'), -messageSends: ["assert:equals:", "value", unescape("+"), "value:", "value:value:", unescape("*")], +source: unescape('testTo%0A%09self%20assert%3A%20%281%20to%3A%205%29%20equals%3A%20%23%281%202%203%204%205%29'), +messageSends: ["assert:equals:", "to:"], referencedClasses: [] }), -smalltalk.BlockClosureTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testOnDo'), +unescape('_testToBy'), smalltalk.method({ -selector: unescape('testOnDo'), +selector: unescape('testToBy'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send((function(){return smalltalk.send(smalltalk.send((smalltalk.Error || Error), "_new", []), "_signal", []);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return true;})])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((0), "_to_by_", [(6), (2)]), [(0), (2), (4), (6)]]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send((1), "_to_by_", [(4), (0)]);}), (smalltalk.Error || Error)]); return self;}, args: [], -source: unescape('testOnDo%0A%09self%20assert%3A%20%28%5BError%20new%20signal%5D%20on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%20true%5D%29'), -messageSends: ["assert:", "on:do:", "signal", "new"], +source: unescape('testToBy%0A%09self%20assert%3A%20%280%20to%3A%206%20by%3A%202%29%20equals%3A%20%23%280%202%204%206%29.%0A%0A%09self%20should%3A%20%5B1%20to%3A%204%20by%3A%200%5D%20raise%3A%20Error'), +messageSends: ["assert:equals:", "to:by:", "should:raise:"], referencedClasses: ["Error"] }), -smalltalk.BlockClosureTest); +smalltalk.NumberTest); smalltalk.addMethod( -unescape('_testEnsure'), +unescape('_testTruncated'), smalltalk.method({ -selector: unescape('testEnsure'), +selector: unescape('testTruncated'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send((function(){return smalltalk.send((smalltalk.Error || Error), "_new", []);}), "_ensure_", [(function(){return true;})])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "_truncated", []), "__eq", [(3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.212), "_truncated", []), "__eq", [(3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3.51), "_truncated", []), "__eq", [(3)])]); return self;}, args: [], -source: unescape('testEnsure%0A%09self%20assert%3A%20%28%5BError%20new%5D%20ensure%3A%20%5Btrue%5D%29'), -messageSends: ["assert:", "ensure:", "new"], -referencedClasses: ["Error"] +source: unescape('testTruncated%0A%09%0A%09self%20assert%3A%203%20truncated%20%3D%203.%0A%09self%20assert%3A%203.212%20truncated%20%3D%203.%0A%09self%20assert%3A%203.51%20truncated%20%3D%203'), +messageSends: ["assert:", unescape("%3D"), "truncated"], +referencedClasses: [] }), -smalltalk.BlockClosureTest); +smalltalk.NumberTest); + + +smalltalk.addClass('ObjectMock', smalltalk.Object, ['foo', 'bar'], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testNumArgs'), +unescape('_foo'), smalltalk.method({ -selector: unescape('testNumArgs'), -category: 'tests', +selector: unescape('foo'), +category: 'not yet classified', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(){return nil;}), "_numArgs", []), (0)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a, b){return nil;}), "_numArgs", []), (2)]); +return self['@foo']; return self;}, args: [], -source: unescape('testNumArgs%0A%09self%20assert%3A%20%5B%5D%20numArgs%20equals%3A%200.%0A%09self%20assert%3A%20%5B%3Aa%20%3Ab%20%7C%20%5D%20numArgs%20equals%3A%202'), -messageSends: ["assert:equals:", "numArgs"], +source: unescape('foo%0A%09%5Efoo'), +messageSends: [], referencedClasses: [] }), -smalltalk.BlockClosureTest); +smalltalk.ObjectMock); smalltalk.addMethod( -unescape('_testValueWithPossibleArguments'), +unescape('_foo_'), smalltalk.method({ -selector: unescape('testValueWithPossibleArguments'), -category: 'tests', -fn: function () { +selector: unescape('foo%3A'), +category: 'not yet classified', +fn: function (anObject) { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(){return (1);}), "_valueWithPossibleArguments_", [[(3), (4)]]), (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a){return ((($receiver = a).klass === smalltalk.Number) ? $receiver +(4) : smalltalk.send($receiver, "__plus", [(4)]));}), "_valueWithPossibleArguments_", [[(3), (4)]]), (7)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((function(a, b){return ((($receiver = a).klass === smalltalk.Number) ? $receiver +b : smalltalk.send($receiver, "__plus", [b]));}), "_valueWithPossibleArguments_", [[(3), (4), (5)]]), (7)]); +(self['@foo']=anObject); return self;}, -args: [], -source: unescape('testValueWithPossibleArguments%0A%09self%20assert%3A%20%28%5B1%5D%20valueWithPossibleArguments%3A%20%23%283%204%29%29%20equals%3A%201.%0A%09self%20assert%3A%20%28%5B%3Aa%20%7C%20a%20+%204%5D%20valueWithPossibleArguments%3A%20%23%283%204%29%29%20equals%3A%207.%0A%09self%20assert%3A%20%28%5B%3Aa%20%3Ab%20%7C%20a%20+%20b%5D%20valueWithPossibleArguments%3A%20%23%283%204%205%29%29%20equals%3A%207.'), -messageSends: ["assert:equals:", "valueWithPossibleArguments:", unescape("+")], +args: ["anObject"], +source: unescape('foo%3A%20anObject%0A%09foo%20%3A%3D%20anObject'), +messageSends: [], referencedClasses: [] }), -smalltalk.BlockClosureTest); +smalltalk.ObjectMock); + + +smalltalk.addClass('ObjectTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testWhileTrue'), +unescape('_testBasicAccess'), smalltalk.method({ -selector: unescape('testWhileTrue'), +selector: unescape('testBasicAccess'), category: 'tests', fn: function () { var self=this; -var i=nil; -(i=(0)); -(function(){while((function(){return ((($receiver = i).klass === smalltalk.Number) ? $receiver <(5) : smalltalk.send($receiver, "__lt", [(5)]));})()) {(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})(); -smalltalk.send(self, "_assert_equals_", [i, (5)]); -(i=(0)); -(function(){while((function(){(i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));return ((($receiver = i).klass === smalltalk.Number) ? $receiver <(5) : smalltalk.send($receiver, "__lt", [(5)]));})()) {}})(); -smalltalk.send(self, "_assert_equals_", [i, (5)]); +var o=nil; +(o=smalltalk.send((smalltalk.Object || Object), "_new", [])); +smalltalk.send(o, "_basicAt_put_", ["a", (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicAt_", ["a"]), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicAt_", ["b"]), nil]); return self;}, args: [], -source: unescape('testWhileTrue%0A%09%7C%20i%20%7C%0A%09i%20%3A%3D%200.%0A%09%5Bi%20%3C%205%5D%20whileTrue%3A%20%5Bi%20%3A%3D%20i%20+%201%5D.%0A%09self%20assert%3A%20i%20equals%3A%205.%0A%0A%09i%20%3A%3D%200.%0A%09%5Bi%20%3A%3D%20i%20+%201.%20i%20%3C%205%5D%20whileTrue.%0A%09self%20assert%3A%20i%20equals%3A%205'), -messageSends: ["whileTrue:", unescape("%3C"), unescape("+"), "assert:equals:", "whileTrue"], -referencedClasses: [] +source: unescape('testBasicAccess%0A%09%7C%20o%20%7C%0A%09o%20%3A%3D%20Object%20new.%0A%09o%20basicAt%3A%20%27a%27%20put%3A%201.%0A%09self%20assert%3A%20%28o%20basicAt%3A%20%27a%27%29%20equals%3A%201.%0A%09self%20assert%3A%20%28o%20basicAt%3A%20%27b%27%29%20equals%3A%20nil'), +messageSends: ["new", "basicAt:put:", "assert:equals:", "basicAt:"], +referencedClasses: ["Object"] }), -smalltalk.BlockClosureTest); +smalltalk.ObjectTest); smalltalk.addMethod( -unescape('_testWhileFalse'), +unescape('_testBasicPerform'), smalltalk.method({ -selector: unescape('testWhileFalse'), +selector: unescape('testBasicPerform'), category: 'tests', fn: function () { var self=this; -var i=nil; -(i=(0)); -(function(){while(!(function(){return ((($receiver = i).klass === smalltalk.Number) ? $receiver >(5) : smalltalk.send($receiver, "__gt", [(5)]));})()) {(function(){return (i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})(); -smalltalk.send(self, "_assert_equals_", [i, (6)]); -(i=(0)); -(function(){while(!(function(){(i=((($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));return ((($receiver = i).klass === smalltalk.Number) ? $receiver >(5) : smalltalk.send($receiver, "__gt", [(5)]));})()) {}})(); -smalltalk.send(self, "_assert_equals_", [i, (6)]); +var o=nil; +(o=smalltalk.send((smalltalk.Object || Object), "_new", [])); +smalltalk.send(o, "_basicAt_put_", ["func", (function(){return "hello";})]); +smalltalk.send(o, "_basicAt_put_", ["func2", (function(a){return ((($receiver = a).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]));})]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicPerform_", ["func"]), "hello"]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicPerform_withArguments_", ["func2", [(3)]]), (4)]); return self;}, args: [], -source: unescape('testWhileFalse%0A%09%7C%20i%20%7C%0A%09i%20%3A%3D%200.%0A%09%5Bi%20%3E%205%5D%20whileFalse%3A%20%5Bi%20%3A%3D%20i%20+%201%5D.%0A%09self%20assert%3A%20i%20equals%3A%206.%0A%0A%09i%20%3A%3D%200.%0A%09%5Bi%20%3A%3D%20i%20+%201.%20i%20%3E%205%5D%20whileFalse.%0A%09self%20assert%3A%20i%20equals%3A%206'), -messageSends: ["whileFalse:", unescape("%3E"), unescape("+"), "assert:equals:", "whileFalse"], -referencedClasses: [] +source: unescape('testBasicPerform%0A%09%7C%20o%20%7C%0A%09o%20%3A%3D%20Object%20new.%0A%09o%20basicAt%3A%20%27func%27%20put%3A%20%5B%27hello%27%5D.%09%0A%09o%20basicAt%3A%20%27func2%27%20put%3A%20%5B%3Aa%20%7C%20a%20+%201%5D.%0A%0A%09self%20assert%3A%20%28o%20basicPerform%3A%20%27func%27%29%09%20equals%3A%20%27hello%27.%0A%09self%20assert%3A%20%28o%20basicPerform%3A%20%27func2%27%20withArguments%3A%20%23%283%29%29%20equals%3A%204'), +messageSends: ["new", "basicAt:put:", unescape("+"), "assert:equals:", "basicPerform:", "basicPerform:withArguments:"], +referencedClasses: ["Object"] }), -smalltalk.BlockClosureTest); +smalltalk.ObjectTest); smalltalk.addMethod( -unescape('_testCompiledSource'), +unescape('_testDNU'), smalltalk.method({ -selector: unescape('testCompiledSource'), +selector: unescape('testDNU'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((function(){return (1) + (1);}), "_compiledSource", []), "_includesSubString_", ["function"])]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.Object || Object), "_new", []), "_foo", []);}), (smalltalk.MessageNotUnderstood || MessageNotUnderstood)]); return self;}, args: [], -source: unescape('testCompiledSource%0A%09self%20assert%3A%20%28%5B1+1%5D%20compiledSource%20includesSubString%3A%20%27function%27%29'), -messageSends: ["assert:", "includesSubString:", "compiledSource", unescape("+")], -referencedClasses: [] +source: unescape('testDNU%0A%09self%20should%3A%20%5BObject%20new%20foo%5D%20raise%3A%20MessageNotUnderstood'), +messageSends: ["should:raise:", "foo", "new"], +referencedClasses: ["Object", "MessageNotUnderstood"] }), -smalltalk.BlockClosureTest); - - +smalltalk.ObjectTest); -smalltalk.addClass('ObjectTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( unescape('_testEquality'), smalltalk.method({ @@ -1145,6 +1088,22 @@ referencedClasses: ["Object"] }), smalltalk.ObjectTest); +smalltalk.addMethod( +unescape('_testHalt'), +smalltalk.method({ +selector: unescape('testHalt'), +category: 'tests', +fn: function () { +var self=this; +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.Object || Object), "_new", []), "_halt", []);}), (smalltalk.Error || Error)]); +return self;}, +args: [], +source: unescape('testHalt%0A%09self%20should%3A%20%5BObject%20new%20halt%5D%20raise%3A%20Error'), +messageSends: ["should:raise:", "halt", "new"], +referencedClasses: ["Object", "Error"] +}), +smalltalk.ObjectTest); + smalltalk.addMethod( unescape('_testIdentity'), smalltalk.method({ @@ -1165,38 +1124,43 @@ referencedClasses: ["Object"] smalltalk.ObjectTest); smalltalk.addMethod( -unescape('_testHalt'), +unescape('_testIfNil'), smalltalk.method({ -selector: unescape('testHalt'), +selector: unescape('testIfNil'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.Object || Object), "_new", []), "_halt", []);}), (smalltalk.Error || Error)]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send((smalltalk.Object || Object), "_new", []), "_isNil", [])]); +smalltalk.send(self, "_deny_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver, "__eq", [true])]); +smalltalk.send(self, "_assert_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) != nil && $receiver != undefined) ? (function(){return true;})() : nil, "__eq", [true])]); +smalltalk.send(self, "_assert_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) == nil || $receiver == undefined) ? (function(){return false;})() : (function(){return true;})(), "__eq", [true])]); +smalltalk.send(self, "_assert_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) == nil || $receiver == undefined) ? (function(){return false;})() : (function(){return true;})(), "__eq", [true])]); return self;}, args: [], -source: unescape('testHalt%0A%09self%20should%3A%20%5BObject%20new%20halt%5D%20raise%3A%20Error'), -messageSends: ["should:raise:", "halt", "new"], -referencedClasses: ["Object", "Error"] +source: unescape('testIfNil%0A%09self%20deny%3A%20Object%20new%20isNil.%0A%09self%20deny%3A%20%28Object%20new%20ifNil%3A%20%5Btrue%5D%29%20%3D%20true.%0A%09self%20assert%3A%20%28Object%20new%20ifNotNil%3A%20%5Btrue%5D%29%20%3D%20true.%0A%0A%09self%20assert%3A%20%28Object%20new%20ifNil%3A%20%5Bfalse%5D%20ifNotNil%3A%20%5Btrue%5D%29%20%3D%20true.%0A%09self%20assert%3A%20%28Object%20new%20ifNotNil%3A%20%5Btrue%5D%20ifNil%3A%20%5Bfalse%5D%29%20%3D%20true'), +messageSends: ["deny:", "isNil", "new", unescape("%3D"), "ifNil:", "assert:", "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil:"], +referencedClasses: ["Object"] }), smalltalk.ObjectTest); smalltalk.addMethod( -unescape('_testBasicAccess'), +unescape('_testInstVars'), smalltalk.method({ -selector: unescape('testBasicAccess'), +selector: unescape('testInstVars'), category: 'tests', fn: function () { var self=this; var o=nil; -(o=smalltalk.send((smalltalk.Object || Object), "_new", [])); -smalltalk.send(o, "_basicAt_put_", ["a", (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicAt_", ["a"]), (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicAt_", ["b"]), nil]); +(o=smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_new", [])); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_instVarAt_", [smalltalk.symbolFor("foo")]), nil]); +smalltalk.send(o, "_instVarAt_put_", [smalltalk.symbolFor("foo"), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_instVarAt_", [smalltalk.symbolFor("foo")]), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_instVarAt_", ["foo"]), (1)]); return self;}, args: [], -source: unescape('testBasicAccess%0A%09%7C%20o%20%7C%0A%09o%20%3A%3D%20Object%20new.%0A%09o%20basicAt%3A%20%27a%27%20put%3A%201.%0A%09self%20assert%3A%20%28o%20basicAt%3A%20%27a%27%29%20equals%3A%201.%0A%09self%20assert%3A%20%28o%20basicAt%3A%20%27b%27%29%20equals%3A%20nil'), -messageSends: ["new", "basicAt:put:", "assert:equals:", "basicAt:"], -referencedClasses: ["Object"] +source: unescape('testInstVars%0A%09%7C%20o%20%7C%0A%09o%20%3A%3D%20ObjectMock%20new.%0A%09self%20assert%3A%20%28o%20instVarAt%3A%20%23foo%29%20equals%3A%20nil.%0A%0A%09o%20instVarAt%3A%20%23foo%20put%3A%201.%0A%09self%20assert%3A%20%28o%20instVarAt%3A%20%23foo%29%20equals%3A%201.%0A%09self%20assert%3A%20%28o%20instVarAt%3A%20%27foo%27%29%20equals%3A%201'), +messageSends: ["new", "assert:equals:", "instVarAt:", "instVarAt:put:"], +referencedClasses: ["ObjectMock"] }), smalltalk.ObjectTest); @@ -1216,6 +1180,24 @@ referencedClasses: [] }), smalltalk.ObjectTest); +smalltalk.addMethod( +unescape('_testYourself'), +smalltalk.method({ +selector: unescape('testYourself'), +category: 'tests', +fn: function () { +var self=this; +var o=nil; +(o=smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_new", [])); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(o, "_yourself", []), "__eq_eq", [o])]); +return self;}, +args: [], +source: unescape('testYourself%0A%09%7C%20o%20%7C%0A%09o%20%3A%3D%20ObjectMock%20new.%0A%09self%20assert%3A%20o%20yourself%20%3D%3D%20o'), +messageSends: ["new", "assert:", unescape("%3D%3D"), "yourself"], +referencedClasses: ["ObjectMock"] +}), +smalltalk.ObjectTest); + smalltalk.addMethod( unescape('_testidentityHash'), smalltalk.method({ @@ -1231,769 +1213,841 @@ smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(o1, "_identityHa smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send(o1, "_identityHash", []), "__eq_eq", [smalltalk.send(o2, "_identityHash", [])])]); return self;}, args: [], -source: unescape('testidentityHash%0A%09%7C%20o1%20o2%20%7C%0A%09%0A%09o1%20%3A%3D%20Object%20new.%0A%09o2%20%3A%3D%20Object%20new.%0A%0A%09self%20assert%3A%20o1%20identityHash%20%3D%3D%20o1%20identityHash.%0A%09self%20deny%3A%20o1%20identityHash%20%3D%3D%20o2%20identityHash'), -messageSends: ["new", "assert:", unescape("%3D%3D"), "identityHash", "deny:"], -referencedClasses: ["Object"] +source: unescape('testidentityHash%0A%09%7C%20o1%20o2%20%7C%0A%09%0A%09o1%20%3A%3D%20Object%20new.%0A%09o2%20%3A%3D%20Object%20new.%0A%0A%09self%20assert%3A%20o1%20identityHash%20%3D%3D%20o1%20identityHash.%0A%09self%20deny%3A%20o1%20identityHash%20%3D%3D%20o2%20identityHash'), +messageSends: ["new", "assert:", unescape("%3D%3D"), "identityHash", "deny:"], +referencedClasses: ["Object"] +}), +smalltalk.ObjectTest); + + + +smalltalk.addClass('PackageTest', smalltalk.TestCase, ['zorkPackage', 'grulPackage', 'backUpCommitPathJs', 'backUpCommitPathSt'], 'Kernel-Tests'); +smalltalk.addMethod( +unescape('_setUp'), +smalltalk.method({ +selector: unescape('setUp'), +category: 'running', +fn: function () { +var self=this; +(self['@backUpCommitPathJs']=smalltalk.send((smalltalk.Package || Package), "_defaultCommitPathJs", [])); +(self['@backUpCommitPathSt']=smalltalk.send((smalltalk.Package || Package), "_defaultCommitPathSt", [])); +smalltalk.send((smalltalk.Package || Package), "_resetCommitPaths", []); +(self['@zorkPackage']=smalltalk.send(smalltalk.send((smalltalk.Package || Package), "_new", []), "_name_", ["Zork"])); +(self['@grulPackage']=(function($rec){smalltalk.send($rec, "_name_", ["Grul"]);smalltalk.send($rec, "_commitPathJs_", [unescape("server/grul/js")]);smalltalk.send($rec, "_commitPathSt_", [unescape("grul/st")]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Package || Package), "_new", []))); +return self;}, +args: [], +source: unescape('setUp%0A%09backUpCommitPathJs%20%3A%3D%20Package%20defaultCommitPathJs.%0A%09backUpCommitPathSt%20%3A%3D%20Package%20defaultCommitPathSt.%0A%0A%09Package%20resetCommitPaths.%0A%0A%09zorkPackage%20%3A%3D%20Package%20new%20name%3A%20%27Zork%27.%0A%09grulPackage%20%3A%3D%20Package%20new%20%0A%09%09%09%09%09name%3A%20%27Grul%27%3B%0A%09%09%09%09%09commitPathJs%3A%20%27server/grul/js%27%3B%0A%09%09%09%09%09commitPathSt%3A%20%27grul/st%27%3B%0A%09%09%09%09%09yourself'), +messageSends: ["defaultCommitPathJs", "defaultCommitPathSt", "resetCommitPaths", "name:", "new", "commitPathJs:", "commitPathSt:", "yourself"], +referencedClasses: ["Package"] +}), +smalltalk.PackageTest); + +smalltalk.addMethod( +unescape('_tearDown'), +smalltalk.method({ +selector: unescape('tearDown'), +category: 'running', +fn: function () { +var self=this; +(function($rec){smalltalk.send($rec, "_defaultCommitPathJs_", [self['@backUpCommitPathJs']]);return smalltalk.send($rec, "_defaultCommitPathSt_", [self['@backUpCommitPathSt']]);})((smalltalk.Package || Package)); +return self;}, +args: [], +source: unescape('tearDown%0A%09%20Package%20%0A%09%09defaultCommitPathJs%3A%20backUpCommitPathJs%3B%0A%09%09defaultCommitPathSt%3A%20backUpCommitPathSt'), +messageSends: ["defaultCommitPathJs:", "defaultCommitPathSt:"], +referencedClasses: ["Package"] +}), +smalltalk.PackageTest); + +smalltalk.addMethod( +unescape('_testGrulCommitPathJsShouldBeServerGrulJs'), +smalltalk.method({ +selector: unescape('testGrulCommitPathJsShouldBeServerGrulJs'), +category: 'tests', +fn: function () { +var self=this; +smalltalk.send(self, "_assert_equals_", [unescape("server/grul/js"), smalltalk.send(self['@grulPackage'], "_commitPathJs", [])]); +return self;}, +args: [], +source: unescape('testGrulCommitPathJsShouldBeServerGrulJs%0A%09self%20assert%3A%20%27server/grul/js%27%20equals%3A%20grulPackage%20commitPathJs'), +messageSends: ["assert:equals:", "commitPathJs"], +referencedClasses: [] +}), +smalltalk.PackageTest); + +smalltalk.addMethod( +unescape('_testGrulCommitPathStShouldBeGrulSt'), +smalltalk.method({ +selector: unescape('testGrulCommitPathStShouldBeGrulSt'), +category: 'tests', +fn: function () { +var self=this; +smalltalk.send(self, "_assert_equals_", [unescape("grul/st"), smalltalk.send(self['@grulPackage'], "_commitPathSt", [])]); +return self;}, +args: [], +source: unescape('testGrulCommitPathStShouldBeGrulSt%0A%09self%20assert%3A%20%27grul/st%27%20equals%3A%20grulPackage%20commitPathSt'), +messageSends: ["assert:equals:", "commitPathSt"], +referencedClasses: [] +}), +smalltalk.PackageTest); + +smalltalk.addMethod( +unescape('_testZorkCommitPathJsShouldBeJs'), +smalltalk.method({ +selector: unescape('testZorkCommitPathJsShouldBeJs'), +category: 'tests', +fn: function () { +var self=this; +smalltalk.send(self, "_assert_equals_", ["js", smalltalk.send(self['@zorkPackage'], "_commitPathJs", [])]); +return self;}, +args: [], +source: unescape('testZorkCommitPathJsShouldBeJs%0A%09self%20assert%3A%20%27js%27%20equals%3A%20zorkPackage%20commitPathJs'), +messageSends: ["assert:equals:", "commitPathJs"], +referencedClasses: [] +}), +smalltalk.PackageTest); + +smalltalk.addMethod( +unescape('_testZorkCommitPathStShouldBeSt'), +smalltalk.method({ +selector: unescape('testZorkCommitPathStShouldBeSt'), +category: 'tests', +fn: function () { +var self=this; +smalltalk.send(self, "_assert_equals_", ["st", smalltalk.send(self['@zorkPackage'], "_commitPathSt", [])]); +return self;}, +args: [], +source: unescape('testZorkCommitPathStShouldBeSt%0A%09self%20assert%3A%20%27st%27%20equals%3A%20zorkPackage%20commitPathSt'), +messageSends: ["assert:equals:", "commitPathSt"], +referencedClasses: [] }), -smalltalk.ObjectTest); +smalltalk.PackageTest); + + +smalltalk.addClass('PackageWithDefaultCommitPathChangedTest', smalltalk.PackageTest, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testBasicPerform'), +unescape('_setUp'), smalltalk.method({ -selector: unescape('testBasicPerform'), -category: 'tests', +selector: unescape('setUp'), +category: 'running', fn: function () { var self=this; -var o=nil; -(o=smalltalk.send((smalltalk.Object || Object), "_new", [])); -smalltalk.send(o, "_basicAt_put_", ["func", (function(){return "hello";})]); -smalltalk.send(o, "_basicAt_put_", ["func2", (function(a){return ((($receiver = a).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]));})]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicPerform_", ["func"]), "hello"]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_basicPerform_withArguments_", ["func2", [(3)]]), (4)]); +smalltalk.send(self, "_setUp", [], smalltalk.PackageTest); +(function($rec){smalltalk.send($rec, "_defaultCommitPathJs_", [unescape("javascripts/")]);return smalltalk.send($rec, "_defaultCommitPathSt_", [unescape("smalltalk/")]);})((smalltalk.Package || Package)); return self;}, args: [], -source: unescape('testBasicPerform%0A%09%7C%20o%20%7C%0A%09o%20%3A%3D%20Object%20new.%0A%09o%20basicAt%3A%20%27func%27%20put%3A%20%5B%27hello%27%5D.%09%0A%09o%20basicAt%3A%20%27func2%27%20put%3A%20%5B%3Aa%20%7C%20a%20+%201%5D.%0A%0A%09self%20assert%3A%20%28o%20basicPerform%3A%20%27func%27%29%09%20equals%3A%20%27hello%27.%0A%09self%20assert%3A%20%28o%20basicPerform%3A%20%27func2%27%20withArguments%3A%20%23%283%29%29%20equals%3A%204'), -messageSends: ["new", "basicAt:put:", unescape("+"), "assert:equals:", "basicPerform:", "basicPerform:withArguments:"], -referencedClasses: ["Object"] +source: unescape('setUp%0A%09super%20setUp.%0A%0A%09Package%0A%09%09defaultCommitPathJs%3A%20%27javascripts/%27%3B%0A%09%09defaultCommitPathSt%3A%20%27smalltalk/%27.'), +messageSends: ["setUp", "defaultCommitPathJs:", "defaultCommitPathSt:"], +referencedClasses: ["Package"] }), -smalltalk.ObjectTest); +smalltalk.PackageWithDefaultCommitPathChangedTest); smalltalk.addMethod( -unescape('_testIfNil'), +unescape('_testGrulCommitPathJsShouldBeServerGrulJs'), smalltalk.method({ -selector: unescape('testIfNil'), +selector: unescape('testGrulCommitPathJsShouldBeServerGrulJs'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send((smalltalk.Object || Object), "_new", []), "_isNil", [])]); -smalltalk.send(self, "_deny_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver, "__eq", [true])]); -smalltalk.send(self, "_assert_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) != nil && $receiver != undefined) ? (function(){return true;})() : nil, "__eq", [true])]); -smalltalk.send(self, "_assert_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) == nil || $receiver == undefined) ? (function(){return false;})() : (function(){return true;})(), "__eq", [true])]); -smalltalk.send(self, "_assert_", [smalltalk.send((($receiver = smalltalk.send((smalltalk.Object || Object), "_new", [])) == nil || $receiver == undefined) ? (function(){return false;})() : (function(){return true;})(), "__eq", [true])]); +smalltalk.send(self, "_assert_equals_", [unescape("server/grul/js"), smalltalk.send(self['@grulPackage'], "_commitPathJs", [])]); return self;}, args: [], -source: unescape('testIfNil%0A%09self%20deny%3A%20Object%20new%20isNil.%0A%09self%20deny%3A%20%28Object%20new%20ifNil%3A%20%5Btrue%5D%29%20%3D%20true.%0A%09self%20assert%3A%20%28Object%20new%20ifNotNil%3A%20%5Btrue%5D%29%20%3D%20true.%0A%0A%09self%20assert%3A%20%28Object%20new%20ifNil%3A%20%5Bfalse%5D%20ifNotNil%3A%20%5Btrue%5D%29%20%3D%20true.%0A%09self%20assert%3A%20%28Object%20new%20ifNotNil%3A%20%5Btrue%5D%20ifNil%3A%20%5Bfalse%5D%29%20%3D%20true'), -messageSends: ["deny:", "isNil", "new", unescape("%3D"), "ifNil:", "assert:", "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil:"], -referencedClasses: ["Object"] +source: unescape('testGrulCommitPathJsShouldBeServerGrulJs%0A%09self%20assert%3A%20%27server/grul/js%27%20equals%3A%20grulPackage%20commitPathJs'), +messageSends: ["assert:equals:", "commitPathJs"], +referencedClasses: [] }), -smalltalk.ObjectTest); +smalltalk.PackageWithDefaultCommitPathChangedTest); smalltalk.addMethod( -unescape('_testInstVars'), +unescape('_testGrulCommitPathStShouldBeGrulSt'), smalltalk.method({ -selector: unescape('testInstVars'), +selector: unescape('testGrulCommitPathStShouldBeGrulSt'), category: 'tests', fn: function () { var self=this; -var o=nil; -(o=smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_new", [])); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_instVarAt_", [smalltalk.symbolFor("foo")]), nil]); -smalltalk.send(o, "_instVarAt_put_", [smalltalk.symbolFor("foo"), (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_instVarAt_", [smalltalk.symbolFor("foo")]), (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(o, "_instVarAt_", ["foo"]), (1)]); +smalltalk.send(self, "_assert_equals_", [unescape("grul/st"), smalltalk.send(self['@grulPackage'], "_commitPathSt", [])]); return self;}, args: [], -source: unescape('testInstVars%0A%09%7C%20o%20%7C%0A%09o%20%3A%3D%20ObjectMock%20new.%0A%09self%20assert%3A%20%28o%20instVarAt%3A%20%23foo%29%20equals%3A%20nil.%0A%0A%09o%20instVarAt%3A%20%23foo%20put%3A%201.%0A%09self%20assert%3A%20%28o%20instVarAt%3A%20%23foo%29%20equals%3A%201.%0A%09self%20assert%3A%20%28o%20instVarAt%3A%20%27foo%27%29%20equals%3A%201'), -messageSends: ["new", "assert:equals:", "instVarAt:", "instVarAt:put:"], -referencedClasses: ["ObjectMock"] +source: unescape('testGrulCommitPathStShouldBeGrulSt%0A%09self%20assert%3A%20%27grul/st%27%20equals%3A%20grulPackage%20commitPathSt'), +messageSends: ["assert:equals:", "commitPathSt"], +referencedClasses: [] }), -smalltalk.ObjectTest); +smalltalk.PackageWithDefaultCommitPathChangedTest); smalltalk.addMethod( -unescape('_testYourself'), +unescape('_testZorkCommitPathJsShouldBeJavascript'), smalltalk.method({ -selector: unescape('testYourself'), +selector: unescape('testZorkCommitPathJsShouldBeJavascript'), category: 'tests', fn: function () { var self=this; -var o=nil; -(o=smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_new", [])); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(o, "_yourself", []), "__eq_eq", [o])]); +smalltalk.send(self, "_assert_equals_", [unescape("javascripts/"), smalltalk.send(self['@zorkPackage'], "_commitPathJs", [])]); return self;}, args: [], -source: unescape('testYourself%0A%09%7C%20o%20%7C%0A%09o%20%3A%3D%20ObjectMock%20new.%0A%09self%20assert%3A%20o%20yourself%20%3D%3D%20o'), -messageSends: ["new", "assert:", unescape("%3D%3D"), "yourself"], -referencedClasses: ["ObjectMock"] +source: unescape('testZorkCommitPathJsShouldBeJavascript%0A%09self%20assert%3A%20%27javascripts/%27%20equals%3A%20zorkPackage%20commitPathJs'), +messageSends: ["assert:equals:", "commitPathJs"], +referencedClasses: [] }), -smalltalk.ObjectTest); +smalltalk.PackageWithDefaultCommitPathChangedTest); smalltalk.addMethod( -unescape('_testDNU'), +unescape('_testZorkCommitPathStShouldBeSmalltalk'), smalltalk.method({ -selector: unescape('testDNU'), +selector: unescape('testZorkCommitPathStShouldBeSmalltalk'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.Object || Object), "_new", []), "_foo", []);}), (smalltalk.MessageNotUnderstood || MessageNotUnderstood)]); +smalltalk.send(self, "_assert_equals_", [unescape("smalltalk/"), smalltalk.send(self['@zorkPackage'], "_commitPathSt", [])]); return self;}, args: [], -source: unescape('testDNU%0A%09self%20should%3A%20%5BObject%20new%20foo%5D%20raise%3A%20MessageNotUnderstood'), -messageSends: ["should:raise:", "foo", "new"], -referencedClasses: ["Object", "MessageNotUnderstood"] +source: unescape('testZorkCommitPathStShouldBeSmalltalk%0A%09self%20assert%3A%20%27smalltalk/%27%20equals%3A%20zorkPackage%20commitPathSt'), +messageSends: ["assert:equals:", "commitPathSt"], +referencedClasses: [] }), -smalltalk.ObjectTest); - +smalltalk.PackageWithDefaultCommitPathChangedTest); -smalltalk.addClass('SymbolTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testEquality'), +unescape('_shouldInheritSelectors'), smalltalk.method({ -selector: unescape('testEquality'), -category: 'tests', +selector: unescape('shouldInheritSelectors'), +category: 'accessing', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.symbolFor("hello")])]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.symbolFor("world")])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", [])])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", []), "__eq", [smalltalk.symbolFor("hello")])]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", ["hello"])]); -smalltalk.send(self, "_deny_", [smalltalk.send("hello", "__eq", [smalltalk.symbolFor("hello")])]); +return false; return self;}, args: [], -source: unescape('testEquality%0A%09self%20assert%3A%20%23hello%20%3D%20%23hello.%0A%09self%20deny%3A%20%23hello%20%3D%20%23world.%0A%0A%09self%20assert%3A%20%23hello%20%20%3D%20%23hello%20yourself.%0A%09self%20assert%3A%20%23hello%20yourself%20%3D%20%23hello.%0A%0A%09self%20deny%3A%20%23hello%20%20%3D%20%27hello%27.%0A%09self%20deny%3A%20%27hello%27%20%3D%20%23hello.'), -messageSends: ["assert:", unescape("%3D"), "deny:", "yourself"], +source: unescape('shouldInheritSelectors%0A%09%5E%20false'), +messageSends: [], referencedClasses: [] }), -smalltalk.SymbolTest); +smalltalk.PackageWithDefaultCommitPathChangedTest.klass); + +smalltalk.addClass('PointTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testAt'), +unescape('_testAccessing'), smalltalk.method({ -selector: unescape('testAt'), +selector: unescape('testAccessing'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_at_", [(1)]), "__eq", ["h"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_at_", [(5)]), "__eq", ["o"])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_at_ifAbsent_", [(6), (function(){return nil;})]), "__eq", [nil])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_x_y_", [(3), (4)]), "_x", []), (3)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_x_y_", [(3), (4)]), "_y", []), (4)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_new", []), "_x_", [(3)]), "_x", []), (3)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_new", []), "_y_", [(4)]), "_y", []), (4)]); return self;}, args: [], -source: unescape('testAt%0A%09self%20assert%3A%20%28%23hello%20at%3A%201%29%20%3D%20%27h%27.%0A%09self%20assert%3A%20%28%23hello%20at%3A%205%29%20%3D%20%27o%27.%0A%09self%20assert%3A%20%28%23hello%20at%3A%206%20ifAbsent%3A%20%5Bnil%5D%29%20%3D%20nil'), -messageSends: ["assert:", unescape("%3D"), "at:", "at:ifAbsent:"], -referencedClasses: [] +source: unescape('testAccessing%0A%09self%20assert%3A%20%28Point%20x%3A%203%20y%3A%204%29%20x%20equals%3A%203.%0A%09self%20assert%3A%20%28Point%20x%3A%203%20y%3A%204%29%20y%20equals%3A%204.%0A%09self%20assert%3A%20%28Point%20new%20x%3A%203%29%20x%20equals%3A%203.%0A%09self%20assert%3A%20%28Point%20new%20y%3A%204%29%20y%20equals%3A%204'), +messageSends: ["assert:equals:", "x", "x:y:", "y", "x:", "new", "y:"], +referencedClasses: ["Point"] }), -smalltalk.SymbolTest); +smalltalk.PointTest); smalltalk.addMethod( -unescape('_testAtPut'), +unescape('_testArithmetic'), smalltalk.method({ -selector: unescape('testAtPut'), +selector: unescape('testArithmetic'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_at_put_", [(1), "a"]);}), (smalltalk.Error || Error)]); +smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((3), "__at", [(4)])).klass === smalltalk.Number) ? $receiver *smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__star", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(9), (16)])]); +smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((3), "__at", [(4)])).klass === smalltalk.Number) ? $receiver +smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__plus", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(6), (8)])]); +smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((3), "__at", [(4)])).klass === smalltalk.Number) ? $receiver -smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__minus", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(0), (0)])]); +smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((6), "__at", [(8)])).klass === smalltalk.Number) ? $receiver /smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__slash", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(2), (2)])]); return self;}, args: [], -source: unescape('testAtPut%0A%09%22Symbol%20instances%20are%20read-only%22%0A%09self%20should%3A%20%5B%27hello%27%20at%3A%201%20put%3A%20%27a%27%5D%20raise%3A%20Error'), -messageSends: ["should:raise:", "at:put:"], -referencedClasses: ["Error"] +source: unescape('testArithmetic%0A%09self%20assert%3A%203@4%20*%20%283@4%20%29%20equals%3A%20%28Point%20x%3A%209%20y%3A%2016%29.%0A%09self%20assert%3A%203@4%20+%20%283@4%20%29%20equals%3A%20%28Point%20x%3A%206%20y%3A%208%29.%0A%09self%20assert%3A%203@4%20-%20%283@4%20%29%20equals%3A%20%28Point%20x%3A%200%20y%3A%200%29.%0A%09self%20assert%3A%206@8%20/%20%283@4%20%29%20equals%3A%20%28Point%20x%3A%202%20y%3A%202%29'), +messageSends: ["assert:equals:", unescape("*"), unescape("@"), "x:y:", unescape("+"), unescape("-"), unescape("/")], +referencedClasses: ["Point"] }), -smalltalk.SymbolTest); +smalltalk.PointTest); smalltalk.addMethod( -unescape('_testIdentity'), +unescape('_testAt'), smalltalk.method({ -selector: unescape('testIdentity'), +selector: unescape('testAt'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq_eq", [smalltalk.symbolFor("hello")])]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq_eq", [smalltalk.symbolFor("world")])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", [])])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", []), "__eq", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_asString", []), "_asSymbol", [])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((3), "__at", [(4)]), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(3), (4)])]); return self;}, args: [], -source: unescape('testIdentity%0A%09self%20assert%3A%20%23hello%20%3D%3D%20%23hello.%0A%09self%20deny%3A%20%23hello%20%3D%3D%20%23world.%0A%0A%09self%20assert%3A%20%23hello%20%20%3D%20%23hello%20yourself.%0A%09self%20assert%3A%20%23hello%20yourself%20%3D%20%23hello%20asString%20asSymbol'), -messageSends: ["assert:", unescape("%3D%3D"), "deny:", unescape("%3D"), "yourself", "asSymbol", "asString"], -referencedClasses: [] +source: unescape('testAt%0A%09self%20assert%3A%203@4%20equals%3A%20%28Point%20x%3A%203%20y%3A%204%29'), +messageSends: ["assert:equals:", unescape("@"), "x:y:"], +referencedClasses: ["Point"] }), -smalltalk.SymbolTest); +smalltalk.PointTest); smalltalk.addMethod( -unescape('_testComparing'), +unescape('_testEgality'), smalltalk.method({ -selector: unescape('testComparing'), +selector: unescape('testEgality'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >smalltalk.symbolFor("aa") : smalltalk.send($receiver, "__gt", [smalltalk.symbolFor("aa")]))]); -smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__gt", [smalltalk.symbolFor("ba")]))]); -smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver <smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt", [smalltalk.symbolFor("ba")]))]); -smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("bb")).klass === smalltalk.Number) ? $receiver <smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt", [smalltalk.symbolFor("ba")]))]); -smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >=smalltalk.symbolFor("aa") : smalltalk.send($receiver, "__gt_eq", [smalltalk.symbolFor("aa")]))]); -smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >=smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__gt_eq", [smalltalk.symbolFor("ba")]))]); -smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver <=smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt_eq", [smalltalk.symbolFor("ba")]))]); -smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("bb")).klass === smalltalk.Number) ? $receiver <=smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt_eq", [smalltalk.symbolFor("ba")]))]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "__at", [(4)]), "__eq", [smalltalk.send((3), "__at", [(4)])])]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send((3), "__at", [(5)]), "__eq", [smalltalk.send((3), "__at", [(6)])])]); return self;}, args: [], -source: unescape('testComparing%0A%09self%20assert%3A%20%23ab%20%3E%20%23aa.%0A%09self%20deny%3A%20%23ab%20%3E%20%23ba.%0A%0A%09self%20assert%3A%20%23ab%20%3C%20%23ba.%0A%09self%20deny%3A%20%23bb%20%3C%20%23ba.%0A%0A%09self%20assert%3A%20%23ab%20%3E%3D%20%23aa.%0A%09self%20deny%3A%20%23ab%20%3E%3D%20%23ba.%0A%0A%09self%20assert%3A%20%23ab%20%3C%3D%20%23ba.%0A%09self%20deny%3A%20%23bb%20%3C%3D%20%23ba'), -messageSends: ["assert:", unescape("%3E"), "deny:", unescape("%3C"), unescape("%3E%3D"), unescape("%3C%3D")], +source: unescape('testEgality%0A%09self%20assert%3A%203@4%20%3D%20%283@4%29.%0A%09self%20deny%3A%203@5%20%3D%20%283@6%29'), +messageSends: ["assert:", unescape("%3D"), unescape("@"), "deny:"], referencedClasses: [] }), -smalltalk.SymbolTest); +smalltalk.PointTest); smalltalk.addMethod( -unescape('_testSize'), +unescape('_testTranslateBy'), smalltalk.method({ -selector: unescape('testSize'), +selector: unescape('testTranslateBy'), category: 'tests', -fn: function () { +fn: function (){ var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.symbolFor("a"), "_size", []), (1)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.symbolFor("aaaaa"), "_size", []), (5)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((3), "__at", [(4)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send((0), "__at", [(1)])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((3), "__at", [(2)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send((0), "__at", [smalltalk.send((1), "_negated", [])])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((5), "__at", [(6)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send((2), "__at", [(3)])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send((0), "__at", [(3)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send(smalltalk.send((3), "_negated", []), "__at", [(0)])])]); return self;}, args: [], -source: unescape('testSize%0A%09self%20assert%3A%20%23a%20size%20equals%3A%201.%0A%09self%20assert%3A%20%23aaaaa%20size%20equals%3A%205'), -messageSends: ["assert:equals:", "size"], +source: unescape('testTranslateBy%0A%09self%20assert%3A%203@4%20equals%3A%20%283@3%20translateBy%3A%200@1%29.%0A%09self%20assert%3A%203@2%20equals%3A%20%283@3%20translateBy%3A%200@1%20negated%29.%0A%09self%20assert%3A%205@6%20equals%3A%20%283@3%20translateBy%3A%202@3%29.%0A%09self%20assert%3A%200@3%20equals%3A%20%283@3%20translateBy%3A%203%20negated%20@0%29.'), +messageSends: ["assert:equals:", unescape("@"), "translateBy:", "negated"], referencedClasses: [] }), -smalltalk.SymbolTest); +smalltalk.PointTest); + + +smalltalk.addClass('RandomTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testAsString'), +unescape('_textNext'), smalltalk.method({ -selector: unescape('testAsString'), +selector: unescape('textNext'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.symbolFor("hello"), "_asString", []), "hello"]); +smalltalk.send((10000), "_timesRepeat_", [(function(){var current=nil; +var next=nil; +(next=smalltalk.send(smalltalk.send((smalltalk.Random || Random), "_new", []), "_next", []));smalltalk.send(self, "_assert_", [((($receiver = next).klass === smalltalk.Number) ? $receiver >=(0) : smalltalk.send($receiver, "__gt_eq", [(0)]))]);smalltalk.send(self, "_assert_", [((($receiver = next).klass === smalltalk.Number) ? $receiver <(1) : smalltalk.send($receiver, "__lt", [(1)]))]);smalltalk.send(self, "_deny_", [smalltalk.send(current, "__eq", [next])]);return smalltalk.send(next, "__eq", [current]);})]); return self;}, args: [], -source: unescape('testAsString%0A%09self%20assert%3A%20%23hello%20asString%20equals%3A%20%27hello%27'), -messageSends: ["assert:equals:", "asString"], -referencedClasses: [] +source: unescape('textNext%0A%0A%0910000%20timesRepeat%3A%20%5B%0A%09%09%09%7C%20current%20next%20%7C%20%0A%09%09%09next%20%3A%3D%20Random%20new%20next.%0A%09%09%09self%20assert%3A%20%28next%20%3E%3D%200%29.%0A%09%09%09self%20assert%3A%20%28next%20%3C%201%29.%0A%09%09%09self%20deny%3A%20current%20%3D%20next.%0A%09%09%09next%20%3D%20current%5D'), +messageSends: ["timesRepeat:", "next", "new", "assert:", unescape("%3E%3D"), unescape("%3C"), "deny:", unescape("%3D")], +referencedClasses: ["Random"] }), -smalltalk.SymbolTest); +smalltalk.RandomTest); + + +smalltalk.addClass('SetTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testAsSymbol'), +unescape('_testAddRemove'), smalltalk.method({ -selector: unescape('testAsSymbol'), +selector: unescape('testAddRemove'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq_eq", [smalltalk.send(smalltalk.symbolFor("hello"), "_asSymbol", [])])]); +var set=nil; +(set=smalltalk.send((smalltalk.Set || Set), "_new", [])); +smalltalk.send(self, "_assert_", [smalltalk.send(set, "_isEmpty", [])]); +smalltalk.send(set, "_add_", [(3)]); +smalltalk.send(self, "_assert_", [smalltalk.send(set, "_includes_", [(3)])]); +smalltalk.send(set, "_add_", [(5)]); +smalltalk.send(self, "_assert_", [smalltalk.send(set, "_includes_", [(5)])]); +smalltalk.send(set, "_remove_", [(3)]); +smalltalk.send(self, "_deny_", [smalltalk.send(set, "_includes_", [(3)])]); return self;}, args: [], -source: unescape('testAsSymbol%0A%09self%20assert%3A%20%23hello%20%3D%3D%20%23hello%20asSymbol'), -messageSends: ["assert:", unescape("%3D%3D"), "asSymbol"], -referencedClasses: [] +source: unescape('testAddRemove%0A%09%7C%20set%20%7C%0A%09set%20%3A%3D%20Set%20new.%0A%09%0A%09self%20assert%3A%20set%20isEmpty.%0A%0A%09set%20add%3A%203.%0A%09self%20assert%3A%20%28set%20includes%3A%203%29.%0A%0A%09set%20add%3A%205.%0A%09self%20assert%3A%20%28set%20includes%3A%205%29.%0A%0A%09set%20remove%3A%203.%0A%09self%20deny%3A%20%28set%20includes%3A%203%29'), +messageSends: ["new", "assert:", "isEmpty", "add:", "includes:", "remove:", "deny:"], +referencedClasses: ["Set"] }), -smalltalk.SymbolTest); +smalltalk.SetTest); smalltalk.addMethod( -unescape('_testCopying'), +unescape('_testAt'), smalltalk.method({ -selector: unescape('testCopying'), +selector: unescape('testAt'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_copy", []), "__eq_eq", [smalltalk.symbolFor("hello")])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_deepCopy", []), "__eq_eq", [smalltalk.symbolFor("hello")])]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_new", []), "_at_put_", [(1), (2)]);}), (smalltalk.Error || Error)]); return self;}, args: [], -source: unescape('testCopying%0A%09self%20assert%3A%20%23hello%20copy%20%3D%3D%20%23hello.%0A%09self%20assert%3A%20%23hello%20deepCopy%20%3D%3D%20%23hello'), -messageSends: ["assert:", unescape("%3D%3D"), "copy", "deepCopy"], -referencedClasses: [] +source: unescape('testAt%0A%09self%20should%3A%20%5BSet%20new%20at%3A%201%20put%3A%202%5D%20raise%3A%20Error'), +messageSends: ["should:raise:", "at:put:", "new"], +referencedClasses: ["Set", "Error"] }), -smalltalk.SymbolTest); +smalltalk.SetTest); smalltalk.addMethod( -unescape('_testIsSymbolIsString'), +unescape('_testSize'), smalltalk.method({ -selector: unescape('testIsSymbolIsString'), +selector: unescape('testSize'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "_isSymbol", [])]); -smalltalk.send(self, "_deny_", [smalltalk.send("hello", "_isSymbol", [])]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "_isString", [])]); -smalltalk.send(self, "_assert_", [smalltalk.send("hello", "_isString", [])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_new", []), "_size", []), (0)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_withAll_", [[(1), (2), (3), (4)]]), "_size", []), (4)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_withAll_", [[(1), (1), (1), (1)]]), "_size", []), (1)]); return self;}, args: [], -source: unescape('testIsSymbolIsString%0A%09self%20assert%3A%20%23hello%20isSymbol.%0A%09self%20deny%3A%20%27hello%27%20isSymbol.%0A%09self%20deny%3A%20%23hello%20isString.%0A%09self%20assert%3A%20%27hello%27%20isString'), -messageSends: ["assert:", "isSymbol", "deny:", "isString"], -referencedClasses: [] +source: unescape('testSize%0A%09self%20assert%3A%20Set%20new%20size%20equals%3A%200.%0A%09self%20assert%3A%20%28Set%20withAll%3A%20%23%281%202%203%204%29%29%20size%20equals%3A%204.%0A%09self%20assert%3A%20%28Set%20withAll%3A%20%23%281%201%201%201%29%29%20size%20equals%3A%201'), +messageSends: ["assert:equals:", "size", "new", "withAll:"], +referencedClasses: ["Set"] }), -smalltalk.SymbolTest); - - +smalltalk.SetTest); -smalltalk.addClass('ObjectMock', smalltalk.Object, ['foo', 'bar'], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_foo'), +unescape('_testUnicity'), smalltalk.method({ -selector: unescape('foo'), -category: 'not yet classified', +selector: unescape('testUnicity'), +category: 'tests', fn: function () { var self=this; -return self['@foo']; +var set=nil; +(set=smalltalk.send((smalltalk.Set || Set), "_new", [])); +smalltalk.send(set, "_add_", [(21)]); +smalltalk.send(set, "_add_", ["hello"]); +smalltalk.send(set, "_add_", [(21)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(set, "_size", []), "__eq", [(2)])]); +smalltalk.send(set, "_add_", ["hello"]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(set, "_size", []), "__eq", [(2)])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(set, "_asArray", []), [(21), "hello"]]); return self;}, args: [], -source: unescape('foo%0A%09%5Efoo'), -messageSends: [], -referencedClasses: [] -}), -smalltalk.ObjectMock); - -smalltalk.addMethod( -unescape('_foo_'), -smalltalk.method({ -selector: unescape('foo%3A'), -category: 'not yet classified', -fn: function (anObject) { -var self=this; -(self['@foo']=anObject); -return self;}, -args: ["anObject"], -source: unescape('foo%3A%20anObject%0A%09foo%20%3A%3D%20anObject'), -messageSends: [], -referencedClasses: [] +source: unescape('testUnicity%0A%09%7C%20set%20%7C%0A%09set%20%3A%3D%20Set%20new.%0A%09set%20add%3A%2021.%0A%09set%20add%3A%20%27hello%27.%0A%0A%09set%20add%3A%2021.%0A%09self%20assert%3A%20set%20size%20%3D%202.%0A%09%0A%09set%20add%3A%20%27hello%27.%0A%09self%20assert%3A%20set%20size%20%3D%202.%0A%0A%09self%20assert%3A%20set%20asArray%20equals%3A%20%23%2821%20%27hello%27%29'), +messageSends: ["new", "add:", "assert:", unescape("%3D"), "size", "assert:equals:", "asArray"], +referencedClasses: ["Set"] }), -smalltalk.ObjectMock); +smalltalk.SetTest); -smalltalk.addClass('UndefinedTest', smalltalk.TestCase, [], 'Kernel-Tests'); +smalltalk.addClass('StringTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testIsNil'), +unescape('_testAddRemove'), smalltalk.method({ -selector: unescape('testIsNil'), +selector: unescape('testAddRemove'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(nil, "_isNil", [])]); -smalltalk.send(self, "_deny_", [smalltalk.send(nil, "_notNil", [])]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_add_", ["a"]);}), (smalltalk.Error || Error)]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_remove_", ["h"]);}), (smalltalk.Error || Error)]); return self;}, args: [], -source: unescape('testIsNil%0A%09self%20assert%3A%20nil%20isNil.%0A%09self%20deny%3A%20nil%20notNil.'), -messageSends: ["assert:", "isNil", "deny:", "notNil"], -referencedClasses: [] +source: unescape('testAddRemove%0A%09self%20should%3A%20%5B%27hello%27%20add%3A%20%27a%27%5D%20raise%3A%20Error.%0A%09self%20should%3A%20%5B%27hello%27%20remove%3A%20%27h%27%5D%20raise%3A%20Error'), +messageSends: ["should:raise:", "add:", "remove:"], +referencedClasses: ["Error"] }), -smalltalk.UndefinedTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testIfNil'), +unescape('_testAsArray'), smalltalk.method({ -selector: unescape('testIfNil'), +selector: unescape('testAsArray'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [(($receiver = nil) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver, true]); -smalltalk.send(self, "_deny_", [smalltalk.send((($receiver = nil) != nil && $receiver != undefined) ? (function(){return true;})() : nil, "__eq", [true])]); -smalltalk.send(self, "_assert_equals_", [(($receiver = nil) == nil || $receiver == undefined) ? (function(){return true;})() : (function(){return false;})(), true]); -smalltalk.send(self, "_deny_", [smalltalk.send((($receiver = nil) == nil || $receiver == undefined) ? (function(){return false;})() : (function(){return true;})(), "__eq", [true])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_asArray", []), "__eq", [["h", "e", "l", "l", "o"]])]); return self;}, args: [], -source: unescape('testIfNil%0A%09self%20assert%3A%20%28nil%20ifNil%3A%20%5Btrue%5D%29%20equals%3A%20true.%0A%09self%20deny%3A%20%28nil%20ifNotNil%3A%20%5Btrue%5D%29%20%3D%20true.%0A%09self%20assert%3A%20%28nil%20ifNil%3A%20%5Btrue%5D%20ifNotNil%3A%20%5Bfalse%5D%29%20equals%3A%20true.%0A%09self%20deny%3A%20%28nil%20ifNotNil%3A%20%5Btrue%5D%20ifNil%3A%20%5Bfalse%5D%29%20%3D%20true'), -messageSends: ["assert:equals:", "ifNil:", "deny:", unescape("%3D"), "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil:"], +source: unescape('testAsArray%0A%09self%20assert%3A%20%27hello%27%20asArray%20%3D%20%23%28%27h%27%20%27e%27%20%27l%27%20%27l%27%20%27o%27%29.'), +messageSends: ["assert:", unescape("%3D"), "asArray"], referencedClasses: [] }), -smalltalk.UndefinedTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testCopying'), +unescape('_testAt'), smalltalk.method({ -selector: unescape('testCopying'), +selector: unescape('testAt'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(nil, "_copy", []), nil]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_at_", [(1)]), "__eq", ["h"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_at_", [(5)]), "__eq", ["o"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_at_ifAbsent_", [(6), (function(){return nil;})]), "__eq", [nil])]); return self;}, args: [], -source: unescape('testCopying%0A%09self%20assert%3A%20nil%20copy%20equals%3A%20nil'), -messageSends: ["assert:equals:", "copy"], +source: unescape('testAt%0A%09self%20assert%3A%20%28%27hello%27%20at%3A%201%29%20%3D%20%27h%27.%0A%09self%20assert%3A%20%28%27hello%27%20at%3A%205%29%20%3D%20%27o%27.%0A%09self%20assert%3A%20%28%27hello%27%20at%3A%206%20ifAbsent%3A%20%5Bnil%5D%29%20%3D%20nil'), +messageSends: ["assert:", unescape("%3D"), "at:", "at:ifAbsent:"], referencedClasses: [] }), -smalltalk.UndefinedTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testDeepCopy'), +unescape('_testAtPut'), smalltalk.method({ -selector: unescape('testDeepCopy'), +selector: unescape('testAtPut'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(nil, "_deepCopy", []), "__eq", [nil])]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_at_put_", [(1), "a"]);}), (smalltalk.Error || Error)]); return self;}, args: [], -source: unescape('testDeepCopy%0A%09self%20assert%3A%20nil%20deepCopy%20%3D%20nil'), -messageSends: ["assert:", unescape("%3D"), "deepCopy"], -referencedClasses: [] +source: unescape('testAtPut%0A%09%22String%20instances%20are%20read-only%22%0A%09self%20should%3A%20%5B%27hello%27%20at%3A%201%20put%3A%20%27a%27%5D%20raise%3A%20Error'), +messageSends: ["should:raise:", "at:put:"], +referencedClasses: ["Error"] }), -smalltalk.UndefinedTest); - - +smalltalk.StringTest); -smalltalk.addClass('PointTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testAccessing'), +unescape('_testCopyWithoutAll'), smalltalk.method({ -selector: unescape('testAccessing'), +selector: unescape('testCopyWithoutAll'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_x_y_", [(3), (4)]), "_x", []), (3)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_x_y_", [(3), (4)]), "_y", []), (4)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_new", []), "_x_", [(3)]), "_x", []), (3)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Point || Point), "_new", []), "_y_", [(4)]), "_y", []), (4)]); +smalltalk.send(self, "_assert_equals_", ["hello world", smalltalk.send(unescape("*hello*%20*world*"), "_copyWithoutAll_", [unescape("*")])]); return self;}, args: [], -source: unescape('testAccessing%0A%09self%20assert%3A%20%28Point%20x%3A%203%20y%3A%204%29%20x%20equals%3A%203.%0A%09self%20assert%3A%20%28Point%20x%3A%203%20y%3A%204%29%20y%20equals%3A%204.%0A%09self%20assert%3A%20%28Point%20new%20x%3A%203%29%20x%20equals%3A%203.%0A%09self%20assert%3A%20%28Point%20new%20y%3A%204%29%20y%20equals%3A%204'), -messageSends: ["assert:equals:", "x", "x:y:", "y", "x:", "new", "y:"], -referencedClasses: ["Point"] +source: unescape('testCopyWithoutAll%0A%09self%20%0A%09%09assert%3A%20%27hello%20world%27%20%0A%09%09equals%3A%20%28%27*hello*%20*world*%27%20copyWithoutAll%3A%20%27*%27%29'), +messageSends: ["assert:equals:", "copyWithoutAll:"], +referencedClasses: [] }), -smalltalk.PointTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testAt'), +unescape('_testEquality'), smalltalk.method({ -selector: unescape('testAt'), +selector: unescape('testEquality'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((3), "__at", [(4)]), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(3), (4)])]); +smalltalk.send(self, "_assert_", [smalltalk.send("hello", "__eq", ["hello"])]); +smalltalk.send(self, "_deny_", [smalltalk.send("hello", "__eq", ["world"])]); +smalltalk.send(self, "_assert_", [smalltalk.send("hello", "__eq", [smalltalk.send("hello", "_yourself", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send("hello", "_yourself", []), "__eq", ["hello"])]); +smalltalk.send(self, "_deny_", [smalltalk.send("", "__eq", [(0)])]); return self;}, args: [], -source: unescape('testAt%0A%09self%20assert%3A%203@4%20equals%3A%20%28Point%20x%3A%203%20y%3A%204%29'), -messageSends: ["assert:equals:", unescape("@"), "x:y:"], -referencedClasses: ["Point"] +source: unescape('testEquality%0A%09self%20assert%3A%20%27hello%27%20%3D%20%27hello%27.%0A%09self%20deny%3A%20%27hello%27%20%3D%20%27world%27.%0A%0A%09self%20assert%3A%20%27hello%27%20%20%3D%20%27hello%27%20yourself.%0A%09self%20assert%3A%20%27hello%27%20yourself%20%3D%20%27hello%27.%0A%0A%09%22test%20JS%20falsy%20value%22%0A%09self%20deny%3A%20%27%27%20%3D%200'), +messageSends: ["assert:", unescape("%3D"), "deny:", "yourself"], +referencedClasses: [] }), -smalltalk.PointTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testEgality'), +unescape('_testIncludesSubString'), smalltalk.method({ -selector: unescape('testEgality'), +selector: unescape('testIncludesSubString'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((3), "__at", [(4)]), "__eq", [smalltalk.send((3), "__at", [(4)])])]); -smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.send((3), "__at", [(5)]), "__eq", [smalltalk.send((3), "__at", [(6)])])]); +smalltalk.send(self, "_assert_", [smalltalk.send("amber", "_includesSubString_", ["ber"])]); +smalltalk.send(self, "_deny_", [smalltalk.send("amber", "_includesSubString_", ["zork"])]); return self;}, args: [], -source: unescape('testEgality%0A%09self%20assert%3A%203@4%20%3D%20%283@4%29.%0A%09self%20deny%3A%203@5%20%3D%20%283@6%29'), -messageSends: ["assert:", unescape("%3D"), unescape("@"), "deny:"], +source: unescape('testIncludesSubString%0A%09self%20assert%3A%20%28%27amber%27%20includesSubString%3A%20%27ber%27%29.%0A%09self%20deny%3A%20%28%27amber%27%20includesSubString%3A%20%27zork%27%29.'), +messageSends: ["assert:", "includesSubString:", "deny:"], referencedClasses: [] }), -smalltalk.PointTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testArithmetic'), +unescape('_testJoin'), smalltalk.method({ -selector: unescape('testArithmetic'), +selector: unescape('testJoin'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((3), "__at", [(4)])).klass === smalltalk.Number) ? $receiver *smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__star", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(9), (16)])]); -smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((3), "__at", [(4)])).klass === smalltalk.Number) ? $receiver +smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__plus", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(6), (8)])]); -smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((3), "__at", [(4)])).klass === smalltalk.Number) ? $receiver -smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__minus", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(0), (0)])]); -smalltalk.send(self, "_assert_equals_", [((($receiver = smalltalk.send((6), "__at", [(8)])).klass === smalltalk.Number) ? $receiver /smalltalk.send((3), "__at", [(4)]) : smalltalk.send($receiver, "__slash", [smalltalk.send((3), "__at", [(4)])])), smalltalk.send((smalltalk.Point || Point), "_x_y_", [(2), (2)])]); +smalltalk.send(self, "_assert_equals_", [unescape("hello%2Cworld"), smalltalk.send(unescape("%2C"), "_join_", [["hello", "world"]])]); return self;}, args: [], -source: unescape('testArithmetic%0A%09self%20assert%3A%203@4%20*%20%283@4%20%29%20equals%3A%20%28Point%20x%3A%209%20y%3A%2016%29.%0A%09self%20assert%3A%203@4%20+%20%283@4%20%29%20equals%3A%20%28Point%20x%3A%206%20y%3A%208%29.%0A%09self%20assert%3A%203@4%20-%20%283@4%20%29%20equals%3A%20%28Point%20x%3A%200%20y%3A%200%29.%0A%09self%20assert%3A%206@8%20/%20%283@4%20%29%20equals%3A%20%28Point%20x%3A%202%20y%3A%202%29'), -messageSends: ["assert:equals:", unescape("*"), unescape("@"), "x:y:", unescape("+"), unescape("-"), unescape("/")], -referencedClasses: ["Point"] +source: unescape('testJoin%0A%09self%20assert%3A%20%27hello%2Cworld%27%20equals%3A%20%28%27%2C%27%20join%3A%20%23%28%27hello%27%20%27world%27%29%29'), +messageSends: ["assert:equals:", "join:"], +referencedClasses: [] }), -smalltalk.PointTest); +smalltalk.StringTest); smalltalk.addMethod( -unescape('_testTranslateBy'), +unescape('_testSize'), smalltalk.method({ -selector: unescape('testTranslateBy'), +selector: unescape('testSize'), category: 'tests', -fn: function (){ +fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send((3), "__at", [(4)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send((0), "__at", [(1)])])]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((3), "__at", [(2)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send((0), "__at", [smalltalk.send((1), "_negated", [])])])]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((5), "__at", [(6)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send((2), "__at", [(3)])])]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send((0), "__at", [(3)]), smalltalk.send(smalltalk.send((3), "__at", [(3)]), "_translateBy_", [smalltalk.send(smalltalk.send((3), "_negated", []), "__at", [(0)])])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send("smalltalk", "_size", []), (9)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send("", "_size", []), (0)]); return self;}, args: [], -source: unescape('testTranslateBy%0A%09self%20assert%3A%203@4%20equals%3A%20%283@3%20translateBy%3A%200@1%29.%0A%09self%20assert%3A%203@2%20equals%3A%20%283@3%20translateBy%3A%200@1%20negated%29.%0A%09self%20assert%3A%205@6%20equals%3A%20%283@3%20translateBy%3A%202@3%29.%0A%09self%20assert%3A%200@3%20equals%3A%20%283@3%20translateBy%3A%203%20negated%20@0%29.'), -messageSends: ["assert:equals:", unescape("@"), "translateBy:", "negated"], +source: unescape('testSize%0A%09self%20assert%3A%20%27smalltalk%27%20size%20equals%3A%209.%0A%09self%20assert%3A%20%27%27%20size%20equals%3A%200'), +messageSends: ["assert:equals:", "size"], referencedClasses: [] }), -smalltalk.PointTest); - - +smalltalk.StringTest); -smalltalk.addClass('RandomTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_textNext'), +unescape('_testStreamContents'), smalltalk.method({ -selector: unescape('textNext'), +selector: unescape('testStreamContents'), category: 'tests', fn: function () { var self=this; -smalltalk.send((10000), "_timesRepeat_", [(function(){var current=nil; -var next=nil; -(next=smalltalk.send(smalltalk.send((smalltalk.Random || Random), "_new", []), "_next", []));smalltalk.send(self, "_assert_", [((($receiver = next).klass === smalltalk.Number) ? $receiver >=(0) : smalltalk.send($receiver, "__gt_eq", [(0)]))]);smalltalk.send(self, "_assert_", [((($receiver = next).klass === smalltalk.Number) ? $receiver <(1) : smalltalk.send($receiver, "__lt", [(1)]))]);smalltalk.send(self, "_deny_", [smalltalk.send(current, "__eq", [next])]);return smalltalk.send(next, "__eq", [current]);})]); +smalltalk.send(self, "_assert_equals_", ["hello world", smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(aStream){return (function($rec){smalltalk.send($rec, "_nextPutAll_", ["hello"]);smalltalk.send($rec, "_space", []);return smalltalk.send($rec, "_nextPutAll_", ["world"]);})(aStream);})])]); return self;}, args: [], -source: unescape('textNext%0A%0A%0910000%20timesRepeat%3A%20%5B%0A%09%09%09%7C%20current%20next%20%7C%20%0A%09%09%09next%20%3A%3D%20Random%20new%20next.%0A%09%09%09self%20assert%3A%20%28next%20%3E%3D%200%29.%0A%09%09%09self%20assert%3A%20%28next%20%3C%201%29.%0A%09%09%09self%20deny%3A%20current%20%3D%20next.%0A%09%09%09next%20%3D%20current%5D'), -messageSends: ["timesRepeat:", "next", "new", "assert:", unescape("%3E%3D"), unescape("%3C"), "deny:", unescape("%3D")], -referencedClasses: ["Random"] +source: unescape('testStreamContents%0A%09self%20%0A%09%09assert%3A%20%27hello%20world%27%20%0A%09%09equals%3A%20%28String%20streamContents%3A%20%5B%3AaStream%7C%20aStream%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27hello%27%3B%20space%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27world%27%5D%29'), +messageSends: ["assert:equals:", "streamContents:", "nextPutAll:", "space"], +referencedClasses: ["String"] }), -smalltalk.RandomTest); +smalltalk.StringTest); -smalltalk.addClass('ClassBuilderTest', smalltalk.TestCase, ['builder', 'theClass'], 'Kernel-Tests'); +smalltalk.addClass('SymbolTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_setUp'), -smalltalk.method({ -selector: unescape('setUp'), -category: 'running', +unescape('_testAsString'), +smalltalk.method({ +selector: unescape('testAsString'), +category: 'tests', fn: function () { var self=this; -(self['@builder']=smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", [])); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.symbolFor("hello"), "_asString", []), "hello"]); return self;}, args: [], -source: unescape('setUp%0A%09builder%20%3A%3D%20ClassBuilder%20new'), -messageSends: ["new"], -referencedClasses: ["ClassBuilder"] +source: unescape('testAsString%0A%09self%20assert%3A%20%23hello%20asString%20equals%3A%20%27hello%27'), +messageSends: ["assert:equals:", "asString"], +referencedClasses: [] }), -smalltalk.ClassBuilderTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_tearDown'), +unescape('_testAsSymbol'), smalltalk.method({ -selector: unescape('tearDown'), -category: 'running', +selector: unescape('testAsSymbol'), +category: 'tests', fn: function () { var self=this; -(($receiver = self['@theClass']) != nil && $receiver != undefined) ? (function(){smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_removeClass_", [self['@theClass']]);return (self['@theClass']=nil);})() : nil; +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq_eq", [smalltalk.send(smalltalk.symbolFor("hello"), "_asSymbol", [])])]); return self;}, args: [], -source: unescape('tearDown%0A%09theClass%20ifNotNil%3A%20%5BSmalltalk%20current%20removeClass%3A%20theClass.%20theClass%20%3A%3D%20nil%5D'), -messageSends: ["ifNotNil:", "removeClass:", "current"], -referencedClasses: ["Smalltalk"] +source: unescape('testAsSymbol%0A%09self%20assert%3A%20%23hello%20%3D%3D%20%23hello%20asSymbol'), +messageSends: ["assert:", unescape("%3D%3D"), "asSymbol"], +referencedClasses: [] }), -smalltalk.ClassBuilderTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_testClassCopy'), +unescape('_testAt'), smalltalk.method({ -selector: unescape('testClassCopy'), -category: 'running', +selector: unescape('testAt'), +category: 'tests', fn: function () { var self=this; -(self['@theClass']=smalltalk.send(self['@builder'], "_copyClass_named_", [(smalltalk.ObjectMock || ObjectMock), "ObjectMock2"])); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(self['@theClass'], "_superclass", []), "__eq_eq", [smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_superclass", [])])]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(self['@theClass'], "_instanceVariableNames", []), "__eq_eq", [smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_instanceVariableNames", [])])]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(self['@theClass'], "_name", []), "ObjectMock2"]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(self['@theClass'], "_package", []), "__eq_eq", [smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_package", [])])]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send(self['@theClass'], "_methodDictionary", []), "_keys", []), smalltalk.send(smalltalk.send((smalltalk.ObjectMock || ObjectMock), "_methodDictionary", []), "_keys", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_at_", [(1)]), "__eq", ["h"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_at_", [(5)]), "__eq", ["o"])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_at_ifAbsent_", [(6), (function(){return nil;})]), "__eq", [nil])]); return self;}, args: [], -source: unescape('testClassCopy%0A%09theClass%20%3A%3D%20builder%20copyClass%3A%20ObjectMock%20named%3A%20%27ObjectMock2%27.%0A%09self%20assert%3A%20theClass%20superclass%20%3D%3D%20ObjectMock%20superclass.%0A%09self%20assert%3A%20theClass%20instanceVariableNames%20%3D%3D%20ObjectMock%20instanceVariableNames.%0A%09self%20assert%3A%20theClass%20name%20equals%3A%20%27ObjectMock2%27.%0A%09self%20assert%3A%20theClass%20package%20%3D%3D%20ObjectMock%20package.%0A%09self%20assert%3A%20theClass%20methodDictionary%20keys%20equals%3A%20ObjectMock%20methodDictionary%20keys'), -messageSends: ["copyClass:named:", "assert:", unescape("%3D%3D"), "superclass", "instanceVariableNames", "assert:equals:", "name", "package", "keys", "methodDictionary"], -referencedClasses: ["ObjectMock"] +source: unescape('testAt%0A%09self%20assert%3A%20%28%23hello%20at%3A%201%29%20%3D%20%27h%27.%0A%09self%20assert%3A%20%28%23hello%20at%3A%205%29%20%3D%20%27o%27.%0A%09self%20assert%3A%20%28%23hello%20at%3A%206%20ifAbsent%3A%20%5Bnil%5D%29%20%3D%20nil'), +messageSends: ["assert:", unescape("%3D"), "at:", "at:ifAbsent:"], +referencedClasses: [] }), -smalltalk.ClassBuilderTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_testInstanceVariableNames'), +unescape('_testAtPut'), smalltalk.method({ -selector: unescape('testInstanceVariableNames'), -category: 'running', +selector: unescape('testAtPut'), +category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(self['@builder'], "_instanceVariableNamesFor_", [" hello world "]), ["hello", "world"]]); +smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send("hello", "_at_put_", [(1), "a"]);}), (smalltalk.Error || Error)]); return self;}, args: [], -source: unescape('testInstanceVariableNames%0A%09self%20assert%3A%20%28builder%20instanceVariableNamesFor%3A%20%27%20%20hello%20%20%20world%20%20%20%27%29%20equals%3A%20%23%28%27hello%27%20%27world%27%29'), -messageSends: ["assert:equals:", "instanceVariableNamesFor:"], -referencedClasses: [] +source: unescape('testAtPut%0A%09%22Symbol%20instances%20are%20read-only%22%0A%09self%20should%3A%20%5B%27hello%27%20at%3A%201%20put%3A%20%27a%27%5D%20raise%3A%20Error'), +messageSends: ["should:raise:", "at:put:"], +referencedClasses: ["Error"] }), -smalltalk.ClassBuilderTest); - - +smalltalk.SymbolTest); -smalltalk.addClass('SetTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testUnicity'), +unescape('_testComparing'), smalltalk.method({ -selector: unescape('testUnicity'), +selector: unescape('testComparing'), category: 'tests', fn: function () { var self=this; -var set=nil; -(set=smalltalk.send((smalltalk.Set || Set), "_new", [])); -smalltalk.send(set, "_add_", [(21)]); -smalltalk.send(set, "_add_", ["hello"]); -smalltalk.send(set, "_add_", [(21)]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(set, "_size", []), "__eq", [(2)])]); -smalltalk.send(set, "_add_", ["hello"]); -smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(set, "_size", []), "__eq", [(2)])]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(set, "_asArray", []), [(21), "hello"]]); +smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >smalltalk.symbolFor("aa") : smalltalk.send($receiver, "__gt", [smalltalk.symbolFor("aa")]))]); +smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__gt", [smalltalk.symbolFor("ba")]))]); +smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver <smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt", [smalltalk.symbolFor("ba")]))]); +smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("bb")).klass === smalltalk.Number) ? $receiver <smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt", [smalltalk.symbolFor("ba")]))]); +smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >=smalltalk.symbolFor("aa") : smalltalk.send($receiver, "__gt_eq", [smalltalk.symbolFor("aa")]))]); +smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver >=smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__gt_eq", [smalltalk.symbolFor("ba")]))]); +smalltalk.send(self, "_assert_", [((($receiver = smalltalk.symbolFor("ab")).klass === smalltalk.Number) ? $receiver <=smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt_eq", [smalltalk.symbolFor("ba")]))]); +smalltalk.send(self, "_deny_", [((($receiver = smalltalk.symbolFor("bb")).klass === smalltalk.Number) ? $receiver <=smalltalk.symbolFor("ba") : smalltalk.send($receiver, "__lt_eq", [smalltalk.symbolFor("ba")]))]); return self;}, args: [], -source: unescape('testUnicity%0A%09%7C%20set%20%7C%0A%09set%20%3A%3D%20Set%20new.%0A%09set%20add%3A%2021.%0A%09set%20add%3A%20%27hello%27.%0A%0A%09set%20add%3A%2021.%0A%09self%20assert%3A%20set%20size%20%3D%202.%0A%09%0A%09set%20add%3A%20%27hello%27.%0A%09self%20assert%3A%20set%20size%20%3D%202.%0A%0A%09self%20assert%3A%20set%20asArray%20equals%3A%20%23%2821%20%27hello%27%29'), -messageSends: ["new", "add:", "assert:", unescape("%3D"), "size", "assert:equals:", "asArray"], -referencedClasses: ["Set"] +source: unescape('testComparing%0A%09self%20assert%3A%20%23ab%20%3E%20%23aa.%0A%09self%20deny%3A%20%23ab%20%3E%20%23ba.%0A%0A%09self%20assert%3A%20%23ab%20%3C%20%23ba.%0A%09self%20deny%3A%20%23bb%20%3C%20%23ba.%0A%0A%09self%20assert%3A%20%23ab%20%3E%3D%20%23aa.%0A%09self%20deny%3A%20%23ab%20%3E%3D%20%23ba.%0A%0A%09self%20assert%3A%20%23ab%20%3C%3D%20%23ba.%0A%09self%20deny%3A%20%23bb%20%3C%3D%20%23ba'), +messageSends: ["assert:", unescape("%3E"), "deny:", unescape("%3C"), unescape("%3E%3D"), unescape("%3C%3D")], +referencedClasses: [] }), -smalltalk.SetTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_testAt'), +unescape('_testCopying'), smalltalk.method({ -selector: unescape('testAt'), +selector: unescape('testCopying'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_should_raise_", [(function(){return smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_new", []), "_at_put_", [(1), (2)]);}), (smalltalk.Error || Error)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_copy", []), "__eq_eq", [smalltalk.symbolFor("hello")])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_deepCopy", []), "__eq_eq", [smalltalk.symbolFor("hello")])]); return self;}, args: [], -source: unescape('testAt%0A%09self%20should%3A%20%5BSet%20new%20at%3A%201%20put%3A%202%5D%20raise%3A%20Error'), -messageSends: ["should:raise:", "at:put:", "new"], -referencedClasses: ["Set", "Error"] +source: unescape('testCopying%0A%09self%20assert%3A%20%23hello%20copy%20%3D%3D%20%23hello.%0A%09self%20assert%3A%20%23hello%20deepCopy%20%3D%3D%20%23hello'), +messageSends: ["assert:", unescape("%3D%3D"), "copy", "deepCopy"], +referencedClasses: [] }), -smalltalk.SetTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_testAddRemove'), +unescape('_testEquality'), smalltalk.method({ -selector: unescape('testAddRemove'), +selector: unescape('testEquality'), category: 'tests', fn: function () { var self=this; -var set=nil; -(set=smalltalk.send((smalltalk.Set || Set), "_new", [])); -smalltalk.send(self, "_assert_", [smalltalk.send(set, "_isEmpty", [])]); -smalltalk.send(set, "_add_", [(3)]); -smalltalk.send(self, "_assert_", [smalltalk.send(set, "_includes_", [(3)])]); -smalltalk.send(set, "_add_", [(5)]); -smalltalk.send(self, "_assert_", [smalltalk.send(set, "_includes_", [(5)])]); -smalltalk.send(set, "_remove_", [(3)]); -smalltalk.send(self, "_deny_", [smalltalk.send(set, "_includes_", [(3)])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.symbolFor("hello")])]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.symbolFor("world")])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", []), "__eq", [smalltalk.symbolFor("hello")])]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", ["hello"])]); +smalltalk.send(self, "_deny_", [smalltalk.send("hello", "__eq", [smalltalk.symbolFor("hello")])]); return self;}, args: [], -source: unescape('testAddRemove%0A%09%7C%20set%20%7C%0A%09set%20%3A%3D%20Set%20new.%0A%09%0A%09self%20assert%3A%20set%20isEmpty.%0A%0A%09set%20add%3A%203.%0A%09self%20assert%3A%20%28set%20includes%3A%203%29.%0A%0A%09set%20add%3A%205.%0A%09self%20assert%3A%20%28set%20includes%3A%205%29.%0A%0A%09set%20remove%3A%203.%0A%09self%20deny%3A%20%28set%20includes%3A%203%29'), -messageSends: ["new", "assert:", "isEmpty", "add:", "includes:", "remove:", "deny:"], -referencedClasses: ["Set"] +source: unescape('testEquality%0A%09self%20assert%3A%20%23hello%20%3D%20%23hello.%0A%09self%20deny%3A%20%23hello%20%3D%20%23world.%0A%0A%09self%20assert%3A%20%23hello%20%20%3D%20%23hello%20yourself.%0A%09self%20assert%3A%20%23hello%20yourself%20%3D%20%23hello.%0A%0A%09self%20deny%3A%20%23hello%20%20%3D%20%27hello%27.%0A%09self%20deny%3A%20%27hello%27%20%3D%20%23hello.'), +messageSends: ["assert:", unescape("%3D"), "deny:", "yourself"], +referencedClasses: [] }), -smalltalk.SetTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_testSize'), +unescape('_testIdentity'), smalltalk.method({ -selector: unescape('testSize'), +selector: unescape('testIdentity'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_new", []), "_size", []), (0)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_withAll_", [[(1), (2), (3), (4)]]), "_size", []), (4)]); -smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.send((smalltalk.Set || Set), "_withAll_", [[(1), (1), (1), (1)]]), "_size", []), (1)]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq_eq", [smalltalk.symbolFor("hello")])]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq_eq", [smalltalk.symbolFor("world")])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "__eq", [smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_yourself", []), "__eq", [smalltalk.send(smalltalk.send(smalltalk.symbolFor("hello"), "_asString", []), "_asSymbol", [])])]); return self;}, args: [], -source: unescape('testSize%0A%09self%20assert%3A%20Set%20new%20size%20equals%3A%200.%0A%09self%20assert%3A%20%28Set%20withAll%3A%20%23%281%202%203%204%29%29%20size%20equals%3A%204.%0A%09self%20assert%3A%20%28Set%20withAll%3A%20%23%281%201%201%201%29%29%20size%20equals%3A%201'), -messageSends: ["assert:equals:", "size", "new", "withAll:"], -referencedClasses: ["Set"] +source: unescape('testIdentity%0A%09self%20assert%3A%20%23hello%20%3D%3D%20%23hello.%0A%09self%20deny%3A%20%23hello%20%3D%3D%20%23world.%0A%0A%09self%20assert%3A%20%23hello%20%20%3D%20%23hello%20yourself.%0A%09self%20assert%3A%20%23hello%20yourself%20%3D%20%23hello%20asString%20asSymbol'), +messageSends: ["assert:", unescape("%3D%3D"), "deny:", unescape("%3D"), "yourself", "asSymbol", "asString"], +referencedClasses: [] }), -smalltalk.SetTest); - - +smalltalk.SymbolTest); -smalltalk.addClass('PackageWithDefaultCommitPathChangedTest', smalltalk.PackageTest, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_setUp'), +unescape('_testIsSymbolIsString'), smalltalk.method({ -selector: unescape('setUp'), -category: 'running', +selector: unescape('testIsSymbolIsString'), +category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_setUp", [], smalltalk.PackageTest); -(function($rec){smalltalk.send($rec, "_defaultCommitPathJs_", [unescape("javascripts/")]);return smalltalk.send($rec, "_defaultCommitPathSt_", [unescape("smalltalk/")]);})((smalltalk.Package || Package)); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.symbolFor("hello"), "_isSymbol", [])]); +smalltalk.send(self, "_deny_", [smalltalk.send("hello", "_isSymbol", [])]); +smalltalk.send(self, "_deny_", [smalltalk.send(smalltalk.symbolFor("hello"), "_isString", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send("hello", "_isString", [])]); return self;}, args: [], -source: unescape('setUp%0A%09super%20setUp.%0A%0A%09Package%0A%09%09defaultCommitPathJs%3A%20%27javascripts/%27%3B%0A%09%09defaultCommitPathSt%3A%20%27smalltalk/%27.'), -messageSends: ["setUp", "defaultCommitPathJs:", "defaultCommitPathSt:"], -referencedClasses: ["Package"] +source: unescape('testIsSymbolIsString%0A%09self%20assert%3A%20%23hello%20isSymbol.%0A%09self%20deny%3A%20%27hello%27%20isSymbol.%0A%09self%20deny%3A%20%23hello%20isString.%0A%09self%20assert%3A%20%27hello%27%20isString'), +messageSends: ["assert:", "isSymbol", "deny:", "isString"], +referencedClasses: [] }), -smalltalk.PackageWithDefaultCommitPathChangedTest); +smalltalk.SymbolTest); smalltalk.addMethod( -unescape('_testGrulCommitPathJsShouldBeServerGrulJs'), +unescape('_testSize'), smalltalk.method({ -selector: unescape('testGrulCommitPathJsShouldBeServerGrulJs'), +selector: unescape('testSize'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("server/grul/js"), smalltalk.send(self['@grulPackage'], "_commitPathJs", [])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.symbolFor("a"), "_size", []), (1)]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(smalltalk.symbolFor("aaaaa"), "_size", []), (5)]); return self;}, args: [], -source: unescape('testGrulCommitPathJsShouldBeServerGrulJs%0A%09self%20assert%3A%20%27server/grul/js%27%20equals%3A%20grulPackage%20commitPathJs'), -messageSends: ["assert:equals:", "commitPathJs"], +source: unescape('testSize%0A%09self%20assert%3A%20%23a%20size%20equals%3A%201.%0A%09self%20assert%3A%20%23aaaaa%20size%20equals%3A%205'), +messageSends: ["assert:equals:", "size"], referencedClasses: [] }), -smalltalk.PackageWithDefaultCommitPathChangedTest); +smalltalk.SymbolTest); + + +smalltalk.addClass('UndefinedTest', smalltalk.TestCase, [], 'Kernel-Tests'); smalltalk.addMethod( -unescape('_testGrulCommitPathStShouldBeGrulSt'), +unescape('_testCopying'), smalltalk.method({ -selector: unescape('testGrulCommitPathStShouldBeGrulSt'), +selector: unescape('testCopying'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("grul/st"), smalltalk.send(self['@grulPackage'], "_commitPathSt", [])]); +smalltalk.send(self, "_assert_equals_", [smalltalk.send(nil, "_copy", []), nil]); return self;}, args: [], -source: unescape('testGrulCommitPathStShouldBeGrulSt%0A%09self%20assert%3A%20%27grul/st%27%20equals%3A%20grulPackage%20commitPathSt'), -messageSends: ["assert:equals:", "commitPathSt"], +source: unescape('testCopying%0A%09self%20assert%3A%20nil%20copy%20equals%3A%20nil'), +messageSends: ["assert:equals:", "copy"], referencedClasses: [] }), -smalltalk.PackageWithDefaultCommitPathChangedTest); +smalltalk.UndefinedTest); smalltalk.addMethod( -unescape('_testZorkCommitPathJsShouldBeJavascript'), +unescape('_testDeepCopy'), smalltalk.method({ -selector: unescape('testZorkCommitPathJsShouldBeJavascript'), +selector: unescape('testDeepCopy'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("javascripts/"), smalltalk.send(self['@zorkPackage'], "_commitPathJs", [])]); +smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send(nil, "_deepCopy", []), "__eq", [nil])]); return self;}, args: [], -source: unescape('testZorkCommitPathJsShouldBeJavascript%0A%09self%20assert%3A%20%27javascripts/%27%20equals%3A%20zorkPackage%20commitPathJs'), -messageSends: ["assert:equals:", "commitPathJs"], +source: unescape('testDeepCopy%0A%09self%20assert%3A%20nil%20deepCopy%20%3D%20nil'), +messageSends: ["assert:", unescape("%3D"), "deepCopy"], referencedClasses: [] }), -smalltalk.PackageWithDefaultCommitPathChangedTest); +smalltalk.UndefinedTest); smalltalk.addMethod( -unescape('_testZorkCommitPathStShouldBeSmalltalk'), +unescape('_testIfNil'), smalltalk.method({ -selector: unescape('testZorkCommitPathStShouldBeSmalltalk'), +selector: unescape('testIfNil'), category: 'tests', fn: function () { var self=this; -smalltalk.send(self, "_assert_equals_", [unescape("smalltalk/"), smalltalk.send(self['@zorkPackage'], "_commitPathSt", [])]); +smalltalk.send(self, "_assert_equals_", [(($receiver = nil) == nil || $receiver == undefined) ? (function(){return true;})() : $receiver, true]); +smalltalk.send(self, "_deny_", [smalltalk.send((($receiver = nil) != nil && $receiver != undefined) ? (function(){return true;})() : nil, "__eq", [true])]); +smalltalk.send(self, "_assert_equals_", [(($receiver = nil) == nil || $receiver == undefined) ? (function(){return true;})() : (function(){return false;})(), true]); +smalltalk.send(self, "_deny_", [smalltalk.send((($receiver = nil) == nil || $receiver == undefined) ? (function(){return false;})() : (function(){return true;})(), "__eq", [true])]); return self;}, args: [], -source: unescape('testZorkCommitPathStShouldBeSmalltalk%0A%09self%20assert%3A%20%27smalltalk/%27%20equals%3A%20zorkPackage%20commitPathSt'), -messageSends: ["assert:equals:", "commitPathSt"], +source: unescape('testIfNil%0A%09self%20assert%3A%20%28nil%20ifNil%3A%20%5Btrue%5D%29%20equals%3A%20true.%0A%09self%20deny%3A%20%28nil%20ifNotNil%3A%20%5Btrue%5D%29%20%3D%20true.%0A%09self%20assert%3A%20%28nil%20ifNil%3A%20%5Btrue%5D%20ifNotNil%3A%20%5Bfalse%5D%29%20equals%3A%20true.%0A%09self%20deny%3A%20%28nil%20ifNotNil%3A%20%5Btrue%5D%20ifNil%3A%20%5Bfalse%5D%29%20%3D%20true'), +messageSends: ["assert:equals:", "ifNil:", "deny:", unescape("%3D"), "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil:"], referencedClasses: [] }), -smalltalk.PackageWithDefaultCommitPathChangedTest); - +smalltalk.UndefinedTest); smalltalk.addMethod( -unescape('_shouldInheritSelectors'), +unescape('_testIsNil'), smalltalk.method({ -selector: unescape('shouldInheritSelectors'), -category: 'accessing', +selector: unescape('testIsNil'), +category: 'tests', fn: function () { var self=this; -return false; +smalltalk.send(self, "_assert_", [smalltalk.send(nil, "_isNil", [])]); +smalltalk.send(self, "_deny_", [smalltalk.send(nil, "_notNil", [])]); return self;}, args: [], -source: unescape('shouldInheritSelectors%0A%09%5E%20false'), -messageSends: [], +source: unescape('testIsNil%0A%09self%20assert%3A%20nil%20isNil.%0A%09self%20deny%3A%20nil%20notNil.'), +messageSends: ["assert:", "isNil", "deny:", "notNil"], referencedClasses: [] }), -smalltalk.PackageWithDefaultCommitPathChangedTest.klass); +smalltalk.UndefinedTest); + diff --git a/amber/src/js/Kernel-Transcript.deploy.js b/amber/src/js/Kernel-Transcript.deploy.js index 1d27f9ccfdc..fc45e45aceb 100644 --- a/amber/src/js/Kernel-Transcript.deploy.js +++ b/amber/src/js/Kernel-Transcript.deploy.js @@ -1,66 +1,71 @@ smalltalk.addPackage('Kernel-Transcript', {}); -smalltalk.addClass('Transcript', smalltalk.Object, ['textarea'], 'Kernel-Transcript'); - -smalltalk.Transcript.klass.iVarNames = ['current']; +smalltalk.addClass('ConsoleTranscript', smalltalk.Object, ['textarea'], 'Kernel-Transcript'); smalltalk.addMethod( -'_open', +unescape('_clear'), smalltalk.method({ -selector: 'open', +selector: unescape('clear'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_current", []), "_open", []); + return self;} }), -smalltalk.Transcript.klass); +smalltalk.ConsoleTranscript); smalltalk.addMethod( -'_new', +unescape('_cr'), smalltalk.method({ -selector: 'new', +selector: unescape('cr'), fn: function (){ var self=this; -smalltalk.send(self, "_shouldNotImplement", []); + return self;} }), -smalltalk.Transcript.klass); +smalltalk.ConsoleTranscript); smalltalk.addMethod( -'_current', +unescape('_open'), smalltalk.method({ -selector: 'current', +selector: unescape('open'), fn: function (){ var self=this; -return self['@current']; + return self;} }), -smalltalk.Transcript.klass); +smalltalk.ConsoleTranscript); smalltalk.addMethod( -'_show_', +unescape('_show_'), smalltalk.method({ -selector: 'show:', +selector: unescape('show%3A'), fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [anObject]); +var string=nil; +(string=smalltalk.send(anObject, "_asString", [])); +console.log(String(string)); return self;} }), -smalltalk.Transcript.klass); +smalltalk.ConsoleTranscript); + smalltalk.addMethod( -'_cr', +unescape('_initialize'), smalltalk.method({ -selector: 'cr', +selector: unescape('initialize'), fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [smalltalk.send((smalltalk.String || String), "_cr", [])]); +smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_new", [])]); return self;} }), -smalltalk.Transcript.klass); +smalltalk.ConsoleTranscript.klass); + + +smalltalk.addClass('Transcript', smalltalk.Object, ['textarea'], 'Kernel-Transcript'); +smalltalk.Transcript.klass.iVarNames = ['current']; smalltalk.addMethod( -'_clear', +unescape('_clear'), smalltalk.method({ -selector: 'clear', +selector: unescape('clear'), fn: function (){ var self=this; smalltalk.send(smalltalk.send(self, "_current", []), "_clear", []); @@ -69,74 +74,69 @@ return self;} smalltalk.Transcript.klass); smalltalk.addMethod( -'_register_', +unescape('_cr'), smalltalk.method({ -selector: 'register:', -fn: function (aTranscript){ +selector: unescape('cr'), +fn: function (){ var self=this; -(self['@current']=aTranscript); +smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [smalltalk.send((smalltalk.String || String), "_cr", [])]); return self;} }), smalltalk.Transcript.klass); - -smalltalk.addClass('ConsoleTranscript', smalltalk.Object, ['textarea'], 'Kernel-Transcript'); smalltalk.addMethod( -'_clear', +unescape('_current'), smalltalk.method({ -selector: 'clear', +selector: unescape('current'), fn: function (){ var self=this; - +return self['@current']; return self;} }), -smalltalk.ConsoleTranscript); +smalltalk.Transcript.klass); smalltalk.addMethod( -'_cr', +unescape('_new'), smalltalk.method({ -selector: 'cr', +selector: unescape('new'), fn: function (){ var self=this; - +smalltalk.send(self, "_shouldNotImplement", []); return self;} }), -smalltalk.ConsoleTranscript); +smalltalk.Transcript.klass); smalltalk.addMethod( -'_show_', +unescape('_open'), smalltalk.method({ -selector: 'show:', -fn: function (anObject){ +selector: unescape('open'), +fn: function (){ var self=this; -var string=nil; -(string=smalltalk.send(anObject, "_asString", [])); -console.log(String(string)); +smalltalk.send(smalltalk.send(self, "_current", []), "_open", []); return self;} }), -smalltalk.ConsoleTranscript); +smalltalk.Transcript.klass); smalltalk.addMethod( -'_open', +unescape('_register_'), smalltalk.method({ -selector: 'open', -fn: function (){ +selector: unescape('register%3A'), +fn: function (aTranscript){ var self=this; - +(self['@current']=aTranscript); return self;} }), -smalltalk.ConsoleTranscript); - +smalltalk.Transcript.klass); smalltalk.addMethod( -'_initialize', +unescape('_show_'), smalltalk.method({ -selector: 'initialize', -fn: function (){ +selector: unescape('show%3A'), +fn: function (anObject){ var self=this; -smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_new", [])]); +smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [anObject]); return self;} }), -smalltalk.ConsoleTranscript.klass); +smalltalk.Transcript.klass); diff --git a/amber/src/js/Kernel-Transcript.js b/amber/src/js/Kernel-Transcript.js index 70b48dcb9f9..547c2fa71ac 100644 --- a/amber/src/js/Kernel-Transcript.js +++ b/amber/src/js/Kernel-Transcript.js @@ -1,54 +1,52 @@ smalltalk.addPackage('Kernel-Transcript', {}); -smalltalk.addClass('Transcript', smalltalk.Object, ['textarea'], 'Kernel-Transcript'); - -smalltalk.Transcript.klass.iVarNames = ['current']; +smalltalk.addClass('ConsoleTranscript', smalltalk.Object, ['textarea'], 'Kernel-Transcript'); smalltalk.addMethod( -unescape('_open'), +unescape('_clear'), smalltalk.method({ -selector: unescape('open'), -category: 'instance creation', +selector: unescape('clear'), +category: 'printing', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_current", []), "_open", []); + return self;}, args: [], -source: unescape('open%0A%20%20%20%20self%20current%20open'), -messageSends: ["open", "current"], +source: unescape('clear%0A%09%22no%20op%22'), +messageSends: [], referencedClasses: [] }), -smalltalk.Transcript.klass); +smalltalk.ConsoleTranscript); smalltalk.addMethod( -unescape('_new'), +unescape('_cr'), smalltalk.method({ -selector: unescape('new'), -category: 'instance creation', +selector: unescape('cr'), +category: 'printing', fn: function (){ var self=this; -smalltalk.send(self, "_shouldNotImplement", []); + return self;}, args: [], -source: unescape('new%0A%20%20%20%20self%20shouldNotImplement'), -messageSends: ["shouldNotImplement"], +source: unescape('cr%0A%09%22no%20op%22'), +messageSends: [], referencedClasses: [] }), -smalltalk.Transcript.klass); +smalltalk.ConsoleTranscript); smalltalk.addMethod( -unescape('_current'), +unescape('_open'), smalltalk.method({ -selector: unescape('current'), -category: 'instance creation', +selector: unescape('open'), +category: 'actions', fn: function (){ var self=this; -return self['@current']; + return self;}, args: [], -source: unescape('current%0A%20%20%20%20%5Ecurrent'), +source: unescape('open'), messageSends: [], referencedClasses: [] }), -smalltalk.Transcript.klass); +smalltalk.ConsoleTranscript); smalltalk.addMethod( unescape('_show_'), @@ -57,31 +55,38 @@ selector: unescape('show%3A'), category: 'printing', fn: function (anObject){ var self=this; -smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [anObject]); +var string=nil; +(string=smalltalk.send(anObject, "_asString", [])); +console.log(String(string)); return self;}, args: ["anObject"], -source: unescape('show%3A%20anObject%0A%20%20%20%20self%20current%20show%3A%20anObject'), -messageSends: ["show:", "current"], +source: unescape('show%3A%20anObject%0A%09%7C%20string%20%7C%0A%09string%20%3A%3D%20anObject%20asString.%0A%09%3Cconsole.log%28String%28string%29%29%3E'), +messageSends: ["asString"], referencedClasses: [] }), -smalltalk.Transcript.klass); +smalltalk.ConsoleTranscript); + smalltalk.addMethod( -unescape('_cr'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('cr'), -category: 'printing', +selector: unescape('initialize'), +category: 'initialization', fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [smalltalk.send((smalltalk.String || String), "_cr", [])]); +smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_new", [])]); return self;}, args: [], -source: unescape('cr%0A%20%20%20%20self%20current%20show%3A%20String%20cr'), -messageSends: ["show:", "current", "cr"], -referencedClasses: ["String"] +source: unescape('initialize%0A%09Transcript%20register%3A%20self%20new'), +messageSends: ["register:", "new"], +referencedClasses: ["Transcript"] }), -smalltalk.Transcript.klass); +smalltalk.ConsoleTranscript.klass); + +smalltalk.addClass('Transcript', smalltalk.Object, ['textarea'], 'Kernel-Transcript'); + +smalltalk.Transcript.klass.iVarNames = ['current']; smalltalk.addMethod( unescape('_clear'), smalltalk.method({ @@ -99,104 +104,99 @@ referencedClasses: [] smalltalk.Transcript.klass); smalltalk.addMethod( -unescape('_register_'), +unescape('_cr'), smalltalk.method({ -selector: unescape('register%3A'), -category: 'instance creation', -fn: function (aTranscript){ +selector: unescape('cr'), +category: 'printing', +fn: function (){ var self=this; -(self['@current']=aTranscript); +smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [smalltalk.send((smalltalk.String || String), "_cr", [])]); return self;}, -args: ["aTranscript"], -source: unescape('register%3A%20aTranscript%0A%09current%20%3A%3D%20aTranscript'), -messageSends: [], -referencedClasses: [] +args: [], +source: unescape('cr%0A%20%20%20%20self%20current%20show%3A%20String%20cr'), +messageSends: ["show:", "current", "cr"], +referencedClasses: ["String"] }), smalltalk.Transcript.klass); - -smalltalk.addClass('ConsoleTranscript', smalltalk.Object, ['textarea'], 'Kernel-Transcript'); smalltalk.addMethod( -unescape('_clear'), +unescape('_current'), smalltalk.method({ -selector: unescape('clear'), -category: 'printing', +selector: unescape('current'), +category: 'instance creation', fn: function (){ var self=this; - +return self['@current']; return self;}, args: [], -source: unescape('clear%0A%09%22no%20op%22'), +source: unescape('current%0A%20%20%20%20%5Ecurrent'), messageSends: [], referencedClasses: [] }), -smalltalk.ConsoleTranscript); +smalltalk.Transcript.klass); smalltalk.addMethod( -unescape('_cr'), +unescape('_new'), smalltalk.method({ -selector: unescape('cr'), -category: 'printing', +selector: unescape('new'), +category: 'instance creation', fn: function (){ var self=this; - +smalltalk.send(self, "_shouldNotImplement", []); return self;}, args: [], -source: unescape('cr%0A%09%22no%20op%22'), -messageSends: [], +source: unescape('new%0A%20%20%20%20self%20shouldNotImplement'), +messageSends: ["shouldNotImplement"], referencedClasses: [] }), -smalltalk.ConsoleTranscript); +smalltalk.Transcript.klass); smalltalk.addMethod( -unescape('_show_'), +unescape('_open'), smalltalk.method({ -selector: unescape('show%3A'), -category: 'printing', -fn: function (anObject){ +selector: unescape('open'), +category: 'instance creation', +fn: function (){ var self=this; -var string=nil; -(string=smalltalk.send(anObject, "_asString", [])); -console.log(String(string)); +smalltalk.send(smalltalk.send(self, "_current", []), "_open", []); return self;}, -args: ["anObject"], -source: unescape('show%3A%20anObject%0A%09%7C%20string%20%7C%0A%09string%20%3A%3D%20anObject%20asString.%0A%09%3Cconsole.log%28String%28string%29%29%3E'), -messageSends: ["asString"], +args: [], +source: unescape('open%0A%20%20%20%20self%20current%20open'), +messageSends: ["open", "current"], referencedClasses: [] }), -smalltalk.ConsoleTranscript); +smalltalk.Transcript.klass); smalltalk.addMethod( -unescape('_open'), +unescape('_register_'), smalltalk.method({ -selector: unescape('open'), -category: 'actions', -fn: function (){ +selector: unescape('register%3A'), +category: 'instance creation', +fn: function (aTranscript){ var self=this; - +(self['@current']=aTranscript); return self;}, -args: [], -source: unescape('open'), +args: ["aTranscript"], +source: unescape('register%3A%20aTranscript%0A%09current%20%3A%3D%20aTranscript'), messageSends: [], referencedClasses: [] }), -smalltalk.ConsoleTranscript); - +smalltalk.Transcript.klass); smalltalk.addMethod( -unescape('_initialize'), +unescape('_show_'), smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', -fn: function (){ +selector: unescape('show%3A'), +category: 'printing', +fn: function (anObject){ var self=this; -smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_new", [])]); +smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [anObject]); return self;}, -args: [], -source: unescape('initialize%0A%09Transcript%20register%3A%20self%20new'), -messageSends: ["register:", "new"], -referencedClasses: ["Transcript"] +args: ["anObject"], +source: unescape('show%3A%20anObject%0A%20%20%20%20self%20current%20show%3A%20anObject'), +messageSends: ["show:", "current"], +referencedClasses: [] }), -smalltalk.ConsoleTranscript.klass); +smalltalk.Transcript.klass); diff --git a/amber/src/js/SUnit.deploy.js b/amber/src/js/SUnit.deploy.js index 4ad7b6e724d..5b4dde725e6 100644 --- a/amber/src/js/SUnit.deploy.js +++ b/amber/src/js/SUnit.deploy.js @@ -1,56 +1,56 @@ smalltalk.addPackage('SUnit', {}); smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit'); smalltalk.addMethod( -unescape('_setTestSelector_'), +unescape('_assert_'), smalltalk.method({ -selector: unescape('setTestSelector%3A'), -fn: function (aSelector){ +selector: unescape('assert%3A'), +fn: function (aBoolean){ var self=this; -(self['@testSelector']=aSelector); +smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]); return self;} }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_selector'), +unescape('_assert_description_'), smalltalk.method({ -selector: unescape('selector'), -fn: function (){ +selector: unescape('assert%3Adescription%3A'), +fn: function (aBoolean, aString){ var self=this; -return self['@testSelector']; +((($receiver = aBoolean).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_signalFailure_", [aString]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", [aString]);})])); return self;} }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_signalFailure_'), +unescape('_assert_equals_'), smalltalk.method({ -selector: unescape('signalFailure%3A'), -fn: function (aString){ +selector: unescape('assert%3Aequals%3A'), +fn: function (expected, actual){ var self=this; -(function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send((smalltalk.TestFailure || TestFailure), "_new", [])); +return smalltalk.send(self, "_assert_description_", [smalltalk.send(expected, "__eq", [actual]), smalltalk.send(smalltalk.send(smalltalk.send("Expected: ", "__comma", [smalltalk.send(expected, "_asString", [])]), "__comma", [" but was: "]), "__comma", [smalltalk.send(actual, "_asString", [])])]); return self;} }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_setUp'), +unescape('_deny_'), smalltalk.method({ -selector: unescape('setUp'), -fn: function (){ +selector: unescape('deny%3A'), +fn: function (aBoolean){ var self=this; - +smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]); return self;} }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_tearDown'), +unescape('_performTestFor_'), smalltalk.method({ -selector: unescape('tearDown'), -fn: function (){ +selector: unescape('performTestFor%3A'), +fn: function (aResult){ var self=this; - +smalltalk.send((function(){return smalltalk.send((function(){return smalltalk.send(self, "_perform_", [smalltalk.send(self, "_selector", [])]);}), "_on_do_", [(smalltalk.TestFailure || TestFailure), (function(ex){return smalltalk.send(aResult, "_addFailure_", [self]);})]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return smalltalk.send(aResult, "_addError_", [self]);})]); return self;} }), smalltalk.TestCase); @@ -70,101 +70,104 @@ return self;} smalltalk.TestCase); smalltalk.addMethod( -unescape('_performTestFor_'), +unescape('_selector'), smalltalk.method({ -selector: unescape('performTestFor%3A'), -fn: function (aResult){ +selector: unescape('selector'), +fn: function (){ var self=this; -smalltalk.send((function(){return smalltalk.send((function(){return smalltalk.send(self, "_perform_", [smalltalk.send(self, "_selector", [])]);}), "_on_do_", [(smalltalk.TestFailure || TestFailure), (function(ex){return smalltalk.send(aResult, "_addFailure_", [self]);})]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return smalltalk.send(aResult, "_addError_", [self]);})]); +return self['@testSelector']; return self;} }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_assert_'), +unescape('_setTestSelector_'), smalltalk.method({ -selector: unescape('assert%3A'), -fn: function (aBoolean){ +selector: unescape('setTestSelector%3A'), +fn: function (aSelector){ var self=this; -smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]); +(self['@testSelector']=aSelector); return self;} }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_deny_'), +unescape('_setUp'), smalltalk.method({ -selector: unescape('deny%3A'), -fn: function (aBoolean){ +selector: unescape('setUp'), +fn: function (){ var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]); + return self;} }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_assert_equals_'), +unescape('_should_'), smalltalk.method({ -selector: unescape('assert%3Aequals%3A'), -fn: function (expected, actual){ +selector: unescape('should%3A'), +fn: function (aBlock){ var self=this; -return smalltalk.send(self, "_assert_description_", [smalltalk.send(expected, "__eq", [actual]), smalltalk.send(smalltalk.send(smalltalk.send("Expected: ", "__comma", [smalltalk.send(expected, "_asString", [])]), "__comma", [" but was: "]), "__comma", [smalltalk.send(actual, "_asString", [])])]); +smalltalk.send(self, "_assert_", [smalltalk.send(aBlock, "_value", [])]); return self;} }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_assert_description_'), +unescape('_should_raise_'), smalltalk.method({ -selector: unescape('assert%3Adescription%3A'), -fn: function (aBoolean, aString){ +selector: unescape('should%3Araise%3A'), +fn: function (aBlock, anExceptionClass){ var self=this; -((($receiver = aBoolean).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_signalFailure_", [aString]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", [aString]);})])); +smalltalk.send(self, "_assert_", [smalltalk.send((function(){smalltalk.send(aBlock, "_value", []);return false;}), "_on_do_", [anExceptionClass, (function(ex){return true;})])]); return self;} }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_should_'), +unescape('_signalFailure_'), smalltalk.method({ -selector: unescape('should%3A'), -fn: function (aBlock){ +selector: unescape('signalFailure%3A'), +fn: function (aString){ var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(aBlock, "_value", [])]); +(function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send((smalltalk.TestFailure || TestFailure), "_new", [])); return self;} }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_should_raise_'), +unescape('_tearDown'), smalltalk.method({ -selector: unescape('should%3Araise%3A'), -fn: function (aBlock, anExceptionClass){ +selector: unescape('tearDown'), +fn: function (){ var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send((function(){smalltalk.send(aBlock, "_value", []);return false;}), "_on_do_", [anExceptionClass, (function(ex){return true;})])]); + return self;} }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_testSelectors'), +unescape('_allTestSelectors'), smalltalk.method({ -selector: unescape('testSelectors'), +selector: unescape('allTestSelectors'), fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", [unescape("%5Etest")]);})]); +var selectors=nil; +(selectors=smalltalk.send(self, "_testSelectors", [])); +((($receiver = smalltalk.send(self, "_shouldInheritSelectors", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(selectors, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allTestSelectors", [])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(selectors, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allTestSelectors", [])]);})])); +return selectors; return self;} }), smalltalk.TestCase.klass); smalltalk.addMethod( -unescape('_selector_'), +unescape('_buildSuite'), smalltalk.method({ -selector: unescape('selector%3A'), -fn: function (aSelector){ +selector: unescape('buildSuite'), +fn: function (){ var self=this; -return (function($rec){smalltalk.send($rec, "_setTestSelector_", [aSelector]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return smalltalk.send(smalltalk.send(self, "_allTestSelectors", []), "_collect_", [(function(each){return smalltalk.send(self, "_selector_", [each]);})]); return self;} }), smalltalk.TestCase.klass); @@ -181,37 +184,34 @@ return self;} smalltalk.TestCase.klass); smalltalk.addMethod( -unescape('_allTestSelectors'), +unescape('_selector_'), smalltalk.method({ -selector: unescape('allTestSelectors'), -fn: function (){ +selector: unescape('selector%3A'), +fn: function (aSelector){ var self=this; -var selectors=nil; -(selectors=smalltalk.send(self, "_testSelectors", [])); -((($receiver = smalltalk.send(self, "_shouldInheritSelectors", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(selectors, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allTestSelectors", [])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(selectors, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allTestSelectors", [])]);})])); -return selectors; +return (function($rec){smalltalk.send($rec, "_setTestSelector_", [aSelector]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); return self;} }), smalltalk.TestCase.klass); smalltalk.addMethod( -unescape('_buildSuite'), +unescape('_shouldInheritSelectors'), smalltalk.method({ -selector: unescape('buildSuite'), +selector: unescape('shouldInheritSelectors'), fn: function (){ var self=this; -return smalltalk.send(smalltalk.send(self, "_allTestSelectors", []), "_collect_", [(function(each){return smalltalk.send(self, "_selector_", [each]);})]); +return smalltalk.send(self, "_~_eq", [smalltalk.send(self, "_lookupHierarchyRoot", [])]); return self;} }), smalltalk.TestCase.klass); smalltalk.addMethod( -unescape('_shouldInheritSelectors'), +unescape('_testSelectors'), smalltalk.method({ -selector: unescape('shouldInheritSelectors'), +selector: unescape('testSelectors'), fn: function (){ var self=this; -return smalltalk.send(self, "_~_eq", [smalltalk.send(self, "_lookupHierarchyRoot", [])]); +return smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", [unescape("%5Etest")]);})]); return self;} }), smalltalk.TestCase.klass); @@ -222,127 +222,127 @@ smalltalk.addClass('TestFailure', smalltalk.Error, [], 'SUnit'); smalltalk.addClass('TestResult', smalltalk.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit'); smalltalk.addMethod( -unescape('_timestamp'), +unescape('_addError_'), smalltalk.method({ -selector: unescape('timestamp'), -fn: function (){ +selector: unescape('addError%3A'), +fn: function (anError){ var self=this; -return self['@timestamp']; +smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]); return self;} }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_errors'), +unescape('_addFailure_'), smalltalk.method({ -selector: unescape('errors'), -fn: function (){ +selector: unescape('addFailure%3A'), +fn: function (aFailure){ var self=this; -return self['@errors']; +smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]); return self;} }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_failures'), +unescape('_errors'), smalltalk.method({ -selector: unescape('failures'), +selector: unescape('errors'), fn: function (){ var self=this; -return self['@failures']; +return self['@errors']; return self;} }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_total'), +unescape('_failures'), smalltalk.method({ -selector: unescape('total'), +selector: unescape('failures'), fn: function (){ var self=this; -return self['@total']; +return self['@failures']; return self;} }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_total_'), +unescape('_increaseRuns'), smalltalk.method({ -selector: unescape('total%3A'), -fn: function (aNumber){ +selector: unescape('increaseRuns'), +fn: function (){ var self=this; -(self['@total']=aNumber); +(self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); return self;} }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_addError_'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('addError%3A'), -fn: function (anError){ +selector: unescape('initialize'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]); +smalltalk.send(self, "_initialize", [], smalltalk.Object); +(self['@timestamp']=smalltalk.send((smalltalk.Date || Date), "_now", [])); +(self['@runs']=(0)); +(self['@errors']=smalltalk.send((smalltalk.Array || Array), "_new", [])); +(self['@failures']=smalltalk.send((smalltalk.Array || Array), "_new", [])); +(self['@total']=(0)); return self;} }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_addFailure_'), +unescape('_runs'), smalltalk.method({ -selector: unescape('addFailure%3A'), -fn: function (aFailure){ +selector: unescape('runs'), +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]); +return self['@runs']; return self;} }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_runs'), +unescape('_status'), smalltalk.method({ -selector: unescape('runs'), +selector: unescape('status'), fn: function (){ var self=this; -return self['@runs']; +return ((($receiver = smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));})() : (function(){return "error";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));}), (function(){return "error";})])); return self;} }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_increaseRuns'), +unescape('_timestamp'), smalltalk.method({ -selector: unescape('increaseRuns'), +selector: unescape('timestamp'), fn: function (){ var self=this; -(self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); +return self['@timestamp']; return self;} }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_status'), +unescape('_total'), smalltalk.method({ -selector: unescape('status'), +selector: unescape('total'), fn: function (){ var self=this; -return ((($receiver = smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));})() : (function(){return "error";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));}), (function(){return "error";})])); +return self['@total']; return self;} }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_initialize'), +unescape('_total_'), smalltalk.method({ -selector: unescape('initialize'), -fn: function (){ +selector: unescape('total%3A'), +fn: function (aNumber){ var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.Object); -(self['@timestamp']=smalltalk.send((smalltalk.Date || Date), "_now", [])); -(self['@runs']=(0)); -(self['@errors']=smalltalk.send((smalltalk.Array || Array), "_new", [])); -(self['@failures']=smalltalk.send((smalltalk.Array || Array), "_new", [])); -(self['@total']=(0)); +(self['@total']=aNumber); return self;} }), smalltalk.TestResult); diff --git a/amber/src/js/SUnit.js b/amber/src/js/SUnit.js index 401c376bd81..a89b48fe7e2 100755 --- a/amber/src/js/SUnit.js +++ b/amber/src/js/SUnit.js @@ -1,82 +1,82 @@ smalltalk.addPackage('SUnit', {}); smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit'); smalltalk.addMethod( -unescape('_setTestSelector_'), +unescape('_assert_'), smalltalk.method({ -selector: unescape('setTestSelector%3A'), -category: 'accessing', -fn: function (aSelector){ +selector: unescape('assert%3A'), +category: 'testing', +fn: function (aBoolean){ var self=this; -(self['@testSelector']=aSelector); +smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]); return self;}, -args: ["aSelector"], -source: unescape('setTestSelector%3A%20aSelector%0A%09testSelector%20%3A%3D%20aSelector'), -messageSends: [], +args: ["aBoolean"], +source: unescape('assert%3A%20aBoolean%0A%09self%20assert%3A%20aBoolean%20description%3A%20%27Assertion%20failed%27'), +messageSends: ["assert:description:"], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_selector'), +unescape('_assert_description_'), smalltalk.method({ -selector: unescape('selector'), -category: 'accessing', -fn: function (){ +selector: unescape('assert%3Adescription%3A'), +category: 'testing', +fn: function (aBoolean, aString){ var self=this; -return self['@testSelector']; +((($receiver = aBoolean).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_signalFailure_", [aString]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", [aString]);})])); return self;}, -args: [], -source: unescape('selector%0A%09%5EtestSelector'), -messageSends: [], +args: ["aBoolean", "aString"], +source: unescape('assert%3A%20aBoolean%20description%3A%20aString%0A%09aBoolean%20ifFalse%3A%20%5Bself%20signalFailure%3A%20aString%5D'), +messageSends: ["ifFalse:", "signalFailure:"], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_signalFailure_'), +unescape('_assert_equals_'), smalltalk.method({ -selector: unescape('signalFailure%3A'), -category: 'private', -fn: function (aString){ +selector: unescape('assert%3Aequals%3A'), +category: 'testing', +fn: function (expected, actual){ var self=this; -(function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send((smalltalk.TestFailure || TestFailure), "_new", [])); +return smalltalk.send(self, "_assert_description_", [smalltalk.send(expected, "__eq", [actual]), smalltalk.send(smalltalk.send(smalltalk.send("Expected: ", "__comma", [smalltalk.send(expected, "_asString", [])]), "__comma", [" but was: "]), "__comma", [smalltalk.send(actual, "_asString", [])])]); return self;}, -args: ["aString"], -source: unescape('signalFailure%3A%20aString%0A%09TestFailure%20new%0A%09%09messageText%3A%20aString%3B%0A%09%09signal'), -messageSends: ["messageText:", "signal", "new"], -referencedClasses: ["TestFailure"] +args: ["expected", "actual"], +source: unescape('assert%3A%20expected%20equals%3A%20actual%0A%09%5E%20self%20assert%3A%20%28expected%20%3D%20actual%29%20description%3A%20%27Expected%3A%20%27%2C%20expected%20asString%2C%20%27%20but%20was%3A%20%27%2C%20actual%20asString'), +messageSends: ["assert:description:", unescape("%3D"), unescape("%2C"), "asString"], +referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_setUp'), +unescape('_deny_'), smalltalk.method({ -selector: unescape('setUp'), -category: 'running', -fn: function (){ +selector: unescape('deny%3A'), +category: 'testing', +fn: function (aBoolean){ var self=this; - +smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]); return self;}, -args: [], -source: unescape('setUp'), -messageSends: [], +args: ["aBoolean"], +source: unescape('deny%3A%20aBoolean%0A%09self%20assert%3A%20aBoolean%20not'), +messageSends: ["assert:", "not"], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_tearDown'), +unescape('_performTestFor_'), smalltalk.method({ -selector: unescape('tearDown'), +selector: unescape('performTestFor%3A'), category: 'running', -fn: function (){ +fn: function (aResult){ var self=this; - +smalltalk.send((function(){return smalltalk.send((function(){return smalltalk.send(self, "_perform_", [smalltalk.send(self, "_selector", [])]);}), "_on_do_", [(smalltalk.TestFailure || TestFailure), (function(ex){return smalltalk.send(aResult, "_addFailure_", [self]);})]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return smalltalk.send(aResult, "_addError_", [self]);})]); return self;}, -args: [], -source: unescape('tearDown'), -messageSends: [], -referencedClasses: [] +args: ["aResult"], +source: unescape('performTestFor%3A%20aResult%0A%09%5B%5Bself%20perform%3A%20self%20selector%5D%0A%09%09on%3A%20TestFailure%20do%3A%20%5B%3Aex%20%7C%20aResult%20addFailure%3A%20self%5D%5D%0A%09%09on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%20aResult%20addError%3A%20self%5D'), +messageSends: ["on:do:", "perform:", "selector", "addFailure:", "addError:"], +referencedClasses: ["TestFailure", "Error"] }), smalltalk.TestCase); @@ -100,81 +100,49 @@ referencedClasses: [] smalltalk.TestCase); smalltalk.addMethod( -unescape('_performTestFor_'), -smalltalk.method({ -selector: unescape('performTestFor%3A'), -category: 'running', -fn: function (aResult){ -var self=this; -smalltalk.send((function(){return smalltalk.send((function(){return smalltalk.send(self, "_perform_", [smalltalk.send(self, "_selector", [])]);}), "_on_do_", [(smalltalk.TestFailure || TestFailure), (function(ex){return smalltalk.send(aResult, "_addFailure_", [self]);})]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return smalltalk.send(aResult, "_addError_", [self]);})]); -return self;}, -args: ["aResult"], -source: unescape('performTestFor%3A%20aResult%0A%09%5B%5Bself%20perform%3A%20self%20selector%5D%0A%09%09on%3A%20TestFailure%20do%3A%20%5B%3Aex%20%7C%20aResult%20addFailure%3A%20self%5D%5D%0A%09%09on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%20aResult%20addError%3A%20self%5D'), -messageSends: ["on:do:", "perform:", "selector", "addFailure:", "addError:"], -referencedClasses: ["TestFailure", "Error"] -}), -smalltalk.TestCase); - -smalltalk.addMethod( -unescape('_assert_'), +unescape('_selector'), smalltalk.method({ -selector: unescape('assert%3A'), -category: 'testing', -fn: function (aBoolean){ +selector: unescape('selector'), +category: 'accessing', +fn: function (){ var self=this; -smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]); +return self['@testSelector']; return self;}, -args: ["aBoolean"], -source: unescape('assert%3A%20aBoolean%0A%09self%20assert%3A%20aBoolean%20description%3A%20%27Assertion%20failed%27'), -messageSends: ["assert:description:"], +args: [], +source: unescape('selector%0A%09%5EtestSelector'), +messageSends: [], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_deny_'), +unescape('_setTestSelector_'), smalltalk.method({ -selector: unescape('deny%3A'), -category: 'testing', -fn: function (aBoolean){ +selector: unescape('setTestSelector%3A'), +category: 'accessing', +fn: function (aSelector){ var self=this; -smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]); +(self['@testSelector']=aSelector); return self;}, -args: ["aBoolean"], -source: unescape('deny%3A%20aBoolean%0A%09self%20assert%3A%20aBoolean%20not'), -messageSends: ["assert:", "not"], +args: ["aSelector"], +source: unescape('setTestSelector%3A%20aSelector%0A%09testSelector%20%3A%3D%20aSelector'), +messageSends: [], referencedClasses: [] }), smalltalk.TestCase); smalltalk.addMethod( -unescape('_assert_equals_'), +unescape('_setUp'), smalltalk.method({ -selector: unescape('assert%3Aequals%3A'), -category: 'testing', -fn: function (expected, actual){ +selector: unescape('setUp'), +category: 'running', +fn: function (){ var self=this; -return smalltalk.send(self, "_assert_description_", [smalltalk.send(expected, "__eq", [actual]), smalltalk.send(smalltalk.send(smalltalk.send("Expected: ", "__comma", [smalltalk.send(expected, "_asString", [])]), "__comma", [" but was: "]), "__comma", [smalltalk.send(actual, "_asString", [])])]); -return self;}, -args: ["expected", "actual"], -source: unescape('assert%3A%20expected%20equals%3A%20actual%0A%09%5E%20self%20assert%3A%20%28expected%20%3D%20actual%29%20description%3A%20%27Expected%3A%20%27%2C%20expected%20asString%2C%20%27%20but%20was%3A%20%27%2C%20actual%20asString'), -messageSends: ["assert:description:", unescape("%3D"), unescape("%2C"), "asString"], -referencedClasses: [] -}), -smalltalk.TestCase); -smalltalk.addMethod( -unescape('_assert_description_'), -smalltalk.method({ -selector: unescape('assert%3Adescription%3A'), -category: 'testing', -fn: function (aBoolean, aString){ -var self=this; -((($receiver = aBoolean).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_signalFailure_", [aString]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", [aString]);})])); return self;}, -args: ["aBoolean", "aString"], -source: unescape('assert%3A%20aBoolean%20description%3A%20aString%0A%09aBoolean%20ifFalse%3A%20%5Bself%20signalFailure%3A%20aString%5D'), -messageSends: ["ifFalse:", "signalFailure:"], +args: [], +source: unescape('setUp'), +messageSends: [], referencedClasses: [] }), smalltalk.TestCase); @@ -211,54 +179,38 @@ referencedClasses: [] }), smalltalk.TestCase); - -smalltalk.addMethod( -unescape('_testSelectors'), -smalltalk.method({ -selector: unescape('testSelectors'), -category: 'accessing', -fn: function (){ -var self=this; -return smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", [unescape("%5Etest")]);})]); -return self;}, -args: [], -source: unescape('testSelectors%0A%09%5Eself%20methodDictionary%20keys%20select%3A%20%5B%3Aeach%20%7C%20each%20match%3A%20%27%5Etest%27%5D'), -messageSends: ["select:", "keys", "methodDictionary", "match:"], -referencedClasses: [] -}), -smalltalk.TestCase.klass); - smalltalk.addMethod( -unescape('_selector_'), +unescape('_signalFailure_'), smalltalk.method({ -selector: unescape('selector%3A'), -category: 'accessing', -fn: function (aSelector){ +selector: unescape('signalFailure%3A'), +category: 'private', +fn: function (aString){ var self=this; -return (function($rec){smalltalk.send($rec, "_setTestSelector_", [aSelector]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +(function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send((smalltalk.TestFailure || TestFailure), "_new", [])); return self;}, -args: ["aSelector"], -source: unescape('selector%3A%20aSelector%0A%09%5Eself%20new%0A%09%09setTestSelector%3A%20aSelector%3B%0A%09%09yourself'), -messageSends: ["setTestSelector:", "yourself", "new"], -referencedClasses: [] +args: ["aString"], +source: unescape('signalFailure%3A%20aString%0A%09TestFailure%20new%0A%09%09messageText%3A%20aString%3B%0A%09%09signal'), +messageSends: ["messageText:", "signal", "new"], +referencedClasses: ["TestFailure"] }), -smalltalk.TestCase.klass); +smalltalk.TestCase); smalltalk.addMethod( -unescape('_lookupHierarchyRoot'), +unescape('_tearDown'), smalltalk.method({ -selector: unescape('lookupHierarchyRoot'), -category: 'accessing', +selector: unescape('tearDown'), +category: 'running', fn: function (){ var self=this; -return (smalltalk.TestCase || TestCase); + return self;}, args: [], -source: unescape('lookupHierarchyRoot%0A%09%5ETestCase'), +source: unescape('tearDown'), messageSends: [], -referencedClasses: ["TestCase"] +referencedClasses: [] }), -smalltalk.TestCase.klass); +smalltalk.TestCase); + smalltalk.addMethod( unescape('_allTestSelectors'), @@ -295,6 +247,38 @@ referencedClasses: [] }), smalltalk.TestCase.klass); +smalltalk.addMethod( +unescape('_lookupHierarchyRoot'), +smalltalk.method({ +selector: unescape('lookupHierarchyRoot'), +category: 'accessing', +fn: function (){ +var self=this; +return (smalltalk.TestCase || TestCase); +return self;}, +args: [], +source: unescape('lookupHierarchyRoot%0A%09%5ETestCase'), +messageSends: [], +referencedClasses: ["TestCase"] +}), +smalltalk.TestCase.klass); + +smalltalk.addMethod( +unescape('_selector_'), +smalltalk.method({ +selector: unescape('selector%3A'), +category: 'accessing', +fn: function (aSelector){ +var self=this; +return (function($rec){smalltalk.send($rec, "_setTestSelector_", [aSelector]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", [])); +return self;}, +args: ["aSelector"], +source: unescape('selector%3A%20aSelector%0A%09%5Eself%20new%0A%09%09setTestSelector%3A%20aSelector%3B%0A%09%09yourself'), +messageSends: ["setTestSelector:", "yourself", "new"], +referencedClasses: [] +}), +smalltalk.TestCase.klass); + smalltalk.addMethod( unescape('_shouldInheritSelectors'), smalltalk.method({ @@ -311,23 +295,55 @@ referencedClasses: [] }), smalltalk.TestCase.klass); +smalltalk.addMethod( +unescape('_testSelectors'), +smalltalk.method({ +selector: unescape('testSelectors'), +category: 'accessing', +fn: function (){ +var self=this; +return smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", [unescape("%5Etest")]);})]); +return self;}, +args: [], +source: unescape('testSelectors%0A%09%5Eself%20methodDictionary%20keys%20select%3A%20%5B%3Aeach%20%7C%20each%20match%3A%20%27%5Etest%27%5D'), +messageSends: ["select:", "keys", "methodDictionary", "match:"], +referencedClasses: [] +}), +smalltalk.TestCase.klass); + smalltalk.addClass('TestFailure', smalltalk.Error, [], 'SUnit'); smalltalk.addClass('TestResult', smalltalk.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit'); smalltalk.addMethod( -unescape('_timestamp'), +unescape('_addError_'), smalltalk.method({ -selector: unescape('timestamp'), +selector: unescape('addError%3A'), category: 'accessing', -fn: function (){ +fn: function (anError){ var self=this; -return self['@timestamp']; +smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]); return self;}, -args: [], -source: unescape('timestamp%0A%09%5Etimestamp'), -messageSends: [], +args: ["anError"], +source: unescape('addError%3A%20anError%0A%09self%20errors%20add%3A%20anError'), +messageSends: ["add:", "errors"], +referencedClasses: [] +}), +smalltalk.TestResult); + +smalltalk.addMethod( +unescape('_addFailure_'), +smalltalk.method({ +selector: unescape('addFailure%3A'), +category: 'accessing', +fn: function (aFailure){ +var self=this; +smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]); +return self;}, +args: ["aFailure"], +source: unescape('addFailure%3A%20aFailure%0A%09self%20failures%20add%3A%20aFailure'), +messageSends: ["add:", "failures"], referencedClasses: [] }), smalltalk.TestResult); @@ -365,137 +381,121 @@ referencedClasses: [] smalltalk.TestResult); smalltalk.addMethod( -unescape('_total'), +unescape('_increaseRuns'), smalltalk.method({ -selector: unescape('total'), +selector: unescape('increaseRuns'), category: 'accessing', fn: function (){ var self=this; -return self['@total']; +(self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); return self;}, args: [], -source: unescape('total%0A%09%5Etotal'), -messageSends: [], +source: unescape('increaseRuns%0A%09runs%20%3A%3D%20runs%20+%201'), +messageSends: [unescape("+")], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_total_'), +unescape('_initialize'), smalltalk.method({ -selector: unescape('total%3A'), -category: 'accessing', -fn: function (aNumber){ +selector: unescape('initialize'), +category: 'initialization', +fn: function (){ var self=this; -(self['@total']=aNumber); +smalltalk.send(self, "_initialize", [], smalltalk.Object); +(self['@timestamp']=smalltalk.send((smalltalk.Date || Date), "_now", [])); +(self['@runs']=(0)); +(self['@errors']=smalltalk.send((smalltalk.Array || Array), "_new", [])); +(self['@failures']=smalltalk.send((smalltalk.Array || Array), "_new", [])); +(self['@total']=(0)); return self;}, -args: ["aNumber"], -source: unescape('total%3A%20aNumber%0A%09total%20%3A%3D%20aNumber'), -messageSends: [], -referencedClasses: [] +args: [], +source: unescape('initialize%0A%09super%20initialize.%0A%09timestamp%20%3A%3D%20Date%20now.%0A%09runs%20%3A%3D%200.%0A%09errors%20%3A%3D%20Array%20new.%0A%09failures%20%3A%3D%20Array%20new.%0A%09total%20%3A%3D%200'), +messageSends: ["initialize", "now", "new"], +referencedClasses: ["Date", "Array"] }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_addError_'), +unescape('_runs'), smalltalk.method({ -selector: unescape('addError%3A'), +selector: unescape('runs'), category: 'accessing', -fn: function (anError){ +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]); +return self['@runs']; return self;}, -args: ["anError"], -source: unescape('addError%3A%20anError%0A%09self%20errors%20add%3A%20anError'), -messageSends: ["add:", "errors"], +args: [], +source: unescape('runs%0A%09%5Eruns'), +messageSends: [], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_addFailure_'), +unescape('_status'), smalltalk.method({ -selector: unescape('addFailure%3A'), +selector: unescape('status'), category: 'accessing', -fn: function (aFailure){ +fn: function (){ var self=this; -smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]); +return ((($receiver = smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));})() : (function(){return "error";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));}), (function(){return "error";})])); return self;}, -args: ["aFailure"], -source: unescape('addFailure%3A%20aFailure%0A%09self%20failures%20add%3A%20aFailure'), -messageSends: ["add:", "failures"], +args: [], +source: unescape('status%0A%09%5Eself%20errors%20isEmpty%20%0A%09%09ifTrue%3A%20%5B%0A%09%09%09self%20failures%20isEmpty%20%0A%09%09%09%09ifTrue%3A%20%5B%27success%27%5D%0A%09%09%09%09ifFalse%3A%20%5B%27failure%27%5D%5D%0A%09%09ifFalse%3A%20%5B%27error%27%5D'), +messageSends: ["ifTrue:ifFalse:", "isEmpty", "errors", "failures"], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_runs'), +unescape('_timestamp'), smalltalk.method({ -selector: unescape('runs'), +selector: unescape('timestamp'), category: 'accessing', fn: function (){ var self=this; -return self['@runs']; +return self['@timestamp']; return self;}, args: [], -source: unescape('runs%0A%09%5Eruns'), +source: unescape('timestamp%0A%09%5Etimestamp'), messageSends: [], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_increaseRuns'), +unescape('_total'), smalltalk.method({ -selector: unescape('increaseRuns'), +selector: unescape('total'), category: 'accessing', fn: function (){ var self=this; -(self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]))); +return self['@total']; return self;}, args: [], -source: unescape('increaseRuns%0A%09runs%20%3A%3D%20runs%20+%201'), -messageSends: [unescape("+")], +source: unescape('total%0A%09%5Etotal'), +messageSends: [], referencedClasses: [] }), smalltalk.TestResult); smalltalk.addMethod( -unescape('_status'), +unescape('_total_'), smalltalk.method({ -selector: unescape('status'), +selector: unescape('total%3A'), category: 'accessing', -fn: function (){ +fn: function (aNumber){ var self=this; -return ((($receiver = smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));})() : (function(){return "error";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));}), (function(){return "error";})])); +(self['@total']=aNumber); return self;}, -args: [], -source: unescape('status%0A%09%5Eself%20errors%20isEmpty%20%0A%09%09ifTrue%3A%20%5B%0A%09%09%09self%20failures%20isEmpty%20%0A%09%09%09%09ifTrue%3A%20%5B%27success%27%5D%0A%09%09%09%09ifFalse%3A%20%5B%27failure%27%5D%5D%0A%09%09ifFalse%3A%20%5B%27error%27%5D'), -messageSends: ["ifTrue:ifFalse:", "isEmpty", "errors", "failures"], +args: ["aNumber"], +source: unescape('total%3A%20aNumber%0A%09total%20%3A%3D%20aNumber'), +messageSends: [], referencedClasses: [] }), smalltalk.TestResult); -smalltalk.addMethod( -unescape('_initialize'), -smalltalk.method({ -selector: unescape('initialize'), -category: 'initialization', -fn: function (){ -var self=this; -smalltalk.send(self, "_initialize", [], smalltalk.Object); -(self['@timestamp']=smalltalk.send((smalltalk.Date || Date), "_now", [])); -(self['@runs']=(0)); -(self['@errors']=smalltalk.send((smalltalk.Array || Array), "_new", [])); -(self['@failures']=smalltalk.send((smalltalk.Array || Array), "_new", [])); -(self['@total']=(0)); -return self;}, -args: [], -source: unescape('initialize%0A%09super%20initialize.%0A%09timestamp%20%3A%3D%20Date%20now.%0A%09runs%20%3A%3D%200.%0A%09errors%20%3A%3D%20Array%20new.%0A%09failures%20%3A%3D%20Array%20new.%0A%09total%20%3A%3D%200'), -messageSends: ["initialize", "now", "new"], -referencedClasses: ["Date", "Array"] -}), -smalltalk.TestResult); - diff --git a/amber/src/js/amber.js b/amber/src/js/amber.js index 2f5f626a6bb..af3cbbb5f6a 100644 --- a/amber/src/js/amber.js +++ b/amber/src/js/amber.js @@ -95,7 +95,7 @@ amber = (function() { var additionalFiles = spec.packages || spec.files; if (additionalFiles) { - loadPackages(additionalFiles, spec.prefix); + loadPackages(additionalFiles, spec.prefix, spec.packageHome); } // Be sure to setup & initialize smalltalk classes @@ -103,29 +103,32 @@ amber = (function() { initializeSmalltalk(); }; - function loadPackages(names, prefix){ + function loadPackages(names, prefix, urlHome){ var name, url; var prefix = prefix || 'js'; + var urlHome = urlHome || home; for (var i=0; i < names.length; i++) { name = names[i].split(/\.js$/)[0]; - addJSToLoad(name + '.js', prefix); + addJSToLoad(name + '.js', prefix, urlHome); } }; - function addJSToLoad(name, prefix) { - jsToLoad.push(buildJSURL(name, prefix)); + function addJSToLoad(name, prefix, urlHome) { + var urlHome = urlHome || home; + jsToLoad.push(buildJSURL(name, prefix, urlHome)); }; - function buildJSURL(name, prefix) { + function buildJSURL(name, prefix, urlHome) { var prefix = prefix || 'js'; var name = name; + var urlHome = urlHome || home; if (!deploy) { name = name + nocache; } - return home + prefix + '/' + name; + return urlHome + prefix + '/' + name; }; function loadCSS(name, prefix) { diff --git a/amber/src/js/init.js b/amber/src/js/init.js index 031239aa35a..d04b68a91a6 100755 --- a/amber/src/js/init.js +++ b/amber/src/js/init.js @@ -6,4 +6,4 @@ smalltalk.classes()._do_(function(each) { if(this.smalltalkReady) { this.smalltalkReady(); -} \ No newline at end of file +} diff --git a/amber/src/st/Benchfib.st b/amber/src/st/Benchfib.st index fcd37c80ca1..251e52a44ac 100755 --- a/amber/src/st/Benchfib.st +++ b/amber/src/st/Benchfib.st @@ -1,7 +1,7 @@ Smalltalk current createPackage: 'Benchfib' properties: #{}! Object subclass: #Benchfib instanceVariableNames: '' - category: 'Benchfib'! + package: 'Benchfib'! !Benchfib class methodsFor: 'not yet classified'! @@ -49,27 +49,6 @@ benchmark ^ count ! -tinyBenchmarks - "Report the results of running the two tiny Squeak benchmarks. - ar 9/10/1999: Adjusted to run at least 1 sec to get more stable results" - "0 tinyBenchmarks" - "On a 292 MHz G3 Mac: 22727272 bytecodes/sec; 984169 sends/sec" - "On a 400 MHz PII/Win98: 18028169 bytecodes/sec; 1081272 sends/sec" - | t1 t2 r n1 n2 | - n1 := 1. - [t1 := Date millisecondsToRun: [n1 benchmark]. - t1 < 1000] whileTrue:[n1 := n1 * 2]. "Note: #benchmark's runtime is about O(n)" - - n2 := 16. - [t2 := Date millisecondsToRun: [r := n2 benchFib]. - t2 < 1000] whileTrue:[n2 := n2 + 1]. - "Note: #benchFib's runtime is about O(k^n), - where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...." - - ^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ', - ((r * 1000) / t2) printString, ' sends/sec' -! - jsbenchFib <if (this < 2) { @@ -118,6 +97,27 @@ jstinyBenchmarks "Note: #jsbenchFib's runtime is about O(k^n), where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...." + ^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ', + ((r * 1000) / t2) printString, ' sends/sec' +! + +tinyBenchmarks + "Report the results of running the two tiny Squeak benchmarks. + ar 9/10/1999: Adjusted to run at least 1 sec to get more stable results" + "0 tinyBenchmarks" + "On a 292 MHz G3 Mac: 22727272 bytecodes/sec; 984169 sends/sec" + "On a 400 MHz PII/Win98: 18028169 bytecodes/sec; 1081272 sends/sec" + | t1 t2 r n1 n2 | + n1 := 1. + [t1 := Date millisecondsToRun: [n1 benchmark]. + t1 < 1000] whileTrue:[n1 := n1 * 2]. "Note: #benchmark's runtime is about O(n)" + + n2 := 16. + [t2 := Date millisecondsToRun: [r := n2 benchFib]. + t2 < 1000] whileTrue:[n2 := n2 + 1]. + "Note: #benchFib's runtime is about O(k^n), + where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...." + ^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ', ((r * 1000) / t2) printString, ' sends/sec' ! ! diff --git a/amber/src/st/Canvas.st b/amber/src/st/Canvas.st index 46ba575cd69..f5437b466fa 100755 --- a/amber/src/st/Canvas.st +++ b/amber/src/st/Canvas.st @@ -1,832 +1,812 @@ Smalltalk current createPackage: 'Canvas' properties: #{}! -Object subclass: #Widget - instanceVariableNames: '' - category: 'Canvas'! +Object subclass: #HTMLCanvas + instanceVariableNames: 'root' + package: 'Canvas'! -!Widget methodsFor: 'adding'! +!HTMLCanvas methodsFor: 'accessing'! -appendToBrush: aTagBrush - self appendToJQuery: aTagBrush asJQuery +root + ^root ! -appendToJQuery: aJQuery - self renderOn: (HTMLCanvas onJQuery: aJQuery) +root: aTagBrush + root := aTagBrush ! ! -!Widget methodsFor: 'rendering'! +!HTMLCanvas methodsFor: 'adding'! -renderOn: html - self +with: anObject + ^self root with: anObject ! ! -Object subclass: #TagBrush - instanceVariableNames: 'canvas element' - category: 'Canvas'! +!HTMLCanvas methodsFor: 'initialization'! -!TagBrush methodsFor: 'accessing'! +initialize + super initialize. + root ifNil: [root := TagBrush fromString: 'div' canvas: self] +! -element - ^element +initializeFromJQuery: aJQuery + root := TagBrush fromJQuery: aJQuery canvas: self ! ! -!TagBrush methodsFor: 'adding'! +!HTMLCanvas methodsFor: 'tags'! -contents: anObject - self - empty; - append: anObject +a + ^self tag: 'a' ! -addBrush: aTagBrush - self appendChild: aTagBrush element. - ^aTagBrush +abbr + ^self tag: 'abbr' ! -with: anObject - self append: anObject +address + ^self tag: 'address' ! -append: anObject - anObject appendToBrush: self +area + ^self tag: 'area' ! -appendToBrush: aTagBrush - aTagBrush addBrush: self +article + ^self tag: 'article' ! -appendBlock: aBlock - | root | - root := canvas root. - canvas root: self. - aBlock value: canvas. - canvas root: root +aside + ^self tag: 'aside' ! -appendChild: anElement - "In IE7 and IE8 appendChild fails on several node types. So we need to check" - <var element=self['@element']; - if (null == element.canHaveChildren || element.canHaveChildren) { - element.appendChild(anElement); - } else { - element.text = String(element.text) + anElement.innerHTML; - } > +audio + ^self tag: 'audio' ! -appendString: aString - self appendChild: (self createTextNodeFor: aString) +base + ^self tag: 'base' ! -empty - self asJQuery empty -! ! - -!TagBrush methodsFor: 'attributes'! - -at: aString put: aValue - <self['@element'].setAttribute(aString, aValue)> +blockquote + ^self tag: 'blockquote' ! -removeAt: aString - <self['@element'].removeAttribute(aString)> +body + ^self tag: 'body' ! -class: aString - <self['@element'].className = aString> +br + ^self tag: 'br' ! -id: aString - self at: 'id' put: aString +button + ^self tag: 'button' ! -src: aString - self at: 'src' put: aString +canvas + ^self tag: 'canvas' ! -href: aString - self at: 'href' put: aString +caption + ^self tag: 'caption' ! -title: aString - self at: 'title' put: aString +cite + ^self tag: 'cite' ! -style: aString - self at: 'style' put: aString +code + ^self tag: 'code' ! -type: aString - self at: 'type' put: aString +col + ^self tag: 'col' ! -media: aString - self at: 'media' put: aString +colgroup + ^self tag: 'colgroup' ! -rel: aString - self at: 'rel' put: aString +command + ^self tag: 'command' ! -width: aString - self at: 'width' put: aString +datalist + ^self tag: 'datalist' ! -height: aString - self at: 'height' put: aString +dd + ^self tag: 'dd' ! -value: aString - self at: 'value' put: aString +del + ^self tag: 'del' ! -for: aString - self at: 'for' put: aString +details + ^self tag: 'details' ! -placeholder: aString - self at: 'placeholder' put: aString +div + ^self tag: 'div' ! -accesskey: aString - self at: 'accesskey' put: aString +div: aBlock + ^self div with: aBlock ! -contenteditable: aString - self at: 'contenteditable' put: aString +dl + ^self tag: 'dl' ! -contextmenu: aString - self at: 'contextmenu' put: aString +dt + ^self tag: 'dt' ! -draggable: aString - self at: 'draggable' put: aString +em + ^self tag: 'em' ! -hidden - self at: 'hidden' put: 'hidden' +embed + ^self tag: 'embed' ! -tabindex: aNumber - self at: 'tabindex' put: aNumber +fieldset + ^self tag: 'fieldset' ! -target: aString - self at: 'target' put: aString +figcaption + ^self tag: 'figcaption' ! -align: aString - self at: 'align' put: aString +figure + ^self tag: 'figure' ! -alt: aString - self at: 'alt' put: aString +footer + ^self tag: 'footer' ! -name: aString - self at: 'name' put: aString +form + ^self tag: 'form' ! -valign: aString - self at: 'valign' put: aString +h1 + ^self tag: 'h1' ! -method: aString - self at: 'method' put: aString +h1: anObject + ^self h1 with: anObject ! -action: aString - self at: 'action' put: aString +h2 + ^self tag: 'h2' ! -rows: aString - self at: 'rows' put: aString +h2: anObject + ^ self h2 with: anObject ! -cols: aString - self at: 'cols' put: aString -! ! - -!TagBrush methodsFor: 'converting'! - -asJQuery - ^window jQuery: self element -! ! - -!TagBrush methodsFor: 'events'! - -onKeyDown: aBlock - self asJQuery bind: 'keydown' do: aBlock +h3 + ^self tag: 'h3' ! -onKeyPress: aBlock - self asJQuery bind: 'keypress' do: aBlock +h3: anObject + ^self h3 with: anObject ! -onKeyUp: aBlock - self asJQuery bind: 'keyup' do: aBlock +h4 + ^self tag: 'h4' ! -onFocus: aBlock - self asJQuery bind: 'focus' do: aBlock +h4: anObject + ^self h4 with: anObject ! -onBlur: aBlock - self asJQuery bind: 'blur' do: aBlock +h5 + ^self tag: 'h5' ! -onChange: aBlock - self asJQuery bind: 'change' do: aBlock +h5: anObject + ^self h5 with: anObject ! -onClick: aBlock - self asJQuery bind: 'click' do: aBlock +h6 + ^self tag: 'h6' ! -onSubmit: aBlock - self asJQuery bind: 'submit' do: aBlock +h6: anObject + ^self h6 with: anObject ! -onDblClick: aBlock - self asJQuery bind: 'dblclick' do: aBlock +head + ^self tag: 'head' ! -onHover: aBlock - self asJQuery bind: 'hover' do: aBlock +header + ^self tag: 'header' ! -onFocusIn: aBlock - self asJQuery bind: 'focusin' do: aBlock +hgroup + ^self tag: 'hgroup' ! -onFocusOut: aBlock - self asJQuery bind: 'focusout' do: aBlock +hr + ^self tag: 'hr' ! -onMouseDown: aBlock - self asJQuery bind: 'mousedown' do: aBlock +html + ^self tag: 'html' ! -onMouseUp: aBlock - self asJQuery bind: 'mouseup' do: aBlock +iframe + ^self tag: 'iframe' ! -onMouseEnter: aBlock - self asJQuery bind: 'mouseenter' do: aBlock +iframe: aString + ^self iframe src: aString ! -onMouseLeave: aBlock - self asJQuery bind: 'mouseleave' do: aBlock +img + ^self tag: 'img' ! -onMouseMove: aBlock - self asJQuery bind: 'mousemove' do: aBlock +img: aString + ^self img src: aString ! -onMouseOut: aBlock - self asJQuery bind: 'mouseout' do: aBlock +input + ^self tag: 'input' ! -onMouseOver: aBlock - self asJQuery bind: 'mouseover' do: aBlock +label + ^self tag: 'label' ! -onSelect: aBlock - self asJQuery bind: 'select' do: aBlock +legend + ^self tag: 'legend' ! -onUnload: aBlock - self asJQuery bind: 'unload' do: aBlock -! ! - -!TagBrush methodsFor: 'initialization'! - -initializeFromString: aString canvas: aCanvas - element := self createElementFor: aString. - canvas := aCanvas +li + ^self tag: 'li' ! -initializeFromJQuery: aJQuery canvas: aCanvas - element := aJQuery get: 0. - canvas := aCanvas -! ! - -!TagBrush methodsFor: 'private'! - -createElementFor: aString - <return document.createElement(String(aString))> +li: anObject + ^self li with: anObject ! -createTextNodeFor: aString - <return document.createTextNode(String(aString))> -! ! - -!TagBrush class methodsFor: 'instance creation'! +link + ^self tag: 'link' +! -fromString: aString canvas: aCanvas - ^self new - initializeFromString: aString canvas: aCanvas; - yourself +map + ^self tag: 'map' ! -fromJQuery: aJQuery canvas: aCanvas - ^self new - initializeFromJQuery: aJQuery canvas: aCanvas; - yourself -! ! +mark + ^self tag: 'mark' +! -Object subclass: #HTMLCanvas - instanceVariableNames: 'root' - category: 'Canvas'! +menu + ^self tag: 'menu' +! -!HTMLCanvas methodsFor: 'accessing'! +meta + ^self tag: 'meta' +! -root: aTagBrush - root := aTagBrush +nav + ^self tag: 'nav' ! -root - ^root -! ! +newTag: aString + ^TagBrush fromString: aString canvas: self +! -!HTMLCanvas methodsFor: 'adding'! +noscript + ^self tag: 'noscript' +! -with: anObject - ^self root with: anObject -! ! +object + ^self tag: 'object' +! -!HTMLCanvas methodsFor: 'initialization'! +ol + ^self tag: 'ol' +! -initialize - super initialize. - root ifNil: [root := TagBrush fromString: 'div' canvas: self] +ol: anObject + ^self ol with: anObject ! -initializeFromJQuery: aJQuery - root := TagBrush fromJQuery: aJQuery canvas: self -! ! +optgroup + ^self tag: 'optgroup' +! -!HTMLCanvas methodsFor: 'tags'! +option + ^self tag: 'option' +! -newTag: aString - ^TagBrush fromString: aString canvas: self +output + ^self tag: 'output' ! -tag: aString - ^root addBrush: (self newTag: aString) +p + ^self tag: 'p' ! -h1 - ^self tag: 'h1' +p: anObject + ^self p with: anObject ! -h2 - ^self tag: 'h2' +param + ^self tag: 'param' ! -h3 - ^self tag: 'h3' +pre + ^self tag: 'pre' ! -h4 - ^self tag: 'h4' +progress + ^self tag: 'progress' ! -h5 - ^self tag: 'h5' +script + ^self tag: 'script' ! -h6 - ^self tag: 'h6' +section + ^self tag: 'section' +! + +select + ^self tag: 'select' ! -p - ^self tag: 'p' +small + ^self tag: 'small' ! -div - ^self tag: 'div' +source + ^self tag: 'source' ! span ^self tag: 'span' ! -img - ^self tag: 'img' -! - -ul - ^self tag: 'ul' +span: anObject + ^self span with: anObject ! -ol - ^self tag: 'ol' +strong + ^self tag: 'strong' ! -li - ^self tag: 'li' +strong: anObject + ^self strong with: anObject ! -table - ^self tag: 'table' +style + ^ root addBrush: (StyleTag canvas: self) ! -tr - ^self tag: 'tr' +style: aString + ^ self style with: aString; yourself ! -td - ^self tag: 'td' +sub + ^self tag: 'sub' ! -th - ^self tag: 'th' +summary + ^self tag: 'summary' ! -form - ^self tag: 'form' +sup + ^self tag: 'sup' ! -input - ^self tag: 'input' +table + ^self tag: 'table' ! -button - ^self tag: 'button' +tag: aString + ^root addBrush: (self newTag: aString) ! -select - ^self tag: 'select' +tbody + ^self tag: 'tbody' ! -option - ^self tag: 'option' +td + ^self tag: 'td' ! textarea ^self tag: 'textarea' ! -a - ^self tag: 'a' -! - -canvas - ^self tag: 'canvas' +tfoot + ^self tag: 'tfoot' ! -pre - ^self tag: 'pre' +th + ^self tag: 'th' ! -code - ^self tag: 'code' +thead + ^self tag: 'thead' ! -br - ^self tag: 'br' +time + ^self tag: 'time' ! -script - ^self tag: 'script' +title + ^self tag: 'title' ! -link - ^self tag: 'link' +tr + ^self tag: 'tr' ! -style - ^ root addBrush: (StyleTag canvas: self) +ul + ^self tag: 'ul' ! -p: anObject - ^self p with: anObject +ul: anObject + ^self ul with: anObject ! -h1: anObject - ^self h1 with: anObject -! +video + ^self tag: 'video' +! ! -iframe - ^self tag: 'iframe' -! +!HTMLCanvas class methodsFor: 'instance creation'! -iframe: aString - ^self iframe src: aString +browserVersion + ^(jQuery at: #browser) version ! -h2: anObject - ^ self h2 with: anObject +isMSIE + ^((jQuery at: #browser) at: #msie) notNil ! -h3: anObject - ^self h3 with: anObject +isMozilla + ^((jQuery at: #browser) at: #mozilla) notNil ! -h4: anObject - ^self h4 with: anObject +isOpera + ^((jQuery at: #browser) at: #opera) notNil ! -h5: anObject - ^self h5 with: anObject +isWebkit + ^((jQuery at: #browser) at: #webkit) notNil ! -h6: anObject - ^self h6 with: anObject -! +onJQuery: aJQuery + ^self basicNew + initializeFromJQuery: aJQuery; + initialize; + yourself +! ! -img: aString - ^self img src: aString -! +Object subclass: #TagBrush + instanceVariableNames: 'canvas element' + package: 'Canvas'! -ol: anObject - ^self ol with: anObject -! +!TagBrush methodsFor: 'accessing'! -li: anObject - ^self li with: anObject -! +element + ^element +! ! -ul: anObject - ^self ul with: anObject -! +!TagBrush methodsFor: 'adding'! -span: anObject - ^self span with: anObject +addBrush: aTagBrush + self appendChild: aTagBrush element. + ^aTagBrush ! -style: aString - ^ self style with: aString; yourself +append: anObject + anObject appendToBrush: self ! -audio - ^self tag: 'audio' +appendBlock: aBlock + | root | + root := canvas root. + canvas root: self. + aBlock value: canvas. + canvas root: root ! -fieldset - ^self tag: 'fieldset' +appendChild: anElement + "In IE7 and IE8 appendChild fails on several node types. So we need to check" + <var element=self['@element']; + if (null == element.canHaveChildren || element.canHaveChildren) { + element.appendChild(anElement); + } else { + element.text = String(element.text) + anElement.innerHTML; + } > ! -footer - ^self tag: 'footer' +appendString: aString + self appendChild: (self createTextNodeFor: aString) ! -header - ^self tag: 'header' +appendToBrush: aTagBrush + aTagBrush addBrush: self ! -hr - ^self tag: 'hr' +contents: anObject + self + empty; + append: anObject ! -section - ^self tag: 'section' +empty + self asJQuery empty ! -tbody - ^self tag: 'tbody' -! +with: anObject + self append: anObject +! ! -tfoot - ^self tag: 'tfoot' -! +!TagBrush methodsFor: 'attributes'! -thead - ^self tag: 'thead' +accesskey: aString + self at: 'accesskey' put: aString ! -video - ^self tag: 'video' +action: aString + self at: 'action' put: aString ! -label - ^self tag: 'label' +align: aString + self at: 'align' put: aString ! -title - ^self tag: 'title' +alt: aString + self at: 'alt' put: aString ! -time - ^self tag: 'time' +at: aString put: aValue + <self['@element'].setAttribute(aString, aValue)> ! -sup - ^self tag: 'sup' +class: aString + <self['@element'].className = aString> ! -summary - ^self tag: 'summary' +cols: aString + self at: 'cols' put: aString ! -sub - ^self tag: 'sub' +contenteditable: aString + self at: 'contenteditable' put: aString ! -strong - ^self tag: 'strong' +contextmenu: aString + self at: 'contextmenu' put: aString ! -strong: anObject - ^self strong with: anObject +draggable: aString + self at: 'draggable' put: aString ! -source - ^self tag: 'source' +for: aString + self at: 'for' put: aString ! -small - ^self tag: 'small' +height: aString + self at: 'height' put: aString ! -progress - ^self tag: 'progress' +hidden + self at: 'hidden' put: 'hidden' ! -param - ^self tag: 'param' +href: aString + self at: 'href' put: aString ! -output - ^self tag: 'output' +id: aString + self at: 'id' put: aString ! -optgroup - ^self tag: 'optgroup' +media: aString + self at: 'media' put: aString ! -object - ^self tag: 'object' +method: aString + self at: 'method' put: aString ! -noscript - ^self tag: 'noscript' +name: aString + self at: 'name' put: aString ! -nav - ^self tag: 'nav' +placeholder: aString + self at: 'placeholder' put: aString ! -meta - ^self tag: 'meta' +rel: aString + self at: 'rel' put: aString ! -menu - ^self tag: 'menu' +removeAt: aString + <self['@element'].removeAttribute(aString)> ! -mark - ^self tag: 'mark' +rows: aString + self at: 'rows' put: aString ! -map - ^self tag: 'map' +src: aString + self at: 'src' put: aString ! -legend - ^self tag: 'legend' +style: aString + self at: 'style' put: aString ! -html - ^self tag: 'html' +tabindex: aNumber + self at: 'tabindex' put: aNumber ! -hgroup - ^self tag: 'hgroup' +target: aString + self at: 'target' put: aString ! -head - ^self tag: 'head' +title: aString + self at: 'title' put: aString ! -figure - ^self tag: 'figure' +type: aString + self at: 'type' put: aString ! -figcaption - ^self tag: 'figcaption' +valign: aString + self at: 'valign' put: aString ! -embed - ^self tag: 'embed' +value: aString + self at: 'value' put: aString ! -em - ^self tag: 'em' +width: aString + self at: 'width' put: aString +! ! + +!TagBrush methodsFor: 'converting'! + +asJQuery + ^window jQuery: self element +! ! + +!TagBrush methodsFor: 'events'! + +onBlur: aBlock + self asJQuery bind: 'blur' do: aBlock ! -dt - ^self tag: 'dt' +onChange: aBlock + self asJQuery bind: 'change' do: aBlock ! -dl - ^self tag: 'dl' +onClick: aBlock + self asJQuery bind: 'click' do: aBlock ! -details - ^self tag: 'details' +onDblClick: aBlock + self asJQuery bind: 'dblclick' do: aBlock ! -del - ^self tag: 'del' +onFocus: aBlock + self asJQuery bind: 'focus' do: aBlock ! -dd - ^self tag: 'dd' +onFocusIn: aBlock + self asJQuery bind: 'focusin' do: aBlock ! -datalist - ^self tag: 'datalist' +onFocusOut: aBlock + self asJQuery bind: 'focusout' do: aBlock ! -command - ^self tag: 'command' +onHover: aBlock + self asJQuery bind: 'hover' do: aBlock ! -colgroup - ^self tag: 'colgroup' +onKeyDown: aBlock + self asJQuery bind: 'keydown' do: aBlock ! -col - ^self tag: 'col' +onKeyPress: aBlock + self asJQuery bind: 'keypress' do: aBlock ! -cite - ^self tag: 'cite' +onKeyUp: aBlock + self asJQuery bind: 'keyup' do: aBlock ! -caption - ^self tag: 'caption' +onMouseDown: aBlock + self asJQuery bind: 'mousedown' do: aBlock ! -body - ^self tag: 'body' +onMouseEnter: aBlock + self asJQuery bind: 'mouseenter' do: aBlock ! -blockquote - ^self tag: 'blockquote' +onMouseLeave: aBlock + self asJQuery bind: 'mouseleave' do: aBlock ! -base - ^self tag: 'base' +onMouseMove: aBlock + self asJQuery bind: 'mousemove' do: aBlock ! -aside - ^self tag: 'aside' +onMouseOut: aBlock + self asJQuery bind: 'mouseout' do: aBlock ! -article - ^self tag: 'article' +onMouseOver: aBlock + self asJQuery bind: 'mouseover' do: aBlock ! -area - ^self tag: 'area' +onMouseUp: aBlock + self asJQuery bind: 'mouseup' do: aBlock ! -address - ^self tag: 'address' +onSelect: aBlock + self asJQuery bind: 'select' do: aBlock ! -abbr - ^self tag: 'abbr' +onSubmit: aBlock + self asJQuery bind: 'submit' do: aBlock ! -div: aBlock - ^self div with: aBlock +onUnload: aBlock + self asJQuery bind: 'unload' do: aBlock ! ! -!HTMLCanvas class methodsFor: 'instance creation'! +!TagBrush methodsFor: 'initialization'! -onJQuery: aJQuery - ^self basicNew - initializeFromJQuery: aJQuery; - initialize; - yourself +initializeFromJQuery: aJQuery canvas: aCanvas + element := aJQuery get: 0. + canvas := aCanvas ! -isMSIE - ^((jQuery at: #browser) at: #msie) notNil -! +initializeFromString: aString canvas: aCanvas + element := self createElementFor: aString. + canvas := aCanvas +! ! -isOpera - ^((jQuery at: #browser) at: #opera) notNil -! +!TagBrush methodsFor: 'private'! -isMozilla - ^((jQuery at: #browser) at: #mozilla) notNil +createElementFor: aString + <return document.createElement(String(aString))> ! -isWebkit - ^((jQuery at: #browser) at: #webkit) notNil +createTextNodeFor: aString + <return document.createTextNode(String(aString))> +! ! + +!TagBrush class methodsFor: 'instance creation'! + +fromJQuery: aJQuery canvas: aCanvas + ^self new + initializeFromJQuery: aJQuery canvas: aCanvas; + yourself ! -browserVersion - ^(jQuery at: #browser) version +fromString: aString canvas: aCanvas + ^self new + initializeFromString: aString canvas: aCanvas; + yourself ! ! TagBrush subclass: #StyleTag instanceVariableNames: 'canvas element' - category: 'Canvas'! + package: 'Canvas'! !StyleTag commentStamp! I'm a <style> tag use to inline CSS or load a stylesheet. @@ -848,37 +828,57 @@ canvas: aCanvas yourself ! ! -!Object methodsFor: '*Canvas'! +Object subclass: #Widget + instanceVariableNames: '' + package: 'Canvas'! -appendToJQuery: aJQuery - aJQuery append: self asString +!Widget methodsFor: 'adding'! + +appendToBrush: aTagBrush + self appendToJQuery: aTagBrush asJQuery ! +appendToJQuery: aJQuery + self renderOn: (HTMLCanvas onJQuery: aJQuery) +! ! + +!Widget methodsFor: 'rendering'! + +renderOn: html + self +! ! + +!Object methodsFor: '*Canvas'! + appendToBrush: aTagBrush aTagBrush append: self asString +! + +appendToJQuery: aJQuery + aJQuery append: self asString ! ! !BlockClosure methodsFor: '*Canvas'! -appendToJQuery: aJQuery - self value: (HTMLCanvas onJQuery: aJQuery) -! - appendToBrush: aTagBrush aTagBrush appendBlock: self +! + +appendToJQuery: aJQuery + self value: (HTMLCanvas onJQuery: aJQuery) ! ! !String methodsFor: '*Canvas'! -asJQuery - <return jQuery(String(self))> +appendToBrush: aTagBrush + aTagBrush appendString: self ! appendToJQuery: aJQuery aJQuery append: self ! -appendToBrush: aTagBrush - aTagBrush appendString: self +asJQuery + <return jQuery(String(self))> ! ! diff --git a/amber/src/st/Compiler-Tests.st b/amber/src/st/Compiler-Tests.st new file mode 100644 index 00000000000..1070e25ac0e --- /dev/null +++ b/amber/src/st/Compiler-Tests.st @@ -0,0 +1,471 @@ +Smalltalk current createPackage: 'Compiler-Tests' properties: #{}! +TestCase subclass: #ImporterTest + instanceVariableNames: '' + category: 'Compiler-Tests'! + +!ImporterTest methodsFor: 'private'! + +chunkString + + ^'!!Object methodsFor: ''importer test method''!! + +importerTestMethod + + ^''success'' +!! !! +' +! + +bigChunkString + + ^'Smalltalk current createPackage: ''Cypress-Definitions'' properties: #{}!! +Object subclass: #CypressSnapshot + instanceVariableNames: ''definitions'' + package: ''Cypress-Definitions''!! + +!!CypressSnapshot methodsFor: ''not yet classified''!! + +definitions: aDefinitions + + definitions := aDefinitions +!! + +definitions + + ^definitions +!! !! + +!!CypressSnapshot class methodsFor: ''not yet classified''!! + +definitions: aDefinitions + + ^(self new) definitions: aDefinitions +!! !! + +Object subclass: #CypressPackage + instanceVariableNames: ''name'' + package: ''Cypress-Definitions''!! + +!!CypressPackage methodsFor: ''not yet classified''!! + += other + ^ other species = self species and: [other name sameAs: name] +!! + +name + ^ name +!! + +name: aString + name := aString +!! + +snapshot + | package definitions name | + package := Package named: self name. + definitions := OrderedCollection new. + package sortedClasses do: [:cls | + definitions add: cls asCypressClassDefinition. + cls methodDictionary values do: [:method | + (method category match: ''^\*'') ifFalse: [ + definitions add: method asCypressMethodDefinition ]]. + cls class methodDictionary values do: [:method | + (method category match: ''^\*'') ifFalse: [ + definitions add: method asCypressMethodDefinition ]]]. + name := package name. + Smalltalk current classes, (Smalltalk current classes collect: [:each | each class]) do: [:each | + each methodDictionary values do: [:method | + method category = (''*'', name) ifTrue: [ + definitions add: method asCypressMethodDefinition ]]]. + ^ CypressSnapshot definitions: definitions +!! + +printString + ^super printString, ''('', name, '')'' +!! !! + +Object subclass: #CypressDefinition + instanceVariableNames: '''' + package: ''Cypress-Definitions''!! + +!!CypressDefinition methodsFor: ''not yet classified''!! + += aDefinition + ^(aDefinition isKindOf: CypressDefinition) and: [self isRevisionOf: aDefinition] +!! + +isRevisionOf: aDefinition + ^ (aDefinition isKindOf: CypressDefinition) and: [aDefinition description = self description] +!! + +description + self subclassResponsibility +!! + +isSameRevisionAs: aDefinition + ^ self = aDefinition +!! !! + +Object subclass: #CypressPatch + instanceVariableNames: ''operations'' + package: ''Cypress-Definitions''!! + +!!CypressPatch methodsFor: ''not yet classified''!! + +fromBase: baseSnapshot toTarget: targetSnapshot + | base target | + operations := OrderedCollection new. + base := CypressDefinitionIndex definitions: baseSnapshot definitions. + target := CypressDefinitionIndex definitions: targetSnapshot definitions. + + target definitions do: + [:t | + base + definitionLike: t + ifPresent: [:b | (b isSameRevisionAs: t) ifFalse: [operations add: (CypressModification of: b to: t)]] + ifAbsent: [operations add: (CypressAddition of: t)]]. + + base definitions do: + [:b | + target + definitionLike: b + ifPresent: [:t | ] + ifAbsent: [operations add: (CypressRemoval of: b)]] +!! + +operations + + ^operations +!! !! + +!!CypressPatch class methodsFor: ''not yet classified''!! + +fromBase: baseSnapshot toTarget: targetSnapshot + ^ (self new) + fromBase: baseSnapshot + toTarget: targetSnapshot +!! !! + +Object subclass: #CypressDefinitionIndex + instanceVariableNames: ''definitionMap'' + package: ''Cypress-Definitions''!! + +!!CypressDefinitionIndex methodsFor: ''not yet classified''!! + +add: aDefinition + ^ self definitionMap at: aDefinition description put: aDefinition +!! + +addAll: aCollection + aCollection do: [:ea | self add: ea] +!! + +definitionLike: aDefinition ifPresent: foundBlock ifAbsent: errorBlock + | definition | + definition := self definitionMap at: aDefinition description ifAbsent: []. + ^ definition + ifNil: errorBlock + ifNotNil: [foundBlock value: definition] +!! + +definitions + ^self definitionMap values +!! + +definitionMap + definitionMap ifNil: [ definitionMap := Dictionary new ]. + ^ definitionMap +!! + +remove: aDefinition + self definitionMap removeKey: aDefinition description ifAbsent: [] +!! !! + +!!CypressDefinitionIndex class methodsFor: ''not yet classified''!! + +definitions: aCollection + ^ self new addAll: aCollection +!! !! + +Object subclass: #CypressPatchOperation + instanceVariableNames: '''' + package: ''Cypress-Definitions''!! + +CypressDefinition subclass: #CypressClassDefinition + instanceVariableNames: ''name superclassName category comment instVarNames classInstVarNames'' + package: ''Cypress-Definitions''!! + +!!CypressClassDefinition methodsFor: ''not yet classified''!! + +name: aClassName superclassName: aSuperclassName category: aCategory instVarNames: anInstanceVariableNames classInstVarNames: aClassInstanceVariableNames comment: aComment + + name := aClassName. + superclassName := aSuperclassName. + category := aCategory. + instVarNames := anInstanceVariableNames. + classInstVarNames := aClassInstanceVariableNames. + comment := aComment +!! + += aDefinition + ^(super = aDefinition) + and: [superclassName = aDefinition superclassName + and: [category = aDefinition category + and: [instVarNames = aDefinition instVarNames + and: [classInstVarNames = aDefinition classInstVarNames + and: [comment = aDefinition comment]]]]] +!! + +superclassName + + ^superclassName +!! + +name + + ^name +!! + +category + + ^category +!! + +comment + + ^comment +!! + +description + + ^ Array with: name +!! + +instVarNames + + ^instVarNames +!! + +classInstVarNames + + ^classInstVarNames +!! !! + +!!CypressClassDefinition class methodsFor: ''not yet classified''!! + +name: aClassName +superclassName: aSuperclassName +category: aCategory +instVarNames: anInstanceVariableNames +classInstVarNames: aClassInstanceVariableNames +comment: aComment + + ^(self new) + name: aClassName + superclassName: aSuperclassName + category: aCategory + instVarNames: anInstanceVariableNames + classInstVarNames: aClassInstanceVariableNames + comment: aComment +!! !! + +CypressDefinition subclass: #CypressMethodDefinition + instanceVariableNames: ''classIsMeta source category selector className'' + package: ''Cypress-Definitions''!! + +!!CypressMethodDefinition methodsFor: ''not yet classified''!! + +className: aName classIsMeta: isMetaclass selector: aSelector category: aCategory source: aSource + + className := aName. + classIsMeta := isMetaclass. + selector := aSelector. + category := aCategory. + source := aSource. +!! + += aDefinition + ^ super = aDefinition + and: [ aDefinition source = self source + and: [ aDefinition category = self category ] ] +!! + +source + + ^source +!! + +category + + ^category +!! + +description + ^ Array + with: className + with: selector + with: classIsMeta +!! !! + +!!CypressMethodDefinition class methodsFor: ''not yet classified''!! + +className: aName +classIsMeta: isMetaclass +selector: aSelector +category: aCategory +source: aSource + + ^(self new) + className: aName + classIsMeta: isMetaclass + selector: aSelector + category: aCategory + source: aSource +!! !! + +CypressPatchOperation subclass: #CypressAddition + instanceVariableNames: ''definition'' + package: ''Cypress-Definitions''!! + +!!CypressAddition methodsFor: ''not yet classified''!! + +definition: aDefinition + + definition := aDefinition +!! !! + +!!CypressAddition class methodsFor: ''not yet classified''!! + +of: aDefinition + ^ self new definition: aDefinition +!! !! + +CypressPatchOperation subclass: #CypressModification + instanceVariableNames: ''obsoletion modification'' + package: ''Cypress-Definitions''!! + +!!CypressModification methodsFor: ''not yet classified''!! + +base: base target: target + + obsoletion := base. + modification := target. +!! !! + +!!CypressModification class methodsFor: ''not yet classified''!! + +of: base to: target + ^ self new base: base target: target +!! !! + +CypressPatchOperation subclass: #CypressRemoval + instanceVariableNames: ''definition'' + package: ''Cypress-Definitions''!! + +!!CypressRemoval methodsFor: ''not yet classified''!! + +definition: aDefinition + + definition := aDefinition +!! !! + +!!CypressRemoval class methodsFor: ''not yet classified''!! + +of: aDefinition + ^ self new definition: aDefinition +!! !! + +!!Object methodsFor: ''*Cypress-Definitions''!! + +species + + ^self class +!! !! + +!!Class methodsFor: ''*Cypress-Definitions''!! + +asCypressClassDefinition + ^CypressClassDefinition + name: self name + superclassName: self superclass name + category: self category + instVarNames: self instanceVariableNames + classInstVarNames: self class instanceVariableNames + comment: self comment +!! !! + +!!CompiledMethod methodsFor: ''*Cypress-Definitions''!! + +asCypressMethodDefinition + + ^CypressMethodDefinition + className: self methodClass name + classIsMeta: self methodClass isMetaclass + selector: self selector + category: self category + source: self source +!! !! + +!!CharacterArray methodsFor: ''*Cypress-Definitions''!! + +sameAs: aString + + ^self asUppercase = aString asUppercase +!! !! + +' +! ! + +!ImporterTest methodsFor: 'running'! + +setUp + + super setUp. + self cleanUp +! + +tearDown + + super tearDown. + self cleanUp +! + +cleanUp + + (Object methodDictionary includesKey: #importerTestMethod) + ifTrue: [ Object removeCompiledMethod: (Object methodAt: #importerTestMethod)]. +! ! + +!ImporterTest methodsFor: 'tests'! + +testBigChunkString + "importer does not correctly add extension methods. + + After loading in AmberProjectImporter, the following import fails...get a MNU from `CypressPackage new species`: + + AmberProjectImporter + importSTPackage: 'Cypress-Definitions' + prefix: 'tests/'. + + CypressPackage new species. + + WARNING this guy isn't cleaned up automatically" + + Importer new import: self bigChunkString readStream. + CypressPackage new species. +! + +testChunkString + + Importer new import: self chunkString readStream. + self assert: (Object methodDictionary includesKey: 'importerTestMethod'). + self assert: (Object new importerTestMethod = 'success'). +! ! + +!Object methodsFor: '*Compiler-Tests'! + +importerLoadMethod + + ^'success' +! ! + diff --git a/amber/src/st/Compiler.st b/amber/src/st/Compiler.st index 28e3d5a0200..16947ff2014 100755 --- a/amber/src/st/Compiler.st +++ b/amber/src/st/Compiler.st @@ -1,122 +1,55 @@ Smalltalk current createPackage: 'Compiler' properties: #{}! -Object subclass: #NodeVisitor - instanceVariableNames: '' - category: 'Compiler'! - -!NodeVisitor methodsFor: 'visiting'! - -visit: aNode - aNode accept: self -! - -visitNode: aNode -! - -visitMethodNode: aNode - self visitNode: aNode -! - -visitSequenceNode: aNode - self visitNode: aNode -! - -visitBlockSequenceNode: aNode - self visitSequenceNode: aNode -! - -visitBlockNode: aNode - self visitNode: aNode -! - -visitReturnNode: aNode - self visitNode: aNode -! - -visitSendNode: aNode - self visitNode: aNode -! +Object subclass: #ChunkParser + instanceVariableNames: 'stream' + package: 'Compiler'! -visitCascadeNode: aNode - self visitNode: aNode -! +!ChunkParser methodsFor: 'accessing'! -visitValueNode: aNode - self visitNode: aNode -! +stream: aStream + stream := aStream +! ! -visitVariableNode: aNode -! +!ChunkParser methodsFor: 'reading'! -visitAssignmentNode: aNode - self visitNode: aNode -! +nextChunk + "The chunk format (Smalltalk Interchange Format or Fileout format) + is a trivial format but can be a bit tricky to understand: + - Uses the exclamation mark as delimiter of chunks. + - Inside a chunk a normal exclamation mark must be doubled. + - A non empty chunk must be a valid Smalltalk expression. + - A chunk on top level with a preceding empty chunk is an instruction chunk: + - The object created by the expression then takes over reading chunks. -visitClassReferenceNode: aNode - self - nextPutAll: 'smalltalk.'; - nextPutAll: aNode value -! + This metod returns next chunk as a String (trimmed), empty String (all whitespace) or nil." -visitJSStatementNode: aNode - self - nextPutAll: 'function(){'; - nextPutAll: aNode source; - nextPutAll: '})()' -! + | char result chunk | + result := '' writeStream. + [char := stream next. + char notNil] whileTrue: [ + char = '!!' ifTrue: [ + stream peek = '!!' + ifTrue: [stream next "skipping the escape double"] + ifFalse: [^result contents trimBoth "chunk end marker found"]]. + result nextPut: char]. + ^nil "a chunk needs to end with !!" +! ! -visitDynamicArrayNode: aNode - self visitNode: aNode -! +!ChunkParser class methodsFor: 'not yet classified'! -visitDynamicDictionaryNode: aNode - self visitNode: aNode +on: aStream + ^self new stream: aStream ! ! Object subclass: #DoIt instanceVariableNames: '' - category: 'Compiler'! - -Object subclass: #Importer - instanceVariableNames: '' - category: 'Compiler'! - -!Importer methodsFor: 'fileIn'! - -import: aStream - | chunk result parser lastEmpty | - parser := ChunkParser on: aStream. - lastEmpty := false. - [chunk := parser nextChunk. - chunk isNil] whileFalse: [ - chunk isEmpty - ifTrue: [lastEmpty := true] - ifFalse: [ - result := Compiler new loadExpression: chunk. - lastEmpty - ifTrue: [ - lastEmpty := false. - result scanFrom: parser]]] -! ! + package: 'Compiler'! Object subclass: #Exporter instanceVariableNames: '' - category: 'Compiler'! + package: 'Compiler'! !Exporter methodsFor: 'fileOut'! -exportPackage: packageName - "Export a given package by name." - - | package | - ^String streamContents: [:stream | - package := Smalltalk current packageAt: packageName. - self exportPackageDefinitionOf: package on: stream. - "Export classes in dependency order" - package sortedClasses do: [:each | - stream nextPutAll: (self exportClass: each)]. - self exportPackageExtensionsOf: package on: stream] -! - exportAll "Export all packages in the system." @@ -133,10 +66,32 @@ exportClass: aClass self exportMethodsOf: aClass on: stream. self exportMetaDefinitionOf: aClass on: stream. self exportMethodsOf: aClass class on: stream] +! + +exportPackage: packageName + "Export a given package by name." + + | package | + ^String streamContents: [:stream | + package := Smalltalk current packageAt: packageName. + self exportPackageDefinitionOf: package on: stream. + "Export classes in dependency order" + package sortedClasses do: [:each | + stream nextPutAll: (self exportClass: each)]. + self exportPackageExtensionsOf: package on: stream] ! ! !Exporter methodsFor: 'private'! +classNameFor: aClass + ^aClass isMetaclass + ifTrue: [aClass instanceClass name, '.klass'] + ifFalse: [ + aClass isNil + ifTrue: ['nil'] + ifFalse: [aClass name]] +! + exportDefinitionOf: aClass on: aStream aStream nextPutAll: 'smalltalk.addClass('; @@ -171,22 +126,6 @@ exportMetaDefinitionOf: aClass on: aStream aStream nextPutAll: '];', String lf] ! -exportMethodsOf: aClass on: aStream - aClass methodDictionary values do: [:each | - (each category match: '^\*') ifFalse: [ - self exportMethod: each of: aClass on: aStream]]. - aStream lf -! - -classNameFor: aClass - ^aClass isMetaclass - ifTrue: [aClass instanceClass name, '.klass'] - ifFalse: [ - aClass isNil - ifTrue: ['nil'] - ifFalse: [aClass name]] -! - exportMethod: aMethod of: aClass on: aStream aStream nextPutAll: 'smalltalk.addMethod(';lf; @@ -206,13 +145,13 @@ exportMethod: aMethod of: aClass on: aStream nextPutAll: ');';lf;lf ! -exportPackageExtensionsOf: package on: aStream - | name | - name := package name. - Smalltalk current classes, (Smalltalk current classes collect: [:each | each class]) do: [:each | - each methodDictionary values do: [:method | - method category = ('*', name) ifTrue: [ - self exportMethod: method of: each on: aStream]]] +exportMethodsOf: aClass on: aStream + "Issue #143: sort methods alphabetically" + + ((aClass methodDictionary values) sorted: [:a :b | a selector <= b selector]) do: [:each | + (each category match: '^\*') ifFalse: [ + self exportMethod: each of: aClass on: aStream]]. + aStream lf ! exportPackageDefinitionOf: package on: aStream @@ -220,81 +159,222 @@ exportPackageDefinitionOf: package on: aStream nextPutAll: 'smalltalk.addPackage('; nextPutAll: '''', package name, ''', ', package propertiesAsJSON , ');'. aStream lf -! ! - -Object subclass: #ChunkParser - instanceVariableNames: 'stream' - category: 'Compiler'! +! -!ChunkParser methodsFor: 'accessing'! +exportPackageExtensionsOf: package on: aStream + "Issue #143: sort classes and methods alphabetically" -stream: aStream - stream := aStream + | name | + name := package name. + (Package sortedClasses: Smalltalk current classes) do: [:each | + {each. each class} do: [:aClass | + ((aClass methodDictionary values) sorted: [:a :b | a selector <= b selector]) do: [:method | + (method category match: '^\*', name) ifTrue: [ + self exportMethod: method of: each on: aStream ]]]] ! ! -!ChunkParser methodsFor: 'reading'! +Exporter subclass: #ChunkExporter + instanceVariableNames: '' + package: 'Compiler'! -nextChunk - "The chunk format (Smalltalk Interchange Format or Fileout format) - is a trivial format but can be a bit tricky to understand: - - Uses the exclamation mark as delimiter of chunks. - - Inside a chunk a normal exclamation mark must be doubled. - - A non empty chunk must be a valid Smalltalk expression. - - A chunk on top level with a preceding empty chunk is an instruction chunk: - - The object created by the expression then takes over reading chunks. +!ChunkExporter methodsFor: 'not yet classified'! - This metod returns next chunk as a String (trimmed), empty String (all whitespace) or nil." +chunkEscape: aString + "Replace all occurrences of !! with !!!! and trim at both ends." - | char result chunk | - result := '' writeStream. - [char := stream next. - char notNil] whileTrue: [ - char = '!!' ifTrue: [ - stream peek = '!!' - ifTrue: [stream next "skipping the escape double"] - ifFalse: [^result contents trimBoth "chunk end marker found"]]. - result nextPut: char]. - ^nil "a chunk needs to end with !!" -! ! + ^(aString replace: '!!' with: '!!!!') trimBoth +! -!ChunkParser class methodsFor: 'not yet classified'! +classNameFor: aClass + ^aClass isMetaclass + ifTrue: [aClass instanceClass name, ' class'] + ifFalse: [ + aClass isNil + ifTrue: ['nil'] + ifFalse: [aClass name]] +! -on: aStream - ^self new stream: aStream -! ! +exportDefinitionOf: aClass on: aStream + "Chunk format." + + aStream + nextPutAll: (self classNameFor: aClass superclass); + nextPutAll: ' subclass: #', (self classNameFor: aClass); lf; + nextPutAll: ' instanceVariableNames: '''. + aClass instanceVariableNames + do: [:each | aStream nextPutAll: each] + separatedBy: [aStream nextPutAll: ' ']. + aStream + nextPutAll: ''''; lf; + nextPutAll: ' package: ''', aClass category, '''!!'; lf. + aClass comment notEmpty ifTrue: [ + aStream + nextPutAll: '!!', (self classNameFor: aClass), ' commentStamp!!';lf; + nextPutAll: (self chunkEscape: aClass comment), '!!';lf]. + aStream lf +! -Object subclass: #Node - instanceVariableNames: 'nodes' - category: 'Compiler'! +exportMetaDefinitionOf: aClass on: aStream -!Node methodsFor: 'accessing'! + aClass class instanceVariableNames isEmpty ifFalse: [ + aStream + nextPutAll: (self classNameFor: aClass class); + nextPutAll: ' instanceVariableNames: '''. + aClass class instanceVariableNames + do: [:each | aStream nextPutAll: each] + separatedBy: [aStream nextPutAll: ' ']. + aStream + nextPutAll: '''!!'; lf; lf] +! -nodes - ^nodes ifNil: [nodes := Array new] +exportMethod: aMethod of: aClass on: aStream + aStream + lf; lf; nextPutAll: (self chunkEscape: aMethod source); lf; + nextPutAll: '!!' ! -addNode: aNode - self nodes add: aNode -! ! +exportMethods: methods category: category of: aClass on: aStream + "Issue #143: sort methods alphabetically" -!Node methodsFor: 'building'! + aStream + nextPutAll: '!!', (self classNameFor: aClass); + nextPutAll: ' methodsFor: ''', category, '''!!'. + (methods sorted: [:a :b | a selector <= b selector]) do: [:each | + self exportMethod: each of: aClass on: aStream]. + aStream nextPutAll: ' !!'; lf; lf +! -nodes: aCollection - nodes := aCollection +exportMethodsOf: aClass on: aStream + "Issue #143: sort protocol alphabetically" + + | map | + map := Dictionary new. + aClass protocolsDo: [:category :methods | + (category match: '^\*') ifFalse: [ map at: category put: methods ]]. + (map keys sorted: [:a :b | a <= b ]) do: [:category | | methods | + methods := map at: category. + self + exportMethods: methods + category: category + of: aClass + on: aStream ] +! + +exportPackageDefinitionOf: package on: aStream + "Chunk format." + + aStream + nextPutAll: 'Smalltalk current createPackage: ''', package name, + ''' properties: ', package properties storeString, '!!'; lf. +! + +exportPackageExtensionsOf: package on: aStream + "We need to override this one too since we need to group + all methods in a given protocol under a leading methodsFor: chunk + for that class." + + "Issue #143: sort protocol alphabetically" + + | name map | + name := package name. + (Package sortedClasses: Smalltalk current classes) do: [:each | + {each. each class} do: [:aClass | + map := Dictionary new. + aClass protocolsDo: [:category :methods | + (category match: '^\*', name) ifTrue: [ map at: category put: methods ]]. + (map keys sorted: [:a :b | a <= b ]) do: [:category | | methods | + methods := map at: category. + self exportMethods: methods category: category of: each on: aStream ]]] ! ! -!Node methodsFor: 'testing'! +Exporter subclass: #StrippedExporter + instanceVariableNames: '' + package: 'Compiler'! -isValueNode - ^false +!StrippedExporter methodsFor: 'private'! + +exportDefinitionOf: aClass on: aStream + aStream + nextPutAll: 'smalltalk.addClass('; + nextPutAll: '''', (self classNameFor: aClass), ''', '; + nextPutAll: 'smalltalk.', (self classNameFor: aClass superclass); + nextPutAll: ', ['. + aClass instanceVariableNames + do: [:each | aStream nextPutAll: '''', each, ''''] + separatedBy: [aStream nextPutAll: ', ']. + aStream + nextPutAll: '], '''; + nextPutAll: aClass category, ''''; + nextPutAll: ');'. + aStream lf ! +exportMethod: aMethod of: aClass on: aStream + aStream + nextPutAll: 'smalltalk.addMethod(';lf; + nextPutAll: 'unescape(''', aMethod selector asSelector escaped, '''),';lf; + nextPutAll: 'smalltalk.method({';lf; + nextPutAll: 'selector: unescape(''', aMethod selector escaped, '''),';lf; + nextPutAll: 'fn: ', aMethod fn compiledSource;lf; + nextPutAll: '}),';lf; + nextPutAll: 'smalltalk.', (self classNameFor: aClass); + nextPutAll: ');';lf;lf +! ! + +Object subclass: #Importer + instanceVariableNames: '' + package: 'Compiler'! + +!Importer methodsFor: 'fileIn'! + +import: aStream + | chunk result parser lastEmpty | + parser := ChunkParser on: aStream. + lastEmpty := false. + [chunk := parser nextChunk. + chunk isNil] whileFalse: [ + chunk isEmpty + ifTrue: [lastEmpty := true] + ifFalse: [ + result := Compiler new loadExpression: chunk. + lastEmpty + ifTrue: [ + lastEmpty := false. + result scanFrom: parser]]] +! ! + +Object subclass: #Node + instanceVariableNames: 'nodes' + package: 'Compiler'! + +!Node methodsFor: 'accessing'! + +addNode: aNode + self nodes add: aNode +! + +nodes + ^nodes ifNil: [nodes := Array new] +! ! + +!Node methodsFor: 'building'! + +nodes: aCollection + nodes := aCollection +! ! + +!Node methodsFor: 'testing'! + isBlockNode ^false ! isBlockSequenceNode ^false +! + +isValueNode + ^false ! ! !Node methodsFor: 'visiting'! @@ -303,227 +383,181 @@ accept: aVisitor aVisitor visitNode: self ! ! -Node subclass: #SequenceNode - instanceVariableNames: 'temps' - category: 'Compiler'! +Node subclass: #AssignmentNode + instanceVariableNames: 'left right' + package: 'Compiler'! -!SequenceNode methodsFor: 'accessing'! +!AssignmentNode methodsFor: 'accessing'! -temps - ^temps ifNil: [#()] +left + ^left ! -temps: aCollection - temps := aCollection -! ! - -!SequenceNode methodsFor: 'testing'! - -asBlockSequenceNode - ^BlockSequenceNode new - nodes: self nodes; - temps: self temps; - yourself -! ! +left: aNode + left := aNode. + left assigned: true +! -!SequenceNode methodsFor: 'visiting'! +right + ^right +! -accept: aVisitor - aVisitor visitSequenceNode: self +right: aNode + right := aNode ! ! -Node subclass: #DynamicDictionaryNode - instanceVariableNames: '' - category: 'Compiler'! - -!DynamicDictionaryNode methodsFor: 'visiting'! +!AssignmentNode methodsFor: 'visiting'! accept: aVisitor - aVisitor visitDynamicDictionaryNode: self + aVisitor visitAssignmentNode: self ! ! -Node subclass: #ReturnNode - instanceVariableNames: '' - category: 'Compiler'! - -!ReturnNode methodsFor: 'visiting'! +Node subclass: #BlockNode + instanceVariableNames: 'parameters inlined' + package: 'Compiler'! -accept: aVisitor - aVisitor visitReturnNode: self -! ! +!BlockNode methodsFor: 'accessing'! -Node subclass: #ValueNode - instanceVariableNames: 'value' - category: 'Compiler'! +inlined + ^inlined ifNil: [false] +! -!ValueNode methodsFor: 'accessing'! +inlined: aBoolean + inlined := aBoolean +! -value - ^value +parameters + ^parameters ifNil: [parameters := Array new] ! -value: anObject - value := anObject +parameters: aCollection + parameters := aCollection ! ! -!ValueNode methodsFor: 'testing'! +!BlockNode methodsFor: 'testing'! -isValueNode +isBlockNode ^true ! ! -!ValueNode methodsFor: 'visiting'! +!BlockNode methodsFor: 'visiting'! accept: aVisitor - aVisitor visitValueNode: self + aVisitor visitBlockNode: self ! ! -ValueNode subclass: #VariableNode - instanceVariableNames: 'assigned' - category: 'Compiler'! +Node subclass: #CascadeNode + instanceVariableNames: 'receiver' + package: 'Compiler'! -!VariableNode methodsFor: 'accessing'! +!CascadeNode methodsFor: 'accessing'! -assigned - ^assigned ifNil: [false] +receiver + ^receiver ! -assigned: aBoolean - assigned := aBoolean +receiver: aNode + receiver := aNode ! ! -!VariableNode methodsFor: 'visiting'! +!CascadeNode methodsFor: 'visiting'! accept: aVisitor - aVisitor visitVariableNode: self + aVisitor visitCascadeNode: self ! ! -Exporter subclass: #ChunkExporter +Node subclass: #DynamicArrayNode instanceVariableNames: '' - category: 'Compiler'! + package: 'Compiler'! -!ChunkExporter methodsFor: 'not yet classified'! +!DynamicArrayNode methodsFor: 'visiting'! -exportDefinitionOf: aClass on: aStream - "Chunk format." +accept: aVisitor + aVisitor visitDynamicArrayNode: self +! ! - aStream - nextPutAll: (self classNameFor: aClass superclass); - nextPutAll: ' subclass: #', (self classNameFor: aClass); lf; - nextPutAll: ' instanceVariableNames: '''. - aClass instanceVariableNames - do: [:each | aStream nextPutAll: each] - separatedBy: [aStream nextPutAll: ' ']. - aStream - nextPutAll: ''''; lf; - nextPutAll: ' category: ''', aClass category, '''!!'; lf. - aClass comment notEmpty ifTrue: [ - aStream - nextPutAll: '!!', (self classNameFor: aClass), ' commentStamp!!';lf; - nextPutAll: (self chunkEscape: aClass comment), '!!';lf]. - aStream lf -! +Node subclass: #DynamicDictionaryNode + instanceVariableNames: '' + package: 'Compiler'! -exportMethod: aMethod of: aClass on: aStream - aStream - lf; lf; nextPutAll: (self chunkEscape: aMethod source); lf; - nextPutAll: '!!' -! +!DynamicDictionaryNode methodsFor: 'visiting'! -exportMethodsOf: aClass on: aStream +accept: aVisitor + aVisitor visitDynamicDictionaryNode: self +! ! - aClass protocolsDo: [:category :methods | - (category match: '^\*') ifFalse: [ - self - exportMethods: methods - category: category - of: aClass - on: aStream]] -! +Node subclass: #JSStatementNode + instanceVariableNames: 'source' + package: 'Compiler'! -exportMetaDefinitionOf: aClass on: aStream +!JSStatementNode methodsFor: 'accessing'! - aClass class instanceVariableNames isEmpty ifFalse: [ - aStream - nextPutAll: (self classNameFor: aClass class); - nextPutAll: ' instanceVariableNames: '''. - aClass class instanceVariableNames - do: [:each | aStream nextPutAll: each] - separatedBy: [aStream nextPutAll: ' ']. - aStream - nextPutAll: '''!!'; lf; lf] +source + ^source ifNil: [''] ! -classNameFor: aClass - ^aClass isMetaclass - ifTrue: [aClass instanceClass name, ' class'] - ifFalse: [ - aClass isNil - ifTrue: ['nil'] - ifFalse: [aClass name]] -! +source: aString + source := aString +! ! -chunkEscape: aString - "Replace all occurrences of !! with !!!! and trim at both ends." +!JSStatementNode methodsFor: 'visiting'! - ^(aString replace: '!!' with: '!!!!') trimBoth +accept: aVisitor + aVisitor visitJSStatementNode: self +! ! + +Node subclass: #MethodNode + instanceVariableNames: 'selector arguments source' + package: 'Compiler'! + +!MethodNode methodsFor: 'accessing'! + +arguments + ^arguments ifNil: [#()] ! -exportMethods: methods category: category of: aClass on: aStream +arguments: aCollection + arguments := aCollection +! - aStream - nextPutAll: '!!', (self classNameFor: aClass); - nextPutAll: ' methodsFor: ''', category, '''!!'. - methods do: [:each | - self exportMethod: each of: aClass on: aStream]. - aStream nextPutAll: ' !!'; lf; lf +selector + ^selector ! -exportPackageExtensionsOf: package on: aStream - "We need to override this one too since we need to group - all methods in a given protocol under a leading methodsFor: chunk - for that class." +selector: aString + selector := aString +! - | name | - name := package name. - Smalltalk current classes, (Smalltalk current classes collect: [:each | each class]) do: [:each | - each protocolsDo: [:category :methods | - category = ('*', name) ifTrue: [ - self exportMethods: methods category: category of: each on: aStream]]] +source + ^source ! -exportPackageDefinitionOf: package on: aStream - "Chunk format." +source: aString + source := aString +! ! - aStream - nextPutAll: 'Smalltalk current createPackage: ''', package name, - ''' properties: ', package properties storeString, '!!'; lf. +!MethodNode methodsFor: 'visiting'! + +accept: aVisitor + aVisitor visitMethodNode: self ! ! -VariableNode subclass: #ClassReferenceNode +Node subclass: #ReturnNode instanceVariableNames: '' - category: 'Compiler'! + package: 'Compiler'! -!ClassReferenceNode methodsFor: 'visiting'! +!ReturnNode methodsFor: 'visiting'! accept: aVisitor - aVisitor visitClassReferenceNode: self + aVisitor visitReturnNode: self ! ! Node subclass: #SendNode instanceVariableNames: 'selector arguments receiver' - category: 'Compiler'! + package: 'Compiler'! !SendNode methodsFor: 'accessing'! -selector - ^selector -! - -selector: aString - selector := aString -! - arguments ^arguments ifNil: [arguments := #()] ! @@ -532,6 +566,18 @@ arguments: aCollection arguments := aCollection ! +cascadeNodeWithMessages: aCollection + | first | + first := SendNode new + selector: self selector; + arguments: self arguments; + yourself. + ^CascadeNode new + receiver: self receiver; + nodes: (Array with: first), aCollection; + yourself +! + receiver ^receiver ! @@ -540,6 +586,14 @@ receiver: aNode receiver := aNode ! +selector + ^selector +! + +selector: aString + selector := aString +! + valueForReceiver: anObject ^SendNode new receiver: (self receiver @@ -548,93 +602,205 @@ valueForReceiver: anObject selector: self selector; arguments: self arguments; yourself +! ! + +!SendNode methodsFor: 'visiting'! + +accept: aVisitor + aVisitor visitSendNode: self +! ! + +Node subclass: #SequenceNode + instanceVariableNames: 'temps' + package: 'Compiler'! + +!SequenceNode methodsFor: 'accessing'! + +temps + ^temps ifNil: [#()] ! -cascadeNodeWithMessages: aCollection - | first | - first := SendNode new - selector: self selector; - arguments: self arguments; - yourself. - ^CascadeNode new - receiver: self receiver; - nodes: (Array with: first), aCollection; +temps: aCollection + temps := aCollection +! ! + +!SequenceNode methodsFor: 'testing'! + +asBlockSequenceNode + ^BlockSequenceNode new + nodes: self nodes; + temps: self temps; yourself ! ! -!SendNode methodsFor: 'visiting'! +!SequenceNode methodsFor: 'visiting'! accept: aVisitor - aVisitor visitSendNode: self + aVisitor visitSequenceNode: self ! ! -Node subclass: #JSStatementNode - instanceVariableNames: 'source' - category: 'Compiler'! +SequenceNode subclass: #BlockSequenceNode + instanceVariableNames: '' + package: 'Compiler'! -!JSStatementNode methodsFor: 'accessing'! +!BlockSequenceNode methodsFor: 'testing'! -source - ^source ifNil: [''] +isBlockSequenceNode + ^true +! ! + +!BlockSequenceNode methodsFor: 'visiting'! + +accept: aVisitor + aVisitor visitBlockSequenceNode: self +! ! + +Node subclass: #ValueNode + instanceVariableNames: 'value' + package: 'Compiler'! + +!ValueNode methodsFor: 'accessing'! + +value + ^value +! + +value: anObject + value := anObject +! ! + +!ValueNode methodsFor: 'testing'! + +isValueNode + ^true +! ! + +!ValueNode methodsFor: 'visiting'! + +accept: aVisitor + aVisitor visitValueNode: self +! ! + +ValueNode subclass: #VariableNode + instanceVariableNames: 'assigned' + package: 'Compiler'! + +!VariableNode methodsFor: 'accessing'! + +assigned + ^assigned ifNil: [false] +! + +assigned: aBoolean + assigned := aBoolean +! ! + +!VariableNode methodsFor: 'visiting'! + +accept: aVisitor + aVisitor visitVariableNode: self +! ! + +VariableNode subclass: #ClassReferenceNode + instanceVariableNames: '' + package: 'Compiler'! + +!ClassReferenceNode methodsFor: 'visiting'! + +accept: aVisitor + aVisitor visitClassReferenceNode: self +! ! + +Object subclass: #NodeVisitor + instanceVariableNames: '' + package: 'Compiler'! + +!NodeVisitor methodsFor: 'visiting'! + +visit: aNode + aNode accept: self +! + +visitAssignmentNode: aNode + self visitNode: aNode ! -source: aString - source := aString -! ! +visitBlockNode: aNode + self visitNode: aNode +! -!JSStatementNode methodsFor: 'visiting'! +visitBlockSequenceNode: aNode + self visitSequenceNode: aNode +! -accept: aVisitor - aVisitor visitJSStatementNode: self -! ! +visitCascadeNode: aNode + self visitNode: aNode +! -Node subclass: #AssignmentNode - instanceVariableNames: 'left right' - category: 'Compiler'! +visitClassReferenceNode: aNode + self + nextPutAll: 'smalltalk.'; + nextPutAll: aNode value +! -!AssignmentNode methodsFor: 'accessing'! +visitDynamicArrayNode: aNode + self visitNode: aNode +! -left - ^left +visitDynamicDictionaryNode: aNode + self visitNode: aNode ! -left: aNode - left := aNode. - left assigned: true +visitJSStatementNode: aNode + self + nextPutAll: 'function(){'; + nextPutAll: aNode source; + nextPutAll: '})()' ! -right - ^right +visitMethodNode: aNode + self visitNode: aNode ! -right: aNode - right := aNode -! ! +visitNode: aNode +! -!AssignmentNode methodsFor: 'visiting'! +visitReturnNode: aNode + self visitNode: aNode +! -accept: aVisitor - aVisitor visitAssignmentNode: self -! ! +visitSendNode: aNode + self visitNode: aNode +! -Node subclass: #DynamicArrayNode - instanceVariableNames: '' - category: 'Compiler'! +visitSequenceNode: aNode + self visitNode: aNode +! -!DynamicArrayNode methodsFor: 'visiting'! +visitValueNode: aNode + self visitNode: aNode +! -accept: aVisitor - aVisitor visitDynamicArrayNode: self +visitVariableNode: aNode ! ! NodeVisitor subclass: #Compiler instanceVariableNames: 'stream nestedBlocks earlyReturn currentClass currentSelector unknownVariables tempVariables messageSends referencedClasses classReferenced source argVariables' - category: 'Compiler'! + package: 'Compiler'! !Compiler methodsFor: 'accessing'! -parser - ^SmalltalkParser new +argVariables + ^argVariables copy +! + +classNameFor: aClass + ^aClass isMetaclass + ifTrue: [aClass instanceClass name, '.klass'] + ifFalse: [ + aClass isNil + ifTrue: ['nil'] + ifFalse: [aClass name]] ! currentClass @@ -645,18 +811,6 @@ currentClass: aClass currentClass := aClass ! -unknownVariables - ^unknownVariables copy -! - -pseudoVariables - ^#('self' 'super' 'true' 'false' 'nil' 'thisContext') -! - -tempVariables - ^tempVariables copy -! - knownVariables ^self pseudoVariables addAll: self tempVariables; @@ -664,13 +818,18 @@ knownVariables yourself ! -classNameFor: aClass - ^aClass isMetaclass - ifTrue: [aClass instanceClass name, '.klass'] - ifFalse: [ - aClass isNil - ifTrue: ['nil'] - ifFalse: [aClass name]] +parser + ^SmalltalkParser new +! + +pseudoVariables + ^#('self' 'super' 'true' 'false' 'nil' 'thisContext') +! + +safeVariableNameFor: aString + ^(Smalltalk current reservedWords includes: aString) + ifTrue: [aString, '_'] + ifFalse: [aString] ! source @@ -681,31 +840,18 @@ source: aString source := aString ! -argVariables - ^argVariables copy +tempVariables + ^tempVariables copy ! -safeVariableNameFor: aString - ^(Smalltalk current reservedWords includes: aString) - ifTrue: [aString, '_'] - ifFalse: [aString] +unknownVariables + ^unknownVariables copy ! ! !Compiler methodsFor: 'compiling'! -loadExpression: aString - | result | - DoIt addCompiledMethod: (self eval: (self compileExpression: aString)). - result := DoIt new doIt. - DoIt removeCompiledMethod: (DoIt methodDictionary at: 'doIt'). - ^result -! - -load: aString forClass: aClass - | compiled | - compiled := self eval: (self compile: aString forClass: aClass). - self setupClass: aClass. - ^compiled +compile: aString + ^self compileNode: (self parse: aString) ! compile: aString forClass: aClass @@ -720,18 +866,29 @@ compileExpression: aString ^self compileNode: (self parse: self source) ! +compileNode: aNode + stream := '' writeStream. + self visit: aNode. + ^stream contents +! + eval: aString <return eval(aString)> ! -compile: aString - ^self compileNode: (self parse: aString) +load: aString forClass: aClass + | compiled | + compiled := self eval: (self compile: aString forClass: aClass). + self setupClass: aClass. + ^compiled ! -compileNode: aNode - stream := '' writeStream. - self visit: aNode. - ^stream contents +loadExpression: aString + | result | + DoIt addCompiledMethod: (self eval: (self compileExpression: aString)). + result := DoIt new doIt. + DoIt removeCompiledMethod: (DoIt methodDictionary at: 'doIt'). + ^result ! parse: aString @@ -742,40 +899,135 @@ parseExpression: aString ^self parse: 'doIt ^[', aString, '] value' ! -recompile: aClass - aClass methodDictionary do: [:each || method | - method := self load: each source forClass: aClass. - method category: each category. - aClass addCompiledMethod: method]. - aClass isMetaclass ifFalse: [self recompile: aClass class] -! +recompile: aClass + aClass methodDictionary do: [:each || method | + method := self load: each source forClass: aClass. + method category: each category. + aClass addCompiledMethod: method]. + aClass isMetaclass ifFalse: [self recompile: aClass class] +! + +recompileAll + Smalltalk current classes do: [:each | + Transcript show: each; cr. + [self recompile: each] valueWithTimeout: 100] +! + +setupClass: aClass + <smalltalk.init(aClass)> +! ! + +!Compiler methodsFor: 'initialization'! + +initialize + super initialize. + stream := '' writeStream. + unknownVariables := #(). + tempVariables := #(). + argVariables := #(). + messageSends := #(). + classReferenced := #() +! ! + +!Compiler methodsFor: 'optimizations'! + +checkClass: aClassName for: receiver + stream nextPutAll: '((($receiver = ', receiver, ').klass === smalltalk.', aClassName, ') ? ' +! + +inline: aSelector receiver: receiver argumentNodes: aCollection + | inlined | + inlined := false. + + "-- Booleans --" + + (aSelector = 'ifFalse:') ifTrue: [ + aCollection first isBlockNode ifTrue: [ + self checkClass: 'Boolean' for: receiver. + stream nextPutAll: '(!! $receiver ? '. + self visit: aCollection first. + stream nextPutAll: '() : nil)'. + inlined := true]]. + + (aSelector = 'ifTrue:') ifTrue: [ + aCollection first isBlockNode ifTrue: [ + self checkClass: 'Boolean' for: receiver. + stream nextPutAll: '($receiver ? '. + self visit: aCollection first. + stream nextPutAll: '() : nil)'. + inlined := true]]. + + (aSelector = 'ifTrue:ifFalse:') ifTrue: [ + (aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [ + self checkClass: 'Boolean' for: receiver. + stream nextPutAll: '($receiver ? '. + self visit: aCollection first. + stream nextPutAll: '() : '. + self visit: aCollection second. + stream nextPutAll: '())'. + inlined := true]]. + + (aSelector = 'ifFalse:ifTrue:') ifTrue: [ + (aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [ + self checkClass: 'Boolean' for: receiver. + stream nextPutAll: '(!! $receiver ? '. + self visit: aCollection first. + stream nextPutAll: '() : '. + self visit: aCollection second. + stream nextPutAll: '())'. + inlined := true]]. + + "-- Numbers --" + + (aSelector = '<') ifTrue: [ + self checkClass: 'Number' for: receiver. + stream nextPutAll: '$receiver <'. + self visit: aCollection first. + inlined := true]. + + (aSelector = '<=') ifTrue: [ + self checkClass: 'Number' for: receiver. + stream nextPutAll: '$receiver <='. + self visit: aCollection first. + inlined := true]. + + (aSelector = '>') ifTrue: [ + self checkClass: 'Number' for: receiver. + stream nextPutAll: '$receiver >'. + self visit: aCollection first. + inlined := true]. -recompileAll - Smalltalk current classes do: [:each | - Transcript show: each; cr. - [self recompile: each] valueWithTimeout: 100] -! + (aSelector = '>=') ifTrue: [ + self checkClass: 'Number' for: receiver. + stream nextPutAll: '$receiver >='. + self visit: aCollection first. + inlined := true]. -setupClass: aClass - <smalltalk.init(aClass)> -! ! + (aSelector = '+') ifTrue: [ + self checkClass: 'Number' for: receiver. + stream nextPutAll: '$receiver +'. + self visit: aCollection first. + inlined := true]. -!Compiler methodsFor: 'initialization'! + (aSelector = '-') ifTrue: [ + self checkClass: 'Number' for: receiver. + stream nextPutAll: '$receiver -'. + self visit: aCollection first. + inlined := true]. -initialize - super initialize. - stream := '' writeStream. - unknownVariables := #(). - tempVariables := #(). - argVariables := #(). - messageSends := #(). - classReferenced := #() -! ! + (aSelector = '*') ifTrue: [ + self checkClass: 'Number' for: receiver. + stream nextPutAll: '$receiver *'. + self visit: aCollection first. + inlined := true]. -!Compiler methodsFor: 'optimizations'! + (aSelector = '/') ifTrue: [ + self checkClass: 'Number' for: receiver. + stream nextPutAll: '$receiver /'. + self visit: aCollection first. + inlined := true]. -checkClass: aClassName for: receiver - stream nextPutAll: '((($receiver = ', receiver, ').klass === smalltalk.', aClassName, ') ? ' + ^inlined ! inlineLiteral: aSelector receiverNode: anObject argumentNodes: aCollection @@ -923,113 +1175,124 @@ isNode: aNode ofClass: aClass ^aNode isValueNode and: [ aNode value class = aClass or: [ aNode value = 'self' and: [self currentClass = aClass]]] -! - -inline: aSelector receiver: receiver argumentNodes: aCollection - | inlined | - inlined := false. - - "-- Booleans --" - - (aSelector = 'ifFalse:') ifTrue: [ - aCollection first isBlockNode ifTrue: [ - self checkClass: 'Boolean' for: receiver. - stream nextPutAll: '(!! $receiver ? '. - self visit: aCollection first. - stream nextPutAll: '() : nil)'. - inlined := true]]. - - (aSelector = 'ifTrue:') ifTrue: [ - aCollection first isBlockNode ifTrue: [ - self checkClass: 'Boolean' for: receiver. - stream nextPutAll: '($receiver ? '. - self visit: aCollection first. - stream nextPutAll: '() : nil)'. - inlined := true]]. - - (aSelector = 'ifTrue:ifFalse:') ifTrue: [ - (aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [ - self checkClass: 'Boolean' for: receiver. - stream nextPutAll: '($receiver ? '. - self visit: aCollection first. - stream nextPutAll: '() : '. - self visit: aCollection second. - stream nextPutAll: '())'. - inlined := true]]. - - (aSelector = 'ifFalse:ifTrue:') ifTrue: [ - (aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [ - self checkClass: 'Boolean' for: receiver. - stream nextPutAll: '(!! $receiver ? '. - self visit: aCollection first. - stream nextPutAll: '() : '. - self visit: aCollection second. - stream nextPutAll: '())'. - inlined := true]]. +! ! - "-- Numbers --" +!Compiler methodsFor: 'testing'! - (aSelector = '<') ifTrue: [ - self checkClass: 'Number' for: receiver. - stream nextPutAll: '$receiver <'. - self visit: aCollection first. - inlined := true]. +performOptimizations + ^self class performOptimizations +! ! - (aSelector = '<=') ifTrue: [ - self checkClass: 'Number' for: receiver. - stream nextPutAll: '$receiver <='. - self visit: aCollection first. - inlined := true]. +!Compiler methodsFor: 'visiting'! - (aSelector = '>') ifTrue: [ - self checkClass: 'Number' for: receiver. - stream nextPutAll: '$receiver >'. - self visit: aCollection first. - inlined := true]. +send: aSelector to: aReceiver arguments: aCollection superSend: aBoolean + ^String streamContents: [:str || tmp | + tmp := stream. + str nextPutAll: 'smalltalk.send('. + str nextPutAll: aReceiver. + str nextPutAll: ', "', aSelector asSelector, '", ['. + stream := str. + aCollection + do: [:each | self visit: each] + separatedBy: [stream nextPutAll: ', ']. + stream := tmp. + str nextPutAll: ']'. + aBoolean ifTrue: [ + str nextPutAll: ', smalltalk.', (self classNameFor: self currentClass superclass)]. + str nextPutAll: ')'] +! - (aSelector = '>=') ifTrue: [ - self checkClass: 'Number' for: receiver. - stream nextPutAll: '$receiver >='. - self visit: aCollection first. - inlined := true]. +visit: aNode + aNode accept: self +! - (aSelector = '+') ifTrue: [ - self checkClass: 'Number' for: receiver. - stream nextPutAll: '$receiver +'. - self visit: aCollection first. - inlined := true]. +visitAssignmentNode: aNode + stream nextPutAll: '('. + self visit: aNode left. + stream nextPutAll: '='. + self visit: aNode right. + stream nextPutAll: ')' +! - (aSelector = '-') ifTrue: [ - self checkClass: 'Number' for: receiver. - stream nextPutAll: '$receiver -'. - self visit: aCollection first. - inlined := true]. +visitBlockNode: aNode + stream nextPutAll: '(function('. + aNode parameters + do: [:each | + tempVariables add: each. + stream nextPutAll: each] + separatedBy: [stream nextPutAll: ', ']. + stream nextPutAll: '){'. + aNode nodes do: [:each | self visit: each]. + stream nextPutAll: '})' +! - (aSelector = '*') ifTrue: [ - self checkClass: 'Number' for: receiver. - stream nextPutAll: '$receiver *'. - self visit: aCollection first. - inlined := true]. +visitBlockSequenceNode: aNode + | index | + nestedBlocks := nestedBlocks + 1. + aNode nodes isEmpty + ifTrue: [ + stream nextPutAll: 'return nil;'] + ifFalse: [ + aNode temps do: [:each | | temp | + temp := self safeVariableNameFor: each. + tempVariables add: temp. + stream nextPutAll: 'var ', temp, '=nil;'; lf]. + index := 0. + aNode nodes do: [:each | + index := index + 1. + index = aNode nodes size ifTrue: [ + stream nextPutAll: 'return ']. + self visit: each. + stream nextPutAll: ';']]. + nestedBlocks := nestedBlocks - 1 +! - (aSelector = '/') ifTrue: [ - self checkClass: 'Number' for: receiver. - stream nextPutAll: '$receiver /'. - self visit: aCollection first. - inlined := true]. +visitCascadeNode: aNode + | index | + index := 0. + (tempVariables includes: '$rec') ifFalse: [ + tempVariables add: '$rec']. + stream nextPutAll: '(function($rec){'. + aNode nodes do: [:each | + index := index + 1. + index = aNode nodes size ifTrue: [ + stream nextPutAll: 'return ']. + each receiver: (VariableNode new value: '$rec'). + self visit: each. + stream nextPutAll: ';']. + stream nextPutAll: '})('. + self visit: aNode receiver. + stream nextPutAll: ')' +! - ^inlined -! ! +visitClassReferenceNode: aNode + (referencedClasses includes: aNode value) ifFalse: [ + referencedClasses add: aNode value]. + stream nextPutAll: '(smalltalk.', aNode value, ' || ', aNode value, ')' +! -!Compiler methodsFor: 'testing'! +visitDynamicArrayNode: aNode + stream nextPutAll: '['. + aNode nodes + do: [:each | self visit: each] + separatedBy: [stream nextPutAll: ',']. + stream nextPutAll: ']' +! -performOptimizations - ^self class performOptimizations -! ! +visitDynamicDictionaryNode: aNode + stream nextPutAll: 'smalltalk.HashedCollection._fromPairs_(['. + aNode nodes + do: [:each | self visit: each] + separatedBy: [stream nextPutAll: ',']. + stream nextPutAll: '])' +! -!Compiler methodsFor: 'visiting'! +visitFailure: aFailure + self error: aFailure asString +! -visit: aNode - aNode accept: self +visitJSStatementNode: aNode + stream nextPutAll: (aNode source replace: '>>' with: '>') ! visitMethodNode: aNode @@ -1081,50 +1344,6 @@ visitMethodNode: aNode stream nextPutAll: '})' ! -visitBlockNode: aNode - stream nextPutAll: '(function('. - aNode parameters - do: [:each | - tempVariables add: each. - stream nextPutAll: each] - separatedBy: [stream nextPutAll: ', ']. - stream nextPutAll: '){'. - aNode nodes do: [:each | self visit: each]. - stream nextPutAll: '})' -! - -visitSequenceNode: aNode - aNode temps do: [:each || temp | - temp := self safeVariableNameFor: each. - tempVariables add: temp. - stream nextPutAll: 'var ', temp, '=nil;'; lf]. - aNode nodes do: [:each | - self visit: each. - stream nextPutAll: ';'] - separatedBy: [stream lf] -! - -visitBlockSequenceNode: aNode - | index | - nestedBlocks := nestedBlocks + 1. - aNode nodes isEmpty - ifTrue: [ - stream nextPutAll: 'return nil;'] - ifFalse: [ - aNode temps do: [:each | | temp | - temp := self safeVariableNameFor: each. - tempVariables add: temp. - stream nextPutAll: 'var ', temp, '=nil;'; lf]. - index := 0. - aNode nodes do: [:each | - index := index + 1. - index = aNode nodes size ifTrue: [ - stream nextPutAll: 'return ']. - self visit: each. - stream nextPutAll: ';']]. - nestedBlocks := nestedBlocks - 1 -! - visitReturnNode: aNode nestedBlocks > 0 ifTrue: [ earlyReturn := true]. @@ -1162,42 +1381,21 @@ visitSendNode: aNode ifFalse: [stream nextPutAll: (self send: aNode selector to: receiver arguments: aNode arguments superSend: superSend)] ! -visitCascadeNode: aNode - | index | - index := 0. - (tempVariables includes: '$rec') ifFalse: [ - tempVariables add: '$rec']. - stream nextPutAll: '(function($rec){'. +visitSequenceNode: aNode + aNode temps do: [:each || temp | + temp := self safeVariableNameFor: each. + tempVariables add: temp. + stream nextPutAll: 'var ', temp, '=nil;'; lf]. aNode nodes do: [:each | - index := index + 1. - index = aNode nodes size ifTrue: [ - stream nextPutAll: 'return ']. - each receiver: (VariableNode new value: '$rec'). self visit: each. - stream nextPutAll: ';']. - stream nextPutAll: '})('. - self visit: aNode receiver. - stream nextPutAll: ')' + stream nextPutAll: ';'] + separatedBy: [stream lf] ! visitValueNode: aNode stream nextPutAll: aNode value asJavascript ! -visitAssignmentNode: aNode - stream nextPutAll: '('. - self visit: aNode left. - stream nextPutAll: '='. - self visit: aNode right. - stream nextPutAll: ')' -! - -visitClassReferenceNode: aNode - (referencedClasses includes: aNode value) ifFalse: [ - referencedClasses add: aNode value]. - stream nextPutAll: '(smalltalk.', aNode value, ' || ', aNode value, ')' -! - visitVariableNode: aNode | varName | (self currentClass allInstanceVariableNames includes: aNode value) @@ -1214,47 +1412,6 @@ visitVariableNode: aNode aNode value = 'thisContext' ifTrue: [stream nextPutAll: '(smalltalk.getThisContext())'] ifFalse: [stream nextPutAll: varName]]] -! - -visitJSStatementNode: aNode - stream nextPutAll: (aNode source replace: '>>' with: '>') -! - -visitFailure: aFailure - self error: aFailure asString -! - -send: aSelector to: aReceiver arguments: aCollection superSend: aBoolean - ^String streamContents: [:str || tmp | - tmp := stream. - str nextPutAll: 'smalltalk.send('. - str nextPutAll: aReceiver. - str nextPutAll: ', "', aSelector asSelector, '", ['. - stream := str. - aCollection - do: [:each | self visit: each] - separatedBy: [stream nextPutAll: ', ']. - stream := tmp. - str nextPutAll: ']'. - aBoolean ifTrue: [ - str nextPutAll: ', smalltalk.', (self classNameFor: self currentClass superclass)]. - str nextPutAll: ')'] -! - -visitDynamicArrayNode: aNode - stream nextPutAll: '['. - aNode nodes - do: [:each | self visit: each] - separatedBy: [stream nextPutAll: ',']. - stream nextPutAll: ']' -! - -visitDynamicDictionaryNode: aNode - stream nextPutAll: 'smalltalk.HashedCollection._fromPairs_(['. - aNode nodes - do: [:each | self visit: each] - separatedBy: [stream nextPutAll: ',']. - stream nextPutAll: '])' ! ! Compiler class instanceVariableNames: 'performOptimizations'! @@ -1284,143 +1441,3 @@ recompileAll self recompile: each] ! ! -SequenceNode subclass: #BlockSequenceNode - instanceVariableNames: '' - category: 'Compiler'! - -!BlockSequenceNode methodsFor: 'testing'! - -isBlockSequenceNode - ^true -! ! - -!BlockSequenceNode methodsFor: 'visiting'! - -accept: aVisitor - aVisitor visitBlockSequenceNode: self -! ! - -Node subclass: #BlockNode - instanceVariableNames: 'parameters inlined' - category: 'Compiler'! - -!BlockNode methodsFor: 'accessing'! - -parameters - ^parameters ifNil: [parameters := Array new] -! - -parameters: aCollection - parameters := aCollection -! - -inlined - ^inlined ifNil: [false] -! - -inlined: aBoolean - inlined := aBoolean -! ! - -!BlockNode methodsFor: 'testing'! - -isBlockNode - ^true -! ! - -!BlockNode methodsFor: 'visiting'! - -accept: aVisitor - aVisitor visitBlockNode: self -! ! - -Node subclass: #CascadeNode - instanceVariableNames: 'receiver' - category: 'Compiler'! - -!CascadeNode methodsFor: 'accessing'! - -receiver - ^receiver -! - -receiver: aNode - receiver := aNode -! ! - -!CascadeNode methodsFor: 'visiting'! - -accept: aVisitor - aVisitor visitCascadeNode: self -! ! - -Node subclass: #MethodNode - instanceVariableNames: 'selector arguments source' - category: 'Compiler'! - -!MethodNode methodsFor: 'accessing'! - -selector - ^selector -! - -selector: aString - selector := aString -! - -arguments - ^arguments ifNil: [#()] -! - -arguments: aCollection - arguments := aCollection -! - -source - ^source -! - -source: aString - source := aString -! ! - -!MethodNode methodsFor: 'visiting'! - -accept: aVisitor - aVisitor visitMethodNode: self -! ! - -Exporter subclass: #StrippedExporter - instanceVariableNames: '' - category: 'Compiler'! - -!StrippedExporter methodsFor: 'private'! - -exportDefinitionOf: aClass on: aStream - aStream - nextPutAll: 'smalltalk.addClass('; - nextPutAll: '''', (self classNameFor: aClass), ''', '; - nextPutAll: 'smalltalk.', (self classNameFor: aClass superclass); - nextPutAll: ', ['. - aClass instanceVariableNames - do: [:each | aStream nextPutAll: '''', each, ''''] - separatedBy: [aStream nextPutAll: ', ']. - aStream - nextPutAll: '], '''; - nextPutAll: aClass category, ''''; - nextPutAll: ');'. - aStream lf -! - -exportMethod: aMethod of: aClass on: aStream - aStream - nextPutAll: 'smalltalk.addMethod(';lf; - nextPutAll: 'unescape(''', aMethod selector asSelector escaped, '''),';lf; - nextPutAll: 'smalltalk.method({';lf; - nextPutAll: 'selector: unescape(''', aMethod selector escaped, '''),';lf; - nextPutAll: 'fn: ', aMethod fn compiledSource;lf; - nextPutAll: '}),';lf; - nextPutAll: 'smalltalk.', (self classNameFor: aClass); - nextPutAll: ');';lf;lf -! ! - diff --git a/amber/src/st/Examples.st b/amber/src/st/Examples.st index 4ce2a0bf08e..2cf7748f8e0 100755 --- a/amber/src/st/Examples.st +++ b/amber/src/st/Examples.st @@ -1,17 +1,17 @@ Smalltalk current createPackage: 'Examples' properties: #{}! Widget subclass: #Counter instanceVariableNames: 'count header' - category: 'Examples'! + package: 'Examples'! !Counter methodsFor: 'actions'! -increase - count := count + 1. +decrease + count := count - 1. header contents: [:html | html with: count asString] ! -decrease - count := count - 1. +increase + count := count + 1. header contents: [:html | html with: count asString] ! ! diff --git a/amber/src/st/IDE.st b/amber/src/st/IDE.st index b2787ca9ec1..7c0e5a4c122 100755 --- a/amber/src/st/IDE.st +++ b/amber/src/st/IDE.st @@ -1,299 +1,207 @@ Smalltalk current createPackage: 'IDE' properties: #{}! -Widget subclass: #TabManager - instanceVariableNames: 'selectedTab tabs opened ul input' - category: 'IDE'! - -!TabManager methodsFor: 'accessing'! - -tabs - ^tabs ifNil: [tabs := Array new] -! - -labelFor: aWidget - | label maxSize | - maxSize := 15. - label := aWidget label copyFrom: 0 to: (aWidget label size min: maxSize). - aWidget label size > maxSize ifTrue: [ - label := label, '...']. - ^label -! ! - -!TabManager methodsFor: 'actions'! - -updateBodyMargin - self setBodyMargin: '#jtalk' asJQuery height -! - -updatePosition - <jQuery('#jtalk').css('top', '').css('bottom', '0px')> -! - -removeBodyMargin - self setBodyMargin: 0 -! - -setBodyMargin: anInteger - '.jtalkBody' asJQuery css: 'margin-bottom' put: anInteger asString, 'px' -! - -onResize: aBlock - <jQuery('#jtalk').resizable({ - handles: 'n', - resize: aBlock, - minHeight: 230 -})> -! - -onWindowResize: aBlock - <jQuery(window).resize(aBlock)> -! +Widget subclass: #ClassesList + instanceVariableNames: 'browser ul nodes' + package: 'IDE'! -open - opened ifFalse: [ - 'body' asJQuery addClass: 'jtalkBody'. - '#jtalk' asJQuery show. - ul asJQuery show. - self updateBodyMargin. - selectedTab show. - opened := true] -! +!ClassesList methodsFor: 'accessing'! -close - opened ifTrue: [ - '#jtalk' asJQuery hide. - ul asJQuery hide. - selectedTab hide. - self removeBodyMargin. - 'body' asJQuery removeClass: 'jtalkBody'. - opened := false] +browser + ^browser ! -newBrowserTab - Browser open +browser: aBrowser + browser := aBrowser ! -selectTab: aWidget - self open. - selectedTab := aWidget. - self tabs do: [:each | - each hide]. - aWidget show. - - self update +category + ^self browser selectedPackage ! -closeTab: aWidget - self removeTab: aWidget. - self selectTab: self tabs last. - aWidget remove. - self update +getNodes + | classes children others | + classes := self browser classes. + children := #(). + others := #(). + classes do: [:each | + (classes includes: each superclass) + ifFalse: [children add: each] + ifTrue: [others add: each]]. + ^children collect: [:each | + ClassesListNode on: each browser: self browser classes: others level: 0] ! -search: aString - | searchedClass | - searchedClass := Smalltalk current at: aString. - searchedClass isClass - ifTrue: [Browser openOn: searchedClass] - ifFalse: [ReferencesBrowser search: aString] -! ! - -!TabManager methodsFor: 'adding/Removing'! - -addTab: aWidget - self tabs add: aWidget. - aWidget appendToJQuery: '#jtalk' asJQuery. - aWidget hide +nodes + nodes ifNil: [nodes := self getNodes]. + ^nodes ! -removeTab: aWidget - self tabs remove: aWidget. - self update -! ! - -!TabManager methodsFor: 'initialization'! - -initialize - super initialize. - opened := true. - [:html | html div id: 'jtalk'] appendToJQuery: 'body' asJQuery. - 'body' asJQuery - addClass: 'jtalkBody'. - self appendToJQuery: '#jtalk' asJQuery. - self - addTab: IDETranscript current; - addTab: Workspace new; - addTab: TestRunner new. - self selectTab: self tabs last. - self - onResize: [self updateBodyMargin; updatePosition]; - onWindowResize: [self updatePosition] +resetNodes + nodes := nil ! ! -!TabManager methodsFor: 'rendering'! +!ClassesList methodsFor: 'rendering'! renderOn: html - html div id: 'logo'. - self renderToolbarOn: html. ul := html ul - id: 'jtalkTabs'; + class: 'jt_column browser classes'; yourself. - self renderTabs -! - -renderTabFor: aWidget on: html - | li | - li := html li. - selectedTab = aWidget ifTrue: [ - li class: 'selected']. - li with: [ - html span class: 'ltab'. - html span - class: 'mtab'; - with: [ - aWidget canBeClosed ifTrue: [ - html span - class: 'close'; - with: 'x'; - onClick: [self closeTab: aWidget]]. - html span with: (self labelFor: aWidget)]. - html span class: 'rtab']; - onClick: [self selectTab: aWidget] + self updateNodes ! -renderTabs +updateNodes ul contents: [:html | - self tabs do: [:each | - self renderTabFor: each on: html]. - html li - class: 'newtab'; - with: [ - html span class: 'ltab'. - html span class: 'mtab'; with: ' + '. - html span class: 'rtab']; - onClick: [self newBrowserTab]] -! - -renderToolbarOn: html - html div - id: 'jt_toolbar'; - with: [ - input := html input - class: 'implementors'; - yourself. - input onKeyPress: [:event | - event keyCode = 13 ifTrue: [ - self search: input asJQuery val]]. - html div id: 'jt_close'; onClick: [self close]] + self nodes do: [:each | + each renderOn: html]] ! ! -!TabManager methodsFor: 'updating'! +!ClassesList class methodsFor: 'instance creation'! -update - self renderTabs +on: aBrowser + ^self new + browser: aBrowser; + yourself ! ! -TabManager class instanceVariableNames: 'current'! +Widget subclass: #ClassesListNode + instanceVariableNames: 'browser theClass level nodes' + package: 'IDE'! -!TabManager class methodsFor: 'instance creation'! +!ClassesListNode methodsFor: ''! -current - ^current ifNil: [current := super new] -! +renderOn: html + | li cssClass | + cssClass := ''. + li := html li + onClick: [self browser selectClass: self theClass]. + li asJQuery html: self label. -new - self shouldNotImplement -! ! + self browser selectedClass = self theClass ifTrue: [ + cssClass := cssClass, ' selected']. -Widget subclass: #TabWidget - instanceVariableNames: 'div' - category: 'IDE'! + self theClass comment isEmpty ifFalse: [ + cssClass := cssClass, ' commented']. -!TabWidget methodsFor: 'accessing'! + li class: cssClass. -label - self subclassResponsibility + self nodes do: [:each | + each renderOn: html] ! ! -!TabWidget methodsFor: 'actions'! +!ClassesListNode methodsFor: 'accessing'! -open - TabManager current addTab: self. - TabManager current selectTab: self +browser + ^browser ! -show - div asJQuery show +browser: aBrowser + browser := aBrowser ! -hide - div asJQuery hide +getNodesFrom: aCollection + | children others | + children := #(). + others := #(). + aCollection do: [:each | + (each superclass = self theClass) + ifTrue: [children add: each] + ifFalse: [others add: each]]. + nodes:= children collect: [:each | + ClassesListNode on: each browser: self browser classes: others level: self level + 1] ! -remove - div asJQuery remove +label + | str | + str := String new writeStream. + self level timesRepeat: [ + str nextPutAll: ' ']. + str nextPutAll: self theClass name. + ^str contents ! -close - TabManager current closeTab: self -! ! - -!TabWidget methodsFor: 'rendering'! - -renderOn: html - div := html div - class: 'jtalkTool'; - yourself. - self renderTab +level + ^level ! -renderBoxOn: html +level: anInteger + level := anInteger ! -renderButtonsOn: html +nodes + ^nodes ! -update - self renderTab +theClass + ^theClass ! -renderTab - div contents: [:html | - html div - class: 'jt_box'; - with: [self renderBoxOn: html]. - html div - class: 'jt_buttons'; - with: [self renderButtonsOn: html]] +theClass: aClass + theClass := aClass ! ! -!TabWidget methodsFor: 'testing'! +!ClassesListNode class methodsFor: 'instance creation'! -canBeClosed - ^false +on: aClass browser: aBrowser classes: aCollection level: anInteger + ^self new + theClass: aClass; + browser: aBrowser; + level: anInteger; + getNodesFrom: aCollection; + yourself ! ! -!TabWidget class methodsFor: 'instance creation'! +ErrorHandler subclass: #DebugErrorHandler + instanceVariableNames: '' + package: 'IDE'! -open - ^self new open +!DebugErrorHandler methodsFor: 'error handling'! + +handleError: anError + [Debugger new + error: anError; + open] on: Error do: [:error | + ErrorHandler new handleError: error] +! ! + +!DebugErrorHandler class methodsFor: 'initialization'! + +initialize + self register ! ! Widget subclass: #SourceArea instanceVariableNames: 'editor div receiver onDoIt' - category: 'IDE'! + package: 'IDE'! !SourceArea methodsFor: 'accessing'! -val - ^editor getValue +currentLine + ^editor getLine: (editor getCursor line) ! -val: aString - editor setValue: aString +currentLineOrSelection + ^editor somethingSelected + ifFalse: [self currentLine] + ifTrue: [self selection] ! -currentLine - ^editor getLine: (editor getCursor line) +editor + ^editor +! + +onDoIt + ^onDoIt +! + +onDoIt: aBlock + onDoIt := aBlock +! + +receiver + ^receiver ifNil: [DoIt new] +! + +receiver: anObject + receiver := anObject ! selection @@ -304,6 +212,10 @@ selectionEnd ^textarea element selectionEnd ! +selectionEnd: anInteger + textarea element selectionEnd: anInteger +! + selectionStart ^textarea element selectionStart ! @@ -312,10 +224,6 @@ selectionStart: anInteger textarea element selectionStart: anInteger ! -selectionEnd: anInteger - textarea element selectionEnd: anInteger -! - setEditorOn: aTextarea <self['@editor'] = CodeMirror.fromTextArea(aTextarea, { theme: 'jtalk', @@ -326,30 +234,12 @@ setEditorOn: aTextarea })> ! -editor - ^editor -! - -receiver - ^receiver ifNil: [DoIt new] -! - -receiver: anObject - receiver := anObject -! - -onDoIt: aBlock - onDoIt := aBlock -! - -onDoIt - ^onDoIt +val + ^editor getValue ! -currentLineOrSelection - ^editor somethingSelected - ifFalse: [self currentLine] - ifTrue: [self selection] +val: aString + editor setValue: aString ! ! !SourceArea methodsFor: 'actions'! @@ -373,6 +263,10 @@ eval: aString ^(compiler load: 'doIt ^[', aString, '] value' forClass: DoIt) fn applyTo: self receiver arguments: #() ! +fileIn + Importer new import: self currentLineOrSelection readStream +! + handleKeyDown: anEvent <if(anEvent.ctrlKey) { if(anEvent.keyCode === 80) { //ctrl+p @@ -412,20 +306,16 @@ print: aString printIt self print: self doIt printString -! - -fileIn - Importer new import: self currentLineOrSelection readStream ! ! !SourceArea methodsFor: 'events'! -onKeyUp: aBlock - div onKeyUp: aBlock -! - onKeyDown: aBlock div onKeyDown: aBlock +! + +onKeyUp: aBlock + div onKeyUp: aBlock ! ! !SourceArea methodsFor: 'rendering'! @@ -438,321 +328,293 @@ renderOn: html div onKeyDown: [:e | self handleKeyDown: e] ! ! -Widget subclass: #ClassesList - instanceVariableNames: 'browser ul nodes' - category: 'IDE'! - -!ClassesList methodsFor: 'accessing'! - -category - ^self browser selectedPackage -! - -nodes - nodes ifNil: [nodes := self getNodes]. - ^nodes -! - -browser - ^browser -! - -browser: aBrowser - browser := aBrowser -! - -getNodes - | classes children others | - classes := self browser classes. - children := #(). - others := #(). - classes do: [:each | - (classes includes: each superclass) - ifFalse: [children add: each] - ifTrue: [others add: each]]. - ^children collect: [:each | - ClassesListNode on: each browser: self browser classes: others level: 0] -! - -resetNodes - nodes := nil -! ! +Widget subclass: #TabManager + instanceVariableNames: 'selectedTab tabs opened ul input' + package: 'IDE'! -!ClassesList methodsFor: 'rendering'! +!TabManager methodsFor: 'accessing'! -renderOn: html - ul := html ul - class: 'jt_column browser classes'; - yourself. - self updateNodes +labelFor: aWidget + | label maxSize | + maxSize := 15. + label := aWidget label copyFrom: 0 to: (aWidget label size min: maxSize). + aWidget label size > maxSize ifTrue: [ + label := label, '...']. + ^label ! -updateNodes - ul contents: [:html | - self nodes do: [:each | - each renderOn: html]] -! ! - -!ClassesList class methodsFor: 'instance creation'! - -on: aBrowser - ^self new - browser: aBrowser; - yourself +tabs + ^tabs ifNil: [tabs := Array new] ! ! -Widget subclass: #ClassesListNode - instanceVariableNames: 'browser theClass level nodes' - category: 'IDE'! - -!ClassesListNode methodsFor: ''! - -renderOn: html - | li cssClass | - cssClass := ''. - li := html li - onClick: [self browser selectClass: self theClass]. - li asJQuery html: self label. - - self browser selectedClass = self theClass ifTrue: [ - cssClass := cssClass, ' selected']. - - self theClass comment isEmpty ifFalse: [ - cssClass := cssClass, ' commented']. - - li class: cssClass. - - self nodes do: [:each | - each renderOn: html] -! ! +!TabManager methodsFor: 'actions'! -!ClassesListNode methodsFor: 'accessing'! +close + opened ifTrue: [ + '#jtalk' asJQuery hide. + ul asJQuery hide. + selectedTab hide. + self removeBodyMargin. + 'body' asJQuery removeClass: 'jtalkBody'. + opened := false] +! -nodes - ^nodes +closeTab: aWidget + self removeTab: aWidget. + self selectTab: self tabs last. + aWidget remove. + self update ! -theClass - ^theClass +newBrowserTab + Browser open ! -theClass: aClass - theClass := aClass +onResize: aBlock + <jQuery('#jtalk').resizable({ + handles: 'n', + resize: aBlock, + minHeight: 230 +})> ! -browser - ^browser +onWindowResize: aBlock + <jQuery(window).resize(aBlock)> ! -browser: aBrowser - browser := aBrowser +open + opened ifFalse: [ + 'body' asJQuery addClass: 'jtalkBody'. + '#jtalk' asJQuery show. + ul asJQuery show. + self updateBodyMargin. + selectedTab show. + opened := true] ! -level - ^level +removeBodyMargin + self setBodyMargin: 0 ! -level: anInteger - level := anInteger +search: aString + | searchedClass | + searchedClass := Smalltalk current at: aString. + searchedClass isClass + ifTrue: [Browser openOn: searchedClass] + ifFalse: [ReferencesBrowser search: aString] ! -label - | str | - str := String new writeStream. - self level timesRepeat: [ - str nextPutAll: ' ']. - str nextPutAll: self theClass name. - ^str contents +selectTab: aWidget + self open. + selectedTab := aWidget. + self tabs do: [:each | + each hide]. + aWidget show. + + self update ! -getNodesFrom: aCollection - | children others | - children := #(). - others := #(). - aCollection do: [:each | - (each superclass = self theClass) - ifTrue: [children add: each] - ifFalse: [others add: each]]. - nodes:= children collect: [:each | - ClassesListNode on: each browser: self browser classes: others level: self level + 1] -! ! +setBodyMargin: anInteger + '.jtalkBody' asJQuery css: 'margin-bottom' put: anInteger asString, 'px' +! -!ClassesListNode class methodsFor: 'instance creation'! +updateBodyMargin + self setBodyMargin: '#jtalk' asJQuery height +! -on: aClass browser: aBrowser classes: aCollection level: anInteger - ^self new - theClass: aClass; - browser: aBrowser; - level: anInteger; - getNodesFrom: aCollection; - yourself +updatePosition + <jQuery('#jtalk').css('top', '').css('bottom', '0px')> ! ! -ErrorHandler subclass: #DebugErrorHandler - instanceVariableNames: '' - category: 'IDE'! +!TabManager methodsFor: 'adding/Removing'! -!DebugErrorHandler methodsFor: 'error handling'! +addTab: aWidget + self tabs add: aWidget. + aWidget appendToJQuery: '#jtalk' asJQuery. + aWidget hide +! -handleError: anError - [Debugger new - error: anError; - open] on: Error do: [:error | - ErrorHandler new handleError: error] +removeTab: aWidget + self tabs remove: aWidget. + self update ! ! -!DebugErrorHandler class methodsFor: 'initialization'! +!TabManager methodsFor: 'initialization'! initialize - self register -! ! - -TabWidget subclass: #Workspace - instanceVariableNames: 'sourceArea' - category: 'IDE'! - -!Workspace methodsFor: 'accessing'! - -label - ^'Workspace' + super initialize. + opened := true. + [:html | html div id: 'jtalk'] appendToJQuery: 'body' asJQuery. + 'body' asJQuery + addClass: 'jtalkBody'. + self appendToJQuery: '#jtalk' asJQuery. + self + addTab: IDETranscript current; + addTab: Workspace new; + addTab: TestRunner new. + self selectTab: self tabs last. + self + onResize: [self updateBodyMargin; updatePosition]; + onWindowResize: [self updatePosition] ! ! -!Workspace methodsFor: 'actions'! +!TabManager methodsFor: 'rendering'! -clearWorkspace - sourceArea clear +renderOn: html + html div id: 'logo'. + self renderToolbarOn: html. + ul := html ul + id: 'jtalkTabs'; + yourself. + self renderTabs ! -doIt - sourceArea doIt +renderTabFor: aWidget on: html + | li | + li := html li. + selectedTab = aWidget ifTrue: [ + li class: 'selected']. + li with: [ + html span class: 'ltab'. + html span + class: 'mtab'; + with: [ + aWidget canBeClosed ifTrue: [ + html span + class: 'close'; + with: 'x'; + onClick: [self closeTab: aWidget]]. + html span with: (self labelFor: aWidget)]. + html span class: 'rtab']; + onClick: [self selectTab: aWidget] ! -printIt - sourceArea printIt +renderTabs + ul contents: [:html | + self tabs do: [:each | + self renderTabFor: each on: html]. + html li + class: 'newtab'; + with: [ + html span class: 'ltab'. + html span class: 'mtab'; with: ' + '. + html span class: 'rtab']; + onClick: [self newBrowserTab]] ! -inspectIt - sourceArea inspectIt -! +renderToolbarOn: html + html div + id: 'jt_toolbar'; + with: [ + input := html input + class: 'implementors'; + yourself. + input onKeyPress: [:event | + event keyCode = 13 ifTrue: [ + self search: input asJQuery val]]. + html div id: 'jt_close'; onClick: [self close]] +! ! -fileIn - sourceArea fileIn +!TabManager methodsFor: 'updating'! + +update + self renderTabs ! ! -!Workspace methodsFor: 'rendering'! +TabManager class instanceVariableNames: 'current'! -renderBoxOn: html - sourceArea := SourceArea new. - sourceArea renderOn: html +!TabManager class methodsFor: 'instance creation'! + +current + ^current ifNil: [current := super new] ! -renderButtonsOn: html - html button - with: 'DoIt'; - title: 'ctrl+d'; - onClick: [self doIt]. - html button - with: 'PrintIt'; - title: 'ctrl+p'; - onClick: [self printIt]. - html button - with: 'InspectIt'; - title: 'ctrl+i'; - onClick: [self inspectIt]. - html button - with: 'FileIn'; - title: 'ctrl+f'; - onClick: [self fileIn]. - html button - with: 'Clear workspace'; - onClick: [self clearWorkspace] +new + self shouldNotImplement ! ! -TabWidget subclass: #Browser - instanceVariableNames: 'selectedPackage selectedClass selectedProtocol selectedMethod packagesList classesList protocolsList methodsList sourceArea tabsList selectedTab saveButton classButtons methodButtons unsavedChanges' - category: 'IDE'! +Widget subclass: #TabWidget + instanceVariableNames: 'div' + package: 'IDE'! -!Browser methodsFor: 'accessing'! +!TabWidget methodsFor: 'accessing'! label - ^selectedClass - ifNil: ['Browser (nil)'] - ifNotNil: ['Browser: ', selectedClass name] + self subclassResponsibility +! ! + +!TabWidget methodsFor: 'actions'! + +close + TabManager current closeTab: self ! -packages - | packages | - packages := Array new. - Smalltalk current classes do: [:each | - (packages includes: each category) ifFalse: [ - packages add: each category]]. - ^packages sort +hide + div asJQuery hide +! + +open + TabManager current addTab: self. + TabManager current selectTab: self ! -classes - ^((Smalltalk current classes - select: [:each | each category = selectedPackage]) - sort: [:a :b | a name < b name]) asSet +remove + div asJQuery remove ! -protocols - | klass | - selectedClass ifNotNil: [ - selectedTab = #comment ifTrue: [^#()]. - klass := selectedTab = #instance - ifTrue: [selectedClass] - ifFalse: [selectedClass class]. - klass methodDictionary isEmpty ifTrue: [ - ^Array with: 'not yet classified']. - ^klass protocols]. - ^Array new +show + div asJQuery show +! ! + +!TabWidget methodsFor: 'rendering'! + +renderBoxOn: html ! -methods - | klass | - selectedTab = #comment ifTrue: [^#()]. - selectedClass ifNotNil: [ - klass := selectedTab = #instance - ifTrue: [selectedClass] - ifFalse: [selectedClass class]]. - ^(selectedProtocol - ifNil: [ - klass - ifNil: [#()] - ifNotNil: [klass methodDictionary values]] - ifNotNil: [ - klass methodDictionary values select: [:each | - each category = selectedProtocol]]) sort: [:a :b | a selector < b selector] +renderButtonsOn: html ! -source - selectedTab = #comment ifFalse: [ - ^(selectedProtocol notNil or: [selectedMethod notNil]) - ifFalse: [self declarationSource] - ifTrue: [self methodSource]]. - ^selectedClass - ifNil: [''] - ifNotNil: [self classCommentSource] +renderOn: html + div := html div + class: 'jtalkTool'; + yourself. + self renderTab ! -methodSource - ^selectedMethod - ifNil: [self dummyMethodSource] - ifNotNil: [selectedMethod source] +renderTab + div contents: [:html | + html div + class: 'jt_box'; + with: [self renderBoxOn: html]. + html div + class: 'jt_buttons'; + with: [self renderButtonsOn: html]] ! -dummyMethodSource - ^'messageSelectorAndArgumentNames - "comment stating purpose of message" +update + self renderTab +! ! - | temporary variable names | - statements' -! +!TabWidget methodsFor: 'testing'! -declarationSource - ^selectedTab = #instance - ifTrue: [self classDeclarationSource] - ifFalse: [self metaclassDeclarationSource] +canBeClosed + ^false +! ! + +!TabWidget class methodsFor: 'instance creation'! + +open + ^self new open +! ! + +TabWidget subclass: #Browser + instanceVariableNames: 'selectedPackage selectedClass selectedProtocol selectedMethod packagesList classesList protocolsList methodsList sourceArea tabsList selectedTab saveButton classButtons methodButtons unsavedChanges' + package: 'IDE'! + +!Browser methodsFor: 'accessing'! + +classCommentSource + ^selectedClass comment ! classDeclarationSource @@ -776,6 +638,38 @@ classDeclarationSource ^stream contents ! +classDeclarationTemplate + ^'Object subclass: #NameOfSubclass + instanceVariableNames: '''' + package: ''', self selectedPackage, '''' +! + +classes + ^((Smalltalk current classes + select: [:each | each category = selectedPackage]) + sort: [:a :b | a name < b name]) asSet +! + +declarationSource + ^selectedTab = #instance + ifTrue: [self classDeclarationSource] + ifFalse: [self metaclassDeclarationSource] +! + +dummyMethodSource + ^'messageSelectorAndArgumentNames + "comment stating purpose of message" + + | temporary variable names | + statements' +! + +label + ^selectedClass + ifNil: ['Browser (nil)'] + ifNotNil: ['Browser: ', selectedClass name] +! + metaclassDeclarationSource | stream | stream := '' writeStream. @@ -791,46 +685,115 @@ metaclassDeclarationSource ^stream contents ! -classCommentSource - ^selectedClass comment +methodSource + ^selectedMethod + ifNil: [self dummyMethodSource] + ifNotNil: [selectedMethod source] ! -selectedClass - ^selectedClass +methods + | klass | + selectedTab = #comment ifTrue: [^#()]. + selectedClass ifNotNil: [ + klass := selectedTab = #instance + ifTrue: [selectedClass] + ifFalse: [selectedClass class]]. + ^(selectedProtocol + ifNil: [ + klass + ifNil: [#()] + ifNotNil: [klass methodDictionary values]] + ifNotNil: [ + klass methodDictionary values select: [:each | + each category = selectedProtocol]]) sort: [:a :b | a selector < b selector] ! -classDeclarationTemplate - ^'Object subclass: #NameOfSubclass - instanceVariableNames: '''' - package: ''', self selectedPackage, '''' +packages + | packages | + packages := Array new. + Smalltalk current classes do: [:each | + (packages includes: each category) ifFalse: [ + packages add: each category]]. + ^packages sort +! + +protocols + | klass | + selectedClass ifNotNil: [ + selectedTab = #comment ifTrue: [^#()]. + klass := selectedTab = #instance + ifTrue: [selectedClass] + ifFalse: [selectedClass class]. + klass methodDictionary isEmpty ifTrue: [ + ^Array with: 'not yet classified']. + ^klass protocols]. + ^Array new +! + +selectedClass + ^selectedClass ! selectedPackage ^selectedPackage +! + +source + selectedTab = #comment ifFalse: [ + ^(selectedProtocol notNil or: [selectedMethod notNil]) + ifFalse: [self declarationSource] + ifTrue: [self methodSource]]. + ^selectedClass + ifNil: [''] + ifNotNil: [self classCommentSource] ! ! !Browser methodsFor: 'actions'! -disableSaveButton - saveButton ifNotNil: [ - saveButton at: 'disabled' put: true]. - unsavedChanges := false +addInstanceVariableNamed: aString toClass: aClass + ClassBuilder new + addSubclassOf: aClass superclass + named: aClass name + instanceVariableNames: (aClass instanceVariableNames copy add: aString; yourself) + package: aClass package name ! -hideClassButtons - classButtons asJQuery hide +addNewClass + | className | + className := window prompt: 'New class'. + (className notNil and: [className notEmpty]) ifTrue: [ + Object subclass: className instanceVariableNames: '' package: self selectedPackage. + self + resetClassesList; + updateClassesList. + self selectClass: (Smalltalk current at: className)] ! -showClassButtons - classButtons asJQuery show +addNewProtocol + | newProtocol | + newProtocol := window prompt: 'New method protocol'. + (newProtocol notNil and: [newProtocol notEmpty]) ifTrue: [ + selectedMethod category: newProtocol. + self setMethodProtocol: newProtocol] ! -hideMethodButtons - methodButtons asJQuery hide +cancelChanges + ^unsavedChanges + ifTrue: [window confirm: 'Cancel changes?'] + ifFalse: [true] ! -showMethodButtons - methodButtons asJQuery show +commitPackage + selectedPackage ifNotNil: [ |package| + package := Package named: selectedPackage. + { Exporter -> (package commitPathJs, '/', selectedPackage, '.js'). + StrippedExporter -> (package commitPathJs, '/', selectedPackage, '.deploy.js'). + ChunkExporter -> (package commitPathSt, '/', selectedPackage, '.st') } + + do: [:commitStrategy| |fileContents| + fileContents := (commitStrategy key new exportPackage: selectedPackage). + self ajaxPutAt: commitStrategy value data: fileContents] + ] ! compile @@ -849,6 +812,16 @@ compileClassComment selectedClass comment: sourceArea val ! +compileDefinition + | newClass | + newClass := Compiler new loadExpression: sourceArea val. + self + resetClassesList; + updateCategoriesList; + updateClassesList. + self selectClass: newClass +! + compileMethodDefinition selectedTab = #instance ifTrue: [self compileMethodDefinitionFor: selectedClass] @@ -879,20 +852,40 @@ compileMethodDefinitionFor: aClass self selectMethod: method ! -compileDefinition - | newClass | - newClass := Compiler new loadExpression: sourceArea val. - self - resetClassesList; - updateCategoriesList; - updateClassesList. - self selectClass: newClass +copyClass + | className | + className := window prompt: 'Copy class'. + (className notNil and: [className notEmpty]) ifTrue: [ + ClassBuilder new copyClass: self selectedClass named: className. + self + resetClassesList; + updateClassesList. + self selectClass: (Smalltalk current at: className)] +! + +disableSaveButton + saveButton ifNotNil: [ + saveButton at: 'disabled' put: true]. + unsavedChanges := false ! -cancelChanges - ^unsavedChanges - ifTrue: [window confirm: 'Cancel changes?'] - ifFalse: [true] +handleSourceAreaKeyDown: anEvent + <if(anEvent.ctrlKey) { + if(anEvent.keyCode === 83) { //ctrl+s + self._compile(); + anEvent.preventDefault(); + return false; + } + } + > +! + +hideClassButtons + classButtons asJQuery hide +! + +hideMethodButtons + methodButtons asJQuery hide ! removeClass @@ -913,26 +906,48 @@ removeMethod self selectMethod: nil]] ! -setMethodProtocol: aString - self cancelChanges ifTrue: [ - (self protocols includes: aString) - ifFalse: [self addNewProtocol] - ifTrue: [ - selectedMethod category: aString. - selectedProtocol := aString. - selectedMethod := selectedMethod. - self - updateProtocolsList; - updateMethodsList; - updateSourceAndButtons]] +removePackage + + (window confirm: 'Do you really want to remove the whole package ', selectedPackage, ' with all its classes?') + ifTrue: [ + Smalltalk current removePackage: selectedPackage. + self updateCategoriesList] ! -addNewProtocol - | newProtocol | - newProtocol := window prompt: 'New method protocol'. - (newProtocol notNil and: [newProtocol notEmpty]) ifTrue: [ - selectedMethod category: newProtocol. - self setMethodProtocol: newProtocol] +renameClass + | newName | + newName := window prompt: 'Rename class ', selectedClass name. + (newName notNil and: [newName notEmpty]) ifTrue: [ + selectedClass rename: newName. + self + updateClassesList; + updateSourceAndButtons] +! + +renamePackage + + | newName | + newName := window prompt: 'Rename package ', selectedPackage. + newName ifNotNil: [ + newName notEmpty ifTrue: [ + Smalltalk current renamePackage: selectedPackage to: newName. + self updateCategoriesList]] +! + +search: aString + self cancelChanges ifTrue: [| searchedClass | + searchedClass := Smalltalk current at: aString. + searchedClass isClass + ifTrue: [self class openOn: searchedClass] + ifFalse: [self searchReferencesOf: aString]] +! + +searchClassReferences + ReferencesBrowser search: selectedClass name +! + +searchReferencesOf: aString + ReferencesBrowser search: aString ! selectCategory: aCategory @@ -959,19 +974,19 @@ selectClass: aClass updateSourceAndButtons] ! -selectProtocol: aString +selectMethod: aMethod self cancelChanges ifTrue: [ - selectedProtocol := aString. - selectedMethod := nil. + selectedMethod := aMethod. self updateProtocolsList; updateMethodsList; updateSourceAndButtons] ! -selectMethod: aMethod +selectProtocol: aString self cancelChanges ifTrue: [ - selectedMethod := aMethod. + selectedProtocol := aString. + selectedMethod := nil. self updateProtocolsList; updateMethodsList; @@ -985,102 +1000,26 @@ selectTab: aString self updateTabsList] ! -renameClass - | newName | - newName := window prompt: 'Rename class ', selectedClass name. - (newName notNil and: [newName notEmpty]) ifTrue: [ - selectedClass rename: newName. - self - updateClassesList; - updateSourceAndButtons] -! - -addInstanceVariableNamed: aString toClass: aClass - ClassBuilder new - addSubclassOf: aClass superclass - named: aClass name - instanceVariableNames: (aClass instanceVariableNames copy add: aString; yourself) - package: aClass package name -! - -searchReferencesOf: aString - ReferencesBrowser search: aString -! - -searchClassReferences - ReferencesBrowser search: selectedClass name -! - -search: aString - self cancelChanges ifTrue: [| searchedClass | - searchedClass := Smalltalk current at: aString. - searchedClass isClass - ifTrue: [self class openOn: searchedClass] - ifFalse: [self searchReferencesOf: aString]] -! - -handleSourceAreaKeyDown: anEvent - <if(anEvent.ctrlKey) { - if(anEvent.keyCode === 83) { //ctrl+s - self._compile(); - anEvent.preventDefault(); - return false; - } - } - > -! - -commitPackage - selectedPackage ifNotNil: [ |package| - package := Package named: selectedPackage. - { Exporter -> (package commitPathJs, '/', selectedPackage, '.js'). - StrippedExporter -> (package commitPathJs, '/', selectedPackage, '.deploy.js'). - ChunkExporter -> (package commitPathSt, '/', selectedPackage, '.st') } - - do: [:commitStrategy| |fileContents| - fileContents := (commitStrategy key new exportPackage: selectedPackage). - self ajaxPutAt: commitStrategy value data: fileContents] - ] -! - -renamePackage - - | newName | - newName := window prompt: 'Rename package ', selectedPackage. - newName ifNotNil: [ - newName notEmpty ifTrue: [ - Smalltalk current renamePackage: selectedPackage to: newName. - self updateCategoriesList]] -! - -removePackage - - (window confirm: 'Do you really want to remove the whole package ', selectedPackage, ' with all its classes?') - ifTrue: [ - Smalltalk current removePackage: selectedPackage. - self updateCategoriesList] +setMethodProtocol: aString + self cancelChanges ifTrue: [ + (self protocols includes: aString) + ifFalse: [self addNewProtocol] + ifTrue: [ + selectedMethod category: aString. + selectedProtocol := aString. + selectedMethod := selectedMethod. + self + updateProtocolsList; + updateMethodsList; + updateSourceAndButtons]] ! -addNewClass - | className | - className := window prompt: 'New class'. - (className notNil and: [className notEmpty]) ifTrue: [ - Object subclass: className instanceVariableNames: '' package: self selectedPackage. - self - resetClassesList; - updateClassesList. - self selectClass: (Smalltalk current at: className)] +showClassButtons + classButtons asJQuery show ! -copyClass - | className | - className := window prompt: 'Copy class'. - (className notNil and: [className notEmpty]) ifTrue: [ - ClassBuilder new copyClass: self selectedClass named: className. - self - resetClassesList; - updateClassesList. - self selectClass: (Smalltalk current at: className)] +showMethodButtons + methodButtons asJQuery show ! ! !Browser methodsFor: 'initialization'! @@ -1096,55 +1035,13 @@ initialize ajaxPutAt: anURL data: aString jQuery - ajax: anURL options: #{ 'type' -> 'PUT'. - 'data' -> aString. - 'contentType' -> 'text/plain;charset=UTF-8'. - 'error' -> [window alert: 'PUT request failed at: ', anURL] } -! ! - -!Browser methodsFor: 'rendering'! - -renderBoxOn: html - self - renderTopPanelOn: html; - renderTabsOn: html; - renderBottomPanelOn: html -! - -renderTopPanelOn: html - html div - class: 'top'; - with: [ - packagesList := html ul class: 'jt_column browser packages'. - html div class: 'jt_packagesButtons'; with: [ - html button - title: 'Commit classes in this package to disk'; - onClick: [self commitPackage]; - with: 'Commit'. - html button - title: 'Rename package'; - onClick: [self renamePackage]; - with: 'Rename'. - html button - title: 'Remove this package from the system'; - onClick: [self removePackage]; - with: 'Remove']. - classesList := ClassesList on: self. - classesList renderOn: html. - protocolsList := html ul class: 'jt_column browser protocols'. - methodsList := html ul class: 'jt_column browser methods'. - self - updateCategoriesList; - updateClassesList; - updateProtocolsList; - updateMethodsList. - html div class: 'jt_clear'] -! + ajax: anURL options: #{ 'type' -> 'PUT'. + 'data' -> aString. + 'contentType' -> 'text/plain;charset=UTF-8'. + 'error' -> [window alert: 'PUT request failed at: ', anURL] } +! ! -renderTabsOn: html - tabsList := html ul class: 'jt_tabs jt_browser'. - self updateTabsList. -! +!Browser methodsFor: 'rendering'! renderBottomPanelOn: html html div @@ -1157,6 +1054,13 @@ renderBottomPanelOn: html sourceArea onKeyUp: [self updateStatus]] ! +renderBoxOn: html + self + renderTopPanelOn: html; + renderTabsOn: html; + renderBottomPanelOn: html +! + renderButtonsOn: html saveButton := html button. saveButton @@ -1176,6 +1080,41 @@ renderButtonsOn: html html button with: 'InspectIt'; onClick: [sourceArea inspectIt]]. self updateSourceAndButtons +! + +renderTabsOn: html + tabsList := html ul class: 'jt_tabs jt_browser'. + self updateTabsList. +! + +renderTopPanelOn: html + html div + class: 'top'; + with: [ + packagesList := html ul class: 'jt_column browser packages'. + html div class: 'jt_packagesButtons'; with: [ + html button + title: 'Commit classes in this package to disk'; + onClick: [self commitPackage]; + with: 'Commit'. + html button + title: 'Rename package'; + onClick: [self renamePackage]; + with: 'Rename'. + html button + title: 'Remove this package from the system'; + onClick: [self removePackage]; + with: 'Remove']. + classesList := ClassesList on: self. + classesList renderOn: html. + protocolsList := html ul class: 'jt_column browser protocols'. + methodsList := html ul class: 'jt_column browser methods'. + self + updateCategoriesList; + updateClassesList; + updateProtocolsList; + updateMethodsList. + html div class: 'jt_clear'] ! ! !Browser methodsFor: 'testing'! @@ -1186,6 +1125,10 @@ canBeClosed !Browser methodsFor: 'updating'! +resetClassesList + classesList resetNodes +! + updateCategoriesList packagesList contents: [:html | self packages do: [:each || li label | @@ -1205,17 +1148,6 @@ updateClassesList classesList updateNodes ! -updateProtocolsList - protocolsList contents: [:html | - self protocols do: [:each || li | - li := html li. - selectedProtocol = each ifTrue: [ - li class: 'selected']. - li - with: each; - onClick: [self selectProtocol: each]]] -! - updateMethodsList methodsList contents: [:html | self methods do: [:each || li | @@ -1227,32 +1159,15 @@ updateMethodsList onClick: [self selectMethod: each]]] ! -updateTabsList - tabsList contents: [:html || li | - li := html li. - selectedTab = #instance ifTrue: [li class: 'selected']. - li - with: [ - html span class: 'ltab'. - html span class: 'mtab'; with: 'Instance'. - html span class: 'rtab']; - onClick: [self selectTab: #instance]. - li := html li. - selectedTab = #class ifTrue: [li class: 'selected']. - li - with: [ - html span class: 'ltab'. - html span class: 'mtab'; with: 'Class'. - html span class: 'rtab']; - onClick: [self selectTab: #class]. - li := html li. - selectedTab = #comment ifTrue: [li class: 'selected']. - li - with: [ - html span class: 'ltab'. - html span class: 'mtab'; with: 'Comment'. - html span class: 'rtab']; - onClick: [self selectTab: #comment]] +updateProtocolsList + protocolsList contents: [:html | + self protocols do: [:each || li | + li := html li. + selectedProtocol = each ifTrue: [ + li class: 'selected']. + li + with: each; + onClick: [self selectProtocol: each]]] ! updateSourceAndButtons @@ -1328,8 +1243,32 @@ updateStatus unsavedChanges := true] ! -resetClassesList - classesList resetNodes +updateTabsList + tabsList contents: [:html || li | + li := html li. + selectedTab = #instance ifTrue: [li class: 'selected']. + li + with: [ + html span class: 'ltab'. + html span class: 'mtab'; with: 'Instance'. + html span class: 'rtab']; + onClick: [self selectTab: #instance]. + li := html li. + selectedTab = #class ifTrue: [li class: 'selected']. + li + with: [ + html span class: 'ltab'. + html span class: 'mtab'; with: 'Class'. + html span class: 'rtab']; + onClick: [self selectTab: #class]. + li := html li. + selectedTab = #comment ifTrue: [li class: 'selected']. + li + with: [ + html span class: 'ltab'. + html span class: 'mtab'; with: 'Comment'. + html span class: 'rtab']; + onClick: [self selectTab: #comment]] ! ! !Browser class methodsFor: 'accessing'! @@ -1344,562 +1283,456 @@ commitPathSt !Browser class methodsFor: 'convenience'! +open + self new open +! + openOn: aClass ^self new open; selectCategory: aClass category; selectClass: aClass -! - -open - self new open ! ! -TabWidget subclass: #Inspector - instanceVariableNames: 'label variables object selectedVariable variablesList valueTextarea diveButton sourceArea' - category: 'IDE'! - -!Inspector methodsFor: 'accessing'! - -label - ^label ifNil: ['Inspector (nil)'] -! +TabWidget subclass: #Debugger + instanceVariableNames: 'error selectedContext sourceArea ul ul2 inspector saveButton unsavedChanges selectedVariable selectedVariableName inspectButton' + package: 'IDE'! -variables - ^variables -! +!Debugger methodsFor: 'accessing'! -setVariables: aCollection - variables := aCollection +arguments + ^self method + ifNil: [selectedContext temps collect: [:each | nil]] + ifNotNil: [self method arguments] ! -setLabel: aString - label := aString +error + ^error ! -selectedVariable - ^selectedVariable +error: anError + error := anError ! -selectedVariable: aString - selectedVariable := aString +label + ^'[Debugger]' ! -sourceArea - ^sourceArea -! ! - -!Inspector methodsFor: 'actions'! - -inspect: anObject - object := anObject. - variables := #(). - object inspectOn: self +method + ^selectedContext receiver class methodAt: selectedContext selector ! -dive - (self variables at: self selectedVariable) inspect +receiver + ^selectedContext receiver ! -refresh - self - inspect: object; - updateVariablesList; - updateValueTextarea +source + ^self method + ifNil: ['Method doesn''t exist!!'] + ifNotNil: [self method source] ! ! -!Inspector methodsFor: 'rendering'! - -renderBoxOn: html - self - renderTopPanelOn: html; - renderBottomPanelOn: html -! - -renderTopPanelOn: html - html div - class: 'top'; - with: [ - variablesList := html ul class: 'jt_column variables'. - valueTextarea := html textarea class: 'jt_column value'; at: 'readonly' put: 'readonly'. - html div class: 'jt_tabs inspector'; with: [ - html button - class: 'jt_button inspector refresh'; - with: 'Refresh'; - onClick: [self refresh]. - diveButton := html button - class: 'jt_button inspector dive'; - with: 'Dive'; - onClick: [self dive]]. - html div class: 'jt_clear']. - self - updateVariablesList; - updateValueTextarea. -! +!Debugger methodsFor: 'actions'! -renderBottomPanelOn: html - html div - class: 'jt_sourceCode'; - with: [ - sourceArea := SourceArea new - receiver: object; - onDoIt: [self refresh]; - yourself. - sourceArea renderOn: html] +inspectSelectedVariable + selectedVariable inspect ! -renderButtonsOn: html - html button - with: 'DoIt'; - onClick: [self sourceArea doIt]. - html button - with: 'PrintIt'; - onClick: [self sourceArea printIt]. - html button - with: 'InspectIt'; - onClick: [self sourceArea inspectIt]. - self updateButtons -! ! - -!Inspector methodsFor: 'testing'! - -canBeClosed - ^true -! ! - -!Inspector methodsFor: 'updating'! +proceed + self close. + selectedContext receiver perform: selectedContext selector withArguments: selectedContext temps +! -updateVariablesList - variablesList contents: [:html | - self variables keys do: [:each || li | - li := html li. - li - with: each; - onClick: [self selectVariable: each]. - self selectedVariable = each ifTrue: [ - li class: 'selected']]] +save + | protocol | + protocol := (selectedContext receiver class methodDictionary at: selectedContext selector) category. + selectedContext receiver class compile: sourceArea val category: protocol. + self updateStatus ! -selectVariable: aString - self selectedVariable: aString. +selectContext: aContext + selectedContext := aContext. + selectedVariable := nil. + selectedVariableName := nil. self + updateContextsList; + updateSourceArea; + updateInspector; updateVariablesList; - updateValueTextarea; - updateButtons -! - -updateValueTextarea - valueTextarea asJQuery val: (self selectedVariable isNil - ifTrue: [''] - ifFalse: [(self variables at: self selectedVariable) printString]) + updateStatus ! -updateButtons - (self selectedVariable notNil and: [(self variables at: self selectedVariable) notNil]) - ifFalse: [diveButton at: 'disabled' put: true] - ifTrue: [diveButton removeAt: 'disabled'] +selectVariable: anObject named: aString + selectedVariable := anObject. + selectedVariableName := aString. + inspector contents: [:html | html with: anObject printString]. + self updateVariablesList ! ! -!Inspector class methodsFor: 'instance creation'! +!Debugger methodsFor: 'initialization'! -on: anObject - ^self new - inspect: anObject; - yourself +initialize + super initialize. + unsavedChanges = false ! ! -TabWidget subclass: #ReferencesBrowser - instanceVariableNames: 'implementors senders implementorsList input timer selector sendersList referencedClasses referencedClassesList' - category: 'IDE'! - -!ReferencesBrowser methodsFor: 'accessing'! +!Debugger methodsFor: 'rendering'! -implementors - ^implementors ifNil: [implementors := Array new] +renderBottomPanelOn: html + html div + class: 'jt_sourceCode debugger'; + with: [ + sourceArea := SourceArea new. + sourceArea renderOn: html]. + ul2 := html ul class: 'jt_column debugger variables'. + inspector := html div class: 'jt_column debugger inspector'. + sourceArea + onKeyUp: [self updateStatus] ! -label - ^'[References]' +renderBoxOn: html + self + renderTopPanelOn: html; + renderBottomPanelOn: html ! -selector - ^selector +renderButtonsOn: html + saveButton := html button + with: 'Save'; + onClick: [self save]. + html button + with: 'DoIt'; + onClick: [sourceArea doIt]. + html button + with: 'PrintIt'; + onClick: [sourceArea printIt]. + html button + with: 'InspectIt'; + onClick: [sourceArea inspectIt]. + html button + with: 'Proceed'; + onClick: [self proceed]. + html button + with: 'Abandon'; + onClick: [self close]. + inspectButton := html button + class: 'jt_button debugger inspect'; + with: 'Inspect'; + onClick: [self inspectSelectedVariable]. + self + updateSourceArea; + updateStatus; + updateVariablesList; + updateInspector ! -senders - ^senders ifNil: [senders := Array new] +renderContext: aContext on: html + | li | + li := html li. + selectedContext = aContext ifTrue: [ + li class: 'selected']. + li + with: aContext asString; + onClick: [self selectContext: aContext]. + aContext home ifNotNil: [self renderContext: aContext home on: html] ! -classesAndMetaclasses - ^Smalltalk current classes, (Smalltalk current classes collect: [:each | each class]) -! +renderTopPanelOn: html + selectedContext := self error context. + html div + class: 'top'; + with: [ + html div + class: 'label'; + with: self error messageText. + ul := html ul + class: 'jt_column debugger contexts'; + with: [self renderContext: self error context on: html]] +! ! -referencedClasses - ^referencedClasses ifNil: [referencedClasses := Array new] +!Debugger methodsFor: 'testing'! + +canBeClosed + ^true ! ! -!ReferencesBrowser methodsFor: 'actions'! +!Debugger methodsFor: 'updating'! -openBrowserOn: aMethod - | browser | - browser := Browser openOn: (aMethod methodClass isMetaclass - ifTrue: [aMethod methodClass instanceClass] ifFalse: [aMethod methodClass]). - aMethod methodClass isMetaclass ifTrue: [browser selectTab: #class]. - browser - selectProtocol: aMethod category; - selectMethod: aMethod +updateContextsList + ul contents: [:html | + self renderContext: self error context on: html] ! -searchReferencesFor: aString - selector := aString. - implementors := Array new. - senders := Array new. - referencedClasses := Array new. - (selector match: '^[A-Z]') - ifFalse: [self searchSelectorReferencesFor: selector] - ifTrue: [self searchReferencedClassesFor: selector] +updateInspector + inspector contents: [:html |] ! -search: aString - self - searchReferencesFor: aString; - updateImplementorsList; - updateSendersList; - updateReferencedClassesList +updateSourceArea + sourceArea val: self source ! -searchReferencedClassesFor: aString - self classesAndMetaclasses do: [:each | - each methodDictionary values do: [:value | - (value referencedClasses includes: selector) ifTrue: [ - self referencedClasses add: value]]] +updateStatus + sourceArea val = self source + ifTrue: [ + saveButton ifNotNil: [ + saveButton at: 'disabled' put: true]. + unsavedChanges := false] + ifFalse: [ + saveButton ifNotNil: [ + saveButton removeAt: 'disabled']. + unsavedChanges := true] ! -searchSelectorReferencesFor: aString - self classesAndMetaclasses do: [:each | - each methodDictionary keysAndValuesDo: [:key :value | - key = selector ifTrue: [self implementors add: value]. - (value messageSends includes: selector) ifTrue: [ - self senders add: value]]] +updateVariablesList + ul2 contents: [:html | | li | + li := html li + with: 'self'; + onClick: [self selectVariable: self receiver named: 'self']. + selectedVariableName = 'self' ifTrue: [ + li class: 'selected']. + self arguments withIndexDo: [:each :index | | param | + param := selectedContext temps at: index. + li := html li + with: each; + onClick: [self selectVariable: param named: each]. + selectedVariableName = each ifTrue: [ + li class: 'selected']]. + self receiver class allInstanceVariableNames do: [:each | | ivar | + ivar := self receiver instVarAt: each. + li := html li + with: each; + onClick: [self selectVariable: ivar named: each]. + selectedVariableName = each ifTrue: [ + li class: 'selected']]]. + selectedVariable ifNil: [inspectButton at: 'disabled' put: true] ifNotNil: [inspectButton removeAt: 'disabled'] ! ! -!ReferencesBrowser methodsFor: 'initialization'! - -initialize - super initialize. - selector := '' -! ! +TabWidget subclass: #IDETranscript + instanceVariableNames: 'textarea' + package: 'IDE'! -!ReferencesBrowser methodsFor: 'private'! +!IDETranscript methodsFor: 'accessing'! -setInputEvents - input - onKeyUp: [timer := [self search: input asJQuery val] valueWithTimeout: 100]; - onKeyDown: [timer ifNotNil: [timer clearTimeout]] +label + ^'Transcript' ! ! -!ReferencesBrowser methodsFor: 'rendering'! +!IDETranscript methodsFor: 'actions'! -renderBoxOn: html - self - renderInputOn: html; - renderImplementorsOn: html; - renderSendersOn: html; - renderReferencedClassesOn: html +clear + textarea asJQuery val: '' ! -renderInputOn: html - input := html input - class: 'implementors'; - yourself. - input asJQuery val: selector. - self setInputEvents +cr + textarea asJQuery val: textarea asJQuery val, String cr. ! -renderImplementorsOn: html - implementorsList := html ul class: 'jt_column implementors'. - self updateImplementorsList +open + TabManager current + open; + selectTab: self ! -renderSendersOn: html - sendersList := html ul class: 'jt_column senders'. - self updateSendersList +show: anObject + textarea ifNil: [self open]. + textarea asJQuery val: textarea asJQuery val, anObject asString. +! ! + +!IDETranscript methodsFor: 'rendering'! + +renderBoxOn: html + textarea := html textarea. + textarea + class: 'jt_transcript'; + at: 'spellcheck' put: 'false' ! -renderReferencedClassesOn: html - referencedClassesList := html ul class: 'jt_column referenced_classes'. - self updateReferencedClassesList +renderButtonsOn: html + html button + with: 'Clear transcript'; + onClick: [self clear] ! ! -!ReferencesBrowser methodsFor: 'testing'! +IDETranscript class instanceVariableNames: 'current'! -canBeClosed - ^true +!IDETranscript class methodsFor: 'initialization'! + +initialize + Transcript register: self current ! ! -!ReferencesBrowser methodsFor: 'updating'! +!IDETranscript class methodsFor: 'instance creation'! -updateImplementorsList - implementorsList contents: [:html | - html li - class: 'column_label'; - with: 'Implementors (', self implementors size asString, ')'; - style: 'font-weight: bold'. - self implementors do: [:each || li | - li := html li. - li - with: (each methodClass asString, ' >> ', self selector); - onClick: [self openBrowserOn: each]]] +current + ^current ifNil: [current := super new] ! -updateSendersList - sendersList contents: [:html | - html li - class: 'column_label'; - with: 'Senders (', self senders size asString, ')'; - style: 'font-weight: bold'. - self senders do: [:each | - html li - with: (each methodClass asString, ' >> ', each selector); - onClick: [self openBrowserOn: each]]] +new + self shouldNotImplement ! -updateReferencedClassesList - referencedClassesList contents: [:html | - html li - class: 'column_label'; - with: 'Class references (', self referencedClasses size asString, ')'; - style: 'font-weight: bold'. - self referencedClasses do: [:each | - html li - with: (each methodClass asString, ' >> ', each selector); - onClick: [self openBrowserOn: each]]] -! ! - -!ReferencesBrowser class methodsFor: 'instance creation'! - -search: aString - ^self new - searchReferencesFor: aString; - open +open + TabManager current + open; + selectTab: self current ! ! -TabWidget subclass: #Debugger - instanceVariableNames: 'error selectedContext sourceArea ul ul2 inspector saveButton unsavedChanges selectedVariable selectedVariableName inspectButton' - category: 'IDE'! +TabWidget subclass: #Inspector + instanceVariableNames: 'label variables object selectedVariable variablesList valueTextarea diveButton sourceArea' + package: 'IDE'! -!Debugger methodsFor: 'accessing'! +!Inspector methodsFor: 'accessing'! -error - ^error +label + ^label ifNil: ['Inspector (nil)'] ! -error: anError - error := anError +selectedVariable + ^selectedVariable ! -label - ^'[Debugger]' +selectedVariable: aString + selectedVariable := aString ! -source - ^self method - ifNil: ['Method doesn''t exist!!'] - ifNotNil: [self method source] +setLabel: aString + label := aString ! -method - ^selectedContext receiver class methodAt: selectedContext selector +setVariables: aCollection + variables := aCollection ! -arguments - ^self method - ifNil: [selectedContext temps collect: [:each | nil]] - ifNotNil: [self method arguments] +sourceArea + ^sourceArea ! -receiver - ^selectedContext receiver +variables + ^variables ! ! -!Debugger methodsFor: 'actions'! - -selectContext: aContext - selectedContext := aContext. - selectedVariable := nil. - selectedVariableName := nil. - self - updateContextsList; - updateSourceArea; - updateInspector; - updateVariablesList; - updateStatus -! - -proceed - self close. - selectedContext receiver perform: selectedContext selector withArguments: selectedContext temps -! +!Inspector methodsFor: 'actions'! -save - | protocol | - protocol := (selectedContext receiver class methodDictionary at: selectedContext selector) category. - selectedContext receiver class compile: sourceArea val category: protocol. - self updateStatus +dive + (self variables at: self selectedVariable) inspect ! -selectVariable: anObject named: aString - selectedVariable := anObject. - selectedVariableName := aString. - inspector contents: [:html | html with: anObject printString]. - self updateVariablesList +inspect: anObject + object := anObject. + variables := #(). + object inspectOn: self ! -inspectSelectedVariable - selectedVariable inspect -! ! - -!Debugger methodsFor: 'initialization'! - -initialize - super initialize. - unsavedChanges = false +refresh + self + inspect: object; + updateVariablesList; + updateValueTextarea ! ! -!Debugger methodsFor: 'rendering'! - -renderTopPanelOn: html - selectedContext := self error context. - html div - class: 'top'; - with: [ - html div - class: 'label'; - with: self error messageText. - ul := html ul - class: 'jt_column debugger contexts'; - with: [self renderContext: self error context on: html]] -! +!Inspector methodsFor: 'rendering'! -renderContext: aContext on: html - | li | - li := html li. - selectedContext = aContext ifTrue: [ - li class: 'selected']. - li - with: aContext asString; - onClick: [self selectContext: aContext]. - aContext home ifNotNil: [self renderContext: aContext home on: html] +renderBottomPanelOn: html + html div + class: 'jt_sourceCode'; + with: [ + sourceArea := SourceArea new + receiver: object; + onDoIt: [self refresh]; + yourself. + sourceArea renderOn: html] ! -renderBottomPanelOn: html - html div - class: 'jt_sourceCode debugger'; - with: [ - sourceArea := SourceArea new. - sourceArea renderOn: html]. - ul2 := html ul class: 'jt_column debugger variables'. - inspector := html div class: 'jt_column debugger inspector'. - sourceArea - onKeyUp: [self updateStatus] +renderBoxOn: html + self + renderTopPanelOn: html; + renderBottomPanelOn: html ! renderButtonsOn: html - saveButton := html button - with: 'Save'; - onClick: [self save]. - html button + html button with: 'DoIt'; - onClick: [sourceArea doIt]. - html button + onClick: [self sourceArea doIt]. + html button with: 'PrintIt'; - onClick: [sourceArea printIt]. - html button - with: 'InspectIt'; - onClick: [sourceArea inspectIt]. + onClick: [self sourceArea printIt]. html button - with: 'Proceed'; - onClick: [self proceed]. - html button - with: 'Abandon'; - onClick: [self close]. - inspectButton := html button - class: 'jt_button debugger inspect'; - with: 'Inspect'; - onClick: [self inspectSelectedVariable]. - self - updateSourceArea; - updateStatus; + with: 'InspectIt'; + onClick: [self sourceArea inspectIt]. + self updateButtons +! + +renderTopPanelOn: html + html div + class: 'top'; + with: [ + variablesList := html ul class: 'jt_column variables'. + valueTextarea := html textarea class: 'jt_column value'; at: 'readonly' put: 'readonly'. + html div class: 'jt_tabs inspector'; with: [ + html button + class: 'jt_button inspector refresh'; + with: 'Refresh'; + onClick: [self refresh]. + diveButton := html button + class: 'jt_button inspector dive'; + with: 'Dive'; + onClick: [self dive]]. + html div class: 'jt_clear']. + self updateVariablesList; - updateInspector -! - -renderBoxOn: html - self - renderTopPanelOn: html; - renderBottomPanelOn: html + updateValueTextarea. ! ! -!Debugger methodsFor: 'testing'! +!Inspector methodsFor: 'testing'! canBeClosed - ^true + ^true ! ! -!Debugger methodsFor: 'updating'! - -updateContextsList - ul contents: [:html | - self renderContext: self error context on: html] -! +!Inspector methodsFor: 'updating'! -updateSourceArea - sourceArea val: self source +selectVariable: aString + self selectedVariable: aString. + self + updateVariablesList; + updateValueTextarea; + updateButtons ! -updateStatus - sourceArea val = self source - ifTrue: [ - saveButton ifNotNil: [ - saveButton at: 'disabled' put: true]. - unsavedChanges := false] - ifFalse: [ - saveButton ifNotNil: [ - saveButton removeAt: 'disabled']. - unsavedChanges := true] +updateButtons + (self selectedVariable notNil and: [(self variables at: self selectedVariable) notNil]) + ifFalse: [diveButton at: 'disabled' put: true] + ifTrue: [diveButton removeAt: 'disabled'] ! -updateInspector - inspector contents: [:html |] +updateValueTextarea + valueTextarea asJQuery val: (self selectedVariable isNil + ifTrue: [''] + ifFalse: [(self variables at: self selectedVariable) printString]) ! updateVariablesList - ul2 contents: [:html | | li | - li := html li - with: 'self'; - onClick: [self selectVariable: self receiver named: 'self']. - selectedVariableName = 'self' ifTrue: [ - li class: 'selected']. - self arguments withIndexDo: [:each :index | | param | - param := selectedContext temps at: index. - li := html li - with: each; - onClick: [self selectVariable: param named: each]. - selectedVariableName = each ifTrue: [ - li class: 'selected']]. - self receiver class allInstanceVariableNames do: [:each | | ivar | - ivar := self receiver instVarAt: each. - li := html li + variablesList contents: [:html | + self variables keys do: [:each || li | + li := html li. + li with: each; - onClick: [self selectVariable: ivar named: each]. - selectedVariableName = each ifTrue: [ - li class: 'selected']]]. - selectedVariable ifNil: [inspectButton at: 'disabled' put: true] ifNotNil: [inspectButton removeAt: 'disabled'] + onClick: [self selectVariable: each]. + self selectedVariable = each ifTrue: [ + li class: 'selected']]] +! ! + +!Inspector class methodsFor: 'instance creation'! + +on: anObject + ^self new + inspect: anObject; + yourself ! ! TabWidget subclass: #ProgressBar instanceVariableNames: 'percent progressDiv div' - category: 'IDE'! + package: 'IDE'! !ProgressBar methodsFor: 'accessing'! @@ -1934,12 +1767,198 @@ updatePercent: aNumber self renderProgressBar ! ! +TabWidget subclass: #ReferencesBrowser + instanceVariableNames: 'implementors senders implementorsList input timer selector sendersList referencedClasses referencedClassesList' + package: 'IDE'! + +!ReferencesBrowser methodsFor: 'accessing'! + +classesAndMetaclasses + ^Smalltalk current classes, (Smalltalk current classes collect: [:each | each class]) +! + +implementors + ^implementors ifNil: [implementors := Array new] +! + +label + ^'[References]' +! + +referencedClasses + ^referencedClasses ifNil: [referencedClasses := Array new] +! + +selector + ^selector +! + +senders + ^senders ifNil: [senders := Array new] +! ! + +!ReferencesBrowser methodsFor: 'actions'! + +openBrowserOn: aMethod + | browser | + browser := Browser openOn: (aMethod methodClass isMetaclass + ifTrue: [aMethod methodClass instanceClass] ifFalse: [aMethod methodClass]). + aMethod methodClass isMetaclass ifTrue: [browser selectTab: #class]. + browser + selectProtocol: aMethod category; + selectMethod: aMethod +! + +search: aString + self + searchReferencesFor: aString; + updateImplementorsList; + updateSendersList; + updateReferencedClassesList +! + +searchReferencedClassesFor: aString + self classesAndMetaclasses do: [:each | + each methodDictionary values do: [:value | + (value referencedClasses includes: selector) ifTrue: [ + self referencedClasses add: value]]] +! + +searchReferencesFor: aString + selector := aString. + implementors := Array new. + senders := Array new. + referencedClasses := Array new. + (selector match: '^[A-Z]') + ifFalse: [self searchSelectorReferencesFor: selector] + ifTrue: [self searchReferencedClassesFor: selector] +! + +searchSelectorReferencesFor: aString + self classesAndMetaclasses do: [:each | + each methodDictionary keysAndValuesDo: [:key :value | + key = selector ifTrue: [self implementors add: value]. + (value messageSends includes: selector) ifTrue: [ + self senders add: value]]] +! ! + +!ReferencesBrowser methodsFor: 'initialization'! + +initialize + super initialize. + selector := '' +! ! + +!ReferencesBrowser methodsFor: 'private'! + +setInputEvents + input + onKeyUp: [timer := [self search: input asJQuery val] valueWithTimeout: 100]; + onKeyDown: [timer ifNotNil: [timer clearTimeout]] +! ! + +!ReferencesBrowser methodsFor: 'rendering'! + +renderBoxOn: html + self + renderInputOn: html; + renderImplementorsOn: html; + renderSendersOn: html; + renderReferencedClassesOn: html +! + +renderImplementorsOn: html + implementorsList := html ul class: 'jt_column implementors'. + self updateImplementorsList +! + +renderInputOn: html + input := html input + class: 'implementors'; + yourself. + input asJQuery val: selector. + self setInputEvents +! + +renderReferencedClassesOn: html + referencedClassesList := html ul class: 'jt_column referenced_classes'. + self updateReferencedClassesList +! + +renderSendersOn: html + sendersList := html ul class: 'jt_column senders'. + self updateSendersList +! ! + +!ReferencesBrowser methodsFor: 'testing'! + +canBeClosed + ^true +! ! + +!ReferencesBrowser methodsFor: 'updating'! + +updateImplementorsList + implementorsList contents: [:html | + html li + class: 'column_label'; + with: 'Implementors (', self implementors size asString, ')'; + style: 'font-weight: bold'. + self implementors do: [:each || li | + li := html li. + li + with: (each methodClass asString, ' >> ', self selector); + onClick: [self openBrowserOn: each]]] +! + +updateReferencedClassesList + referencedClassesList contents: [:html | + html li + class: 'column_label'; + with: 'Class references (', self referencedClasses size asString, ')'; + style: 'font-weight: bold'. + self referencedClasses do: [:each | + html li + with: (each methodClass asString, ' >> ', each selector); + onClick: [self openBrowserOn: each]]] +! + +updateSendersList + sendersList contents: [:html | + html li + class: 'column_label'; + with: 'Senders (', self senders size asString, ')'; + style: 'font-weight: bold'. + self senders do: [:each | + html li + with: (each methodClass asString, ' >> ', each selector); + onClick: [self openBrowserOn: each]]] +! ! + +!ReferencesBrowser class methodsFor: 'instance creation'! + +search: aString + ^self new + searchReferencesFor: aString; + open +! ! + TabWidget subclass: #TestRunner instanceVariableNames: 'selectedCategories packagesList selectedClasses classesList selectedMethods progressBar methodsList result statusDiv' - category: 'IDE'! + package: 'IDE'! !TestRunner methodsFor: 'accessing'! +allClasses + ^TestCase allSubclasses +! + +classes + ^(self allClasses + select: [:each | self selectedCategories includes: each category]) + sort: [:a :b | a name > b name] +! + label ^'SUnit' ! @@ -1953,36 +1972,26 @@ packages ^packages sort ! -classes - ^(self allClasses - select: [:each | self selectedCategories includes: each category]) - sort: [:a :b | a name > b name] +progressBar + ^progressBar ifNil: [progressBar := ProgressBar new] ! -selectedCategories - ^selectedCategories ifNil: [selectedCategories := Array new] +result + ^result ! -allClasses - ^TestCase allSubclasses +selectedCategories + ^selectedCategories ifNil: [selectedCategories := Array new] ! selectedClasses ^selectedClasses ifNil: [selectedClasses := Array new] ! -progressBar - ^progressBar ifNil: [progressBar := ProgressBar new] -! - statusInfo ^self printTotal, self printPasses, self printErrors, self printFailures ! -result - ^result -! - testCases | testCases | testCases := #(). @@ -1992,6 +2001,24 @@ testCases !TestRunner methodsFor: 'actions'! +performFailure: aTestCase + aTestCase perform: aTestCase selector +! + +run: aCollection + result := TestResult new. + self + updateStatusDiv; + updateMethodsList. + self progressBar updatePercent: 0. + result total: aCollection size. + aCollection do: [:each | + [each runCaseFor: result. + self progressBar updatePercent: result runs / result total * 100. + self updateStatusDiv. + self updateMethodsList] valueWithTimeout: 100]. +! + selectAllCategories self packages do: [:each | (selectedCategories includes: each) ifFalse: [ @@ -2001,6 +2028,15 @@ selectAllCategories updateClassesList ! +selectAllClasses + self classes do: [:each | + (selectedClasses includes: each) ifFalse: [ + self selectedClasses add: each]]. + self + updateCategoriesList; + updateClassesList +! + toggleCategory: aCategory (self isSelectedCategory: aCategory) ifFalse: [selectedCategories add: aCategory] @@ -2016,33 +2052,6 @@ toggleClass: aClass ifTrue: [selectedClasses remove: aClass]. self updateClassesList -! - -selectAllClasses - self classes do: [:each | - (selectedClasses includes: each) ifFalse: [ - self selectedClasses add: each]]. - self - updateCategoriesList; - updateClassesList -! - -run: aCollection - result := TestResult new. - self - updateStatusDiv; - updateMethodsList. - self progressBar updatePercent: 0. - result total: aCollection size. - aCollection do: [:each | - [each runCaseFor: result. - self progressBar updatePercent: result runs / result total * 100. - self updateStatusDiv. - self updateMethodsList] valueWithTimeout: 100]. -! - -performFailure: aTestCase - aTestCase perform: aTestCase selector ! ! !TestRunner methodsFor: 'initialization'! @@ -2095,12 +2104,12 @@ renderClassesOn: html self updateClassesList ! -renderResultsOn: html - statusDiv := html div. - html with: self progressBar. - methodsList := html ul class: 'jt_column sunit results'. - self updateMethodsList. - self updateStatusDiv +renderErrorsOn: html + self result errors do: [:each | + html li + class: 'errors'; + with: each class name, ' >> ', each selector; + onClick: [self performFailure: each]] ! renderFailuresOn: html @@ -2111,22 +2120,22 @@ renderFailuresOn: html onClick: [self performFailure: each]] ! -renderErrorsOn: html - self result errors do: [:each | - html li - class: 'errors'; - with: each class name, ' >> ', each selector; - onClick: [self performFailure: each]] +renderResultsOn: html + statusDiv := html div. + html with: self progressBar. + methodsList := html ul class: 'jt_column sunit results'. + self updateMethodsList. + self updateStatusDiv ! ! !TestRunner methodsFor: 'testing'! -isSelectedClass: aClass - ^(self selectedClasses includes: aClass) -! - isSelectedCategory: aCategory ^(self selectedCategories includes: aCategory) +! + +isSelectedClass: aClass + ^(self selectedClasses includes: aClass) ! ! !TestRunner methodsFor: 'updating'! @@ -2174,74 +2183,65 @@ updateStatusDiv html span with: self statusInfo] ! ! -TabWidget subclass: #IDETranscript - instanceVariableNames: 'textarea' - category: 'IDE'! +TabWidget subclass: #Workspace + instanceVariableNames: 'sourceArea' + package: 'IDE'! -!IDETranscript methodsFor: 'accessing'! +!Workspace methodsFor: 'accessing'! label - ^'Transcript' + ^'Workspace' ! ! -!IDETranscript methodsFor: 'actions'! +!Workspace methodsFor: 'actions'! -clear - textarea asJQuery val: '' +clearWorkspace + sourceArea clear ! -cr - textarea asJQuery val: textarea asJQuery val, String cr. +doIt + sourceArea doIt ! -show: anObject - textarea ifNil: [self open]. - textarea asJQuery val: textarea asJQuery val, anObject asString. +fileIn + sourceArea fileIn ! -open - TabManager current - open; - selectTab: self +inspectIt + sourceArea inspectIt +! + +printIt + sourceArea printIt ! ! -!IDETranscript methodsFor: 'rendering'! +!Workspace methodsFor: 'rendering'! renderBoxOn: html - textarea := html textarea. - textarea - class: 'jt_transcript'; - at: 'spellcheck' put: 'false' + sourceArea := SourceArea new. + sourceArea renderOn: html ! renderButtonsOn: html html button - with: 'Clear transcript'; - onClick: [self clear] -! ! - -IDETranscript class instanceVariableNames: 'current'! - -!IDETranscript class methodsFor: 'initialization'! - -initialize - Transcript register: self current -! ! - -!IDETranscript class methodsFor: 'instance creation'! - -new - self shouldNotImplement -! - -open - TabManager current - open; - selectTab: self current -! - -current - ^current ifNil: [current := super new] + with: 'DoIt'; + title: 'ctrl+d'; + onClick: [self doIt]. + html button + with: 'PrintIt'; + title: 'ctrl+p'; + onClick: [self printIt]. + html button + with: 'InspectIt'; + title: 'ctrl+i'; + onClick: [self inspectIt]. + html button + with: 'FileIn'; + title: 'ctrl+f'; + onClick: [self fileIn]. + html button + with: 'Clear workspace'; + onClick: [self clearWorkspace] ! ! !Object methodsFor: '*IDE'! @@ -2263,32 +2263,28 @@ inspectOn: anInspector setVariables: variables ! ! -!Date methodsFor: '*IDE'! +!Collection methodsFor: '*IDE'! inspectOn: anInspector | variables | variables := Dictionary new. variables at: '#self' put: self. - variables at: '#year' put: self year. - variables at: '#month' put: self month. - variables at: '#day' put: self day. - variables at: '#hours' put: self hours. - variables at: '#minutes' put: self minutes. - variables at: '#seconds' put: self seconds. - variables at: '#milliseconds' put: self milliseconds. + self withIndexDo: [:each :i | + variables at: i put: each]. anInspector setLabel: self printString; setVariables: variables ! ! -!Collection methodsFor: '*IDE'! +!HashedCollection methodsFor: '*IDE'! inspectOn: anInspector | variables | variables := Dictionary new. variables at: '#self' put: self. - self withIndexDo: [:each :i | - variables at: i put: each]. + variables at: '#keys' put: self keys. + self keysAndValuesDo: [:key :value | + variables at: key put: value]. anInspector setLabel: self printString; setVariables: variables @@ -2305,18 +2301,14 @@ inspectOn: anInspector anInspector setLabel: label ! ! -!MethodContext methodsFor: '*IDE'! +!Set methodsFor: '*IDE'! inspectOn: anInspector | variables | variables := Dictionary new. variables at: '#self' put: self. - variables at: '#home' put: self home. - variables at: '#receiver' put: self receiver. - variables at: '#selector' put: self selector. - variables at: '#temps' put: self temps. - self class instanceVariableNames do: [:each | - variables at: each put: (self instVarAt: each)]. + elements withIndexDo: [:each :i | + variables at: i put: each]. anInspector setLabel: self printString; setVariables: variables @@ -2340,28 +2332,36 @@ inspectOn: anInspector setVariables: variables ! ! -!Set methodsFor: '*IDE'! +!Date methodsFor: '*IDE'! inspectOn: anInspector | variables | variables := Dictionary new. variables at: '#self' put: self. - elements withIndexDo: [:each :i | - variables at: i put: each]. + variables at: '#year' put: self year. + variables at: '#month' put: self month. + variables at: '#day' put: self day. + variables at: '#hours' put: self hours. + variables at: '#minutes' put: self minutes. + variables at: '#seconds' put: self seconds. + variables at: '#milliseconds' put: self milliseconds. anInspector setLabel: self printString; setVariables: variables ! ! -!HashedCollection methodsFor: '*IDE'! +!MethodContext methodsFor: '*IDE'! inspectOn: anInspector | variables | variables := Dictionary new. variables at: '#self' put: self. - variables at: '#keys' put: self keys. - self keysAndValuesDo: [:key :value | - variables at: key put: value]. + variables at: '#home' put: self home. + variables at: '#receiver' put: self receiver. + variables at: '#selector' put: self selector. + variables at: '#temps' put: self temps. + self class instanceVariableNames do: [:each | + variables at: each put: (self instVarAt: each)]. anInspector setLabel: self printString; setVariables: variables diff --git a/amber/src/st/Kernel-Announcements.st b/amber/src/st/Kernel-Announcements.st index 7bc64daeeb7..ea4d21805b7 100644 --- a/amber/src/st/Kernel-Announcements.st +++ b/amber/src/st/Kernel-Announcements.st @@ -1,7 +1,7 @@ Smalltalk current createPackage: 'Kernel-Announcements' properties: #{}! Object subclass: #AnnouncementSubscription instanceVariableNames: 'block announcementClass' - category: 'Kernel-Announcements'! + package: 'Kernel-Announcements'! !AnnouncementSubscription methodsFor: 'accessing'! @@ -34,7 +34,7 @@ handlesAnnouncement: anAnnouncement Object subclass: #Announcer instanceVariableNames: 'registry subscriptions' - category: 'Kernel-Announcements'! + package: 'Kernel-Announcements'! !Announcer methodsFor: 'announcing'! diff --git a/amber/src/st/Kernel-Classes.st b/amber/src/st/Kernel-Classes.st index fbf367cf7a1..38e48494ab0 100644 --- a/amber/src/st/Kernel-Classes.st +++ b/amber/src/st/Kernel-Classes.st @@ -1,7 +1,7 @@ Smalltalk current createPackage: 'Kernel-Classes' properties: #{}! Object subclass: #Behavior instanceVariableNames: '' - category: 'Kernel-Classes'! + package: 'Kernel-Classes'! !Behavior commentStamp! Behavior is the superclass of all class objects. @@ -13,16 +13,12 @@ Behavior also provides methods for compiling methods, examining the method dict !Behavior methodsFor: 'accessing'! -name - <return self.className || nil> -! - -superclass - <return self.superclass || nil> -! - -subclasses - <return smalltalk.subclasses(self)> +allInstanceVariableNames + | result | + result := self instanceVariableNames copy. + self superclass ifNotNil: [ + result addAll: self superclass allInstanceVariableNames]. + ^result ! allSubclasses @@ -33,12 +29,30 @@ allSubclasses ^result ! -withAllSubclasses - ^(Array with: self) addAll: self allSubclasses; yourself +comment + ^(self basicAt: 'comment') ifNil: [''] ! -prototype - <return self.fn.prototype> +comment: aString + self basicAt: 'comment' put: aString +! + +commentStamp + ^ClassCommentReader new + class: self; + yourself +! + +commentStamp: aStamp prior: prior + ^self commentStamp +! + +instanceVariableNames + <return self.iVarNames> +! + +methodAt: aString + <return smalltalk.methods(self)[aString]> ! methodDictionary @@ -58,22 +72,13 @@ methodsFor: aString yourself ! -instanceVariableNames - <return self.iVarNames> -! - -comment - ^(self basicAt: 'comment') ifNil: [''] -! - -comment: aString - self basicAt: 'comment' put: aString +methodsFor: aString stamp: aStamp + "Added for compatibility, right now ignores stamp." + ^self methodsFor: aString ! -commentStamp - ^ClassCommentReader new - class: self; - yourself +name + <return self.className || nil> ! protocols @@ -98,25 +103,20 @@ protocolsDo: aBlock aBlock value: category value: (methodsByCategory at: category)] ! -allInstanceVariableNames - | result | - result := self instanceVariableNames copy. - self superclass ifNotNil: [ - result addAll: self superclass allInstanceVariableNames]. - ^result +prototype + <return self.fn.prototype> ! -methodAt: aString - <return smalltalk.methods(self)[aString]> +subclasses + <return smalltalk.subclasses(self)> ! -methodsFor: aString stamp: aStamp - "Added for compatibility, right now ignores stamp." - ^self methodsFor: aString +superclass + <return self.superclass || nil> ! -commentStamp: aStamp prior: prior - ^self commentStamp +withAllSubclasses + ^(Array with: self) addAll: self allSubclasses; yourself ! ! !Behavior methodsFor: 'compiling'! @@ -125,12 +125,6 @@ addCompiledMethod: aMethod <smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self)> ! -removeCompiledMethod: aMethod - <delete self.fn.prototype[aMethod.selector._asSelector()]; - delete self.fn.prototype.methods[aMethod.selector]; - smalltalk.init(self);> -! - compile: aString self compile: aString category: '' ! @@ -140,16 +134,22 @@ compile: aString category: anotherString method := Compiler new load: aString forClass: self. method category: anotherString. self addCompiledMethod: method +! + +removeCompiledMethod: aMethod + <delete self.fn.prototype[aMethod.selector._asSelector()]; + delete self.fn.prototype.methods[aMethod.selector]; + smalltalk.init(self);> ! ! !Behavior methodsFor: 'instance creation'! -new - ^self basicNew initialize -! - basicNew <return new self.fn()> +! + +new + ^self basicNew initialize ! ! !Behavior methodsFor: 'testing'! @@ -160,7 +160,7 @@ inheritsFrom: aClass Behavior subclass: #Class instanceVariableNames: '' - category: 'Kernel-Classes'! + package: 'Kernel-Classes'! !Class commentStamp! Class is __the__ class object. @@ -173,20 +173,20 @@ category ^self package ifNil: ['Unclassified'] ifNotNil: [self package name] ! -rename: aString - < - smalltalk[aString] = self; - delete smalltalk[self.className]; - self.className = aString; - > -! - package <return self.pkg> ! package: aPackage <self.pkg = aPackage> +! + +rename: aString + < + smalltalk[aString] = self; + delete smalltalk[self.className]; + self.className = aString; + > ! ! !Class methodsFor: 'class creation'! @@ -226,7 +226,7 @@ isClass Behavior subclass: #Metaclass instanceVariableNames: '' - category: 'Kernel-Classes'! + package: 'Kernel-Classes'! !Metaclass commentStamp! Metaclass is the root of the class hierarchy. @@ -258,7 +258,7 @@ isMetaclass Object subclass: #ClassBuilder instanceVariableNames: '' - category: 'Kernel-Classes'! + package: 'Kernel-Classes'! !ClassBuilder commentStamp! ClassBuilder is responsible for compiling new classes or modifying existing classes in the system. @@ -266,16 +266,16 @@ Rather than using ClassBuilder directly to compile a class, use `Class >> subcla !ClassBuilder methodsFor: 'class creation'! -superclass: aClass subclass: aString - ^self superclass: aClass subclass: aString instanceVariableNames: '' package: nil -! - class: aClass instanceVariableNames: aString aClass isMetaclass ifFalse: [self error: aClass name, ' is not a metaclass']. aClass basicAt: 'iVarNames' put: (self instanceVariableNamesFor: aString). self setupClass: aClass ! +superclass: aClass subclass: aString + ^self superclass: aClass subclass: aString instanceVariableNames: '' package: nil +! + superclass: aClass subclass: aString instanceVariableNames: aString2 package: aString3 | newClass | newClass := self addSubclassOf: aClass @@ -287,19 +287,11 @@ superclass: aClass subclass: aString instanceVariableNames: aString2 package: aS !ClassBuilder methodsFor: 'private'! -instanceVariableNamesFor: aString - ^(aString tokenize: ' ') reject: [:each | each isEmpty] -! - addSubclassOf: aClass named: aString instanceVariableNames: aCollection <smalltalk.addClass(aString, aClass, aCollection); return smalltalk[aString]> ! -setupClass: aClass - <smalltalk.init(aClass);> -! - addSubclassOf: aClass named: aString instanceVariableNames: aCollection package: packageName <smalltalk.addClass(aString, aClass, aCollection, packageName); return smalltalk[aString]> @@ -326,11 +318,19 @@ copyClass: aClass named: aString self setupClass: newClass. ^newClass +! + +instanceVariableNamesFor: aString + ^(aString tokenize: ' ') reject: [:each | each isEmpty] +! + +setupClass: aClass + <smalltalk.init(aClass);> ! ! Object subclass: #ClassCategoryReader instanceVariableNames: 'class category chunkParser' - category: 'Kernel-Classes'! + package: 'Kernel-Classes'! !ClassCategoryReader commentStamp! ClassCategoryReader represents a mechanism for retrieving class descriptions stored on a file.! @@ -360,15 +360,16 @@ initialize !ClassCategoryReader methodsFor: 'private'! compileMethod: aString - | method | - method := Compiler new load: aString forClass: class. + | method compiler | + method := (compiler := Compiler new) load: aString forClass: class. method category: category. - class addCompiledMethod: method + class addCompiledMethod: method. + compiler setupClass: class. ! ! Object subclass: #ClassCommentReader instanceVariableNames: 'class chunkParser' - category: 'Kernel-Classes'! + package: 'Kernel-Classes'! !ClassCommentReader commentStamp! ClassCommentReader represents a mechanism for retrieving class descriptions stored on a file. See `ClassCategoryReader` too.! @@ -401,3 +402,61 @@ setComment: aString class comment: aString ! ! +Object subclass: #ClassSorterNode + instanceVariableNames: 'theClass level nodes' + package: 'Kernel-Classes'! + +!ClassSorterNode methodsFor: 'accessing'! + +getNodesFrom: aCollection + | children others | + children := #(). + others := #(). + aCollection do: [:each | + (each superclass = self theClass) + ifTrue: [children add: each] + ifFalse: [others add: each]]. + nodes:= children collect: [:each | + ClassSorterNode on: each classes: others level: self level + 1] +! + +level + ^level +! + +level: anInteger + level := anInteger +! + +nodes + ^nodes +! + +theClass + ^theClass +! + +theClass: aClass + theClass := aClass +! ! + +!ClassSorterNode methodsFor: 'visiting'! + +traverseClassesWith: aCollection + "sort classes alphabetically Issue #143" + + aCollection add: self theClass. + (self nodes sorted: [:a :b | a theClass name <= b theClass name ]) do: [:aNode | + aNode traverseClassesWith: aCollection ]. +! ! + +!ClassSorterNode class methodsFor: 'instance creation'! + +on: aClass classes: aCollection level: anInteger + ^self new + theClass: aClass; + level: anInteger; + getNodesFrom: aCollection; + yourself +! ! + diff --git a/amber/src/st/Kernel-Collections.st b/amber/src/st/Kernel-Collections.st index 88024caee5e..06fc1aeec49 100644 --- a/amber/src/st/Kernel-Collections.st +++ b/amber/src/st/Kernel-Collections.st @@ -1,24 +1,24 @@ Smalltalk current createPackage: 'Kernel-Collections' properties: #{}! Object subclass: #Association instanceVariableNames: 'key value' - category: 'Kernel-Collections'! + package: 'Kernel-Collections'! !Association methodsFor: 'accessing'! -key: aKey - key := aKey -! - key ^key ! -value: aValue - value := aValue +key: aKey + key := aKey ! value ^value +! + +value: aValue + value := aValue ! ! !Association methodsFor: 'comparing'! @@ -48,183 +48,18 @@ key: aKey value: aValue yourself ! ! -Object subclass: #Stream - instanceVariableNames: 'collection position streamSize' - category: 'Kernel-Collections'! - -!Stream methodsFor: 'accessing'! - -collection - ^collection -! - -setCollection: aCollection - collection := aCollection -! - -position - ^position ifNil: [position := 0] -! - -position: anInteger - position := anInteger -! - -streamSize - ^streamSize -! - -setStreamSize: anInteger - streamSize := anInteger -! - -contents - ^self collection - copyFrom: 1 - to: self streamSize -! - -size - ^self streamSize -! ! - -!Stream methodsFor: 'actions'! - -reset - self position: 0 -! - -close -! - -flush -! - -resetContents - self reset. - self setStreamSize: 0 -! ! - -!Stream methodsFor: 'enumerating'! - -do: aBlock - [self atEnd] whileFalse: [aBlock value: self next] -! ! - -!Stream methodsFor: 'positioning'! - -setToEnd - self position: self size -! - -skip: anInteger - self position: ((self position + anInteger) min: self size max: 0) -! ! - -!Stream methodsFor: 'reading'! - -next - ^self atEnd - ifTrue: [nil] - ifFalse: [ - self position: self position + 1. - collection at: self position] -! - -next: anInteger - | tempCollection | - tempCollection := self collection class new. - anInteger timesRepeat: [ - self atEnd ifFalse: [ - tempCollection add: self next]]. - ^tempCollection -! - -peek - ^self atEnd ifFalse: [ - self collection at: self position + 1] -! ! - -!Stream methodsFor: 'testing'! - -atEnd - ^self position = self size -! - -atStart - ^self position = 0 -! - -isEmpty - ^self size = 0 -! ! - -!Stream methodsFor: 'writing'! - -nextPut: anObject - self position: self position + 1. - self collection at: self position put: anObject. - self setStreamSize: (self streamSize max: self position) -! - -nextPutAll: aCollection - aCollection do: [:each | - self nextPut: each] -! ! - -!Stream class methodsFor: 'instance creation'! - -on: aCollection - ^self new - setCollection: aCollection; - setStreamSize: aCollection size; - yourself -! ! - -Object subclass: #RegularExpression - instanceVariableNames: '' - category: 'Kernel-Collections'! - -!RegularExpression methodsFor: 'evaluating'! - -compile: aString - <return self.compile(aString)> -! - -exec: aString - <return self.exec(aString) || nil> -! - -test: aString - <return self.test(aString)> -! ! - -!RegularExpression class methodsFor: 'instance creation'! - -fromString: aString flag: anotherString - <return new RegExp(aString, anotherString)> -! - -fromString: aString - ^self fromString: aString flag: '' -! ! - Object subclass: #Collection instanceVariableNames: '' - category: 'Kernel-Collections'! + package: 'Kernel-Collections'! !Collection methodsFor: 'accessing'! -size - self subclassResponsibility -! - readStream ^self stream ! -writeStream - ^self stream +size + self subclassResponsibility ! stream @@ -233,6 +68,10 @@ stream streamClass ^self class streamClass +! + +writeStream + ^self stream ! ! !Collection methodsFor: 'adding/removing'! @@ -261,16 +100,16 @@ asArray ^Array withAll: self ! -asSet - ^Set withAll: self +asJSON + ^self asArray collect: [:each | each asJSON] ! asOrderedCollection ^self asArray ! -asJSON - ^self asArray collect: [:each | each asJSON] +asSet + ^Set withAll: self ! ! !Collection methodsFor: 'copying'! @@ -298,10 +137,6 @@ copyWithoutAll: aCollection !Collection methodsFor: 'enumerating'! -do: aBlock - <for(var i=0;i<self.length;i++){aBlock(self[i]);}> -! - collect: aBlock | newCollection | newCollection := self class new. @@ -323,6 +158,10 @@ detect: aBlock ifNone: anotherBlock > ! +do: aBlock + <for(var i=0;i<self.length;i++){aBlock(self[i]);}> +! + do: aBlock separatedBy: anotherBlock | first | first := true. @@ -362,6 +201,18 @@ errorNotFound !Collection methodsFor: 'testing'! +ifEmpty: aBlock + "Evaluate the given block with the receiver as argument, answering its value if the receiver is empty, otherwise answer the receiver. Note that the fact that this method returns its argument in case the receiver is not empty allows one to write expressions like the following ones: self classifyMethodAs: + (myProtocol ifEmpty: ['As yet unclassified'])" + ^ self isEmpty + ifTrue: [ aBlock value ] + ifFalse: [ self ] +! + +ifNotEmpty: aBlock + self notEmpty ifTrue: aBlock. +! + includes: anObject < var i = self.length; @@ -372,24 +223,12 @@ includes: anObject > ! -notEmpty - ^self isEmpty not -! - isEmpty ^self size = 0 ! -ifNotEmpty: aBlock - self notEmpty ifTrue: aBlock. -! - -ifEmpty: aBlock - "Evaluate the given block with the receiver as argument, answering its value if the receiver is empty, otherwise answer the receiver. Note that the fact that this method returns its argument in case the receiver is not empty allows one to write expressions like the following ones: self classifyMethodAs: - (myProtocol ifEmpty: ['As yet unclassified'])" - ^ self isEmpty - ifTrue: [ aBlock value ] - ifFalse: [ self ] +notEmpty + ^self isEmpty not ! ! !Collection class methodsFor: 'accessing'! @@ -400,6 +239,10 @@ streamClass !Collection class methodsFor: 'instance creation'! +new: anInteger + ^self new +! + with: anObject ^self new add: anObject; @@ -425,699 +268,642 @@ withAll: aCollection ^self new addAll: aCollection; yourself -! - -new: anInteger - ^self new ! ! -Collection subclass: #SequenceableCollection +Collection subclass: #HashedCollection instanceVariableNames: '' - category: 'Kernel-Collections'! + package: 'Kernel-Collections'! +!HashedCollection commentStamp! +A HashedCollection is a traditional JavaScript object, or a Smalltalk Dictionary. -!SequenceableCollection methodsFor: 'accessing'! +Unlike a Dictionary, it can only have strings as keys.! -at: anIndex - ^self at: anIndex ifAbsent: [ - self errorNotFound] +!HashedCollection methodsFor: 'accessing'! + +associations + | associations | + associations := #(). + self keys do: [:each | + associations add: (Association key: each value: (self at: each))]. + ^associations ! -at: anIndex ifAbsent: aBlock - self subclassResponsibility +at: aKey + ^self at: aKey ifAbsent: [self errorNotFound] ! -at: anIndex put: anObject - self subclassResponsibility +at: aKey ifAbsent: aBlock + ^(self includesKey: aKey) + ifTrue: [self basicAt: aKey] + ifFalse: aBlock ! -first - ^self at: 1 +at: aKey ifAbsentPut: aBlock + ^self at: aKey ifAbsent: [ + self at: aKey put: aBlock value] ! -fourth - ^self at: 4 +at: aKey ifPresent: aBlock + ^(self basicAt: aKey) ifNotNil: [aBlock value: (self at: aKey)] ! -last - ^self at: self size +at: aKey ifPresent: aBlock ifAbsent: anotherBlock + ^(self basicAt: aKey) + ifNil: anotherBlock + ifNotNil: [aBlock value: (self at: aKey)] ! -second - ^self at: 2 +at: aKey put: aValue + ^self basicAt: aKey put: aValue ! -third - ^self at: 3 +keys + < + var keys = []; + for(var i in self) { + if(self.hasOwnProperty(i)) { + keys.push(i); + } + }; + return keys; + > ! -allButFirst - ^self copyFrom: 2 to: self size +size + ^self keys size ! -allButLast - ^self copyFrom: 1 to: self size - 1 -! +values + ^self keys collect: [:each | self at: each] +! ! -indexOf: anObject - ^self indexOf: anObject ifAbsent: [self errorNotFound] -! +!HashedCollection methodsFor: 'adding/removing'! -indexOf: anObject ifAbsent: aBlock - < - for(var i=0;i<self.length;i++){ - if(self[i].__eq(anObject)) {return i+1} - } - return aBlock(); - > +add: anAssociation + self at: anAssociation key put: anAssociation value ! -indexOf: anObject startingAt: start ifAbsent: aBlock - < - for(var i=start-1;i<self.length;i++){ - if(self[i].__eq(anObject)) {return i+1} - } - return aBlock(); - > +addAll: aHashedCollection + super addAll: aHashedCollection associations. + ^aHashedCollection ! -indexOf: anObject startingAt: start - "Answer the index of the first occurence of anElement after start - within the receiver. If the receiver does not contain anElement, - answer 0." - ^self indexOf: anObject startingAt: start ifAbsent: [0] +remove: aKey ifAbsent: aBlock + ^self removeKey: aKey ifAbsent: aBlock ! -atRandom - ^ self at: self size atRandom +removeKey: aKey + ^self remove: aKey ! -first: n - "Answer the first n elements of the receiver. - Raise an error if there are not enough elements." - - ^ self copyFrom: 1 to: n +removeKey: aKey ifAbsent: aBlock + ^(self includesKey: aKey) + ifFalse: [aBlock value] + ifTrue: [self basicDelete: aKey] ! ! -!SequenceableCollection methodsFor: 'adding'! - -removeLast - self remove: self last -! +!HashedCollection methodsFor: 'comparing'! -addLast: anObject - self add: anObject += aHashedCollection + self class = aHashedCollection class ifFalse: [^false]. + self size = aHashedCollection size ifFalse: [^false]. + ^self associations = aHashedCollection associations ! ! -!SequenceableCollection methodsFor: 'comparing'! - -= aCollection - (self class = aCollection class and: [ - self size = aCollection size]) ifFalse: [^false]. - self withIndexDo: [:each :i | - (aCollection at: i) = each ifFalse: [^false]]. - ^true -! ! +!HashedCollection methodsFor: 'converting'! -!SequenceableCollection methodsFor: 'converting'! +asDictionary + ^Dictionary fromPairs: self associations +! -reversed - self subclassResponsibility +asJSON + | c | + c := self class new. + self keysAndValuesDo: [:key :value | + c at: key put: value asJSON]. + ^c ! ! -!SequenceableCollection methodsFor: 'copying'! +!HashedCollection methodsFor: 'copying'! -copyFrom: anIndex to: anotherIndex - | range newCollection | - range := anIndex to: anotherIndex. - newCollection := self class new: range size. - range withIndexDo: [:each :i | - newCollection at: i put: (self at: each)]. - ^newCollection +, aCollection + self shouldNotImplement ! -shallowCopy - | newCollection | - newCollection := self class new: self size. - self withIndexDo: [ :each :index | - newCollection at: index put: each]. - ^newCollection +copyFrom: anIndex to: anotherIndex + self shouldNotImplement ! deepCopy - | newCollection | - newCollection := self class new: self size. - self withIndexDo: [:each :index | - newCollection at: index put: each deepCopy]. - ^newCollection -! ! - -!SequenceableCollection methodsFor: 'enumerating'! - -withIndexDo: aBlock - <for(var i=0;i<self.length;i++){aBlock(self[i], i+1);}> -! ! - -!SequenceableCollection methodsFor: 'printing'! - -printString - | str | - str := '' writeStream. - str nextPutAll: super printString, ' ('. - self - do: [:each | str nextPutAll: each printString] - separatedBy: [str nextPutAll: ' ']. - str nextPutAll: ')'. - ^str contents -! ! - -SequenceableCollection subclass: #CharacterArray - instanceVariableNames: '' - category: 'Kernel-Collections'! - -!CharacterArray methodsFor: 'accessing'! + | copy | + copy := self class new. + self associationsDo: [:each | + copy at: each key put: each value deepCopy]. + ^copy +! -at: anIndex put: anObject - self errorReadOnly +shallowCopy + | copy | + copy := self class new. + self associationsDo: [:each | + copy at: each key put: each value]. + ^copy ! ! -!CharacterArray methodsFor: 'adding'! +!HashedCollection methodsFor: 'enumerating'! -add: anObject - self errorReadOnly +associationsDo: aBlock + self associations do: aBlock ! -remove: anObject - self errorReadOnly -! ! - -!CharacterArray methodsFor: 'converting'! +collect: aBlock + | newDict | + newDict := self class new. + self keysAndValuesDo: [:key :value | + newDict at: key put: (aBlock value: value)]. + ^newDict +! -asString - ^self subclassResponsibility +detect: aBlock ifNone: anotherBlock + ^self values detect: aBlock ifNone: anotherBlock ! -asNumber - ^self asString asNumber +do: aBlock + self values do: aBlock ! -asUppercase - ^self class fromString: self asString asUppercase +includes: anObject + ^self values includes: anObject ! -asSymbol - ^self subclassResponsibility +keysAndValuesDo: aBlock + self associationsDo: [:each | + aBlock value: each key value: each value] ! -asLowercase - ^self class fromString: self asString asLowercase +select: aBlock + | newDict | + newDict := self class new. + self keysAndValuesDo: [:key :value | + (aBlock value: value) ifTrue: [newDict at: key put: value]]. + ^newDict ! ! -!CharacterArray methodsFor: 'copying'! +!HashedCollection methodsFor: 'printing'! -, aString - ^self asString, aString asString +printString + ^String streamContents: [:aStream| + aStream + nextPutAll: super printString; + nextPutAll: '('. + self associations + do: [:anAssociation| + aStream + nextPutAll: anAssociation key printString; + nextPutAll: ' -> '; + nextPutAll: anAssociation value printString] + separatedBy: [aStream nextPutAll: ' , ']. + aStream nextPutAll: ')'] +! + +storeOn: aStream + aStream nextPutAll: '#{'. + self associations + do: [:each | each storeOn: aStream] + separatedBy: [ aStream nextPutAll: '. ']. + aStream nextPutAll: '}' ! ! -!CharacterArray methodsFor: 'error handling'! +!HashedCollection methodsFor: 'testing'! -errorReadOnly - self error: 'Object is read-only' +includesKey: aKey + <return self.hasOwnProperty(aKey)> ! ! -!CharacterArray methodsFor: 'printing'! +!HashedCollection class methodsFor: 'instance creation'! -printString - ^self asString printString +fromPairs: aCollection + | dict | + dict := self new. + aCollection do: [:each | dict add: each]. + ^dict ! ! -!CharacterArray class methodsFor: 'instance creation'! +HashedCollection subclass: #Dictionary + instanceVariableNames: 'keys values' + package: 'Kernel-Collections'! -fromString: aString - self subclassResponsibility -! ! +!Dictionary methodsFor: 'accessing'! -CharacterArray subclass: #String - instanceVariableNames: '' - category: 'Kernel-Collections'! +at: aKey ifAbsent: aBlock + < + var index; + for(var i=0;i<self['@keys'].length;i++){ + if(self['@keys'][i].__eq(aKey)) {index = i;} + }; + if(typeof index === 'undefined') { + return aBlock(); + } else { + return self['@values'][index]; + } + > +! -!String methodsFor: 'accessing'! +at: aKey put: aValue + < + var index = self['@keys'].indexOf(aKey); + if(index === -1) { + self['@values'].push(aValue); + self['@keys'].push(aKey); + } else { + self['@values'][index] = aValue; + }; -size - <return self.length> + return aValue; + > ! -at: anIndex ifAbsent: aBlock - <return self[anIndex - 1] || aBlock()> +keys + ^keys copy ! -escaped - <return escape(self)> -! +values + ^values copy +! ! -unescaped - <return unescape(self)> -! +!Dictionary methodsFor: 'adding/removing'! -asciiValue - <return self.charCodeAt(0);> +removeKey: aKey ifAbsent: aBlock + < + var index = self['@keys'].indexOf(aKey); + if(index === -1) { + return aBlock() + } else { + var value; + self['@keys'].splice(index, 1); + value = self['@values'].splice(index, 1); + return value[0]; + }; + > ! ! -!String methodsFor: 'comparing'! +!Dictionary methodsFor: 'converting'! -= aString - aString class = self class ifFalse: [^false]. - <return String(self) === String(aString)> +asHashedCollection + ^HashedCollection fromPairs: self associations ! -> aString - <return String(self) >> aString._asString()> -! +asJSON + ^self asHashedCollection asJSON +! ! -< aString - <return String(self) < aString._asString()> -! +!Dictionary methodsFor: 'initialization'! ->= aString - <return String(self) >>= aString._asString()> -! +initialize + super initialize. + keys := #(). + values := #() +! ! -<= aString - <return String(self) <= aString._asString()> +!Dictionary methodsFor: 'testing'! + +includesKey: aKey + ^keys includes: aKey ! ! -!String methodsFor: 'converting'! +Collection subclass: #SequenceableCollection + instanceVariableNames: '' + package: 'Kernel-Collections'! -asSelector - "If you change this method, change smalltalk.convertSelector too (see js/boot.js file)" +!SequenceableCollection methodsFor: 'accessing'! - | selector | - selector := '_', self. - selector := selector replace: ':' with: '_'. - selector := selector replace: '[+]' with: '_plus'. - selector := selector replace: '-' with: '_minus'. - selector := selector replace: '[*]' with: '_star'. - selector := selector replace: '[/]' with: '_slash'. - selector := selector replace: '>' with: '_gt'. - selector := selector replace: '<' with: '_lt'. - selector := selector replace: '=' with: '_eq'. - selector := selector replace: ',' with: '_comma'. - selector := selector replace: '[@]' with: '_at'. - ^selector +allButFirst + ^self copyFrom: 2 to: self size ! -asJavascript - < - if(self.search(/^[a-zA-Z0-9_:.$ ]*$/) == -1) - return "unescape(\"" + escape(self) + "\")"; - else - return "\"" + self + "\""; - > +allButLast + ^self copyFrom: 1 to: self size - 1 ! -tokenize: aString - <return self.split(aString)> +at: anIndex + ^self at: anIndex ifAbsent: [ + self errorNotFound] ! -asString - ^self +at: anIndex ifAbsent: aBlock + self subclassResponsibility ! -asNumber - <return Number(self)> +at: anIndex put: anObject + self subclassResponsibility ! -asLowercase - <return self.toLowerCase()> +atRandom + ^ self at: self size atRandom ! -asUppercase - <return self.toUpperCase()> +first + ^self at: 1 ! -reversed - <return self.split("").reverse().join("")> +first: n + "Answer the first n elements of the receiver. + Raise an error if there are not enough elements." + + ^ self copyFrom: 1 to: n ! -asJavaScriptSelector - ^(self asSelector replace: '^_' with: '') replace: '_.*' with: ''. +fourth + ^self at: 4 ! -asSymbol - ^Symbol lookup: self +indexOf: anObject + ^self indexOf: anObject ifAbsent: [self errorNotFound] ! -asJSON - ^self -! ! +indexOf: anObject ifAbsent: aBlock + < + for(var i=0;i<self.length;i++){ + if(self[i].__eq(anObject)) {return i+1} + } + return aBlock(); + > +! -!String methodsFor: 'copying'! +indexOf: anObject startingAt: start + "Answer the index of the first occurence of anElement after start + within the receiver. If the receiver does not contain anElement, + answer 0." + ^self indexOf: anObject startingAt: start ifAbsent: [0] +! -, aString - <return self + aString> +indexOf: anObject startingAt: start ifAbsent: aBlock + < + for(var i=start-1;i<self.length;i++){ + if(self[i].__eq(anObject)) {return i+1} + } + return aBlock(); + > ! -copyFrom: anIndex to: anotherIndex - <return self.substring(anIndex - 1, anotherIndex)> +last + ^self at: self size ! -shallowCopy - ^self class fromString: self +second + ^self at: 2 ! -deepCopy - ^self shallowCopy +third + ^self at: 3 ! ! -!String methodsFor: 'printing'! +!SequenceableCollection methodsFor: 'adding'! -printString - ^'''', self, '''' +addLast: anObject + self add: anObject ! -printNl - <console.log(self)> +removeLast + self remove: self last ! ! -!String methodsFor: 'regular expressions'! +!SequenceableCollection methodsFor: 'comparing'! -replace: aString with: anotherString - ^self replaceRegexp: (RegularExpression fromString: aString flag: 'g') with: anotherString -! += aCollection + (self class = aCollection class and: [ + self size = aCollection size]) ifFalse: [^false]. + self withIndexDo: [:each :i | + (aCollection at: i) = each ifFalse: [^false]]. + ^true +! ! -replaceRegexp: aRegexp with: aString - <return self.replace(aRegexp, aString)> -! +!SequenceableCollection methodsFor: 'converting'! -match: aRegexp - <return self.search(aRegexp) !!= -1> -! +reversed + self subclassResponsibility +! ! -trimLeft: separators +!SequenceableCollection methodsFor: 'copying'! - ^self replaceRegexp: (RegularExpression fromString: '^[', separators, ']+' flag: 'g') with: '' +copyFrom: anIndex to: anotherIndex + | range newCollection | + range := anIndex to: anotherIndex. + newCollection := self class new: range size. + range withIndexDo: [:each :i | + newCollection at: i put: (self at: each)]. + ^newCollection ! -trimRight: separators - - ^self replaceRegexp: (RegularExpression fromString: '[', separators, ']+$' flag: 'g') with: '' +deepCopy + | newCollection | + newCollection := self class new: self size. + self withIndexDo: [:each :index | + newCollection at: index put: each deepCopy]. + ^newCollection ! -trimLeft - ^self trimLeft: '\s' -! +shallowCopy + | newCollection | + newCollection := self class new: self size. + self withIndexDo: [ :each :index | + newCollection at: index put: each]. + ^newCollection +! ! -trimRight - ^self trimRight: '\s' -! +!SequenceableCollection methodsFor: 'enumerating'! -trimBoth - ^self trimBoth: '\s' -! +withIndexDo: aBlock + <for(var i=0;i<self.length;i++){aBlock(self[i], i+1);}> +! ! -trimBoth: separators +!SequenceableCollection methodsFor: 'printing'! - ^(self trimLeft: separators) trimRight: separators +printString + | str | + str := '' writeStream. + str nextPutAll: super printString, ' ('. + self + do: [:each | str nextPutAll: each printString] + separatedBy: [str nextPutAll: ' ']. + str nextPutAll: ')'. + ^str contents ! ! -!String methodsFor: 'split join'! +SequenceableCollection subclass: #Array + instanceVariableNames: '' + package: 'Kernel-Collections'! -join: aCollection - ^ String - streamContents: [:stream | aCollection - do: [:each | stream nextPutAll: each asString] - separatedBy: [stream nextPutAll: self]] -! +!Array methodsFor: 'accessing'! -lineIndicesDo: aBlock - "execute aBlock with 3 arguments for each line: - - start index of line - - end index of line without line delimiter - - end index of line including line delimiter(s) CR, LF or CRLF" - - | cr lf start sz nextLF nextCR | - start := 1. - sz := self size. - cr := String cr. - nextCR := self indexOf: cr startingAt: 1. - lf := String lf. - nextLF := self indexOf: lf startingAt: 1. - [ start <= sz ] whileTrue: [ - (nextLF = 0 and: [ nextCR = 0 ]) - ifTrue: [ "No more CR, nor LF, the string is over" - aBlock value: start value: sz value: sz. - ^self ]. - (nextCR = 0 or: [ 0 < nextLF and: [ nextLF < nextCR ] ]) - ifTrue: [ "Found a LF" - aBlock value: start value: nextLF - 1 value: nextLF. - start := 1 + nextLF. - nextLF := self indexOf: lf startingAt: start ] - ifFalse: [ 1 + nextCR = nextLF - ifTrue: [ "Found a CR-LF pair" - aBlock value: start value: nextCR - 1 value: nextLF. - start := 1 + nextLF. - nextCR := self indexOf: cr startingAt: start. - nextLF := self indexOf: lf startingAt: start ] - ifFalse: [ "Found a CR" - aBlock value: start value: nextCR - 1 value: nextCR. - start := 1 + nextCR. - nextCR := self indexOf: cr startingAt: start ]]] +at: anIndex ifAbsent: aBlock + < + var value = self[anIndex - 1]; + if(value === undefined) { + return aBlock(); + } else { + return value; + } + > ! -linesDo: aBlock - "Execute aBlock with each line in this string. The terminating line - delimiters CR, LF or CRLF pairs are not included in what is passed to aBlock" - - self lineIndicesDo: [:start :endWithoutDelimiters :end | - aBlock value: (self copyFrom: start to: endWithoutDelimiters)] +at: anIndex put: anObject + <return self[anIndex - 1] = anObject> ! -lines - "Answer an array of lines composing this receiver without the line ending delimiters." +size + <return self.length> +! ! - | lines | - lines := Array new. - self linesDo: [:aLine | lines add: aLine]. - ^lines +!Array methodsFor: 'adding/removing'! + +add: anObject + <self.push(anObject); return anObject;> ! -lineNumber: anIndex - "Answer a string containing the characters in the given line number." +remove: anObject + < + for(var i=0;i<self.length;i++) { + if(self[i] == anObject) { + self.splice(i,1); + break; + } + } + > +! - | lineCount | - lineCount := 0. - self lineIndicesDo: [:start :endWithoutDelimiters :end | - (lineCount := lineCount + 1) = anIndex ifTrue: [^self copyFrom: start to: endWithoutDelimiters]]. - ^nil +removeFrom: aNumber to: anotherNumber + <self.splice(aNumber - 1,anotherNumber - 1)> ! ! -!String methodsFor: 'testing'! +!Array methodsFor: 'converting'! -isString - ^true +asJavascript + ^'[', ((self collect: [:each | each asJavascript]) join: ', '), ']' ! -includesSubString: subString - < return self.indexOf(subString) !!= -1 > +reversed + <return self._copy().reverse()> ! ! -!String class methodsFor: 'accessing'! - -streamClass - ^StringStream -! +!Array methodsFor: 'enumerating'! -cr - <return '\r'> +join: aString + <return self.join(aString)> ! -lf - <return '\n'> +sort + ^self basicPerform: 'sort' ! -space - <return ' '> +sort: aBlock + < + return self.sort(function(a, b) { + if(aBlock(a,b)) {return -1} else {return 1} + }) + > ! -tab - <return '\t'> +sorted + ^self copy sort ! -crlf - <return '\r\n'> +sorted: aBlock + ^self copy sort: aBlock ! ! -!String class methodsFor: 'instance creation'! +!Array class methodsFor: 'instance creation'! -fromString: aString - <return new self.fn(aString)> +new: anInteger + <return new Array(anInteger)> ! -streamContents: blockWithArg - |stream| - stream := (self streamClass on: String new). - blockWithArg value: stream. - ^ stream contents +with: anObject + ^(self new: 1) + at: 1 put: anObject; + yourself ! -value: aUTFCharCode +with: anObject with: anObject2 + ^(self new: 2) + at: 1 put: anObject; + at: 2 put: anObject2; + yourself +! - <return String.fromCharCode(aUTFCharCode);> +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 ! ! -CharacterArray subclass: #Symbol +SequenceableCollection subclass: #Array instanceVariableNames: '' - category: 'Kernel-Collections'! + package: 'Kernel-Collections'! -!Symbol methodsFor: 'accessing'! +!Array methodsFor: 'accessing'! at: anIndex ifAbsent: aBlock - ^self asString 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 - ^self asString size + <return self.length> ! ! -!Symbol methodsFor: 'comparing'! +!Array methodsFor: 'adding/removing'! -< aSymbol - ^self asString < aSymbol asString +add: anObject + <self.push(anObject); return anObject;> ! -<= aSymbol - ^self asString <= aSymbol asString +remove: anObject + < + for(var i=0;i<self.length;i++) { + if(self[i] == anObject) { + self.splice(i,1); + break; + } + } + > ! ->= aSymbol - ^self asString >= aSymbol asString -! +removeFrom: aNumber to: anotherNumber + <self.splice(aNumber - 1,anotherNumber - 1)> +! ! -= aSymbol - aSymbol class = self class ifFalse: [^false]. - ^self asString = aSymbol asString +!Array methodsFor: 'converting'! + +asJavascript + ^'[', ((self collect: [:each | each asJavascript]) join: ', '), ']' ! -> aSymbol - ^self asString > aSymbol asString +reversed + <return self._copy().reverse()> ! ! -!Symbol methodsFor: 'converting'! - -asString - <return self.value> -! - -asSymbol - ^self -! - -asJavascript - ^'smalltalk.symbolFor("', self asString, '")' -! - -asSelector - ^self asString asSelector -! - -asJSON - ^self asString asJSON -! ! - -!Symbol methodsFor: 'copying'! - -copyFrom: anIndex to: anotherIndex - ^self class fromString: (self asString copyFrom: anIndex to: anotherIndex) -! - -deepCopy - ^self -! - -shallowCopy - ^self -! ! - -!Symbol methodsFor: 'printing'! - -printString - ^'#', self asString -! - -isSymbol - ^true -! ! - -!Symbol class methodsFor: 'instance creation'! - -lookup: aString - <return smalltalk.symbolFor(aString);> -! - -basicNew - self shouldNotImplement -! - -fromString: aString - ^self lookup: aString -! ! - -SequenceableCollection subclass: #Array - instanceVariableNames: '' - category: 'Kernel-Collections'! - -!Array methodsFor: 'accessing'! - -size - <return self.length> -! - -at: anIndex put: anObject - <return self[anIndex - 1] = anObject> -! - -at: anIndex ifAbsent: aBlock - < - var value = self[anIndex - 1]; - if(value === undefined) { - return aBlock(); - } else { - return value; - } - > -! ! - -!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'! +!Array methodsFor: 'enumerating'! join: aString <return self.join(aString)> @@ -1178,540 +964,755 @@ withAll: aCollection ^instance ! ! -SequenceableCollection subclass: #Array +SequenceableCollection subclass: #CharacterArray instanceVariableNames: '' - category: 'Kernel-Collections'! - -!Array methodsFor: 'accessing'! + package: 'Kernel-Collections'! -size - <return self.length> -! +!CharacterArray methodsFor: 'accessing'! at: anIndex put: anObject - <return self[anIndex - 1] = anObject> -! - -at: anIndex ifAbsent: aBlock - < - var value = self[anIndex - 1]; - if(value === undefined) { - return aBlock(); - } else { - return value; - } - > + self errorReadOnly ! ! -!Array methodsFor: 'adding/removing'! +!CharacterArray methodsFor: 'adding'! add: anObject - <self.push(anObject); return anObject;> + self errorReadOnly ! 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)> + self errorReadOnly ! ! -!Array methodsFor: 'converting'! +!CharacterArray methodsFor: 'converting'! -asJavascript - ^'[', ((self collect: [:each | each asJavascript]) join: ', '), ']' +asLowercase + ^self class fromString: self asString asLowercase ! -reversed - <return self._copy().reverse()> -! ! - -!Array methodsFor: 'enumerating'! - -join: aString - <return self.join(aString)> +asNumber + ^self asString asNumber ! -sort - ^self basicPerform: 'sort' +asString + ^self subclassResponsibility ! -sort: aBlock - < - return self.sort(function(a, b) { - if(aBlock(a,b)) {return -1} else {return 1} - }) - > +asSymbol + ^self subclassResponsibility ! -sorted - ^self copy sort -! +asUppercase + ^self class fromString: self asString asUppercase +! ! -sorted: aBlock - ^self copy sort: aBlock +!CharacterArray methodsFor: 'copying'! + +, aString + ^self asString, aString asString ! ! -!Array class methodsFor: 'instance creation'! +!CharacterArray methodsFor: 'error handling'! -new: anInteger - <return new Array(anInteger)> -! +errorReadOnly + self error: 'Object is read-only' +! ! -with: anObject - ^(self new: 1) - at: 1 put: anObject; - yourself -! +!CharacterArray methodsFor: 'printing'! -with: anObject with: anObject2 - ^(self new: 2) - at: 1 put: anObject; - at: 2 put: anObject2; - yourself -! +printString + ^self asString printString +! ! -with: anObject with: anObject2 with: anObject3 - ^(self new: 3) - at: 1 put: anObject; - at: 2 put: anObject2; - at: 3 put: anObject3; - yourself -! +!CharacterArray class methodsFor: 'instance creation'! -withAll: aCollection - | instance | - instance := self new: aCollection size. - aCollection withIndexDo: [:each :index | - instance at: index put: each]. - ^instance +fromString: aString + self subclassResponsibility ! ! -Stream subclass: #StringStream +CharacterArray subclass: #String instanceVariableNames: '' - category: 'Kernel-Collections'! + package: 'Kernel-Collections'! -!StringStream methodsFor: 'reading'! +!String methodsFor: 'accessing'! -next: anInteger - | tempCollection | - tempCollection := self collection class new. - anInteger timesRepeat: [ - self atEnd ifFalse: [ - tempCollection := tempCollection, self next]]. - ^tempCollection -! ! +asciiValue + <return self.charCodeAt(0);> +! -!StringStream methodsFor: 'writing'! +at: anIndex ifAbsent: aBlock + <return self[anIndex - 1] || aBlock()> +! -nextPut: aString - self nextPutAll: aString +escaped + <return escape(self)> ! -nextPutAll: aString - self setCollection: - (self collection copyFrom: 1 to: self position), - aString, - (self collection copyFrom: (self position + 1 + aString size) to: self collection size). - self position: self position + aString size. - self setStreamSize: (self streamSize max: self position) +size + <return self.length> ! -cr - ^self nextPutAll: String cr +unescaped + <return unescape(self)> +! ! + +!String methodsFor: 'comparing'! + +< aString + <return String(self) < aString._asString()> ! -crlf - ^self nextPutAll: String crlf +<= aString + <return String(self) <= aString._asString()> ! -lf - ^self nextPutAll: String lf += aString + aString class = self class ifFalse: [^false]. + <return String(self) === String(aString)> ! -space - self nextPut: ' ' -! ! +> aString + <return String(self) >> aString._asString()> +! -Collection subclass: #Set - instanceVariableNames: 'elements' - category: 'Kernel-Collections'! +>= aString + <return String(self) >>= aString._asString()> +! ! -!Set methodsFor: 'accessing'! +!String methodsFor: 'converting'! -size - ^elements size -! ! +asJSON + ^self +! -!Set methodsFor: 'adding/removing'! +asJavaScriptSelector + ^(self asSelector replace: '^_' with: '') replace: '_.*' with: ''. +! -add: anObject +asJavascript < - var found; - for(var i=0; i < self['@elements'].length; i++) { - if(anObject == self['@elements'][i]) { - found = true; - break; - } - } - if(!!found) {self['@elements'].push(anObject)} + if(self.search(/^[a-zA-Z0-9_:.$ ]*$/) == -1) + return "unescape(\"" + escape(self) + "\")"; + else + return "\"" + self + "\""; > ! -remove: anObject - elements remove: anObject -! ! +asLowercase + <return self.toLowerCase()> +! -!Set methodsFor: 'comparing'! +asNumber + <return Number(self)> +! -= aCollection - ^self class = aCollection class and: [ - elements = aCollection asArray] -! ! +asSelector + "If you change this method, change smalltalk.convertSelector too (see js/boot.js file)" -!Set methodsFor: 'converting'! + | selector | + selector := '_', self. + selector := selector replace: ':' with: '_'. + selector := selector replace: '[+]' with: '_plus'. + selector := selector replace: '-' with: '_minus'. + selector := selector replace: '[*]' with: '_star'. + selector := selector replace: '[/]' with: '_slash'. + selector := selector replace: '>' with: '_gt'. + selector := selector replace: '<' with: '_lt'. + selector := selector replace: '=' with: '_eq'. + selector := selector replace: ',' with: '_comma'. + selector := selector replace: '[@]' with: '_at'. + ^selector +! -asArray - ^elements copy -! ! +asString + ^self +! -!Set methodsFor: 'enumerating'! +asSymbol + ^Symbol lookup: self +! -detect: aBlock ifNone: anotherBlock - ^elements detect: aBlock ifNone: anotherBlock +asUppercase + <return self.toUpperCase()> ! -do: aBlock - elements do: aBlock +reversed + <return self.split("").reverse().join("")> ! -select: aBlock - | collection | - collection := self class new. - self do: [:each | - (aBlock value: each) ifTrue: [ - collection add: each]]. - ^collection +tokenize: aString + <return self.split(aString)> ! ! -!Set methodsFor: 'initialization'! - -initialize - super initialize. - elements := #() -! ! +!String methodsFor: 'copying'! -!Set methodsFor: 'testing'! +, aString + <return self + aString> +! -includes: anObject - ^elements includes: anObject -! ! +copyFrom: anIndex to: anotherIndex + <return self.substring(anIndex - 1, anotherIndex)> +! -Collection subclass: #HashedCollection - instanceVariableNames: '' - category: 'Kernel-Collections'! -!HashedCollection commentStamp! -A HashedCollection is a traditional JavaScript object, or a Smalltalk Dictionary. +deepCopy + ^self shallowCopy +! -Unlike a Dictionary, it can only have strings as keys.! +shallowCopy + ^self class fromString: self +! ! -!HashedCollection methodsFor: 'accessing'! +!String methodsFor: 'printing'! -size - ^self keys size +printNl + <console.log(self)> ! -associations - | associations | - associations := #(). - self keys do: [:each | - associations add: (Association key: each value: (self at: each))]. - ^associations -! +printString + ^'''', self, '''' +! ! -keys - < - var keys = []; - for(var i in self) { - if(self.hasOwnProperty(i)) { - keys.push(i); - } - }; - return keys; - > -! +!String methodsFor: 'regular expressions'! -values - ^self keys collect: [:each | self at: each] +match: aRegexp + <return self.search(aRegexp) !!= -1> ! -at: aKey put: aValue - ^self basicAt: aKey put: aValue +replace: aString with: anotherString + ^self replaceRegexp: (RegularExpression fromString: aString flag: 'g') with: anotherString ! -at: aKey ifAbsent: aBlock - ^(self includesKey: aKey) - ifTrue: [self basicAt: aKey] - ifFalse: aBlock +replaceRegexp: aRegexp with: aString + <return self.replace(aRegexp, aString)> ! -at: aKey ifAbsentPut: aBlock - ^self at: aKey ifAbsent: [ - self at: aKey put: aBlock value] +trimBoth + ^self trimBoth: '\s' ! -at: aKey ifPresent: aBlock - ^(self basicAt: aKey) ifNotNil: [aBlock value: (self at: aKey)] -! +trimBoth: separators -at: aKey ifPresent: aBlock ifAbsent: anotherBlock - ^(self basicAt: aKey) - ifNil: anotherBlock - ifNotNil: [aBlock value: (self at: aKey)] + ^(self trimLeft: separators) trimRight: separators ! -at: aKey - ^self at: aKey ifAbsent: [self errorNotFound] -! ! - -!HashedCollection methodsFor: 'adding/removing'! - -add: anAssociation - self at: anAssociation key put: anAssociation value +trimLeft + ^self trimLeft: '\s' ! -addAll: aHashedCollection - super addAll: aHashedCollection associations. - ^aHashedCollection -! +trimLeft: separators -removeKey: aKey - self remove: aKey + ^self replaceRegexp: (RegularExpression fromString: '^[', separators, ']+' flag: 'g') with: '' ! -remove: aKey ifAbsent: aBlock - ^self removeKey: aKey ifAbsent: aBlock +trimRight + ^self trimRight: '\s' ! -removeKey: aKey ifAbsent: aBlock - ^(self includesKey: aKey) - ifFalse: [aBlock value] - ifTrue: [self basicDelete: aKey] -! ! - -!HashedCollection methodsFor: 'comparing'! +trimRight: separators -= aHashedCollection - self class = aHashedCollection class ifFalse: [^false]. - self size = aHashedCollection size ifFalse: [^false]. - ^self associations = aHashedCollection associations + ^self replaceRegexp: (RegularExpression fromString: '[', separators, ']+$' flag: 'g') with: '' ! ! -!HashedCollection methodsFor: 'converting'! +!String methodsFor: 'split join'! -asDictionary - ^Dictionary fromPairs: self associations +join: aCollection + ^ String + streamContents: [:stream | aCollection + do: [:each | stream nextPutAll: each asString] + separatedBy: [stream nextPutAll: self]] +! + +lineIndicesDo: aBlock + "execute aBlock with 3 arguments for each line: + - start index of line + - end index of line without line delimiter + - end index of line including line delimiter(s) CR, LF or CRLF" + + | cr lf start sz nextLF nextCR | + start := 1. + sz := self size. + cr := String cr. + nextCR := self indexOf: cr startingAt: 1. + lf := String lf. + nextLF := self indexOf: lf startingAt: 1. + [ start <= sz ] whileTrue: [ + (nextLF = 0 and: [ nextCR = 0 ]) + ifTrue: [ "No more CR, nor LF, the string is over" + aBlock value: start value: sz value: sz. + ^self ]. + (nextCR = 0 or: [ 0 < nextLF and: [ nextLF < nextCR ] ]) + ifTrue: [ "Found a LF" + aBlock value: start value: nextLF - 1 value: nextLF. + start := 1 + nextLF. + nextLF := self indexOf: lf startingAt: start ] + ifFalse: [ 1 + nextCR = nextLF + ifTrue: [ "Found a CR-LF pair" + aBlock value: start value: nextCR - 1 value: nextLF. + start := 1 + nextLF. + nextCR := self indexOf: cr startingAt: start. + nextLF := self indexOf: lf startingAt: start ] + ifFalse: [ "Found a CR" + aBlock value: start value: nextCR - 1 value: nextCR. + start := 1 + nextCR. + nextCR := self indexOf: cr startingAt: start ]]] +! + +lineNumber: anIndex + "Answer a string containing the characters in the given line number." + + | lineCount | + lineCount := 0. + self lineIndicesDo: [:start :endWithoutDelimiters :end | + (lineCount := lineCount + 1) = anIndex ifTrue: [^self copyFrom: start to: endWithoutDelimiters]]. + ^nil +! + +lines + "Answer an array of lines composing this receiver without the line ending delimiters." + + | lines | + lines := Array new. + self linesDo: [:aLine | lines add: aLine]. + ^lines +! + +linesDo: aBlock + "Execute aBlock with each line in this string. The terminating line + delimiters CR, LF or CRLF pairs are not included in what is passed to aBlock" + + self lineIndicesDo: [:start :endWithoutDelimiters :end | + aBlock value: (self copyFrom: start to: endWithoutDelimiters)] +! ! + +!String methodsFor: 'testing'! + +includesSubString: subString + < return self.indexOf(subString) !!= -1 > +! + +isString + ^true +! ! + +!String class methodsFor: 'accessing'! + +cr + <return '\r'> +! + +crlf + <return '\r\n'> +! + +lf + <return '\n'> +! + +space + <return ' '> +! + +streamClass + ^StringStream +! + +tab + <return '\t'> +! ! + +!String class methodsFor: 'instance creation'! + +fromString: aString + <return new self.fn(aString)> +! + +streamContents: blockWithArg + |stream| + stream := (self streamClass on: String new). + blockWithArg value: stream. + ^ stream contents +! + +value: aUTFCharCode + + <return String.fromCharCode(aUTFCharCode);> +! ! + +CharacterArray subclass: #Symbol + instanceVariableNames: '' + package: 'Kernel-Collections'! + +!Symbol methodsFor: 'accessing'! + +at: anIndex ifAbsent: aBlock + ^self asString at: anIndex ifAbsent: aBlock +! + +size + ^self asString size +! ! + +!Symbol methodsFor: 'comparing'! + +< aSymbol + ^self asString < aSymbol asString +! + +<= aSymbol + ^self asString <= aSymbol asString +! + += aSymbol + aSymbol class = self class ifFalse: [^false]. + ^self asString = aSymbol asString +! + +> aSymbol + ^self asString > aSymbol asString +! + +>= aSymbol + ^self asString >= aSymbol asString +! ! + +!Symbol methodsFor: 'converting'! + +asJSON + ^self asString asJSON +! + +asJavascript + ^'smalltalk.symbolFor("', self asString, '")' +! + +asSelector + ^self asString asSelector +! + +asString + <return self.value> +! + +asSymbol + ^self +! ! + +!Symbol methodsFor: 'copying'! + +copyFrom: anIndex to: anotherIndex + ^self class fromString: (self asString copyFrom: anIndex to: anotherIndex) +! + +deepCopy + ^self ! -asJSON - | c | - c := self class new. - self keysAndValuesDo: [:key :value | - c at: key put: value asJSON]. - ^c -! ! - -!HashedCollection methodsFor: 'copying'! - shallowCopy - | copy | - copy := self class new. - self associationsDo: [:each | - copy at: each key put: each value]. - ^copy + ^self +! ! + +!Symbol methodsFor: 'printing'! + +isSymbol + ^true +! + +printString + ^'#', self asString +! ! + +!Symbol class methodsFor: 'instance creation'! + +basicNew + self shouldNotImplement +! + +fromString: aString + ^self lookup: aString +! + +lookup: aString + <return smalltalk.symbolFor(aString);> +! ! + +Collection subclass: #Set + instanceVariableNames: 'elements' + package: 'Kernel-Collections'! + +!Set methodsFor: 'accessing'! + +size + ^elements size +! ! + +!Set methodsFor: 'adding/removing'! + +add: anObject + < + var found; + for(var i=0; i < self['@elements'].length; i++) { + if(anObject == self['@elements'][i]) { + found = true; + break; + } + } + if(!!found) {self['@elements'].push(anObject)} + > +! + +remove: anObject + elements remove: anObject +! ! + +!Set methodsFor: 'comparing'! + += aCollection + ^self class = aCollection class and: [ + elements = aCollection asArray] +! ! + +!Set methodsFor: 'converting'! + +asArray + ^elements copy +! ! + +!Set methodsFor: 'enumerating'! + +detect: aBlock ifNone: anotherBlock + ^elements detect: aBlock ifNone: anotherBlock +! + +do: aBlock + elements do: aBlock +! + +select: aBlock + | collection | + collection := self class new. + self do: [:each | + (aBlock value: each) ifTrue: [ + collection add: each]]. + ^collection +! ! + +!Set methodsFor: 'initialization'! + +initialize + super initialize. + elements := #() +! ! + +!Set methodsFor: 'testing'! + +includes: anObject + ^elements includes: anObject +! ! + +Object subclass: #RegularExpression + instanceVariableNames: '' + package: 'Kernel-Collections'! + +!RegularExpression methodsFor: 'evaluating'! + +compile: aString + <return self.compile(aString)> ! -, aCollection - self shouldNotImplement +exec: aString + <return self.exec(aString) || nil> ! -copyFrom: anIndex to: anotherIndex - self shouldNotImplement +test: aString + <return self.test(aString)> +! ! + +!RegularExpression class methodsFor: 'instance creation'! + +fromString: aString + ^self fromString: aString flag: '' ! -deepCopy - | copy | - copy := self class new. - self associationsDo: [:each | - copy at: each key put: each value deepCopy]. - ^copy +fromString: aString flag: anotherString + <return new RegExp(aString, anotherString)> ! ! -!HashedCollection methodsFor: 'enumerating'! +Object subclass: #Stream + instanceVariableNames: 'collection position streamSize' + package: 'Kernel-Collections'! -associationsDo: aBlock - self associations do: aBlock +!Stream methodsFor: 'accessing'! + +collection + ^collection ! -keysAndValuesDo: aBlock - self associationsDo: [:each | - aBlock value: each key value: each value] +contents + ^self collection + copyFrom: 1 + to: self streamSize ! -do: aBlock - self values do: aBlock +position + ^position ifNil: [position := 0] ! -select: aBlock - | newDict | - newDict := self class new. - self keysAndValuesDo: [:key :value | - (aBlock value: value) ifTrue: [newDict at: key put: value]]. - ^newDict +position: anInteger + position := anInteger ! -collect: aBlock - | newDict | - newDict := self class new. - self keysAndValuesDo: [:key :value | - newDict at: key put: (aBlock value: value)]. - ^newDict +setCollection: aCollection + collection := aCollection ! -detect: aBlock ifNone: anotherBlock - ^self values detect: aBlock ifNone: anotherBlock +setStreamSize: anInteger + streamSize := anInteger ! -includes: anObject - ^self values includes: anObject +size + ^self streamSize +! + +streamSize + ^streamSize ! ! -!HashedCollection methodsFor: 'printing'! +!Stream methodsFor: 'actions'! -printString - ^String streamContents: [:aStream| - aStream - nextPutAll: super printString; - nextPutAll: '('. - self associations - do: [:anAssociation| - aStream - nextPutAll: anAssociation key printString; - nextPutAll: ' -> '; - nextPutAll: anAssociation value printString] - separatedBy: [aStream nextPutAll: ' , ']. - aStream nextPutAll: ')'] +close ! -storeOn: aStream - aStream nextPutAll: '#{'. - self associations - do: [:each | each storeOn: aStream] - separatedBy: [ aStream nextPutAll: '. ']. - aStream nextPutAll: '}' +flush +! + +reset + self position: 0 +! + +resetContents + self reset. + self setStreamSize: 0 ! ! -!HashedCollection methodsFor: 'testing'! +!Stream methodsFor: 'enumerating'! -includesKey: aKey - <return self.hasOwnProperty(aKey)> +do: aBlock + [self atEnd] whileFalse: [aBlock value: self next] ! ! -!HashedCollection class methodsFor: 'instance creation'! +!Stream methodsFor: 'positioning'! -fromPairs: aCollection - | dict | - dict := self new. - aCollection do: [:each | dict add: each]. - ^dict +setToEnd + self position: self size +! + +skip: anInteger + self position: ((self position + anInteger) min: self size max: 0) ! ! -HashedCollection subclass: #Dictionary - instanceVariableNames: 'keys values' - category: 'Kernel-Collections'! +!Stream methodsFor: 'reading'! -!Dictionary methodsFor: 'accessing'! +next + ^self atEnd + ifTrue: [nil] + ifFalse: [ + self position: self position + 1. + collection at: self position] +! -at: aKey ifAbsent: aBlock - < - var index; - for(var i=0;i<self['@keys'].length;i++){ - if(self['@keys'][i].__eq(aKey)) {index = i;} - }; - if(typeof index === 'undefined') { - return aBlock(); - } else { - return self['@values'][index]; - } - > +next: anInteger + | tempCollection | + tempCollection := self collection class new. + anInteger timesRepeat: [ + self atEnd ifFalse: [ + tempCollection add: self next]]. + ^tempCollection ! -keys - ^keys copy +peek + ^self atEnd ifFalse: [ + self collection at: self position + 1] +! ! + +!Stream methodsFor: 'testing'! + +atEnd + ^self position = self size ! -values - ^values copy +atStart + ^self position = 0 ! -at: aKey put: aValue - < - var index = self['@keys'].indexOf(aKey); - if(index === -1) { - self['@values'].push(aValue); - self['@keys'].push(aKey); - } else { - self['@values'][index] = aValue; - }; +isEmpty + ^self size = 0 +! ! - return aValue; - > +!Stream methodsFor: 'writing'! + +nextPut: anObject + self position: self position + 1. + self collection at: self position put: anObject. + self setStreamSize: (self streamSize max: self position) +! + +nextPutAll: aCollection + aCollection do: [:each | + self nextPut: each] ! ! -!Dictionary methodsFor: 'adding/removing'! +!Stream class methodsFor: 'instance creation'! -removeKey: aKey ifAbsent: aBlock - < - var index = self['@keys'].indexOf(aKey); - if(index === -1) { - return aBlock() - } else { - self['@keys'].splice(i, 1); - self['@values'].splice(i, 1); - return aKey - }; - > +on: aCollection + ^self new + setCollection: aCollection; + setStreamSize: aCollection size; + yourself ! ! -!Dictionary methodsFor: 'converting'! +Stream subclass: #StringStream + instanceVariableNames: '' + package: 'Kernel-Collections'! -asHashedCollection - ^HashedCollection fromPairs: self associations -! +!StringStream methodsFor: 'reading'! -asJSON - ^self asHashedCollection asJSON +next: anInteger + | tempCollection | + tempCollection := self collection class new. + anInteger timesRepeat: [ + self atEnd ifFalse: [ + tempCollection := tempCollection, self next]]. + ^tempCollection ! ! -!Dictionary methodsFor: 'initialization'! +!StringStream methodsFor: 'writing'! -initialize - super initialize. - keys := #(). - values := #() -! ! +cr + ^self nextPutAll: String cr +! -!Dictionary methodsFor: 'testing'! +crlf + ^self nextPutAll: String crlf +! -includesKey: aKey - ^keys includes: aKey +lf + ^self nextPutAll: String lf +! + +nextPut: aString + self nextPutAll: aString +! + +nextPutAll: aString + self setCollection: + (self collection copyFrom: 1 to: self position), + aString, + (self collection copyFrom: (self position + 1 + aString size) to: self collection size). + self position: self position + aString size. + self setStreamSize: (self streamSize max: self position) +! + +space + self nextPut: ' ' ! ! diff --git a/amber/src/st/Kernel-Exceptions.st b/amber/src/st/Kernel-Exceptions.st index 79abb6bc506..4beab37cb84 100644 --- a/amber/src/st/Kernel-Exceptions.st +++ b/amber/src/st/Kernel-Exceptions.st @@ -1,24 +1,24 @@ Smalltalk current createPackage: 'Kernel-Exceptions' properties: #{}! Object subclass: #Error instanceVariableNames: 'messageText' - category: 'Kernel-Exceptions'! + package: 'Kernel-Exceptions'! !Error methodsFor: 'accessing'! -messageText - ^messageText -! - -messageText: aString - messageText := aString -! - context <return self.context> ! jsStack <return self.stack> +! + +messageText + ^messageText +! + +messageText: aString + messageText := aString ! ! !Error methodsFor: 'signaling'! @@ -43,7 +43,7 @@ signal: aString Error subclass: #MessageNotUnderstood instanceVariableNames: 'message receiver' - category: 'Kernel-Exceptions'! + package: 'Kernel-Exceptions'! !MessageNotUnderstood methodsFor: 'accessing'! @@ -55,21 +55,21 @@ message: aMessage message := aMessage ! +messageText + ^self receiver asString, ' does not understand #', self message selector +! + receiver ^receiver ! receiver: anObject receiver := anObject -! - -messageText - ^self receiver asString, ' does not understand #', self message selector ! ! Object subclass: #ErrorHandler instanceVariableNames: '' - category: 'Kernel-Exceptions'! + package: 'Kernel-Exceptions'! !ErrorHandler methodsFor: 'error handling'! @@ -80,24 +80,24 @@ handleError: anError !ErrorHandler methodsFor: 'private'! +log: aString + console log: aString +! + logContext: aContext aContext home ifNotNil: [ self logContext: aContext home]. self log: aContext receiver asString, '>>', aContext selector ! -logErrorContext: aContext - aContext ifNotNil: [ - aContext home ifNotNil: [ - self logContext: aContext home]] -! - logError: anError self log: anError messageText ! -log: aString - console log: aString +logErrorContext: aContext + aContext ifNotNil: [ + aContext home ifNotNil: [ + self logContext: aContext home]] ! ! ErrorHandler class instanceVariableNames: 'current'! diff --git a/amber/src/st/Kernel-Methods.st b/amber/src/st/Kernel-Methods.st index 704c58e45c5..2f77e6f79f5 100644 --- a/amber/src/st/Kernel-Methods.st +++ b/amber/src/st/Kernel-Methods.st @@ -1,95 +1,7 @@ Smalltalk current createPackage: 'Kernel-Methods' properties: #{}! -Object subclass: #Message - instanceVariableNames: 'selector arguments' - category: 'Kernel-Methods'! -!Message commentStamp! -Generally, the system does not use instances of Message for efficiency reasons. -However, when a message is not understood by its receiver, the interpreter will make up an instance of it in order to capture the information involved in an actual message transmission. -This instance is sent it as an argument with the message `doesNotUnderstand:` to the receiver. - -See boot.js, `messageNotUnderstood` and its counterpart `Object>>doesNotUnderstand:`! - -!Message methodsFor: 'accessing'! - -selector - ^selector -! - -selector: aString - selector := aString -! - -arguments: anArray - arguments := anArray -! - -arguments - ^arguments -! ! - -!Message methodsFor: 'printing'! - -printString - ^ String streamContents: [:aStream| - aStream - nextPutAll: super printString; - nextPutAll: '('; - nextPutAll: selector; - nextPutAll: ')' ] -! - -sendTo: anObject - Smalltalk current send: self selector to: anObject arguments: self arguments -! ! - -!Message class methodsFor: 'instance creation'! - -selector: aString arguments: anArray - ^self new - selector: aString; - arguments: anArray; - yourself -! ! - -Object subclass: #MethodContext - instanceVariableNames: '' - category: 'Kernel-Methods'! -!MethodContext commentStamp! -MethodContext holds all the dynamic state associated with the execution of either a method activation resulting from a message send. That is used to build the call stack while debugging. - -MethodContext instances are JavaScript `SmalltalkMethodContext` objects defined in boot.js - -Current limitation: MethodContext instances are not created on Block evaluation. That means it's actually impossible to debug inside a Block.! - -!MethodContext methodsFor: 'accessing'! - -receiver - <return self.receiver> -! - -selector - <return smalltalk.convertSelector(self.selector)> -! - -home - <return self.homeContext> -! - -temps - <return self.temps> -! - -printString - ^super printString, '(', self asString, ')' -! - -asString - ^self receiver class printString, ' >> ', self selector -! ! - Object subclass: #BlockClosure instanceVariableNames: '' - category: 'Kernel-Methods'! + package: 'Kernel-Methods'! !BlockClosure commentStamp! A BlockClosure is a lexical closure. The JavaScript representation is a function. @@ -108,9 +20,9 @@ numArgs !BlockClosure methodsFor: 'controlling'! -whileTrue: aBlock +whileFalse "inlined in the Compiler" - <while(self()) {aBlock()}> + self whileFalse: [] ! whileFalse: aBlock @@ -118,14 +30,14 @@ whileFalse: aBlock <while(!!self()) {aBlock()}> ! -whileFalse +whileTrue "inlined in the Compiler" - self whileFalse: [] + self whileTrue: [] ! -whileTrue +whileTrue: aBlock "inlined in the Compiler" - self whileTrue: [] + <while(self()) {aBlock()}> ! ! !BlockClosure methodsFor: 'error handling'! @@ -139,46 +51,10 @@ on: anErrorClass do: aBlock !BlockClosure methodsFor: 'evaluating'! -value - "inlined in the Compiler" - <return self();> -! - -value: anArg - "inlined in the Compiler" - <return self(anArg);> -! - -value: firstArg value: secondArg - "inlined in the Compiler" - <return self(firstArg, secondArg);> -! - -value: firstArg value: secondArg value: thirdArg - "inlined in the Compiler" - <return self(firstArg, secondArg, thirdArg);> -! - -valueWithPossibleArguments: aCollection - <return self.apply(null, aCollection);> -! - -new - "Use the receiver as a JS constructor. - *Do not* use this method to instanciate Smalltalk objects!!" - <return new self()> -! - applyTo: anObject arguments: aCollection <return self.apply(anObject, aCollection)> ! -timeToRun - "Answer the number of milliseconds taken to execute this block." - - ^ Date millisecondsToRun: self -! - ensure: aBlock | success | success := false. @@ -189,6 +65,12 @@ ensure: aBlock ex signal] ! +new + "Use the receiver as a JS constructor. + *Do not* use this method to instanciate Smalltalk objects!!" + <return new self()> +! + newValue: anObject "Use the receiver as a JS constructor. *Do not* use this method to instanciate Smalltalk objects!!" @@ -205,21 +87,51 @@ newValue: anObject value: anObject2 value: anObject3 "Use the receiver as a JS constructor. *Do not* use this method to instanciate Smalltalk objects!!" <return new self(anObject, anObject2)> -! ! +! -!BlockClosure methodsFor: 'timeout/interval'! +timeToRun + "Answer the number of milliseconds taken to execute this block." -valueWithTimeout: aNumber - <return setTimeout(self, aNumber)> + ^ Date millisecondsToRun: self +! + +value + "inlined in the Compiler" + <return self();> ! +value: anArg + "inlined in the Compiler" + <return self(anArg);> +! + +value: firstArg value: secondArg + "inlined in the Compiler" + <return self(firstArg, secondArg);> +! + +value: firstArg value: secondArg value: thirdArg + "inlined in the Compiler" + <return self(firstArg, secondArg, thirdArg);> +! + +valueWithPossibleArguments: aCollection + <return self.apply(null, aCollection);> +! ! + +!BlockClosure methodsFor: 'timeout/interval'! + valueWithInterval: aNumber <return setInterval(self, aNumber)> +! + +valueWithTimeout: aNumber + <return setTimeout(self, aNumber)> ! ! Object subclass: #CompiledMethod instanceVariableNames: '' - category: 'Kernel-Methods'! + package: 'Kernel-Methods'! !CompiledMethod commentStamp! CompiledMethod hold the source and compiled code of a class method. @@ -241,12 +153,8 @@ or messages sent from this method: !CompiledMethod methodsFor: 'accessing'! -source - ^(self basicAt: 'source') ifNil: [''] -! - -source: aString - self basicAt: 'source' put: aString +arguments + <return self.args || []> ! category @@ -257,14 +165,6 @@ category: aString self basicAt: 'category' put: aString ! -selector - ^self basicAt: 'selector' -! - -selector: aString - self basicAt: 'selector' put: aString -! - fn ^self basicAt: 'fn' ! @@ -285,7 +185,107 @@ referencedClasses ^self basicAt: 'referencedClasses' ! +selector + ^self basicAt: 'selector' +! + +selector: aString + self basicAt: 'selector' put: aString +! + +source + ^(self basicAt: 'source') ifNil: [''] +! + +source: aString + self basicAt: 'source' put: aString +! ! + +Object subclass: #Message + instanceVariableNames: 'selector arguments' + package: 'Kernel-Methods'! +!Message commentStamp! +Generally, the system does not use instances of Message for efficiency reasons. +However, when a message is not understood by its receiver, the interpreter will make up an instance of it in order to capture the information involved in an actual message transmission. +This instance is sent it as an argument with the message `doesNotUnderstand:` to the receiver. + +See boot.js, `messageNotUnderstood` and its counterpart `Object>>doesNotUnderstand:`! + +!Message methodsFor: 'accessing'! + arguments - <return self.args || []> + ^arguments +! + +arguments: anArray + arguments := anArray +! + +selector + ^selector +! + +selector: aString + selector := aString +! ! + +!Message methodsFor: 'printing'! + +printString + ^ String streamContents: [:aStream| + aStream + nextPutAll: super printString; + nextPutAll: '('; + nextPutAll: selector; + nextPutAll: ')' ] +! + +sendTo: anObject + Smalltalk current send: self selector to: anObject arguments: self arguments +! ! + +!Message class methodsFor: 'instance creation'! + +selector: aString arguments: anArray + ^self new + selector: aString; + arguments: anArray; + yourself +! ! + +Object subclass: #MethodContext + instanceVariableNames: '' + package: 'Kernel-Methods'! +!MethodContext commentStamp! +MethodContext holds all the dynamic state associated with the execution of either a method activation resulting from a message send. That is used to build the call stack while debugging. + +MethodContext instances are JavaScript `SmalltalkMethodContext` objects defined in boot.js + +Current limitation: MethodContext instances are not created on Block evaluation. That means it's actually impossible to debug inside a Block.! + +!MethodContext methodsFor: 'accessing'! + +asString + ^self receiver class printString, ' >> ', self selector +! + +home + <return self.homeContext> +! + +printString + ^super printString, '(', self asString, ')' +! + +receiver + <return self.receiver> +! + +selector + <return smalltalk.convertSelector(self.selector)> +! + +temps + <return self.temps> ! ! diff --git a/amber/src/st/Kernel-Objects.st b/amber/src/st/Kernel-Objects.st index f9484af0a88..90d25bd2b52 100644 --- a/amber/src/st/Kernel-Objects.st +++ b/amber/src/st/Kernel-Objects.st @@ -1,7 +1,7 @@ Smalltalk current createPackage: 'Kernel-Objects' properties: #{}! nil subclass: #Object instanceVariableNames: '' - category: 'Kernel-Objects'! + package: 'Kernel-Objects'! !Object commentStamp! *Object is the root of the Smalltalk class system*. All classes in the system are subclasses of Object. @@ -41,16 +41,24 @@ Objects understand equality `#=` and identity `#==` comparison. !Object methodsFor: 'accessing'! -yourself - ^self +basicAt: aString + <return self[aString]> +! + +basicAt: aString put: anObject + <return self[aString] = anObject> +! + +basicDelete: aString + <delete self[aString]; return aString> ! class <return self.klass> ! -size - self error: 'Object not indexable' +identityHash + <return self.identityHash || (self.identityHash = smalltalk.nextId());> ! instVarAt: aSymbol @@ -65,20 +73,12 @@ instVarAt: aSymbol put: anObject <self['@' + varname] = anObject> ! -basicAt: aString - <return self[aString]> -! - -basicAt: aString put: anObject - <return self[aString] = anObject> -! - -basicDelete: aString - <delete self[aString]; return aString> +size + self error: 'Object not indexable' ! -identityHash - <return self.identityHash || (self.identityHash = smalltalk.nextId());> +yourself + ^self ! ! !Object methodsFor: 'comparing'! @@ -87,14 +87,14 @@ identityHash ^self == anObject ! -~= anObject - ^(self = anObject) = false -! - == anObject ^self identityHash = anObject identityHash ! +~= anObject + ^(self = anObject) = false +! + ~~ anObject ^(self == anObject) = false ! ! @@ -105,14 +105,6 @@ identityHash ^Association key: self value: anObject ! -asString - ^self printString -! - -asJavascript - ^self asString -! - asJSON | variables | variables := HashedCollection new. @@ -123,6 +115,14 @@ asJSON asJSONString ^JSON stringify: self asJSON +! + +asJavascript + ^self asString +! + +asString + ^self printString ! ! !Object methodsFor: 'copying'! @@ -131,50 +131,40 @@ copy ^self shallowCopy postCopy ! -shallowCopy - < +deepCopy + < var copy = self.klass._new(); for(var i in self) { if(/^@.+/.test(i)) { - copy[i] = self[i]; + copy[i] = self[i]._deepCopy(); } } return copy; > ! -deepCopy - < +postCopy +! + +shallowCopy + < var copy = self.klass._new(); for(var i in self) { if(/^@.+/.test(i)) { - copy[i] = self[i]._deepCopy(); + copy[i] = self[i]; } } return copy; > -! - -postCopy ! ! !Object methodsFor: 'error handling'! -error: aString - Error signal: aString -! - -subclassResponsibility - self error: 'This method is a responsibility of a subclass' -! - -shouldNotImplement - self error: 'This method should not be implemented in ', self class name -! - -try: aBlock catch: anotherBlock - <try{result = aBlock()} catch(e) {result = anotherBlock(e)}; - return result;> +deprecatedAPI + "Just a simple way to deprecate methods. + #deprecatedAPI is in the 'error handling' protocol even if it doesn't throw an error, + but it could in the future." + console warn: thisContext home asString, ' is deprecated!! (in ', thisContext home home asString, ')' ! doesNotUnderstand: aMessage @@ -184,15 +174,25 @@ doesNotUnderstand: aMessage signal ! +error: aString + Error signal: aString +! + halt self error: 'Halt encountered' ! -deprecatedAPI - "Just a simple way to deprecate methods. - #deprecatedAPI is in the 'error handling' protocol even if it doesn't throw an error, - but it could in the future." - console warn: thisContext home asString, ' is deprecated!! (in ', thisContext home home asString, ')' +shouldNotImplement + self error: 'This method should not be implemented in ', self class name +! + +subclassResponsibility + self error: 'This method is a responsibility of a subclass' +! + +try: aBlock catch: anotherBlock + <try{result = aBlock()} catch(e) {result = anotherBlock(e)}; + return result;> ! ! !Object methodsFor: 'initialization'! @@ -202,37 +202,41 @@ initialize !Object methodsFor: 'message handling'! -perform: aSymbol - ^self perform: aSymbol withArguments: #() -! - -perform: aSymbol withArguments: aCollection - ^self basicPerform: aSymbol asSelector withArguments: aCollection -! - basicPerform: aSymbol ^self basicPerform: aSymbol withArguments: #() ! basicPerform: aSymbol withArguments: aCollection <return self[aSymbol].apply(self, aCollection);> +! + +perform: aSymbol + ^self perform: aSymbol withArguments: #() +! + +perform: aSymbol withArguments: aCollection + ^self basicPerform: aSymbol asSelector withArguments: aCollection ! ! !Object methodsFor: 'printing'! -printString - ^'a ', self class name +log: aString block: aBlock + + | result | + console log: aString, ' time: ', (Date millisecondsToRun: [result := aBlock value]) printString. + ^result ! printNl <console.log(self)> ! -log: aString block: aBlock +printString + ^'a ', self class name +! - | result | - console log: aString, ' time: ', (Date millisecondsToRun: [result := aBlock value]) printString. - ^result +storeOn: aStream + aStream nextPutAll: self printString ! storeString @@ -240,24 +244,10 @@ storeString can be reconstructed." ^ String streamContents: [:s | self storeOn: s] -! - -storeOn: aStream - aStream nextPutAll: self printString ! ! !Object methodsFor: 'testing'! -isKindOf: aClass - ^(self isMemberOf: aClass) - ifTrue: [true] - ifFalse: [self class inheritsFrom: aClass] -! - -isMemberOf: aClass - ^self class = aClass -! - ifNil: aBlock "inlined in the Compiler" ^self @@ -278,27 +268,29 @@ ifNotNil: aBlock ifNil: anotherBlock ^aBlock value ! -isNil +isClass ^false ! -notNil - ^self isNil not +isKindOf: aClass + ^(self isMemberOf: aClass) + ifTrue: [true] + ifFalse: [self class inheritsFrom: aClass] ! -isClass - ^false +isMemberOf: aClass + ^self class = aClass ! isMetaclass ^false ! -isNumber +isNil ^false ! -isString +isNumber ^false ! @@ -306,8 +298,16 @@ isParseFailure ^false ! +isString + ^false +! + isSymbol ^false +! + +notNil + ^self isNil not ! ! !Object class methodsFor: 'initialization'! @@ -316,1264 +316,1035 @@ initialize "no op" ! ! -Object subclass: #Smalltalk +Object subclass: #Boolean instanceVariableNames: '' - category: 'Kernel-Objects'! -!Smalltalk commentStamp! -Smalltalk has only one instance, accessed with `Smalltalk current`. -It represents the global JavaScript variable `smalltalk` declared in `js/boot.js`. - -The `smalltalk` object holds all class and packages defined in the system. - -## Classes - -Classes can be accessed using the following methods: - -- `#classes` answers the full list of Smalltalk classes in the system -- `#at:` answers a specific class of `nil` - -## Packages - -Packages can be accessed using the following methods: + package: 'Kernel-Objects'! +!Boolean commentStamp! +Boolean wraps the JavaScript `Boolean()` constructor. The `true` and `false` objects are the JavaScript boolean objects. -- `#packages` answers the full list of packages -- `#packageAt:` answers a specific class of `nil` +Boolean defines the protocol for logic testing operations and conditional control structures for the logical values. +Boolean instances are weither `true` or `false`.! -__note:__ classes and packages are accessed using strings, not symbols +!Boolean methodsFor: 'comparing'! -## Parsing += aBoolean + aBoolean class = self class ifFalse: [^false]. + <return Boolean(self == true) == aBoolean> +! ! -The `#parse:` method is used to parse Smalltalk source code. -It requires the `Compiler` package and the `js/parser.js` parser file in order to work! +!Boolean methodsFor: 'controlling'! -!Smalltalk methodsFor: 'accessing'! +& aBoolean + < + if(self == true) { + return aBoolean; + } else { + return false; + } + > +! -classes - <return self.classes()> +and: aBlock + ^self = true + ifTrue: aBlock + ifFalse: [false] ! -at: aString - <return self[aString]> +ifFalse: aBlock + "inlined in the Compiler" + ^self ifTrue: [] ifFalse: aBlock ! -basicParse: aString - <return smalltalk.parser.parse(aString)> +ifFalse: aBlock ifTrue: anotherBlock + "inlined in the Compiler" + ^self ifTrue: anotherBlock ifFalse: aBlock ! -parse: aString - | result | - self try: [result := self basicParse: aString] catch: [:ex | (self parseError: ex parsing: aString) signal]. - ^result +ifTrue: aBlock + "inlined in the Compiler" + ^self ifTrue: aBlock ifFalse: [] ! -parseError: anException parsing: aString - | row col message lines badLine code | - <row = anException.line; - col = anException.column; - message = anException.message;>. - lines := aString lines. - badLine := lines at: row. - badLine := (badLine copyFrom: 1 to: col - 1), ' ===>', (badLine copyFrom: col to: badLine size). - lines at: row put: badLine. - code := String streamContents: [:s | - lines withIndexDo: [:l :i | - s nextPutAll: i asString, ': ', l, String lf]]. - ^ Error new messageText: ('Parse error on line ' , row , ' column ' , col , ' : ' , message , ' Below is code with line numbers and ===> marker inserted:' , String lf, code) +ifTrue: aBlock ifFalse: anotherBlock + "inlined in the Compiler" + < + if(self == true) { + return aBlock(); + } else { + return anotherBlock(); + } + > ! -reservedWords - "JavaScript reserved words" - <return self.reservedWords> +not + ^self = false ! -readJSObject: anObject - <return self.readJSObject(anObject)> +or: aBlock + ^self = true + ifTrue: [true] + ifFalse: aBlock ! -send: aSelector to: anObject arguments: aCollection - | selector | - selector := aSelector asString asSelector. - <self.send(anObject, selector, aCollection)> +| aBoolean + < + if(self == true) { + return true; + } else { + return aBoolean; + } + > ! ! -!Smalltalk methodsFor: 'classes'! +!Boolean methodsFor: 'converting'! -removeClass: aClass - aClass isMetaclass ifTrue: [self error: aClass asString, ' is a Metaclass and cannot be removed!!']. - aClass methodDictionary values do: [:each | - aClass removeCompiledMethod: each]. - aClass class methodDictionary values do: [:each | - aClass class removeCompiledMethod: each]. - self basicDelete: aClass name +asJSON + ^self ! ! -!Smalltalk methodsFor: 'packages'! - -packages - "Return all Package instances in the system." - - <return self.packages.all()> -! - -packageAt: packageName - <return self.packages[packageName]> -! +!Boolean methodsFor: 'copying'! -packageAt: packageName ifAbsent: aBlock - ^(self packageAt: packageName) ifNil: aBlock +deepCopy + ^self ! -removePackage: packageName - "Removes a package and all its classes." - - | pkg | - pkg := self packageAt: packageName ifAbsent: [self error: 'Missing package: ', packageName]. - pkg classes do: [:each | - self removeClass: each]. - self deletePackage: packageName -! +shallowCopy + ^self +! ! -renamePackage: packageName to: newName - "Rename a package." +!Boolean methodsFor: 'printing'! - | pkg | - pkg := self packageAt: packageName ifAbsent: [self error: 'Missing package: ', packageName]. - (self packageAt: newName) ifNotNil: [self error: 'Already exists a package called: ', newName]. - <smalltalk.packages[newName] = smalltalk.packages[packageName]>. - pkg name: newName. - self deletePackage: packageName. +printString + <return self.toString()> ! ! -!Smalltalk methodsFor: 'private'! - -createPackage: packageName - "Create and bind a new package with given name and return it." +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. - <return smalltalk.addPackage(packageName, nil)> -! +Date wraps the `Date()` JavaScript constructor, and Smalltalk date objects are JavaScript date objects.! -deletePackage: packageName - "Deletes a package by deleting its binding, but does not check if it contains classes etc. - To remove a package, use #removePackage instead." +!Date methodsFor: 'accessing'! - <delete smalltalk.packages[packageName]> +day + ^self dayOfWeek ! -createPackage: packageName properties: aDict - "Create and bind a new package with given name and return it." - - | object | - <object = {};>. - aDict keysAndValuesDo: [:key :value | - <object[key] = value>. - ]. - <return smalltalk.addPackage(packageName, object)> -! ! - -Smalltalk class instanceVariableNames: 'current'! - -!Smalltalk class methodsFor: 'accessing'! - -current - <return smalltalk> -! ! - -Object subclass: #Package - instanceVariableNames: 'commitPathJs commitPathSt' - category: 'Kernel-Objects'! -!Package commentStamp! -A Package is similar to a "class category" typically found in other Smalltalks like Pharo or Squeak. Amber does not have class categories anymore, it had in the beginning but now each class in the system knows which package it belongs to. +day: aNumber + self day: aNumber +! -A Package has a name, an Array of "requires", a comment and a Dictionary with other optional key value attributes. A Package can also be queried for its classes, but it will then resort to a reverse scan of all classes to find them. -Packages are manipulated through "Smalltalk current", like for example finding one based on a name: +dayOfMonth + <return self.getDate()> +! - Smalltalk current packageAt: 'Kernel' +dayOfMonth: aNumber + <self.setDate(aNumber)> +! -...but you can also use: +dayOfWeek + <return self.getDay() + 1> +! - Package named: 'Kernel' +dayOfWeek: aNumber + <return self.setDay(aNumber - 1)> +! -A Package differs slightly from a Monticello package which can span multiple class categories using a naming convention based on hyphenation. But just as in Monticello a Package supports "class extensions" so a Package -can define behaviors in foreign classes using a naming convention for method categories where the category starts with an asterisk and then the name of the owning package follows. This can easily be seen in for example class -String where the method category "*IDE" defines #inspectOn: which thus is a method belonging to the IDE package. +hours + <return self.getHours()> +! -You can fetch a package from the server: +hours: aNumber + <self.setHours(aNumber)> +! - Package fetch: 'Additional-Examples'! +milliseconds + <return self.getMilliseconds()> +! -!Package methodsFor: 'accessing'! +milliseconds: aNumber + <self.setMilliseconds(aNumber)> +! -name - <return self.pkgName> +minutes + <return self.getMinutes()> ! -name: aString - <self.pkgName = aString> +minutes: aNumber + <self.setMinutes(aNumber)> ! -dependencies - ^self propertyAt: 'dependencies' ifAbsent: [#()] +month + <return self.getMonth() + 1> ! -dependencies: anArray - ^self propertyAt: 'dependencies' put: anArray +month: aNumber + <self.setMonth(aNumber - 1)> ! -properties - ^Smalltalk current readJSObject: (self basicAt: 'properties') +seconds + <return self.getSeconds()> ! -properties: aDict - "We store it as a javascript object." - - | object | - <object = {};>. - aDict keysAndValuesDo: [:key :value | - <object[key] = value>. - ]. - <return self.properties = object> +seconds: aNumber + <self.setSeconds(aNumber)> ! -commitPathJs - ^ commitPathJs ifNil: [self class defaultCommitPathJs] +time + <return self.getTime()> ! -commitPathJs: aString - commitPathJs := aString +time: aNumber + <self.setTime(aNumber)> ! -commitPathSt - ^ commitPathSt ifNil: [self class defaultCommitPathSt] +year + <return self.getFullYear()> ! -commitPathSt: aString - commitPathSt := aString +year: aNumber + <self.setFullYear(aNumber)> ! ! -!Package methodsFor: 'classes'! +!Date methodsFor: 'arithmetic'! -classes - "We need to do a reverse scan." - ^Smalltalk current classes select: [:c | c package == self] ++ aDate + <return self + aDate> ! -sortedClasses - "Answer all classes in the receiver, sorted by superclass/subclasses" - - ^self classes inject: #() into: [:acc :each | - acc isEmpty - ifTrue: [acc add: each; yourself] - ifFalse: [(acc includes: each superclass) - ifTrue: [acc add: each; yourself] - ifFalse: [{each}, acc]]] +- aDate + <return self - aDate> ! ! -!Package methodsFor: 'printing'! - -printString - ^self name -! ! +!Date methodsFor: 'comparing'! -!Package methodsFor: 'private'! +< aDate + <return self < aDate> +! -propertiesAsJSON - <return JSON.stringify(self.properties)> +<= aDate + <return self <= aDate> ! -jsProperties - <return self.properties> +> aDate + <return self >> aDate> ! -jsProperties: aJSObject - <return self.properties = aJSObject> +>= aDate + <return self >>= aDate> ! ! -!Package methodsFor: 'properties'! +!Date methodsFor: 'converting'! -propertyAt: key +asDateString + <return self.toDateString()> +! - <return self.properties[key]> +asLocaleString + <return self.toLocaleString()> ! -propertyAt: key put: value - - <return self.properties[key] = value> +asMilliseconds + ^self time ! -propertyAt: key ifAbsent: block - - ^(self propertyAt: key) ifNil: [block value] -! ! - -Package class instanceVariableNames: 'defaultCommitPathJs defaultCommitPathSt'! - -!Package class methodsFor: 'commit paths'! - -defaultCommitPathJs - ^ defaultCommitPathJs ifNil: [ defaultCommitPathJs := 'js'] +asNumber + ^self asMilliseconds ! -defaultCommitPathJs: aString - defaultCommitPathJs := aString +asString + <return self.toString()> ! -defaultCommitPathSt - ^ defaultCommitPathSt ifNil: [ defaultCommitPathSt := 'st'] -! +asTimeString + <return self.toTimeString()> +! ! -defaultCommitPathSt: aString - defaultCommitPathSt := aString -! +!Date methodsFor: 'printing'! -resetCommitPaths - defaultCommitPathJs := nil. - defaultCommitPathSt := nil. +printString + ^self asString ! ! -!Package class methodsFor: 'loading-storing'! +!Date class methodsFor: 'instance creation'! -fetch: aPackageName prefix: aPrefix - jQuery getScript: (aPrefix , aPackageName , '.js') onSuccess: [ Package init: aPackageName ] +fromMilliseconds: aNumber + ^self new: aNumber ! -fetch: aPackageName - self fetch: aPackageName prefix: self defaultCommitPathJs, '/' +fromSeconds: aNumber + ^self fromMilliseconds: aNumber * 1000 ! -commitToLocalStorage: aPackageName - | key sourceCode | - key := 'smalltalk.packages.' , aPackageName. - sourceCode := Exporter new exportPackage: aPackageName. - <localStorage[key] = escape(sourceCode)> +fromString: aString + "Example: Date fromString('2011/04/15 00:00:00')" + ^self new: aString ! -init: aPackageName - (smalltalk classes select: [ :each | <each.pkg.pkgName == aPackageName> ]) - do: [ :each | <smalltalk.init(each)> ]; - do: [ :each | each initialize ] -! ! - -!Package class methodsFor: 'not yet classified'! - -named: aPackageName +millisecondsToRun: aBlock + | t | + t := Date now. + aBlock value. + ^Date now - t +! - ^Smalltalk current packageAt: aPackageName +new: anObject + <return new Date(anObject)> ! -named: aPackageName ifAbsent: aBlock +now + ^self today +! - ^Smalltalk current packageAt: aPackageName ifAbsent: aBlock +today + ^self new ! ! -Object subclass: #Number +Object subclass: #Date instanceVariableNames: '' - category: 'Kernel-Objects'! -!Number commentStamp! -Number holds the most general methods for dealing with numbers. -Number is directly mapped to JavaScript Number. + 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. -Most arithmetic methods like `#+` `#/` `#-` `#max:` are directly inlined into javascript. +Date wraps the `Date()` JavaScript constructor, and Smalltalk date objects are JavaScript date objects.! -##Enumerating -A Number can be used to evaluate a Block a fixed number of times: +!Date methodsFor: 'accessing'! - 5 timesRepeat: [Transcript show: 'This will be printed 5 times'; cr]. - - 1 to: 5 do: [:aNumber| Transcript show: aNumber asString; cr]. - - 1 to: 10 by: 2 do: [:aNumber| Transcript show: aNumber asString; cr].! +day + ^self dayOfWeek +! -!Number methodsFor: 'accessing'! +day: aNumber + self day: aNumber +! -identityHash - ^self asString, 'n' -! ! +dayOfMonth + <return self.getDate()> +! -!Number methodsFor: 'arithmetic'! +dayOfMonth: aNumber + <self.setDate(aNumber)> +! -+ aNumber - "Inlined in the Compiler" - <return self + aNumber> +dayOfWeek + <return self.getDay() + 1> ! -- aNumber - "Inlined in the Compiler" - <return self - aNumber> +dayOfWeek: aNumber + <return self.setDay(aNumber - 1)> ! -* aNumber - "Inlined in the Compiler" - <return self * aNumber> +hours + <return self.getHours()> ! -/ aNumber - "Inlined in the Compiler" - <return self / aNumber> +hours: aNumber + <self.setHours(aNumber)> ! -max: aNumber - <return Math.max(self, aNumber);> +milliseconds + <return self.getMilliseconds()> ! -min: aNumber - <return Math.min(self, aNumber);> +milliseconds: aNumber + <self.setMilliseconds(aNumber)> ! -negated - ^0 - self +minutes + <return self.getMinutes()> ! -\\ aNumber - <return self % aNumber> +minutes: aNumber + <self.setMinutes(aNumber)> ! -sqrt - <return Math.sqrt(self)> +month + <return self.getMonth() + 1> ! -squared - ^self * self -! ! +month: aNumber + <self.setMonth(aNumber - 1)> +! -!Number methodsFor: 'comparing'! +seconds + <return self.getSeconds()> +! -= aNumber - aNumber isNumber ifFalse: [^false]. - <return Number(self) == aNumber> +seconds: aNumber + <self.setSeconds(aNumber)> ! -> aNumber - "Inlined in the Compiler" - <return self >> aNumber> +time + <return self.getTime()> ! -< aNumber - "Inlined in the Compiler" - <return self < aNumber> +time: aNumber + <self.setTime(aNumber)> ! ->= aNumber - "Inlined in the Compiler" - <return self >>= aNumber> +year + <return self.getFullYear()> ! -<= aNumber - "Inlined in the Compiler" - <return self <= aNumber> +year: aNumber + <self.setFullYear(aNumber)> ! ! -!Number methodsFor: 'converting'! +!Date methodsFor: 'arithmetic'! -rounded - <return Math.round(self);> ++ aDate + <return self + aDate> ! -truncated -|result| +- aDate + <return self - aDate> +! ! - self >= 0 - ifTrue: [<result = Math.floor(self);>] - ifFalse: [<result = (Math.floor(self * (-1)) * (-1));>]. +!Date methodsFor: 'comparing'! - ^ result +< aDate + <return self < aDate> ! -to: aNumber - | array first last count | - first := self truncated. - last := aNumber truncated + 1. - count := 1. - array := Array new. - (last - first) timesRepeat: [ - array at: count put: first. - count := count + 1. - first := first + 1]. - ^array +<= aDate + <return self <= aDate> ! -asString - ^self printString +> aDate + <return self >> aDate> ! -asJavascript - ^'(', self printString, ')' +>= aDate + <return self >>= aDate> +! ! + +!Date methodsFor: 'converting'! + +asDateString + <return self.toDateString()> ! -atRandom - ^(Random new next * self) truncated + 1 +asLocaleString + <return self.toLocaleString()> ! -@ aNumber - ^Point x: self y: aNumber +asMilliseconds + ^self time ! -asPoint - ^Point x: self y: self +asNumber + ^self asMilliseconds ! -to: stop by: step - | array value pos | - value := self. - array := Array new. - pos := 1. - step = 0 ifTrue: [self error: 'step must be non-zero']. - step < 0 - ifTrue: [[ value >= stop ] whileTrue: [ - array at: pos put: value. - pos := pos + 1. - value := value + step]] - ifFalse: [[ value <= stop ] whileTrue: [ - array at: pos put: value. - pos := pos + 1. - value := value + step]]. - ^array -! - -asJSON - ^self -! ! - -!Number methodsFor: 'copying'! - -deepCopy - ^self copy -! - -copy - ^self -! ! - -!Number methodsFor: 'enumerating'! - -timesRepeat: aBlock - | integer count | - integer := self truncated. - count := 1. - [count > self] whileFalse: [ - aBlock value. - count := count + 1] -! - -to: stop do: aBlock - "Evaluate aBlock for each number from self to aNumber." - | nextValue | - nextValue := self. - [nextValue <= stop] - whileTrue: - [aBlock value: nextValue. - nextValue := nextValue + 1] +asString + <return self.toString()> ! -to: stop by: step do: aBlock - | value | - value := self. - step = 0 ifTrue: [self error: 'step must be non-zero']. - step < 0 - ifTrue: [[ value >= stop ] whileTrue: [ - aBlock value: value. - value := value + step]] - ifFalse: [[ value <= stop ] whileTrue: [ - aBlock value: value. - value := value + step]] +asTimeString + <return self.toTimeString()> ! ! -!Number methodsFor: 'printing'! +!Date methodsFor: 'printing'! printString - <return String(self)> -! - -printShowingDecimalPlaces: placesDesired - <return self.toFixed(placesDesired)> + ^self asString ! ! -!Number methodsFor: 'testing'! +!Date class methodsFor: 'instance creation'! -isNumber - ^true +fromMilliseconds: aNumber + ^self new: aNumber ! -even - ^ 0 = (self \\ 2) +fromSeconds: aNumber + ^self fromMilliseconds: aNumber * 1000 ! -odd - ^ self even not +fromString: aString + "Example: Date fromString('2011/04/15 00:00:00')" + ^self new: aString ! -negative - "Answer whether the receiver is mathematically negative." - - ^ self < 0 +millisecondsToRun: aBlock + | t | + t := Date now. + aBlock value. + ^Date now - t ! -positive - "Answer whether the receiver is positive or equal to 0. (ST-80 protocol)." - - ^ self >= 0 +new: anObject + <return new Date(anObject)> ! -isZero - ^self = 0 -! ! - -!Number methodsFor: 'timeouts/intervals'! - -clearInterval - <clearInterval(Number(self))> +now + ^self today ! -clearTimeout - <clearTimeout(Number(self))> -! ! - -!Number class methodsFor: 'instance creation'! - -pi - <return Math.PI> +today + ^self new ! ! -Object subclass: #Boolean - instanceVariableNames: '' - category: 'Kernel-Objects'! -!Boolean commentStamp! -Boolean wraps the JavaScript `Boolean()` constructor. The `true` and `false` objects are the JavaScript boolean objects. - -Boolean defines the protocol for logic testing operations and conditional control structures for the logical values. -Boolean instances are weither `true` or `false`.! +Object subclass: #JSObjectProxy + instanceVariableNames: 'jsObject' + package: 'Kernel-Objects'! +!JSObjectProxy commentStamp! +JSObjectProxy handles sending messages to JavaScript object, therefore accessing JavaScript objects from Amber is transparent. +JSOjbectProxy makes intensive use of `#doesNotUnderstand:`. -!Boolean methodsFor: 'comparing'! +## Examples -= aBoolean - aBoolean class = self class ifFalse: [^false]. - <return Boolean(self == true) == aBoolean> -! ! +JSObjectProxy objects are instanciated by Amber when a Smalltalk message is sent to a JavaScript object. -!Boolean methodsFor: 'controlling'! + window alert: 'hello world'. + window inspect. + (window jQuery: 'body') append: 'hello world' -ifTrue: aBlock - "inlined in the Compiler" - ^self ifTrue: aBlock ifFalse: [] -! +Smalltalk messages sends are converted to JavaScript function calls or object property access _(in this order)_. If n one of them match, a `MessageNotUnderstood` error will be thrown. -ifFalse: aBlock - "inlined in the Compiler" - ^self ifTrue: [] ifFalse: aBlock -! +## Message conversion rules -ifFalse: aBlock ifTrue: anotherBlock - "inlined in the Compiler" - ^self ifTrue: anotherBlock ifFalse: aBlock -! +- `someUser name` becomes `someUser.name` +- `someUser name: 'John'` becomes `someUser name = "John"` +- `console log: 'hello world'` becomes `console.log('hello world')` +- `(window jQuery: 'foo') css: 'background' color: 'red'` becomes `window.jQuery('foo').css('background', 'red')` -ifTrue: aBlock ifFalse: anotherBlock - "inlined in the Compiler" - < - if(self == true) { - return aBlock(); - } else { - return anotherBlock(); - } - > -! +__Note:__ For keyword-based messages, only the first keyword is kept: `window foo: 1 bar: 2` is equivalent to `window foo: 1 baz: 2`.! -and: aBlock - ^self = true - ifTrue: aBlock - ifFalse: [false] -! +!JSObjectProxy methodsFor: 'accessing'! -or: aBlock - ^self = true - ifTrue: [true] - ifFalse: aBlock +at: aSymbol + | attr | + attr := aSymbol asString. + <return self['@jsObject'][attr]> ! -not - ^self = false +at: aSymbol put: anObject + | attr | + attr := aSymbol asString. + <self['@jsObject'][attr] = anObject> ! -& aBoolean - < - if(self == true) { - return aBoolean; - } else { - return false; - } - > +jsObject + ^jsObject ! -| aBoolean - < - if(self == true) { - return true; - } else { - return aBoolean; - } - > +jsObject: aJSObject + jsObject := aJSObject ! ! -!Boolean methodsFor: 'converting'! - -asJSON - ^self -! ! +!JSObjectProxy methodsFor: 'proxy'! -!Boolean methodsFor: 'copying'! +doesNotUnderstand: aMessage + | obj selector jsSelector arguments | + obj := self jsObject. + selector := aMessage selector. + jsSelector := selector asJavaScriptSelector. + arguments := aMessage arguments. + <if(obj[jsSelector] !!= undefined) {return smalltalk.send(obj, jsSelector, arguments)}>. + super doesNotUnderstand: aMessage +! -shallowCopy - ^self +inspectOn: anInspector + | variables | + variables := Dictionary new. + variables at: '#self' put: self jsObject. + anInspector setLabel: self printString. + <for(var i in self['@jsObject']) { + variables._at_put_(i, self['@jsObject'][i]); + }>. + anInspector setVariables: variables ! -deepCopy - ^self +printString + ^self jsObject toString ! ! -!Boolean methodsFor: 'printing'! +!JSObjectProxy class methodsFor: 'instance creation'! -printString - <return self.toString()> +on: aJSObject + ^self new + jsObject: aJSObject; + yourself ! ! -Object subclass: #Date +Object subclass: #Number instanceVariableNames: '' - category: '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'! - -year - <return self.getFullYear()> -! - -month - <return self.getMonth() + 1> -! - -month: aNumber - <self.setMonth(aNumber - 1)> -! - -day - ^self dayOfWeek -! - -dayOfWeek - <return self.getDay() + 1> -! - -dayOfWeek: aNumber - <return self.setDay(aNumber - 1)> -! - -day: aNumber - self day: aNumber -! - -year: aNumber - <self.setFullYear(aNumber)> -! + package: 'Kernel-Objects'! +!Number commentStamp! +Number holds the most general methods for dealing with numbers. +Number is directly mapped to JavaScript Number. -dayOfMonth - <return self.getDate()> -! +Most arithmetic methods like `#+` `#/` `#-` `#max:` are directly inlined into javascript. -dayOfMonth: aNumber - <self.setDate(aNumber)> -! +##Enumerating +A Number can be used to evaluate a Block a fixed number of times: -time - <return self.getTime()> -! + 5 timesRepeat: [Transcript show: 'This will be printed 5 times'; cr]. + + 1 to: 5 do: [:aNumber| Transcript show: aNumber asString; cr]. + + 1 to: 10 by: 2 do: [:aNumber| Transcript show: aNumber asString; cr].! -time: aNumber - <self.setTime(aNumber)> -! +!Number methodsFor: 'accessing'! -hours: aNumber - <self.setHours(aNumber)> -! +identityHash + ^self asString, 'n' +! ! -minutes: aNumber - <self.setMinutes(aNumber)> -! +!Number methodsFor: 'arithmetic'! -seconds: aNumber - <self.setSeconds(aNumber)> +* aNumber + "Inlined in the Compiler" + <return self * aNumber> ! -milliseconds: aNumber - <self.setMilliseconds(aNumber)> ++ aNumber + "Inlined in the Compiler" + <return self + aNumber> ! -hours - <return self.getHours()> +- aNumber + "Inlined in the Compiler" + <return self - aNumber> ! -minutes - <return self.getMinutes()> +/ aNumber + "Inlined in the Compiler" + <return self / aNumber> ! -seconds - <return self.getSeconds()> +\\ aNumber + <return self % aNumber> ! -milliseconds - <return self.getMilliseconds()> -! ! - -!Date methodsFor: 'arithmetic'! - -- aDate - <return self - aDate> +max: aNumber + <return Math.max(self, aNumber);> ! -+ aDate - <return self + aDate> -! ! - -!Date methodsFor: 'comparing'! - -< aDate - <return self < aDate> +min: aNumber + <return Math.min(self, aNumber);> ! -> aDate - <return self >> aDate> +negated + ^0 - self ! -<= aDate - <return self <= aDate> +sqrt + <return Math.sqrt(self)> ! ->= aDate - <return self >>= aDate> +squared + ^self * self ! ! -!Date methodsFor: 'converting'! - -asString - <return self.toString()> -! +!Number methodsFor: 'comparing'! -asMilliseconds - ^self time +< aNumber + "Inlined in the Compiler" + <return self < aNumber> ! -asDateString - <return self.toDateString()> +<= aNumber + "Inlined in the Compiler" + <return self <= aNumber> ! -asTimeString - <return self.toTimeString()> += aNumber + aNumber isNumber ifFalse: [^false]. + <return Number(self) == aNumber> ! -asLocaleString - <return self.toLocaleString()> +> aNumber + "Inlined in the Compiler" + <return self >> aNumber> ! -asNumber - ^self asMilliseconds +>= aNumber + "Inlined in the Compiler" + <return self >>= aNumber> ! ! -!Date methodsFor: 'printing'! +!Number methodsFor: 'converting'! -printString - ^self asString -! ! +@ aNumber + ^Point x: self y: aNumber +! -!Date class methodsFor: 'instance creation'! +asJSON + ^self +! -new: anObject - <return new Date(anObject)> +asJavascript + ^'(', self printString, ')' ! -fromString: aString - "Example: Date fromString('2011/04/15 00:00:00')" - ^self new: aString +asPoint + ^Point x: self y: self ! -fromSeconds: aNumber - ^self fromMilliseconds: aNumber * 1000 +asString + ^self printString ! -fromMilliseconds: aNumber - ^self new: aNumber +atRandom + ^(Random new next * self) truncated + 1 ! -today - ^self new +rounded + <return Math.round(self);> ! -now - ^self today +to: aNumber + | array first last count | + first := self truncated. + last := aNumber truncated + 1. + count := 1. + array := Array new. + (last - first) timesRepeat: [ + array at: count put: first. + count := count + 1. + first := first + 1]. + ^array ! -millisecondsToRun: aBlock - | t | - t := Date now. - aBlock value. - ^Date now - t -! ! +to: stop by: step + | array value pos | + value := self. + array := Array new. + pos := 1. + step = 0 ifTrue: [self error: 'step must be non-zero']. + step < 0 + ifTrue: [[ value >= stop ] whileTrue: [ + array at: pos put: value. + pos := pos + 1. + value := value + step]] + ifFalse: [[ value <= stop ] whileTrue: [ + array at: pos put: value. + pos := pos + 1. + value := value + step]]. + ^array +! -Object subclass: #UndefinedObject - instanceVariableNames: '' - category: 'Kernel-Objects'! -!UndefinedObject commentStamp! -UndefinedObject describes the behavior of its sole instance, `nil`. `nil` represents a prior value for variables that have not been initialized, or for results which are meaningless. +truncated +|result| -`nil` is the Smalltalk representation of the `undefined` JavaScript object.! + self >= 0 + ifTrue: [<result = Math.floor(self);>] + ifFalse: [<result = (Math.floor(self * (-1)) * (-1));>]. -!UndefinedObject methodsFor: 'class creation'! + ^ result +! ! -subclass: aString instanceVariableNames: anotherString - ^self subclass: aString instanceVariableNames: anotherString package: nil -! +!Number methodsFor: 'copying'! -subclass: aString instanceVariableNames: aString2 category: aString3 - "Kept for compatibility." - self deprecatedAPI. - ^self subclass: aString instanceVariableNames: aString2 package: aString3 +copy + ^self ! -subclass: aString instanceVariableNames: aString2 package: aString3 - ^ClassBuilder new - superclass: self subclass: aString instanceVariableNames: aString2 package: aString3 +deepCopy + ^self copy ! ! -!UndefinedObject methodsFor: 'converting'! - -asJSON - ^null -! ! +!Number methodsFor: 'enumerating'! -!UndefinedObject methodsFor: 'copying'! +timesRepeat: aBlock + | integer count | + integer := self truncated. + count := 1. + [count > self] whileFalse: [ + aBlock value. + count := count + 1] +! -shallowCopy - ^self +to: stop by: step do: aBlock + | value | + value := self. + step = 0 ifTrue: [self error: 'step must be non-zero']. + step < 0 + ifTrue: [[ value >= stop ] whileTrue: [ + aBlock value: value. + value := value + step]] + ifFalse: [[ value <= stop ] whileTrue: [ + aBlock value: value. + value := value + step]] ! -deepCopy - ^self +to: stop do: aBlock + "Evaluate aBlock for each number from self to aNumber." + | nextValue | + nextValue := self. + [nextValue <= stop] + whileTrue: + [aBlock value: nextValue. + nextValue := nextValue + 1] ! ! -!UndefinedObject methodsFor: 'printing'! +!Number methodsFor: 'printing'! + +printShowingDecimalPlaces: placesDesired + <return self.toFixed(placesDesired)> +! printString - ^'nil' + <return String(self)> ! ! -!UndefinedObject methodsFor: 'testing'! +!Number methodsFor: 'testing'! -ifNil: aBlock - "inlined in the Compiler" - ^self ifNil: aBlock ifNotNil: [] +even + ^ 0 = (self \\ 2) ! -ifNotNil: aBlock - "inlined in the Compiler" - ^self +isNumber + ^true ! -ifNil: aBlock ifNotNil: anotherBlock - "inlined in the Compiler" - ^aBlock value +isZero + ^self = 0 ! -ifNotNil: aBlock ifNil: anotherBlock - "inlined in the Compiler" - ^anotherBlock value -! +negative + "Answer whether the receiver is mathematically negative." -isNil - ^true + ^ self < 0 ! -notNil - ^false -! ! +odd + ^ self even not +! -!UndefinedObject class methodsFor: 'instance creation'! +positive + "Answer whether the receiver is positive or equal to 0. (ST-80 protocol)." -new - self error: 'You cannot create new instances of UndefinedObject. Use nil' + ^ self >= 0 ! ! -Object subclass: #Date - instanceVariableNames: '' - category: '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. +!Number methodsFor: 'timeouts/intervals'! -Date wraps the `Date()` JavaScript constructor, and Smalltalk date objects are JavaScript date objects.! +clearInterval + <clearInterval(Number(self))> +! -!Date methodsFor: 'accessing'! +clearTimeout + <clearTimeout(Number(self))> +! ! -year - <return self.getFullYear()> -! +!Number class methodsFor: 'instance creation'! -month - <return self.getMonth() + 1> -! +pi + <return Math.PI> +! ! -month: aNumber - <self.setMonth(aNumber - 1)> -! +Object subclass: #Package + instanceVariableNames: 'commitPathJs commitPathSt' + package: 'Kernel-Objects'! +!Package commentStamp! +A Package is similar to a "class category" typically found in other Smalltalks like Pharo or Squeak. Amber does not have class categories anymore, it had in the beginning but now each class in the system knows which package it belongs to. + +A Package has a name, an Array of "requires", a comment and a Dictionary with other optional key value attributes. A Package can also be queried for its classes, but it will then resort to a reverse scan of all classes to find them. +Packages are manipulated through "Smalltalk current", like for example finding one based on a name: -day - ^self dayOfWeek -! + Smalltalk current packageAt: 'Kernel' -dayOfWeek - <return self.getDay() + 1> -! +...but you can also use: -dayOfWeek: aNumber - <return self.setDay(aNumber - 1)> -! + Package named: 'Kernel' -day: aNumber - self day: aNumber -! +A Package differs slightly from a Monticello package which can span multiple class categories using a naming convention based on hyphenation. But just as in Monticello a Package supports "class extensions" so a Package +can define behaviors in foreign classes using a naming convention for method categories where the category starts with an asterisk and then the name of the owning package follows. This can easily be seen in for example class +String where the method category "*IDE" defines #inspectOn: which thus is a method belonging to the IDE package. -year: aNumber - <self.setFullYear(aNumber)> -! +You can fetch a package from the server: -dayOfMonth - <return self.getDate()> -! + Package fetch: 'Additional-Examples'! -dayOfMonth: aNumber - <self.setDate(aNumber)> -! +!Package methodsFor: 'accessing'! -time - <return self.getTime()> +commitPathJs + ^ commitPathJs ifNil: [self class defaultCommitPathJs] ! -time: aNumber - <self.setTime(aNumber)> +commitPathJs: aString + commitPathJs := aString ! -hours: aNumber - <self.setHours(aNumber)> +commitPathSt + ^ commitPathSt ifNil: [self class defaultCommitPathSt] ! -minutes: aNumber - <self.setMinutes(aNumber)> +commitPathSt: aString + commitPathSt := aString ! -seconds: aNumber - <self.setSeconds(aNumber)> +dependencies + ^self propertyAt: 'dependencies' ifAbsent: [#()] ! -milliseconds: aNumber - <self.setMilliseconds(aNumber)> +dependencies: anArray + ^self propertyAt: 'dependencies' put: anArray ! -hours - <return self.getHours()> +name + <return self.pkgName> ! -minutes - <return self.getMinutes()> +name: aString + <self.pkgName = aString> ! -seconds - <return self.getSeconds()> +properties + ^Smalltalk current readJSObject: (self basicAt: 'properties') ! -milliseconds - <return self.getMilliseconds()> +properties: aDict + "We store it as a javascript object." + + | object | + <object = {};>. + aDict keysAndValuesDo: [:key :value | + <object[key] = value>. + ]. + <return self.properties = object> ! ! -!Date methodsFor: 'arithmetic'! +!Package methodsFor: 'classes'! -- aDate - <return self - aDate> +classes + "We need to do a reverse scan." + ^Smalltalk current classes select: [:c | c package == self] ! -+ aDate - <return self + aDate> +sortedClasses + "Answer all classes in the receiver, sorted by superclass/subclasses and by class name for common subclasses (Issue #143)" + + ^self class sortedClasses: self classes ! ! -!Date methodsFor: 'comparing'! +!Package methodsFor: 'printing'! -< aDate - <return self < aDate> -! +printString + ^self name +! ! -> aDate - <return self >> aDate> +!Package methodsFor: 'private'! + +jsProperties + <return self.properties> ! -<= aDate - <return self <= aDate> +jsProperties: aJSObject + <return self.properties = aJSObject> ! ->= aDate - <return self >>= aDate> +propertiesAsJSON + <return JSON.stringify(self.properties)> ! ! -!Date methodsFor: 'converting'! - -asString - <return self.toString()> -! +!Package methodsFor: 'properties'! -asMilliseconds - ^self time -! +propertyAt: key -asDateString - <return self.toDateString()> + <return self.properties[key]> ! -asTimeString - <return self.toTimeString()> -! +propertyAt: key ifAbsent: block -asLocaleString - <return self.toLocaleString()> + ^(self propertyAt: key) ifNil: [block value] ! -asNumber - ^self asMilliseconds -! ! - -!Date methodsFor: 'printing'! +propertyAt: key put: value -printString - ^self asString + <return self.properties[key] = value> ! ! -!Date class methodsFor: 'instance creation'! - -new: anObject - <return new Date(anObject)> -! +Package class instanceVariableNames: 'defaultCommitPathJs defaultCommitPathSt'! -fromString: aString - "Example: Date fromString('2011/04/15 00:00:00')" - ^self new: aString -! +!Package class methodsFor: 'commit paths'! -fromSeconds: aNumber - ^self fromMilliseconds: aNumber * 1000 +defaultCommitPathJs + ^ defaultCommitPathJs ifNil: [ defaultCommitPathJs := 'js'] ! -fromMilliseconds: aNumber - ^self new: aNumber +defaultCommitPathJs: aString + defaultCommitPathJs := aString ! -today - ^self new +defaultCommitPathSt + ^ defaultCommitPathSt ifNil: [ defaultCommitPathSt := 'st'] ! -now - ^self today +defaultCommitPathSt: aString + defaultCommitPathSt := aString ! -millisecondsToRun: aBlock - | t | - t := Date now. - aBlock value. - ^Date now - t +resetCommitPaths + defaultCommitPathJs := nil. + defaultCommitPathSt := nil. ! ! -Object subclass: #JSObjectProxy - instanceVariableNames: 'jsObject' - category: 'Kernel-Objects'! -!JSObjectProxy commentStamp! -JSObjectProxy handles sending messages to JavaScript object, therefore accessing JavaScript objects from Amber is transparent. -JSOjbectProxy makes intensive use of `#doesNotUnderstand:`. - -## Examples - -JSObjectProxy objects are instanciated by Amber when a Smalltalk message is sent to a JavaScript object. - - window alert: 'hello world'. - window inspect. - (window jQuery: 'body') append: 'hello world' - -Smalltalk messages sends are converted to JavaScript function calls or object property access _(in this order)_. If n one of them match, a `MessageNotUnderstood` error will be thrown. - -## Message conversion rules - -- `someUser name` becomes `someUser.name` -- `someUser name: 'John'` becomes `someUser name = "John"` -- `console log: 'hello world'` becomes `console.log('hello world')` -- `(window jQuery: 'foo') css: 'background' color: 'red'` becomes `window.jQuery('foo').css('background', 'red')` - -__Note:__ For keyword-based messages, only the first keyword is kept: `window foo: 1 bar: 2` is equivalent to `window foo: 1 baz: 2`.! - -!JSObjectProxy methodsFor: 'accessing'! +!Package class methodsFor: 'loading-storing'! -jsObject: aJSObject - jsObject := aJSObject +commitToLocalStorage: aPackageName + | key sourceCode | + key := 'smalltalk.packages.' , aPackageName. + sourceCode := Exporter new exportPackage: aPackageName. + <localStorage[key] = escape(sourceCode)> ! -jsObject - ^jsObject +fetch: aPackageName + self fetch: aPackageName prefix: self defaultCommitPathJs, '/' ! -at: aSymbol - | attr | - attr := aSymbol asString. - <return self['@jsObject'][attr]> +fetch: aPackageName prefix: aPrefix + jQuery getScript: (aPrefix , aPackageName , '.js') onSuccess: [ Package init: aPackageName ] ! -at: aSymbol put: anObject - | attr | - attr := aSymbol asString. - <self['@jsObject'][attr] = anObject> +init: aPackageName + (smalltalk classes select: [ :each | <each.pkg.pkgName == aPackageName> ]) + do: [ :each | <smalltalk.init(each)> ]; + do: [ :each | each initialize ] ! ! -!JSObjectProxy methodsFor: 'proxy'! +!Package class methodsFor: 'not yet classified'! -printString - ^self jsObject toString -! +named: aPackageName -inspectOn: anInspector - | variables | - variables := Dictionary new. - variables at: '#self' put: self jsObject. - anInspector setLabel: self printString. - <for(var i in self['@jsObject']) { - variables._at_put_(i, self['@jsObject'][i]); - }>. - anInspector setVariables: variables + ^Smalltalk current packageAt: aPackageName ! -doesNotUnderstand: aMessage - | obj selector jsSelector arguments | - obj := self jsObject. - selector := aMessage selector. - jsSelector := selector asJavaScriptSelector. - arguments := aMessage arguments. - <if(obj[jsSelector] !!= undefined) {return smalltalk.send(obj, jsSelector, arguments)}>. - super doesNotUnderstand: aMessage +named: aPackageName ifAbsent: aBlock + + ^Smalltalk current packageAt: aPackageName ifAbsent: aBlock ! ! -!JSObjectProxy class methodsFor: 'instance creation'! +!Package class methodsFor: 'sorting'! + +sortedClasses: classes + "Answer classes, sorted by superclass/subclasses and by class name for common subclasses (Issue #143)" -on: aJSObject - ^self new - jsObject: aJSObject; - yourself + | children others nodes expandedClasses | + children := #(). + others := #(). + classes do: [:each | + (classes includes: each superclass) + ifFalse: [children add: each] + ifTrue: [others add: each]]. + nodes := children collect: [:each | + ClassSorterNode on: each classes: others level: 0]. + nodes := nodes sorted: [:a :b | a theClass name <= b theClass name ]. + expandedClasses := Array new. + nodes do: [:aNode | + aNode traverseClassesWith: expandedClasses]. + ^expandedClasses ! ! Object subclass: #Point instanceVariableNames: 'x y' - category: 'Kernel-Objects'! + package: 'Kernel-Objects'! !Point commentStamp! A `Point` represents an x-y pair of numbers usually designating a geometric coordinate. Points are traditionally created using the binary `#@` message to a number: @@ -1600,16 +1371,16 @@ x ^x ! +x: aNumber + x := aNumber +! + y ^y ! y: aNumber y := aNumber -! - -x: aNumber - x := aNumber ! ! !Point methodsFor: 'arithmetic'! @@ -1673,7 +1444,7 @@ x: aNumber y: anotherNumber Object subclass: #Random instanceVariableNames: '' - category: 'Kernel-Objects'! + package: 'Kernel-Objects'! !Random commentStamp! `Random` is a random number generator and is implemented as a trivial wrapper around javascript `Math.random()` and is used like this: @@ -1711,3 +1482,248 @@ next: anInteger ^(1 to: anInteger) collect: [:each | self next] ! ! +Object subclass: #Smalltalk + instanceVariableNames: '' + package: 'Kernel-Objects'! +!Smalltalk commentStamp! +Smalltalk has only one instance, accessed with `Smalltalk current`. +It represents the global JavaScript variable `smalltalk` declared in `js/boot.js`. + +The `smalltalk` object holds all class and packages defined in the system. + +## Classes + +Classes can be accessed using the following methods: + +- `#classes` answers the full list of Smalltalk classes in the system +- `#at:` answers a specific class of `nil` + +## Packages + +Packages can be accessed using the following methods: + +- `#packages` answers the full list of packages +- `#packageAt:` answers a specific class of `nil` + +__note:__ classes and packages are accessed using strings, not symbols + +## Parsing + +The `#parse:` method is used to parse Smalltalk source code. +It requires the `Compiler` package and the `js/parser.js` parser file in order to work! + +!Smalltalk methodsFor: 'accessing'! + +at: aString + <return self[aString]> +! + +basicParse: aString + <return smalltalk.parser.parse(aString)> +! + +classes + <return self.classes()> +! + +parse: aString + | result | + self try: [result := self basicParse: aString] catch: [:ex | (self parseError: ex parsing: aString) signal]. + ^result +! + +parseError: anException parsing: aString + | row col message lines badLine code | + <row = anException.line; + col = anException.column; + message = anException.message;>. + lines := aString lines. + badLine := lines at: row. + badLine := (badLine copyFrom: 1 to: col - 1), ' ===>', (badLine copyFrom: col to: badLine size). + lines at: row put: badLine. + code := String streamContents: [:s | + lines withIndexDo: [:l :i | + s nextPutAll: i asString, ': ', l, String lf]]. + ^ Error new messageText: ('Parse error on line ' , row , ' column ' , col , ' : ' , message , ' Below is code with line numbers and ===> marker inserted:' , String lf, code) +! + +readJSObject: anObject + <return self.readJSObject(anObject)> +! + +reservedWords + "JavaScript reserved words" + <return self.reservedWords> +! + +send: aSelector to: anObject arguments: aCollection + | selector | + selector := aSelector asString asSelector. + <self.send(anObject, selector, aCollection)> +! ! + +!Smalltalk methodsFor: 'classes'! + +removeClass: aClass + aClass isMetaclass ifTrue: [self error: aClass asString, ' is a Metaclass and cannot be removed!!']. + aClass methodDictionary values do: [:each | + aClass removeCompiledMethod: each]. + aClass class methodDictionary values do: [:each | + aClass class removeCompiledMethod: each]. + self basicDelete: aClass name +! ! + +!Smalltalk methodsFor: 'packages'! + +packageAt: packageName + <return self.packages[packageName]> +! + +packageAt: packageName ifAbsent: aBlock + ^(self packageAt: packageName) ifNil: aBlock +! + +packages + "Return all Package instances in the system." + + <return self.packages.all()> +! + +removePackage: packageName + "Removes a package and all its classes." + + | pkg | + pkg := self packageAt: packageName ifAbsent: [self error: 'Missing package: ', packageName]. + pkg classes do: [:each | + self removeClass: each]. + self deletePackage: packageName +! + +renamePackage: packageName to: newName + "Rename a package." + + | pkg | + pkg := self packageAt: packageName ifAbsent: [self error: 'Missing package: ', packageName]. + (self packageAt: newName) ifNotNil: [self error: 'Already exists a package called: ', newName]. + <smalltalk.packages[newName] = smalltalk.packages[packageName]>. + pkg name: newName. + self deletePackage: packageName. +! ! + +!Smalltalk methodsFor: 'private'! + +createPackage: packageName + "Create and bind a new package with given name and return it." + + <return smalltalk.addPackage(packageName, nil)> +! + +createPackage: packageName properties: aDict + "Create and bind a new package with given name and return it." + + | object | + <object = {};>. + aDict keysAndValuesDo: [:key :value | + <object[key] = value>. + ]. + <return smalltalk.addPackage(packageName, object)> +! + +deletePackage: packageName + "Deletes a package by deleting its binding, but does not check if it contains classes etc. + To remove a package, use #removePackage instead." + + <delete smalltalk.packages[packageName]> +! ! + +Smalltalk class instanceVariableNames: 'current'! + +!Smalltalk class methodsFor: 'accessing'! + +current + <return smalltalk> +! ! + +Object subclass: #UndefinedObject + instanceVariableNames: '' + package: 'Kernel-Objects'! +!UndefinedObject commentStamp! +UndefinedObject describes the behavior of its sole instance, `nil`. `nil` represents a prior value for variables that have not been initialized, or for results which are meaningless. + +`nil` is the Smalltalk representation of the `undefined` JavaScript object.! + +!UndefinedObject methodsFor: 'class creation'! + +subclass: aString instanceVariableNames: anotherString + ^self subclass: aString instanceVariableNames: anotherString package: nil +! + +subclass: aString instanceVariableNames: aString2 category: aString3 + "Kept for compatibility." + self deprecatedAPI. + ^self subclass: aString instanceVariableNames: aString2 package: aString3 +! + +subclass: aString instanceVariableNames: aString2 package: aString3 + ^ClassBuilder new + superclass: self subclass: aString instanceVariableNames: aString2 package: aString3 +! ! + +!UndefinedObject methodsFor: 'converting'! + +asJSON + ^null +! ! + +!UndefinedObject methodsFor: 'copying'! + +deepCopy + ^self +! + +shallowCopy + ^self +! ! + +!UndefinedObject methodsFor: 'printing'! + +printString + ^'nil' +! ! + +!UndefinedObject methodsFor: 'testing'! + +ifNil: aBlock + "inlined in the Compiler" + ^self ifNil: aBlock ifNotNil: [] +! + +ifNil: aBlock ifNotNil: anotherBlock + "inlined in the Compiler" + ^aBlock value +! + +ifNotNil: aBlock + "inlined in the Compiler" + ^self +! + +ifNotNil: aBlock ifNil: anotherBlock + "inlined in the Compiler" + ^anotherBlock value +! + +isNil + ^true +! + +notNil + ^false +! ! + +!UndefinedObject class methodsFor: 'instance creation'! + +new + self error: 'You cannot create new instances of UndefinedObject. Use nil' +! ! + diff --git a/amber/src/st/Kernel-Tests.st b/amber/src/st/Kernel-Tests.st index 79513cd141e..0e49e6978bc 100644 --- a/amber/src/st/Kernel-Tests.st +++ b/amber/src/st/Kernel-Tests.st @@ -1,7 +1,7 @@ Smalltalk current createPackage: 'Kernel-Tests' properties: #{}! TestCase subclass: #ArrayTest instanceVariableNames: '' - category: 'Kernel-Tests'! + package: 'Kernel-Tests'! !ArrayTest methodsFor: 'testing'! @@ -13,84 +13,193 @@ testIfEmpty self assert: 'zork' equals: ( '' ifEmpty: ['zork'] ) ! ! -TestCase subclass: #StringTest +TestCase subclass: #BlockClosureTest instanceVariableNames: '' - category: 'Kernel-Tests'! + package: 'Kernel-Tests'! -!StringTest methodsFor: 'tests'! +!BlockClosureTest methodsFor: 'tests'! -testJoin - self assert: 'hello,world' equals: (',' join: #('hello' 'world')) +testCompiledSource + self assert: ([1+1] compiledSource includesSubString: 'function') ! -testStreamContents - self - assert: 'hello world' - equals: (String streamContents: [:aStream| aStream - nextPutAll: 'hello'; space; - nextPutAll: 'world']) +testEnsure + self assert: ([Error new] ensure: [true]) ! -testIncludesSubString - self assert: ('amber' includesSubString: 'ber'). - self deny: ('amber' includesSubString: 'zork'). +testNumArgs + self assert: [] numArgs equals: 0. + self assert: [:a :b | ] numArgs equals: 2 +! + +testOnDo + self assert: ([Error new signal] on: Error do: [:ex | true]) +! + +testValue + self assert: ([1+1] value) equals: 2. + self assert: ([:x | x +1] value: 2) equals: 3. + self assert: ([:x :y | x*y] value: 2 value: 4) equals: 8. + + "Arguments are optional in Amber. This isn't ANSI compliant." + + self assert: ([:a :b :c | 1] value) equals: 1 +! + +testValueWithPossibleArguments + self assert: ([1] valueWithPossibleArguments: #(3 4)) equals: 1. + self assert: ([:a | a + 4] valueWithPossibleArguments: #(3 4)) equals: 7. + self assert: ([:a :b | a + b] valueWithPossibleArguments: #(3 4 5)) equals: 7. +! + +testWhileFalse + | i | + i := 0. + [i > 5] whileFalse: [i := i + 1]. + self assert: i equals: 6. + + i := 0. + [i := i + 1. i > 5] whileFalse. + self assert: i equals: 6 ! +testWhileTrue + | i | + i := 0. + [i < 5] whileTrue: [i := i + 1]. + self assert: i equals: 5. + + i := 0. + [i := i + 1. i < 5] whileTrue. + self assert: i equals: 5 +! ! + +TestCase subclass: #BooleanTest + instanceVariableNames: '' + package: 'Kernel-Tests'! + +!BooleanTest methodsFor: 'tests'! + testEquality - self assert: 'hello' = 'hello'. - self deny: 'hello' = 'world'. + "We're on top of JS...just be sure to check the basics!!" - self assert: 'hello' = 'hello' yourself. - self assert: 'hello' yourself = 'hello'. + self deny: 0 = false. + self deny: false = 0. + self deny: '' = false. + self deny: false = ''. - "test JS falsy value" - self deny: '' = 0 + self assert: true = true. + self deny: false = true. + self deny: true = false. + self assert: false = false. + + "JS may do some type coercing after sending a message" + self assert: true yourself = true. + self assert: true yourself = true yourself ! -testCopyWithoutAll - self - assert: 'hello world' - equals: ('*hello* *world*' copyWithoutAll: '*') +testIfTrueIfFalse + + self assert: (true ifTrue: ['alternative block']) = 'alternative block'. + self assert: (true ifFalse: ['alternative block']) = nil. + + self assert: (false ifTrue: ['alternative block']) = nil. + self assert: (false ifFalse: ['alternative block']) = 'alternative block'. + + self assert: (false ifTrue: ['alternative block'] ifFalse: ['alternative block2']) = 'alternative block2'. + self assert: (false ifFalse: ['alternative block'] ifTrue: ['alternative block2']) = 'alternative block'. + + self assert: (true ifTrue: ['alternative block'] ifFalse: ['alternative block2']) = 'alternative block'. + self assert: (true ifFalse: ['alternative block'] ifTrue: ['alternative block2']) = 'alternative block2'. ! -testAt - self assert: ('hello' at: 1) = 'h'. - self assert: ('hello' at: 5) = 'o'. - self assert: ('hello' at: 6 ifAbsent: [nil]) = nil +testLogic + + "Trivial logic table" + self assert: (true & true); deny: (true & false); deny: (false & true); deny: (false & false). + self assert: (true | true); assert: (true | false); assert: (false | true); deny: (false | false). + "Checking that expressions work fine too" + self assert: (true & (1 > 0)); deny: ((1 > 0) & false); deny: ((1 > 0) & (1 > 2)). + self assert: (false | (1 > 0)); assert: ((1 > 0) | false); assert: ((1 > 0) | (1 > 2)) ! -testAtPut - "String instances are read-only" - self should: ['hello' at: 1 put: 'a'] raise: Error +testLogicKeywords + + "Trivial logic table" + self + assert: (true and: [ true]); + deny: (true and: [ false ]); + deny: (false and: [ true ]); + deny: (false and: [ false ]). + self + assert: (true or: [ true ]); + assert: (true or: [ false ]); + assert: (false or: [ true ]); + deny: (false or: [ false ]). + + "Checking that expressions work fine too" + self + assert: (true and: [ 1 > 0 ]); + deny: ((1 > 0) and: [ false ]); + deny: ((1 > 0) and: [ 1 > 2 ]). + self + assert: (false or: [ 1 > 0 ]); + assert: ((1 > 0) or: [ false ]); + assert: ((1 > 0) or: [ 1 > 2 ]) +! ! + +TestCase subclass: #ClassBuilderTest + instanceVariableNames: 'builder theClass' + package: 'Kernel-Tests'! + +!ClassBuilderTest methodsFor: 'running'! + +setUp + builder := ClassBuilder new ! -testSize - self assert: 'smalltalk' size equals: 9. - self assert: '' size equals: 0 +tearDown + theClass ifNotNil: [Smalltalk current removeClass: theClass. theClass := nil] ! -testAddRemove - self should: ['hello' add: 'a'] raise: Error. - self should: ['hello' remove: 'h'] raise: Error +testClassCopy + theClass := builder copyClass: ObjectMock named: 'ObjectMock2'. + self assert: theClass superclass == ObjectMock superclass. + self assert: theClass instanceVariableNames == ObjectMock instanceVariableNames. + self assert: theClass name equals: 'ObjectMock2'. + self assert: theClass package == ObjectMock package. + self assert: theClass methodDictionary keys equals: ObjectMock methodDictionary keys ! -testAsArray - self assert: 'hello' asArray = #('h' 'e' 'l' 'l' 'o'). +testInstanceVariableNames + self assert: (builder instanceVariableNamesFor: ' hello world ') equals: #('hello' 'world') ! ! TestCase subclass: #DictionaryTest instanceVariableNames: '' - category: 'Kernel-Tests'! + package: 'Kernel-Tests'! !DictionaryTest methodsFor: 'tests'! -testPrintString - self - assert: 'a Dictionary(''firstname'' -> ''James'' , ''lastname'' -> ''Bond'')' - equals: (Dictionary new - at:'firstname' put: 'James'; - at:'lastname' put: 'Bond'; - printString) +testAccessing + | d | + + d := Dictionary new. + + d at: 'hello' put: 'world'. + self assert: (d at: 'hello') = 'world'. + self assert: (d at: 'hello' ifAbsent: [nil]) = 'world'. + self deny: (d at: 'foo' ifAbsent: [nil]) = 'world'. + + d at: 1 put: 2. + self assert: (d at: 1) = 2. + + d at: 1@3 put: 3. + self assert: (d at: 1@3) = 3 +! + +testDynamicDictionaries + self assert: #{'hello' -> 1} asDictionary = (Dictionary with: 'hello' -> 1) ! testEquality @@ -112,25 +221,60 @@ testEquality self deny: d1 = d2. ! -testDynamicDictionaries - self assert: #{'hello' -> 1} asDictionary = (Dictionary with: 'hello' -> 1) -! - -testAccessing +testKeys | d | d := Dictionary new. + d at: 1 put: 2. + d at: 2 put: 3. + d at: 3 put: 4. - d at: 'hello' put: 'world'. - self assert: (d at: 'hello') = 'world'. - self assert: (d at: 'hello' ifAbsent: [nil]) = 'world'. - self deny: (d at: 'foo' ifAbsent: [nil]) = 'world'. + self assert: d keys = #(1 2 3) +! - d at: 1 put: 2. - self assert: (d at: 1) = 2. +testPrintString + self + assert: 'a Dictionary(''firstname'' -> ''James'' , ''lastname'' -> ''Bond'')' + equals: (Dictionary new + at:'firstname' put: 'James'; + at:'lastname' put: 'Bond'; + printString) +! - d at: 1@3 put: 3. - self assert: (d at: 1@3) = 3 +testRemoveKey + | d key | + + d := Dictionary new. + d at: 1 put: 2. + d at: 2 put: 3. + d at: 3 put: 4. + + key := 2. + + self assert: d keys = #(1 2 3). + + d removeKey: key. + self assert: d keys = #(1 3). + self assert: d values = #(2 4). + self deny: (d includesKey: 2) +! + +testRemoveKeyIfAbsent + | d key | + + d := Dictionary new. + d at: 1 put: 2. + d at: 2 put: 3. + d at: 3 put: 4. + + key := 2. + self assert: (d removeKey: key) = 3. + + key := 3. + self assert: (d removeKey: key ifAbsent: [42]) = 4. + + key := 'why'. + self assert: (d removeKey: key ifAbsent: [42] ) = 42. ! testSize @@ -155,130 +299,71 @@ testValues d at: 3 put: 4. self assert: d values = #(2 3 4) -! +! ! -testKeys - | d | +TestCase subclass: #JSObjectProxyTest + instanceVariableNames: '' + package: 'Kernel-Tests'! - d := Dictionary new. - d at: 1 put: 2. - d at: 2 put: 3. - d at: 3 put: 4. +!JSObjectProxyTest methodsFor: 'accessing'! - self assert: d keys = #(1 2 3) +jsObject + <return jsObject = {a: 1, b: function() {return 2;}, c: function(object) {return object;}}> ! ! -TestCase subclass: #BooleanTest - instanceVariableNames: '' - category: 'Kernel-Tests'! +!JSObjectProxyTest methodsFor: 'tests'! -!BooleanTest methodsFor: 'tests'! +testDNU + self should: [self jsObject foo] raise: MessageNotUnderstood +! -testLogic - - "Trivial logic table" - self assert: (true & true); deny: (true & false); deny: (false & true); deny: (false & false). - self assert: (true | true); assert: (true | false); assert: (false | true); deny: (false | false). - "Checking that expressions work fine too" - self assert: (true & (1 > 0)); deny: ((1 > 0) & false); deny: ((1 > 0) & (1 > 2)). - self assert: (false | (1 > 0)); assert: ((1 > 0) | false); assert: ((1 > 0) | (1 > 2)) -! +testMessageSend -testEquality - "We're on top of JS...just be sure to check the basics!!" + self assert: self jsObject a equals: 1. + self assert: self jsObject b equals: 2. + self assert: (self jsObject c: 3) equals: 3 +! - self deny: 0 = false. - self deny: false = 0. - self deny: '' = false. - self deny: false = ''. +testMethodWithArguments + self deny: ('body' asJQuery hasClass: 'amber'). - self assert: true = true. - self deny: false = true. - self deny: true = false. - self assert: false = false. + 'body' asJQuery addClass: 'amber'. + self assert: ('body' asJQuery hasClass: 'amber'). - "JS may do some type coercing after sending a message" - self assert: true yourself = true. - self assert: true yourself = true yourself + 'body' asJQuery removeClass: 'amber'. + self deny: ('body' asJQuery hasClass: 'amber'). ! -testLogicKeywords - - "Trivial logic table" - self - assert: (true and: [ true]); - deny: (true and: [ false ]); - deny: (false and: [ true ]); - deny: (false and: [ false ]). - self - assert: (true or: [ true ]); - assert: (true or: [ false ]); - assert: (false or: [ true ]); - deny: (false or: [ false ]). - - "Checking that expressions work fine too" - self - assert: (true and: [ 1 > 0 ]); - deny: ((1 > 0) and: [ false ]); - deny: ((1 > 0) and: [ 1 > 2 ]). - self - assert: (false or: [ 1 > 0 ]); - assert: ((1 > 0) or: [ false ]); - assert: ((1 > 0) or: [ 1 > 2 ]) +testPrinting + self assert: self jsObject printString = '[object Object]' ! -testIfTrueIfFalse - - self assert: (true ifTrue: ['alternative block']) = 'alternative block'. - self assert: (true ifFalse: ['alternative block']) = nil. +testPropertyThatReturnsEmptyString + <document.location.hash = ''>. + self assert: '' equals: document location hash. - self assert: (false ifTrue: ['alternative block']) = nil. - self assert: (false ifFalse: ['alternative block']) = 'alternative block'. + document location hash: 'test'. + self assert: '#test' equals: document location hash. +! - self assert: (false ifTrue: ['alternative block'] ifFalse: ['alternative block2']) = 'alternative block2'. - self assert: (false ifFalse: ['alternative block'] ifTrue: ['alternative block2']) = 'alternative block'. +testYourself + |body| + body := 'body' asJQuery + addClass: 'amber'; + yourself. - self assert: (true ifTrue: ['alternative block'] ifFalse: ['alternative block2']) = 'alternative block'. - self assert: (true ifFalse: ['alternative block'] ifTrue: ['alternative block2']) = 'alternative block2'. + self assert: (body hasClass: 'amber'). + + body removeClass: 'amber'. + self deny: (body hasClass: 'amber'). ! ! TestCase subclass: #NumberTest instanceVariableNames: '' - category: 'Kernel-Tests'! + package: 'Kernel-Tests'! !NumberTest methodsFor: 'tests'! -testPrintShowingDecimalPlaces - self assert: '23.00' equals: (23 printShowingDecimalPlaces: 2). - self assert: '23.57' equals: (23.5698 printShowingDecimalPlaces: 2). - self assert: '-234.56700' equals:( 234.567 negated printShowingDecimalPlaces: 5). - self assert: '23' equals: (23.4567 printShowingDecimalPlaces: 0). - self assert: '24' equals: (23.5567 printShowingDecimalPlaces: 0). - self assert: '-23' equals: (23.4567 negated printShowingDecimalPlaces: 0). - self assert: '-24' equals: (23.5567 negated printShowingDecimalPlaces: 0). - self assert: '100000000.0' equals: (100000000 printShowingDecimalPlaces: 1). - self assert: '0.98000' equals: (0.98 printShowingDecimalPlaces: 5). - self assert: '-0.98' equals: (0.98 negated printShowingDecimalPlaces: 2). - self assert: '2.57' equals: (2.567 printShowingDecimalPlaces: 2). - self assert: '-2.57' equals: (-2.567 printShowingDecimalPlaces: 2). - self assert: '0.00' equals: (0 printShowingDecimalPlaces: 2). -! - -testEquality - self assert: 1 = 1. - self assert: 0 = 0. - self deny: 1 = 0. - - self assert: 1 yourself = 1. - self assert: 1 = 1 yourself. - self assert: 1 yourself = 1 yourself. - - self deny: 0 = false. - self deny: false = 0. - self deny: '' = 0. - self deny: 0 = '' -! - testArithmetic "We rely on JS here, so we won't test complex behavior, just check if @@ -296,18 +381,6 @@ testArithmetic self assert: 1 + (2 * 3) = 7 ! -testRounded - - self assert: 3 rounded = 3. - self assert: 3.212 rounded = 3. - self assert: 3.51 rounded = 4 -! - -testNegated - self assert: 3 negated = -3. - self assert: -3 negated = 3 -! - testComparison self assert: 3 > 2. @@ -322,22 +395,24 @@ testComparison self assert: 3 <= 3.1 ! -testTruncated - - self assert: 3 truncated = 3. - self assert: 3.212 truncated = 3. - self assert: 3.51 truncated = 3 -! - testCopying self assert: 1 copy == 1. self assert: 1 deepCopy == 1 ! -testMinMax +testEquality + self assert: 1 = 1. + self assert: 0 = 0. + self deny: 1 = 0. + + self assert: 1 yourself = 1. + self assert: 1 = 1 yourself. + self assert: 1 yourself = 1 yourself. - self assert: (2 max: 5) equals: 5. - self assert: (2 min: 5) equals: 2 + self deny: 0 = false. + self deny: false = 0. + self deny: '' = 0. + self deny: 0 = '' ! testIdentity @@ -352,258 +427,139 @@ testIdentity self deny: 1 == 2 ! -testSqrt - - self assert: 4 sqrt = 2. - self assert: 16 sqrt = 4 -! - -testSquared +testMinMax - self assert: 4 squared = 16 -! - -testTimesRepeat - | i | - - i := 0. - 0 timesRepeat: [i := i + 1]. - self assert: i equals: 0. - - 5 timesRepeat: [i := i + 1]. - self assert: i equals: 5 -! - -testTo - self assert: (1 to: 5) equals: #(1 2 3 4 5) -! - -testToBy - self assert: (0 to: 6 by: 2) equals: #(0 2 4 6). - - self should: [1 to: 4 by: 0] raise: Error -! ! - -TestCase subclass: #JSObjectProxyTest - instanceVariableNames: '' - category: 'Kernel-Tests'! - -!JSObjectProxyTest methodsFor: 'accessing'! - -jsObject - <return jsObject = {a: 1, b: function() {return 2;}, c: function(object) {return object;}}> -! ! - -!JSObjectProxyTest methodsFor: 'tests'! - -testMethodWithArguments - self deny: ('body' asJQuery hasClass: 'amber'). - - 'body' asJQuery addClass: 'amber'. - self assert: ('body' asJQuery hasClass: 'amber'). - - 'body' asJQuery removeClass: 'amber'. - self deny: ('body' asJQuery hasClass: 'amber'). -! - -testYourself - |body| - body := 'body' asJQuery - addClass: 'amber'; - yourself. - - self assert: (body hasClass: 'amber'). - - body removeClass: 'amber'. - self deny: (body hasClass: 'amber'). -! - -testPropertyThatReturnsEmptyString - <document.location.hash = ''>. - self assert: '' equals: document location hash. - - document location hash: 'test'. - self assert: '#test' equals: document location hash. -! - -testDNU - self should: [self jsObject foo] raise: MessageNotUnderstood + self assert: (2 max: 5) equals: 5. + self assert: (2 min: 5) equals: 2 ! -testMessageSend - - self assert: self jsObject a equals: 1. - self assert: self jsObject b equals: 2. - self assert: (self jsObject c: 3) equals: 3 +testNegated + self assert: 3 negated = -3. + self assert: -3 negated = 3 ! -testPrinting - self assert: self jsObject printString = '[object Object]' -! ! - -TestCase subclass: #PackageTest - instanceVariableNames: 'zorkPackage grulPackage backUpCommitPathJs backUpCommitPathSt' - category: 'Kernel-Tests'! - -!PackageTest methodsFor: 'running'! - -setUp - backUpCommitPathJs := Package defaultCommitPathJs. - backUpCommitPathSt := Package defaultCommitPathSt. - - Package resetCommitPaths. - - zorkPackage := Package new name: 'Zork'. - grulPackage := Package new - name: 'Grul'; - commitPathJs: 'server/grul/js'; - commitPathSt: 'grul/st'; - yourself +testPrintShowingDecimalPlaces + self assert: '23.00' equals: (23 printShowingDecimalPlaces: 2). + self assert: '23.57' equals: (23.5698 printShowingDecimalPlaces: 2). + self assert: '-234.56700' equals:( 234.567 negated printShowingDecimalPlaces: 5). + self assert: '23' equals: (23.4567 printShowingDecimalPlaces: 0). + self assert: '24' equals: (23.5567 printShowingDecimalPlaces: 0). + self assert: '-23' equals: (23.4567 negated printShowingDecimalPlaces: 0). + self assert: '-24' equals: (23.5567 negated printShowingDecimalPlaces: 0). + self assert: '100000000.0' equals: (100000000 printShowingDecimalPlaces: 1). + self assert: '0.98000' equals: (0.98 printShowingDecimalPlaces: 5). + self assert: '-0.98' equals: (0.98 negated printShowingDecimalPlaces: 2). + self assert: '2.57' equals: (2.567 printShowingDecimalPlaces: 2). + self assert: '-2.57' equals: (-2.567 printShowingDecimalPlaces: 2). + self assert: '0.00' equals: (0 printShowingDecimalPlaces: 2). ! -tearDown - Package - defaultCommitPathJs: backUpCommitPathJs; - defaultCommitPathSt: backUpCommitPathSt -! ! - -!PackageTest methodsFor: 'tests'! - -testGrulCommitPathStShouldBeGrulSt - self assert: 'grul/st' equals: grulPackage commitPathSt +testRounded + + self assert: 3 rounded = 3. + self assert: 3.212 rounded = 3. + self assert: 3.51 rounded = 4 ! -testZorkCommitPathStShouldBeSt - self assert: 'st' equals: zorkPackage commitPathSt +testSqrt + + self assert: 4 sqrt = 2. + self assert: 16 sqrt = 4 ! -testZorkCommitPathJsShouldBeJs - self assert: 'js' equals: zorkPackage commitPathJs +testSquared + + self assert: 4 squared = 16 ! -testGrulCommitPathJsShouldBeServerGrulJs - self assert: 'server/grul/js' equals: grulPackage commitPathJs -! ! - -TestCase subclass: #BlockClosureTest - instanceVariableNames: '' - category: 'Kernel-Tests'! - -!BlockClosureTest methodsFor: 'tests'! - -testValue - self assert: ([1+1] value) equals: 2. - self assert: ([:x | x +1] value: 2) equals: 3. - self assert: ([:x :y | x*y] value: 2 value: 4) equals: 8. - - "Arguments are optional in Amber. This isn't ANSI compliant." +testTimesRepeat + | i | - self assert: ([:a :b :c | 1] value) equals: 1 -! + i := 0. + 0 timesRepeat: [i := i + 1]. + self assert: i equals: 0. -testOnDo - self assert: ([Error new signal] on: Error do: [:ex | true]) + 5 timesRepeat: [i := i + 1]. + self assert: i equals: 5 ! -testEnsure - self assert: ([Error new] ensure: [true]) +testTo + self assert: (1 to: 5) equals: #(1 2 3 4 5) ! -testNumArgs - self assert: [] numArgs equals: 0. - self assert: [:a :b | ] numArgs equals: 2 -! +testToBy + self assert: (0 to: 6 by: 2) equals: #(0 2 4 6). -testValueWithPossibleArguments - self assert: ([1] valueWithPossibleArguments: #(3 4)) equals: 1. - self assert: ([:a | a + 4] valueWithPossibleArguments: #(3 4)) equals: 7. - self assert: ([:a :b | a + b] valueWithPossibleArguments: #(3 4 5)) equals: 7. + self should: [1 to: 4 by: 0] raise: Error ! -testWhileTrue - | i | - i := 0. - [i < 5] whileTrue: [i := i + 1]. - self assert: i equals: 5. +testTruncated + + self assert: 3 truncated = 3. + self assert: 3.212 truncated = 3. + self assert: 3.51 truncated = 3 +! ! - i := 0. - [i := i + 1. i < 5] whileTrue. - self assert: i equals: 5 -! +Object subclass: #ObjectMock + instanceVariableNames: 'foo bar' + package: 'Kernel-Tests'! -testWhileFalse - | i | - i := 0. - [i > 5] whileFalse: [i := i + 1]. - self assert: i equals: 6. +!ObjectMock methodsFor: 'not yet classified'! - i := 0. - [i := i + 1. i > 5] whileFalse. - self assert: i equals: 6 +foo + ^foo ! -testCompiledSource - self assert: ([1+1] compiledSource includesSubString: 'function') +foo: anObject + foo := anObject ! ! TestCase subclass: #ObjectTest instanceVariableNames: '' - category: 'Kernel-Tests'! + package: 'Kernel-Tests'! !ObjectTest methodsFor: 'tests'! -testEquality +testBasicAccess | o | o := Object new. - self deny: o = Object new. - self assert: o = o. - self assert: o yourself = o. - self assert: o = o yourself + o basicAt: 'a' put: 1. + self assert: (o basicAt: 'a') equals: 1. + self assert: (o basicAt: 'b') equals: nil ! -testIdentity +testBasicPerform | o | o := Object new. - self deny: o == Object new. - self assert: o == o + o basicAt: 'func' put: ['hello']. + o basicAt: 'func2' put: [:a | a + 1]. + + self assert: (o basicPerform: 'func') equals: 'hello'. + self assert: (o basicPerform: 'func2' withArguments: #(3)) equals: 4 ! -testHalt - self should: [Object new halt] raise: Error +testDNU + self should: [Object new foo] raise: MessageNotUnderstood ! -testBasicAccess +testEquality | o | o := Object new. - o basicAt: 'a' put: 1. - self assert: (o basicAt: 'a') equals: 1. - self assert: (o basicAt: 'b') equals: nil -! - -testNilUndefined - "nil in Smalltalk is the undefined object in JS" - - self assert: nil = undefined + self deny: o = Object new. + self assert: o = o. + self assert: o yourself = o. + self assert: o = o yourself ! -testidentityHash - | o1 o2 | - - o1 := Object new. - o2 := Object new. - - self assert: o1 identityHash == o1 identityHash. - self deny: o1 identityHash == o2 identityHash +testHalt + self should: [Object new halt] raise: Error ! -testBasicPerform +testIdentity | o | o := Object new. - o basicAt: 'func' put: ['hello']. - o basicAt: 'func2' put: [:a | a + 1]. - - self assert: (o basicPerform: 'func') equals: 'hello'. - self assert: (o basicPerform: 'func2' withArguments: #(3)) equals: 4 + self deny: o == Object new. + self assert: o == o ! testIfNil @@ -625,134 +581,113 @@ testInstVars self assert: (o instVarAt: 'foo') equals: 1 ! +testNilUndefined + "nil in Smalltalk is the undefined object in JS" + + self assert: nil = undefined +! + testYourself | o | o := ObjectMock new. self assert: o yourself == o ! -testDNU - self should: [Object new foo] raise: MessageNotUnderstood -! ! - -TestCase subclass: #SymbolTest - instanceVariableNames: '' - category: 'Kernel-Tests'! - -!SymbolTest methodsFor: 'tests'! - -testEquality - self assert: #hello = #hello. - self deny: #hello = #world. +testidentityHash + | o1 o2 | + + o1 := Object new. + o2 := Object new. - self assert: #hello = #hello yourself. - self assert: #hello yourself = #hello. + self assert: o1 identityHash == o1 identityHash. + self deny: o1 identityHash == o2 identityHash +! ! - self deny: #hello = 'hello'. - self deny: 'hello' = #hello. -! +TestCase subclass: #PackageTest + instanceVariableNames: 'zorkPackage grulPackage backUpCommitPathJs backUpCommitPathSt' + package: 'Kernel-Tests'! -testAt - self assert: (#hello at: 1) = 'h'. - self assert: (#hello at: 5) = 'o'. - self assert: (#hello at: 6 ifAbsent: [nil]) = nil -! +!PackageTest methodsFor: 'running'! -testAtPut - "Symbol instances are read-only" - self should: ['hello' at: 1 put: 'a'] raise: Error -! +setUp + backUpCommitPathJs := Package defaultCommitPathJs. + backUpCommitPathSt := Package defaultCommitPathSt. -testIdentity - self assert: #hello == #hello. - self deny: #hello == #world. + Package resetCommitPaths. - self assert: #hello = #hello yourself. - self assert: #hello yourself = #hello asString asSymbol + zorkPackage := Package new name: 'Zork'. + grulPackage := Package new + name: 'Grul'; + commitPathJs: 'server/grul/js'; + commitPathSt: 'grul/st'; + yourself ! -testComparing - self assert: #ab > #aa. - self deny: #ab > #ba. - - self assert: #ab < #ba. - self deny: #bb < #ba. - - self assert: #ab >= #aa. - self deny: #ab >= #ba. - - self assert: #ab <= #ba. - self deny: #bb <= #ba -! +tearDown + Package + defaultCommitPathJs: backUpCommitPathJs; + defaultCommitPathSt: backUpCommitPathSt +! ! -testSize - self assert: #a size equals: 1. - self assert: #aaaaa size equals: 5 -! +!PackageTest methodsFor: 'tests'! -testAsString - self assert: #hello asString equals: 'hello' +testGrulCommitPathJsShouldBeServerGrulJs + self assert: 'server/grul/js' equals: grulPackage commitPathJs ! -testAsSymbol - self assert: #hello == #hello asSymbol +testGrulCommitPathStShouldBeGrulSt + self assert: 'grul/st' equals: grulPackage commitPathSt ! -testCopying - self assert: #hello copy == #hello. - self assert: #hello deepCopy == #hello +testZorkCommitPathJsShouldBeJs + self assert: 'js' equals: zorkPackage commitPathJs ! -testIsSymbolIsString - self assert: #hello isSymbol. - self deny: 'hello' isSymbol. - self deny: #hello isString. - self assert: 'hello' isString +testZorkCommitPathStShouldBeSt + self assert: 'st' equals: zorkPackage commitPathSt ! ! -Object subclass: #ObjectMock - instanceVariableNames: 'foo bar' - category: 'Kernel-Tests'! +PackageTest subclass: #PackageWithDefaultCommitPathChangedTest + instanceVariableNames: '' + package: 'Kernel-Tests'! -!ObjectMock methodsFor: 'not yet classified'! +!PackageWithDefaultCommitPathChangedTest methodsFor: 'running'! -foo - ^foo -! +setUp + super setUp. -foo: anObject - foo := anObject + Package + defaultCommitPathJs: 'javascripts/'; + defaultCommitPathSt: 'smalltalk/'. ! ! -TestCase subclass: #UndefinedTest - instanceVariableNames: '' - category: 'Kernel-Tests'! - -!UndefinedTest methodsFor: 'tests'! +!PackageWithDefaultCommitPathChangedTest methodsFor: 'tests'! -testIsNil - self assert: nil isNil. - self deny: nil notNil. +testGrulCommitPathJsShouldBeServerGrulJs + self assert: 'server/grul/js' equals: grulPackage commitPathJs ! -testIfNil - self assert: (nil ifNil: [true]) equals: true. - self deny: (nil ifNotNil: [true]) = true. - self assert: (nil ifNil: [true] ifNotNil: [false]) equals: true. - self deny: (nil ifNotNil: [true] ifNil: [false]) = true +testGrulCommitPathStShouldBeGrulSt + self assert: 'grul/st' equals: grulPackage commitPathSt ! -testCopying - self assert: nil copy equals: nil +testZorkCommitPathJsShouldBeJavascript + self assert: 'javascripts/' equals: zorkPackage commitPathJs ! -testDeepCopy - self assert: nil deepCopy = nil +testZorkCommitPathStShouldBeSmalltalk + self assert: 'smalltalk/' equals: zorkPackage commitPathSt +! ! + +!PackageWithDefaultCommitPathChangedTest class methodsFor: 'accessing'! + +shouldInheritSelectors + ^ false ! ! TestCase subclass: #PointTest instanceVariableNames: '' - category: 'Kernel-Tests'! + package: 'Kernel-Tests'! !PointTest methodsFor: 'tests'! @@ -763,6 +698,13 @@ testAccessing self assert: (Point new y: 4) y equals: 4 ! +testArithmetic + self assert: 3@4 * (3@4 ) equals: (Point x: 9 y: 16). + self assert: 3@4 + (3@4 ) equals: (Point x: 6 y: 8). + self assert: 3@4 - (3@4 ) equals: (Point x: 0 y: 0). + self assert: 6@8 / (3@4 ) equals: (Point x: 2 y: 2) +! + testAt self assert: 3@4 equals: (Point x: 3 y: 4) ! @@ -772,13 +714,6 @@ testEgality self deny: 3@5 = (3@6) ! -testArithmetic - self assert: 3@4 * (3@4 ) equals: (Point x: 9 y: 16). - self assert: 3@4 + (3@4 ) equals: (Point x: 6 y: 8). - self assert: 3@4 - (3@4 ) equals: (Point x: 0 y: 0). - self assert: 6@8 / (3@4 ) equals: (Point x: 2 y: 2) -! - testTranslateBy self assert: 3@4 equals: (3@3 translateBy: 0@1). self assert: 3@2 equals: (3@3 translateBy: 0@1 negated). @@ -788,7 +723,7 @@ testTranslateBy TestCase subclass: #RandomTest instanceVariableNames: '' - category: 'Kernel-Tests'! + package: 'Kernel-Tests'! !RandomTest methodsFor: 'tests'! @@ -803,38 +738,37 @@ textNext next = current] ! ! -TestCase subclass: #ClassBuilderTest - instanceVariableNames: 'builder theClass' - category: 'Kernel-Tests'! +TestCase subclass: #SetTest + instanceVariableNames: '' + package: 'Kernel-Tests'! -!ClassBuilderTest methodsFor: 'running'! +!SetTest methodsFor: 'tests'! -setUp - builder := ClassBuilder new -! +testAddRemove + | set | + set := Set new. + + self assert: set isEmpty. -tearDown - theClass ifNotNil: [Smalltalk current removeClass: theClass. theClass := nil] -! + set add: 3. + self assert: (set includes: 3). -testClassCopy - theClass := builder copyClass: ObjectMock named: 'ObjectMock2'. - self assert: theClass superclass == ObjectMock superclass. - self assert: theClass instanceVariableNames == ObjectMock instanceVariableNames. - self assert: theClass name equals: 'ObjectMock2'. - self assert: theClass package == ObjectMock package. - self assert: theClass methodDictionary keys equals: ObjectMock methodDictionary keys -! + set add: 5. + self assert: (set includes: 5). -testInstanceVariableNames - self assert: (builder instanceVariableNamesFor: ' hello world ') equals: #('hello' 'world') -! ! + set remove: 3. + self deny: (set includes: 3) +! -TestCase subclass: #SetTest - instanceVariableNames: '' - category: 'Kernel-Tests'! +testAt + self should: [Set new at: 1 put: 2] raise: Error +! -!SetTest methodsFor: 'tests'! +testSize + self assert: Set new size equals: 0. + self assert: (Set withAll: #(1 2 3 4)) size equals: 4. + self assert: (Set withAll: #(1 1 1 1)) size equals: 1 +! testUnicity | set | @@ -849,69 +783,171 @@ testUnicity self assert: set size = 2. self assert: set asArray equals: #(21 'hello') +! ! + +TestCase subclass: #StringTest + instanceVariableNames: '' + package: 'Kernel-Tests'! + +!StringTest methodsFor: 'tests'! + +testAddRemove + self should: ['hello' add: 'a'] raise: Error. + self should: ['hello' remove: 'h'] raise: Error +! + +testAsArray + self assert: 'hello' asArray = #('h' 'e' 'l' 'l' 'o'). ! testAt - self should: [Set new at: 1 put: 2] raise: Error + self assert: ('hello' at: 1) = 'h'. + self assert: ('hello' at: 5) = 'o'. + self assert: ('hello' at: 6 ifAbsent: [nil]) = nil ! -testAddRemove - | set | - set := Set new. - - self assert: set isEmpty. +testAtPut + "String instances are read-only" + self should: ['hello' at: 1 put: 'a'] raise: Error +! - set add: 3. - self assert: (set includes: 3). +testCopyWithoutAll + self + assert: 'hello world' + equals: ('*hello* *world*' copyWithoutAll: '*') +! - set add: 5. - self assert: (set includes: 5). +testEquality + self assert: 'hello' = 'hello'. + self deny: 'hello' = 'world'. - set remove: 3. - self deny: (set includes: 3) + self assert: 'hello' = 'hello' yourself. + self assert: 'hello' yourself = 'hello'. + + "test JS falsy value" + self deny: '' = 0 +! + +testIncludesSubString + self assert: ('amber' includesSubString: 'ber'). + self deny: ('amber' includesSubString: 'zork'). +! + +testJoin + self assert: 'hello,world' equals: (',' join: #('hello' 'world')) ! testSize - self assert: Set new size equals: 0. - self assert: (Set withAll: #(1 2 3 4)) size equals: 4. - self assert: (Set withAll: #(1 1 1 1)) size equals: 1 + self assert: 'smalltalk' size equals: 9. + self assert: '' size equals: 0 +! + +testStreamContents + self + assert: 'hello world' + equals: (String streamContents: [:aStream| aStream + nextPutAll: 'hello'; space; + nextPutAll: 'world']) ! ! -PackageTest subclass: #PackageWithDefaultCommitPathChangedTest +TestCase subclass: #SymbolTest instanceVariableNames: '' - category: 'Kernel-Tests'! + package: 'Kernel-Tests'! -!PackageWithDefaultCommitPathChangedTest methodsFor: 'running'! +!SymbolTest methodsFor: 'tests'! -setUp - super setUp. +testAsString + self assert: #hello asString equals: 'hello' +! - Package - defaultCommitPathJs: 'javascripts/'; - defaultCommitPathSt: 'smalltalk/'. -! ! +testAsSymbol + self assert: #hello == #hello asSymbol +! -!PackageWithDefaultCommitPathChangedTest methodsFor: 'tests'! +testAt + self assert: (#hello at: 1) = 'h'. + self assert: (#hello at: 5) = 'o'. + self assert: (#hello at: 6 ifAbsent: [nil]) = nil +! -testGrulCommitPathJsShouldBeServerGrulJs - self assert: 'server/grul/js' equals: grulPackage commitPathJs +testAtPut + "Symbol instances are read-only" + self should: ['hello' at: 1 put: 'a'] raise: Error ! -testGrulCommitPathStShouldBeGrulSt - self assert: 'grul/st' equals: grulPackage commitPathSt +testComparing + self assert: #ab > #aa. + self deny: #ab > #ba. + + self assert: #ab < #ba. + self deny: #bb < #ba. + + self assert: #ab >= #aa. + self deny: #ab >= #ba. + + self assert: #ab <= #ba. + self deny: #bb <= #ba ! -testZorkCommitPathJsShouldBeJavascript - self assert: 'javascripts/' equals: zorkPackage commitPathJs +testCopying + self assert: #hello copy == #hello. + self assert: #hello deepCopy == #hello ! -testZorkCommitPathStShouldBeSmalltalk - self assert: 'smalltalk/' equals: zorkPackage commitPathSt +testEquality + self assert: #hello = #hello. + self deny: #hello = #world. + + self assert: #hello = #hello yourself. + self assert: #hello yourself = #hello. + + self deny: #hello = 'hello'. + self deny: 'hello' = #hello. +! + +testIdentity + self assert: #hello == #hello. + self deny: #hello == #world. + + self assert: #hello = #hello yourself. + self assert: #hello yourself = #hello asString asSymbol +! + +testIsSymbolIsString + self assert: #hello isSymbol. + self deny: 'hello' isSymbol. + self deny: #hello isString. + self assert: 'hello' isString +! + +testSize + self assert: #a size equals: 1. + self assert: #aaaaa size equals: 5 ! ! -!PackageWithDefaultCommitPathChangedTest class methodsFor: 'accessing'! +TestCase subclass: #UndefinedTest + instanceVariableNames: '' + package: 'Kernel-Tests'! -shouldInheritSelectors - ^ false +!UndefinedTest methodsFor: 'tests'! + +testCopying + self assert: nil copy equals: nil +! + +testDeepCopy + self assert: nil deepCopy = nil +! + +testIfNil + self assert: (nil ifNil: [true]) equals: true. + self deny: (nil ifNotNil: [true]) = true. + self assert: (nil ifNil: [true] ifNotNil: [false]) equals: true. + self deny: (nil ifNotNil: [true] ifNil: [false]) = true +! + +testIsNil + self assert: nil isNil. + self deny: nil notNil. ! ! diff --git a/amber/src/st/Kernel-Transcript.st b/amber/src/st/Kernel-Transcript.st index 94835f5b0b8..54f7d8aa314 100644 --- a/amber/src/st/Kernel-Transcript.st +++ b/amber/src/st/Kernel-Transcript.st @@ -1,22 +1,53 @@ Smalltalk current createPackage: 'Kernel-Transcript' properties: #{}! +Object subclass: #ConsoleTranscript + instanceVariableNames: 'textarea' + package: 'Kernel-Transcript'! + +!ConsoleTranscript methodsFor: 'actions'! + +open +! ! + +!ConsoleTranscript methodsFor: 'printing'! + +clear + "no op" +! + +cr + "no op" +! + +show: anObject + | string | + string := anObject asString. + <console.log(String(string))> +! ! + +!ConsoleTranscript class methodsFor: 'initialization'! + +initialize + Transcript register: self new +! ! + Object subclass: #Transcript instanceVariableNames: 'textarea' - category: 'Kernel-Transcript'! + package: 'Kernel-Transcript'! Transcript class instanceVariableNames: 'current'! !Transcript class methodsFor: 'instance creation'! -open - self current open +current + ^current ! new self shouldNotImplement ! -current - ^current +open + self current open ! register: aTranscript @@ -25,46 +56,15 @@ register: aTranscript !Transcript class methodsFor: 'printing'! -show: anObject - self current show: anObject -! - -cr - self current show: String cr -! - clear self current clear -! ! - -Object subclass: #ConsoleTranscript - instanceVariableNames: 'textarea' - category: 'Kernel-Transcript'! - -!ConsoleTranscript methodsFor: 'actions'! - -open -! ! - -!ConsoleTranscript methodsFor: 'printing'! - -clear - "no op" ! cr - "no op" + self current show: String cr ! show: anObject - | string | - string := anObject asString. - <console.log(String(string))> -! ! - -!ConsoleTranscript class methodsFor: 'initialization'! - -initialize - Transcript register: self new + self current show: anObject ! ! diff --git a/amber/src/st/SUnit.st b/amber/src/st/SUnit.st index 37f80eaf27a..fabb724b7b9 100755 --- a/amber/src/st/SUnit.st +++ b/amber/src/st/SUnit.st @@ -1,16 +1,16 @@ Smalltalk current createPackage: 'SUnit' properties: #{}! Object subclass: #TestCase instanceVariableNames: 'testSelector' - category: 'SUnit'! + package: 'SUnit'! !TestCase methodsFor: 'accessing'! -setTestSelector: aSelector - testSelector := aSelector -! - selector ^testSelector +! + +setTestSelector: aSelector + testSelector := aSelector ! ! !TestCase methodsFor: 'private'! @@ -23,10 +23,10 @@ signalFailure: aString !TestCase methodsFor: 'running'! -setUp -! - -tearDown +performTestFor: aResult + [[self perform: self selector] + on: TestFailure do: [:ex | aResult addFailure: self]] + on: Error do: [:ex | aResult addError: self] ! runCaseFor: aTestResult @@ -36,10 +36,10 @@ runCaseFor: aTestResult self tearDown ! -performTestFor: aResult - [[self perform: self selector] - on: TestFailure do: [:ex | aResult addFailure: self]] - on: Error do: [:ex | aResult addError: self] +setUp +! + +tearDown ! ! !TestCase methodsFor: 'testing'! @@ -48,16 +48,16 @@ assert: aBoolean self assert: aBoolean description: 'Assertion failed' ! -deny: aBoolean - self assert: aBoolean not +assert: aBoolean description: aString + aBoolean ifFalse: [self signalFailure: aString] ! assert: expected equals: actual ^ self assert: (expected = actual) description: 'Expected: ', expected asString, ' but was: ', actual asString ! -assert: aBoolean description: aString - aBoolean ifFalse: [self signalFailure: aString] +deny: aBoolean + self assert: aBoolean not ! should: aBlock @@ -72,20 +72,6 @@ should: aBlock raise: anExceptionClass !TestCase class methodsFor: 'accessing'! -testSelectors - ^self methodDictionary keys select: [:each | each match: '^test'] -! - -selector: aSelector - ^self new - setTestSelector: aSelector; - yourself -! - -lookupHierarchyRoot - ^TestCase -! - allTestSelectors | selectors | selectors := self testSelectors. @@ -96,6 +82,20 @@ allTestSelectors buildSuite ^self allTestSelectors collect: [:each | self selector: each] +! + +lookupHierarchyRoot + ^TestCase +! + +selector: aSelector + ^self new + setTestSelector: aSelector; + yourself +! + +testSelectors + ^self methodDictionary keys select: [:each | each match: '^test'] ! ! !TestCase class methodsFor: 'testing'! @@ -106,16 +106,20 @@ shouldInheritSelectors Error subclass: #TestFailure instanceVariableNames: '' - category: 'SUnit'! + package: 'SUnit'! Object subclass: #TestResult instanceVariableNames: 'timestamp runs errors failures total' - category: 'SUnit'! + package: 'SUnit'! !TestResult methodsFor: 'accessing'! -timestamp - ^timestamp +addError: anError + self errors add: anError +! + +addFailure: aFailure + self failures add: aFailure ! errors @@ -126,30 +130,14 @@ failures ^failures ! -total - ^total -! - -total: aNumber - total := aNumber -! - -addError: anError - self errors add: anError -! - -addFailure: aFailure - self failures add: aFailure +increaseRuns + runs := runs + 1 ! runs ^runs ! -increaseRuns - runs := runs + 1 -! - status ^self errors isEmpty ifTrue: [ @@ -157,6 +145,18 @@ status ifTrue: ['success'] ifFalse: ['failure']] ifFalse: ['error'] +! + +timestamp + ^timestamp +! + +total + ^total +! + +total: aNumber + total := aNumber ! ! !TestResult methodsFor: 'initialization'! -- GitLab