1
0
ソースを参照

- Removed unused init.js
- Each JS file now setup declared classes
- added *.deploy.js files
- use new jtalk.js to load Jtalk

Nicolas Petton 12 年 前
コミット
0aae3e8448
35 ファイル変更14964 行追加13050 行削除
  1. 2 2
      LICENSE
  2. 20 55
      bin/jtalkc
  3. 4 17
      ide.html
  4. 160 0
      js/Benchfib.deploy.js
  5. 1 0
      js/Benchfib.js
  6. 1469 0
      js/Canvas.deploy.js
  7. 5 0
      js/Canvas.js
  8. 1172 0
      js/Compiler.deploy.js
  9. 18 2
      js/Compiler.js
  10. 808 0
      js/Examples.deploy.js
  11. 9 1
      js/Examples.js
  12. 1207 0
      js/IDE.deploy.js
  13. 4 1
      js/IDE.js
  14. 900 0
      js/JQuery.deploy.js
  15. 2 0
      js/JQuery.js
  16. 6791 0
      js/Kernel.deploy.js
  17. 30 30
      js/Kernel.js
  18. 1103 0
      js/Parser.deploy.js
  19. 32 15
      js/Parser.js
  20. 1067 0
      js/SUnit.deploy.js
  21. 8 0
      js/SUnit.js
  22. 17 6
      js/boot.js
  23. 0 2
      js/init.js
  24. 0 6395
      js/jtalk.deploy.js
  25. 0 6484
      js/jtalk.js
  26. 4 19
      nodejs/nodecompile.js
  27. 1 0
      st/Benchfib.st
  28. 5 0
      st/Canvas.st
  29. 26 12
      st/Compiler.st
  30. 8 0
      st/Examples.st
  31. 17 0
      st/IDE.st
  32. 2 0
      st/JQuery.st
  33. 30 8
      st/Kernel.st
  34. 34 1
      st/Parser.st
  35. 8 0
      st/SUnit.st

+ 2 - 2
LICENSE

@@ -3,9 +3,9 @@ Copyright (C) 2011 Jtalk contributors
 
 Contributors
 David Graham <dgraham@iphouse.com>
-Göran Krampe <goran@krampe.se>
+Göran Krampe <goran.krampe@gmail.com>
 
-Parts of Jtalk take ideas from Clamato (http://clamato.net), written by Avi Bryant.
+Parts of Jtalk take ideas from Clamato (http://clamato.net), written by Avi Byrant.
 The PetitParser library is written by Lukas Renggli (http://lukas-renggli.ch) and released under the MIT license.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy

+ 20 - 55
bin/jtalkc

@@ -7,12 +7,11 @@ JTALK=$(readlink -f `dirname ${0}`/..)
 
 function usage {
 	cat <<ENDOFHELP
-Usage: $0 [-N|D|E] [-K|C|J] [-o] [-O] [-g] [-p prefix] [-m class] [-M file]
-          [-i] [-I file] [file1 [file2 ...]] [Program]
+Usage: $0 [-N|D|E] [-K|C] [-o] [-O] [-m class] [-M file]
+          [-i] [-I file] file1 [file2 ...] [Program]
 
    Will compile Jtalk files - either separately or into a runnable complete
-   program. If no files are listed only a linking stage is performed.
-   Files listed will be handled using these rules:
+   program. Files listed will be handled using these rules:
 
    *.js
      Files are concatenated in listed order.
@@ -35,13 +34,10 @@ Usage: $0 [-N|D|E] [-K|C|J] [-o] [-O] [-g] [-p prefix] [-m class] [-M file]
      is added last.
 
   -K
-     Add libraries to get minimal Jtalk Kernel running.
+     Add libraries to get minimal JTalk Kernel running.
 
   -C
-     Add libraries to get minimal Jtalk Compiler running.
-
-  -J
-     Add libraries to get minimal Jtalk IDE running.
+     Add libraries to get minimal JTalk Compiler running.
 
   -o
      Optimize each js file using the Google closure compiler.
@@ -51,13 +47,6 @@ Usage: $0 [-N|D|E] [-K|C|J] [-o] [-O] [-g] [-p prefix] [-m class] [-M file]
      Optimize final <Program>.js using the Google closure compiler.
      Using Closure at ~/compiler.jar    
 
-  -g
-     Compile Jtalk code in debug mode - include source and references etc.
-
-  -p prefix
-     Add <prefix> to compiled js files so that File.st is compiled into
-     <prefix>File.st.
-
   -l library1,library2
      Load listed libraries (no spaces) into Compiler before compiling.
 
@@ -106,11 +95,10 @@ if [ -z $1 ] ; then
 fi
 
 # Define our predefined library combinations
-BOOT="boot.js"
-KERNEL="$BOOT Kernel.js"
-COMPILER="$KERNEL Parser.js Compiler.js"
-CANVAS="$COMPILER Canvas.js"
-IDE="$CANVAS JQuery.js IDE.js SUnit.js Examples.js"
+BOOT="$JTALK/js/boot.js"
+KERNEL="$BOOT $JTALK/js/Kernel.js"
+COMPILER="$KERNEL $JTALK/js/Parser.js $JTALK/js/Compiler.js"
+KITCHENSINK="$COMPILER $JTALK/js/Canvas.js"
 
 # Predefined initializer
 INITIALIZER="$JTALK/js/init.js"
@@ -120,17 +108,12 @@ ENV=
 INIT=
 MAIN=
 MAINFILE=
-BASE=
+BASE=$KERNEL
 LOAD=
 LOADANDADD=
-# Ok, bad coding practice but hey, who would use such a prefix?
-PREFIX=no-silly-prefix
-PREFIXUSED=
-DEBUG=false
-NODECOMPILE=nodecompile.js
 
 # Read options and shift them away
-while getopts "NDEKCJoOgp:l:L:i:IM:m:h?" o; do
+while getopts "NDEKCoOl:L:i:IM:m:h?" o; do
 case "$o" in
    N) ENV=NODE
       BASE=$KERNEL
@@ -138,19 +121,15 @@ case "$o" in
    D) ENV=D8
       BASE=$KERNEL
       INIT=$INITIALIZER;;
-   E) ENV=ENYO
+   D) ENV=ENYO
       BASE=$KERNEL
       INIT=$INITIALIZER;;
    K) BASE=$KERNEL;;
    C) BASE=$COMPILER;;
-   J) BASE=$IDE;;
    o) CLOSURE=true
       CLOSUREPARTS=true;;
    O) CLOSURE=true
       CLOSUREFULL=true;;
-   g) DEBUG=true;;
-   p) PREFIX=$OPTARG
-      PREFIXUSED=$PREFIX;;
    l) LOAD=$OPTARG;;
    L) LOADANDADD=$OPTARG;;
    I) INIT=$INITIALIZER;;
@@ -191,13 +170,6 @@ function resolvejs {
   fi
 }
 
-# Resolve listed libraries in $BASE separated by spaces
-for FILE in $BASE
-do
-   resolvejs $FILE
-   TOBASE="$TOBASE $RESOLVED"
-done
-
 # Resolve listed libraries in $LOAD separated by spaces
 LOAD=${LOAD//,/\ }
 for FILE in $LOAD
@@ -216,17 +188,10 @@ do
 done
 
 # Define our Compiler loading supplied libraries
-OURCOMPILER="$COMPILER $TOLOAD init.js $JTALK/nodejs/$NODECOMPILE"
-
-# Resolve OURCOMPILER
-for FILE in $OURCOMPILER
-do
-   resolvejs $FILE
-   TOOURCOMPILER="$TOOURCOMPILER $RESOLVED"
-done
+OURCOMPILER="$KITCHENSINK $TOLOAD $JTALK/js/init.js $JTALK/nodejs/nodecompile.js"
 
 # Add supplied libraries
-LIBS="$TOBASE $TOADD"
+LIBS="$BASE $TOADD"
 
 # Get a unique tempdir and make it get auto removed on exit
 TMPDIR=`mktemp -d`
@@ -245,11 +210,11 @@ do
         CATEGORY=`basename $1 .st`
         if [ -f "$1" ]; then
            COMPILE="$COMPILE $1 $CATEGORY"
-           COMPILED="$COMPILED $PREFIXUSED$CATEGORY.js"
+           COMPILED="$COMPILED $CATEGORY.js"
         else
            if [ -f $JTALK/st/$1 ]; then
              COMPILE="$COMPILE $JTALK/st/$1 $CATEGORY"
-             COMPILED="$COMPILED $PREFIXUSED$CATEGORY.js"
+             COMPILED="$COMPILED $CATEGORY.js"
            else
              echo "JTalk file not found: $1"
              exit 1
@@ -274,11 +239,11 @@ done
 # --------------------------------------------------
 
 # Create compiler dynamically
-cat $TOOURCOMPILER > $TMPDIR/compiler.js
- 
+cat $OURCOMPILER > $TMPDIR/compiler.js
+
 # Compile all collected .st files to .js
-echo "Loading libraries $TOOURCOMPILER and compiling ..."
-node $TMPDIR/compiler.js $DEBUG $PREFIX $COMPILE
+echo "Loading libraries $KITCHENSINK $TOLOAD and compiling ..."
+node $TMPDIR/compiler.js $COMPILE
 
 # Verify all .js files corresponding to .st files were created, otherwise exit
 IFS=" "

+ 4 - 17
ide.html

@@ -5,25 +5,12 @@
     
     <meta name="author" content="Nicolas Petton">
     <link rel="stylesheet" type="text/css" href="./ide/style.css">
-    <link rel="stylesheet" type="text/css" href="./ide/syntax.css">
-    <script type="text/javascript" src="./js/jquery-1.4.4.min.js"></script>
-    <script type="text/javascript" src="./js/jquery-ui-1.8.9.custom.min.js"></script>
-    <script type="text/javascript" src="./js/jquery.textarea.js"></script>
-    <script type="text/javascript" src="./js/boot.js"></script>
-    <script type="text/javascript" src="./js/Kernel.js"></script>
-    <script type="text/javascript" src="./js/Canvas.js"></script>
-    <script type="text/javascript" src="./js/JQuery.js"></script>
-    <script type="text/javascript" src="./js/Parser.js"></script>
-    <script type="text/javascript" src="./js/Compiler.js"></script>
-    <script type="text/javascript" src="./js/IDE.js"></script>
-    <script type="text/javascript" src="./js/SUnit.js"></script>
-    <script type="text/javascript" src="./js/Examples.js"></script>
-    <script type="text/javascript" src="./js/Benchfib.js"></script>
-    <script type="text/javascript" src="./js/init.js"></script>
-    <link rel="stylesheet" type="text/css" href="./css/jtalk.css">
-    <link rel="stylesheet" type="text/css" href="./css/sunit.css">
+    <script type="text/javascript" src="./js/jtalk.js"></script>
   </head>
   <body>
+    <script type="text/javascript">
+      loadJtalk();
+    </script>
     <script type="text/javascript">
       jQuery(window).scroll(function() {
       	if(jQuery(window).scrollTop() > 210) {

+ 160 - 0
js/Benchfib.deploy.js

@@ -0,0 +1,160 @@
+smalltalk.addClass('Benchfib', smalltalk.Object, [], 'Benchfib');
+
+smalltalk.addMethod(
+'_main',
+smalltalk.method({
+selector: 'main',
+category: 'not yet classified',
+fn: function (){
+var self=this;
+var result=nil;
+result=smalltalk.send((0), "_tinyBenchmarks", []);
+smalltalk.send(console, "_log_", [smalltalk.send(unescape("0%20tinyBenchmarks%20%3D%3E%20"), "__plus", [result])]);
+return self;},
+source: unescape('main%0A%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%200%20tinyBenchmarks.%0A%09console%20log%3A%20%270%20tinyBenchmarks%20%3D%3E%20%27%20+%20result'),
+messageSends: ["tinyBenchmarks", "log:", unescape("+")],
+referencedClasses: []
+}),
+smalltalk.Benchfib.klass);
+
+
+smalltalk.setup(smalltalk.Benchfib);
+smalltalk.addMethod(
+'_benchFib',
+smalltalk.method({
+selector: 'benchFib',
+category: '*Benchfib',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "__lt", [(2)]), "_ifTrue_ifFalse_", [(function(){return (1);}), (function(){return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "__minus", [(1)]), "_benchFib", []), "__plus", [smalltalk.send(smalltalk.send(self, "__minus", [(2)]), "_benchFib", [])]), "__plus", [(1)]);})]);
+return self;},
+source: unescape('benchFib%0A%09%22Handy%20send-heavy%20benchmark%22%0A%09%22%28result%20//%20seconds%20to%20run%29%20%3D%20approx%20calls%20per%20second%22%0A%09%22%20%7C%20r%20t%20%7C%0A%09%20%20t%20%3A%3D%20Time%20millisecondsToRun%3A%20%5Br%20%3A%3D%2026%20benchFib%5D.%0A%09%20%20%28r%20*%201000%29%20//%20t%22%0A%09%22138000%20on%20a%20Mac%208100/100%22%0A%09%5E%20self%20%3C%202%0A%09%09ifTrue%3A%20%5B1%5D%20%0A%09%09ifFalse%3A%20%5B%28self-1%29%20benchFib%20+%20%28self-2%29%20benchFib%20+%201%5D'),
+messageSends: ["ifTrue:ifFalse:", unescape("%3C"), unescape("+"), "benchFib", unescape("-")],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_benchmark',
+smalltalk.method({
+selector: 'benchmark',
+category: '*Benchfib',
+fn: function (){
+var self=this;
+var size=nil;
+var flags=nil;
+var prime=nil;
+var k=nil;
+var count=nil;
+size=(8190);
+smalltalk.send((1), "_to_do_", [self, (function(iter){count=(0);flags=smalltalk.send(smalltalk.Array, "_new", []);smalltalk.send(size, "_timesRepeat_", [(function(){return smalltalk.send(flags, "_add_", [true]);})]);return smalltalk.send((1), "_to_do_", [size, (function(i){return smalltalk.send(smalltalk.send(flags, "_at_", [i]), "_ifTrue_", [(function(){prime=smalltalk.send(i, "__plus", [(1)]);k=smalltalk.send(i, "__plus", [prime]);smalltalk.send((function(){return smalltalk.send(k, "__lt_eq", [size]);}), "_whileTrue_", [(function(){smalltalk.send(flags, "_at_put_", [k, false]);return k=smalltalk.send(k, "__plus", [prime]);})]);return count=smalltalk.send(count, "__plus", [(1)]);})]);})]);})]);
+return count;
+return self;},
+source: unescape('benchmark%20%20%22Handy%20bytecode-heavy%20benchmark%22%0A%09%22%28500000%20//%20time%20to%20run%29%20%3D%20approx%20bytecodes%20per%20second%22%0A%09%225000000%20//%20%28Time%20millisecondsToRun%3A%20%5B10%20benchmark%5D%29%20*%201000%22%0A%09%223059000%20on%20a%20Mac%208100/100%22%0A%20%20%20%20%7C%20size%20flags%20prime%20k%20count%20%7C%0A%20%20%20%20size%20%3A%3D%208190.%0A%20%20%20%201%20to%3A%20self%20do%3A%0A%20%20%20%20%20%20%20%20%5B%3Aiter%20%7C%0A%20%20%20%20%20%20%20%20count%20%3A%3D%200.%0A%20%20%20%20%20%20%20%20flags%20%3A%3D%20Array%20new.%0A%20%20%20%20%20%20%20%20size%20timesRepeat%3A%20%5B%20flags%20add%3A%20true%5D.%0A%20%20%20%20%20%20%20%201%20to%3A%20size%20do%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%3Ai%20%7C%20%28flags%20at%3A%20i%29%20ifTrue%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bprime%20%3A%3D%20i+1.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20k%20%3A%3D%20i%20+%20prime.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bk%20%3C%3D%20size%5D%20whileTrue%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bflags%20at%3A%20k%20put%3A%20false.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20k%20%3A%3D%20k%20+%20prime%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20count%20%3A%3D%20count%20+%201%5D%5D%5D.%0A%20%20%20%20%5E%20count'),
+messageSends: ["to:do:", "new", "timesRepeat:", "add:", "ifTrue:", "at:", unescape("+"), "whileTrue:", unescape("%3C%3D"), "at:put:"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_tinyBenchmarks',
+smalltalk.method({
+selector: '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);
+smalltalk.send((function(){t1=smalltalk.send(smalltalk.Date, "_millisecondsToRun_", [(function(){return smalltalk.send(n1, "_benchmark", []);})]);return smalltalk.send(t1, "__lt", [(1000)]);}), "_whileTrue_", [(function(){return n1=smalltalk.send(n1, "__star", [(2)]);})]);
+n2=(28);
+smalltalk.send((function(){t2=smalltalk.send(smalltalk.Date, "_millisecondsToRun_", [(function(){return r=smalltalk.send(n2, "_benchFib", []);})]);return smalltalk.send(t2, "__lt", [(1000)]);}), "_whileTrue_", [(function(){return n2=smalltalk.send(n2, "__plus", [(1)]);})]);
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(n1, "__star", [(500000)]), "__star", [(1000)]), "__slash", [t1]), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(r, "__star", [(1000)]), "__slash", [t2]), "_printString", [])]), "__comma", [unescape("%20sends/sec")]);
+return self;},
+source: unescape('tinyBenchmarks%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%2028.%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: [smalltalk.Date]
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_jsbenchFib',
+smalltalk.method({
+selector: 'jsbenchFib',
+category: '*Benchfib',
+fn: function (){
+var self=this;
+if (this < 2) {
+return 1;
+} else {
+return (this-1)._jsbenchFib() + (this-2)._jsbenchFib() + 1;};
+return self;},
+source: unescape('jsbenchFib%0A%20%0A%09%3Cif%20%28this%20%3C%202%29%20%7B%0Areturn%201%3B%0A%7D%20else%20%7B%0Areturn%20%28this-1%29._jsbenchFib%28%29%20+%20%28this-2%29._jsbenchFib%28%29%20+%201%3B%7D%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_jsbenchmark',
+smalltalk.method({
+selector: 'jsbenchmark',
+category: '*Benchfib',
+fn: function (){
+var self=this;
+
+var size = 8190;
+var count;
+for (var z=0;z<this;z++) {
+  count = 0;
+  var flags = new Array();
+  for (var p=0; p<size; p++) {
+    flags[p] = true;
+  }
+  for (var i=1;i<=size;i++) {
+    if (flags[i-1]) {
+      var prime = i+1;
+      var k = i + prime;
+      while (k <= size) {
+        flags[k-1] = false;
+        k = k + prime;
+      }
+      count = count + 1;
+    }
+  }
+}
+return count;
+return self;},
+source: unescape('jsbenchmark%0A%0A%3C%0Avar%20size%20%3D%208190%3B%0Avar%20count%3B%0Afor%20%28var%20z%3D0%3Bz%3Cthis%3Bz++%29%20%7B%0A%20%20count%20%3D%200%3B%0A%20%20var%20flags%20%3D%20new%20Array%28%29%3B%0A%20%20for%20%28var%20p%3D0%3B%20p%3Csize%3B%20p++%29%20%7B%0A%20%20%20%20flags%5Bp%5D%20%3D%20true%3B%0A%20%20%7D%0A%20%20for%20%28var%20i%3D1%3Bi%3C%3Dsize%3Bi++%29%20%7B%0A%20%20%20%20if%20%28flags%5Bi-1%5D%29%20%7B%0A%20%20%20%20%20%20var%20prime%20%3D%20i+1%3B%0A%20%20%20%20%20%20var%20k%20%3D%20i%20+%20prime%3B%0A%20%20%20%20%20%20while%20%28k%20%3C%3D%20size%29%20%7B%0A%20%20%20%20%20%20%20%20flags%5Bk-1%5D%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20k%20%3D%20k%20+%20prime%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20count%20%3D%20count%20+%201%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0Areturn%20count%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_jstinyBenchmarks',
+smalltalk.method({
+selector: 'jstinyBenchmarks',
+category: '*Benchfib',
+fn: function (){
+var self=this;
+var t1=nil;
+var t2=nil;
+var r=nil;
+var n1=nil;
+var n2=nil;
+n1=(1);
+smalltalk.send((function(){t1=smalltalk.send(smalltalk.Date, "_millisecondsToRun_", [(function(){return smalltalk.send(n1, "_jsbenchmark", []);})]);return smalltalk.send(t1, "__lt", [(1000)]);}), "_whileTrue_", [(function(){return n1=smalltalk.send(n1, "__star", [(2)]);})]);
+n2=(28);
+smalltalk.send((function(){t2=smalltalk.send(smalltalk.Date, "_millisecondsToRun_", [(function(){return r=smalltalk.send(n2, "_jsbenchFib", []);})]);return smalltalk.send(t2, "__lt", [(1000)]);}), "_whileTrue_", [(function(){return n2=smalltalk.send(n2, "__plus", [(1)]);})]);
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(n1, "__star", [(500000)]), "__star", [(1000)]), "__slash", [t1]), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(r, "__star", [(1000)]), "__slash", [t2]), "_printString", [])]), "__comma", [unescape("%20sends/sec")]);
+return self;},
+source: unescape('jstinyBenchmarks%0A%09%220%20jstinyBenchmarks%22%0A%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%20jsbenchmark%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%2028.%0A%09%5Bt2%20%3A%3D%20Date%20millisecondsToRun%3A%20%5Br%20%3A%3D%20n2%20jsbenchFib%5D.%0A%09t2%20%3C%201000%5D%20whileTrue%3A%5Bn2%20%3A%3D%20n2%20+%201%5D.%20%0A%09%22Note%3A%20%23jsbenchFib%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:", "jsbenchmark", unescape("%3C"), unescape("*"), "jsbenchFib", unescape("+"), unescape("%2C"), "printString", unescape("/")],
+referencedClasses: [smalltalk.Date]
+}),
+smalltalk.Number);
+

+ 1 - 0
js/Benchfib.js

@@ -18,6 +18,7 @@ referencedClasses: []
 smalltalk.Benchfib.klass);
 
 
+smalltalk.setup(smalltalk.Benchfib);
 smalltalk.addMethod(
 '_benchFib',
 smalltalk.method({

+ 1469 - 0
js/Canvas.deploy.js

@@ -0,0 +1,1469 @@
+smalltalk.addClass('CanvasRenderingContext', smalltalk.Object, [], 'Canvas');
+smalltalk.addMethod(
+'_fillStyle_',
+smalltalk.method({
+selector: 'fillStyle:',
+category: 'drawing paths',
+fn: function (aString){
+var self=this;
+self.fillStyle = String(aString);
+return self;},
+source: unescape('fillStyle%3A%20aString%0A%09%3Cself.fillStyle%20%3D%20String%28aString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_beginPath',
+smalltalk.method({
+selector: 'beginPath',
+category: 'drawing paths',
+fn: function (){
+var self=this;
+self.beginPath();
+return self;},
+source: unescape('beginPath%0A%09%3Cself.beginPath%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_closePath',
+smalltalk.method({
+selector: 'closePath',
+category: 'drawing paths',
+fn: function (){
+var self=this;
+self.closePath();
+return self;},
+source: unescape('closePath%0A%09%3Cself.closePath%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_fill',
+smalltalk.method({
+selector: 'fill',
+category: 'drawing paths',
+fn: function (){
+var self=this;
+self.fill();
+return self;},
+source: unescape('fill%0A%09%3Cself.fill%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_stroke',
+smalltalk.method({
+selector: 'stroke',
+category: 'drawing paths',
+fn: function (){
+var self=this;
+self.stroke();
+return self;},
+source: unescape('stroke%0A%09%3Cself.stroke%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_moveTo_',
+smalltalk.method({
+selector: 'moveTo:',
+category: 'drawing paths',
+fn: function (aPoint){
+var self=this;
+self.moveTo(aPoint._x(), aPoint._y());
+return self;},
+source: unescape('moveTo%3A%20aPoint%0A%09%3Cself.moveTo%28aPoint._x%28%29%2C%20aPoint._y%28%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_lineTo_',
+smalltalk.method({
+selector: 'lineTo:',
+category: 'drawing paths',
+fn: function (aPoint){
+var self=this;
+self.lineTo(aPoint._x(), aPoint._y());
+return self;},
+source: unescape('lineTo%3A%20aPoint%0A%09%3Cself.lineTo%28aPoint._x%28%29%2C%20aPoint._y%28%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_arcTo_radius_startAngle_endAngle_anticlockwise_',
+smalltalk.method({
+selector: 'arcTo:radius:startAngle:endAngle:anticlockwise:',
+category: 'drawing arcs',
+fn: function (aPoint, aNumber, aNumber2, aNumber3, aBoolean){
+var self=this;
+self.arc(aPoint._x(), aPoint._y(), aNumber, aNumber2, aNumber3, aBoolean);
+return self;},
+source: unescape('arcTo%3A%20aPoint%20radius%3A%20aNumber%20startAngle%3A%20aNumber2%20endAngle%3A%20aNumber3%20anticlockwise%3A%20aBoolean%0A%09%3Cself.arc%28aPoint._x%28%29%2C%20aPoint._y%28%29%2C%20aNumber%2C%20aNumber2%2C%20aNumber3%2C%20aBoolean%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_arcTo_radius_',
+smalltalk.method({
+selector: 'arcTo:radius:',
+category: 'drawing arcs',
+fn: function (aPoint, aNumber){
+var self=this;
+smalltalk.send(self, "_arcTo_radius_startAngle_endAngle_anticlockwise_", [aPoint, aNumber, (0), smalltalk.send(smalltalk.send(smalltalk.Number, "_pi", []), "__star", [(2)]), false]);
+return self;},
+source: unescape('arcTo%3A%20aPoint%20radius%3A%20aNumber%0A%09self%20arcTo%3A%20aPoint%20radius%3A%20aNumber%20startAngle%3A%200%20endAngle%3A%20Number%20pi%20*%202%20anticlockwise%3A%20false'),
+messageSends: ["arcTo:radius:startAngle:endAngle:anticlockwise:", unescape("*"), "pi"],
+referencedClasses: [smalltalk.Number]
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_fillRectFrom_to_',
+smalltalk.method({
+selector: 'fillRectFrom:to:',
+category: 'drawing rectangles',
+fn: function (aPoint, anotherPoint){
+var self=this;
+self.fillRect(aPoint._x(), aPoint._y(), anotherPoint._x(), anotherPoint._y());
+return self;},
+source: unescape('fillRectFrom%3A%20aPoint%20to%3A%20anotherPoint%0A%09%3Cself.fillRect%28aPoint._x%28%29%2C%20aPoint._y%28%29%2C%20anotherPoint._x%28%29%2C%20anotherPoint._y%28%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_strokeRectFrom_to_',
+smalltalk.method({
+selector: 'strokeRectFrom:to:',
+category: 'drawing rectangles',
+fn: function (aPoint, anotherPoint){
+var self=this;
+self.strokeRect(aPoint._x(), aPoint._y(), anotherPoint._x(), anotherPoint._y());
+return self;},
+source: unescape('strokeRectFrom%3A%20aPoint%20to%3A%20anotherPoint%0A%09%3Cself.strokeRect%28aPoint._x%28%29%2C%20aPoint._y%28%29%2C%20anotherPoint._x%28%29%2C%20anotherPoint._y%28%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_clearRectFrom_to_',
+smalltalk.method({
+selector: 'clearRectFrom:to:',
+category: 'drawing rectangles',
+fn: function (aPoint, anotherPoint){
+var self=this;
+self.fillRect(aPoint._x(), aPoint._y(), anotherPoint._x(), anotherPoint._y());
+return self;},
+source: unescape('clearRectFrom%3A%20aPoint%20to%3A%20anotherPoint%0A%09%3Cself.fillRect%28aPoint._x%28%29%2C%20aPoint._y%28%29%2C%20anotherPoint._x%28%29%2C%20anotherPoint._y%28%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_strokeStyle_',
+smalltalk.method({
+selector: 'strokeStyle:',
+category: 'drawing paths',
+fn: function (aString){
+var self=this;
+self.strokeStyle = String(aString);
+return self;},
+source: unescape('strokeStyle%3A%20aString%0A%09%3Cself.strokeStyle%20%3D%20String%28aString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+smalltalk.addMethod(
+'_lineWidth_',
+smalltalk.method({
+selector: 'lineWidth:',
+category: 'drawing paths',
+fn: function (aNumber){
+var self=this;
+self.lineWidth = aNumber;
+return self;},
+source: unescape('lineWidth%3A%20aNumber%0A%09%3Cself.lineWidth%20%3D%20aNumber%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext);
+
+
+smalltalk.addMethod(
+'_tagBrush_',
+smalltalk.method({
+selector: 'tagBrush:',
+category: 'instance creation',
+fn: function (aTagBrush){
+var self=this;
+return aTagBrush._element().getContext('2d');
+return self;},
+source: unescape('tagBrush%3A%20aTagBrush%0A%09%3Creturn%20aTagBrush._element%28%29.getContext%28%272d%27%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasRenderingContext.klass);
+
+
+smalltalk.setup(smalltalk.CanvasRenderingContext);
+smalltalk.addClass('HTMLCanvas', smalltalk.Object, ['root'], 'Canvas');
+smalltalk.addMethod(
+'_root_',
+smalltalk.method({
+selector: 'root:',
+category: 'accessing',
+fn: function (aTagBrush){
+var self=this;
+self['@root']=aTagBrush;
+return self;},
+source: unescape('root%3A%20aTagBrush%0A%20%20%20%20root%20%3A%3D%20aTagBrush'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_root',
+smalltalk.method({
+selector: 'root',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@root'];
+return self;},
+source: unescape('root%0A%20%20%20%20%5Eroot'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+smalltalk.send(self['@root'], "_ifNil_", [(function(){return self['@root']=smalltalk.send(smalltalk.TagBrush, "_fromString_canvas_", ["div", self]);})]);
+return self;},
+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: [smalltalk.nil]
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_with_',
+smalltalk.method({
+selector: 'with:',
+category: 'adding',
+fn: function (anObject){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_root", []), "_with_", [anObject]);
+return self;},
+source: unescape('with%3A%20anObject%0A%20%20%20%20%5Eself%20root%20with%3A%20anObject'),
+messageSends: ["with:", "root"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_newTag_',
+smalltalk.method({
+selector: 'newTag:',
+category: 'tags',
+fn: function (aString){
+var self=this;
+return smalltalk.send(smalltalk.TagBrush, "_fromString_canvas_", [aString, self]);
+return self;},
+source: unescape('newTag%3A%20aString%0A%20%20%20%20%5ETagBrush%20fromString%3A%20aString%20canvas%3A%20self'),
+messageSends: ["fromString:canvas:"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_tag_',
+smalltalk.method({
+selector: 'tag:',
+category: 'tags',
+fn: function (aString){
+var self=this;
+return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send(self, "_newTag_", [aString])]);
+return self;},
+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(
+'_h1',
+smalltalk.method({
+selector: 'h1',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["h1"]);
+return self;},
+source: unescape('h1%0A%20%20%20%20%5Eself%20tag%3A%20%27h1%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_h2',
+smalltalk.method({
+selector: 'h2',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["h2"]);
+return self;},
+source: unescape('h2%0A%20%20%20%20%5Eself%20tag%3A%20%27h2%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_h3',
+smalltalk.method({
+selector: 'h3',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["h3"]);
+return self;},
+source: unescape('h3%0A%20%20%20%20%5Eself%20tag%3A%20%27h3%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_h4',
+smalltalk.method({
+selector: 'h4',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["h4"]);
+return self;},
+source: unescape('h4%0A%20%20%20%20%5Eself%20tag%3A%20%27h4%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_h5',
+smalltalk.method({
+selector: 'h5',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["h5"]);
+return self;},
+source: unescape('h5%0A%20%20%20%20%5Eself%20tag%3A%20%27h5%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_h6',
+smalltalk.method({
+selector: 'h6',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["h6"]);
+return self;},
+source: unescape('h6%0A%20%20%20%20%5Eself%20tag%3A%20%27h6%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_p',
+smalltalk.method({
+selector: 'p',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["p"]);
+return self;},
+source: unescape('p%0A%20%20%20%20%5Eself%20tag%3A%20%27p%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_div',
+smalltalk.method({
+selector: 'div',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["div"]);
+return self;},
+source: unescape('div%0A%20%20%20%20%5Eself%20tag%3A%20%27div%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_span',
+smalltalk.method({
+selector: 'span',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["span"]);
+return self;},
+source: unescape('span%0A%20%20%20%20%5Eself%20tag%3A%20%27span%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_img',
+smalltalk.method({
+selector: 'img',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["img"]);
+return self;},
+source: unescape('img%0A%20%20%20%20%5Eself%20tag%3A%20%27img%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_ul',
+smalltalk.method({
+selector: 'ul',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["ul"]);
+return self;},
+source: unescape('ul%0A%20%20%20%20%5Eself%20tag%3A%20%27ul%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_ol',
+smalltalk.method({
+selector: 'ol',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["ol"]);
+return self;},
+source: unescape('ol%0A%20%20%20%20%5Eself%20tag%3A%20%27ol%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_li',
+smalltalk.method({
+selector: 'li',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["li"]);
+return self;},
+source: unescape('li%0A%20%20%20%20%5Eself%20tag%3A%20%27li%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_table',
+smalltalk.method({
+selector: 'table',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["table"]);
+return self;},
+source: unescape('table%0A%20%20%20%20%5Eself%20tag%3A%20%27table%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_tr',
+smalltalk.method({
+selector: 'tr',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["tr"]);
+return self;},
+source: unescape('tr%0A%20%20%20%20%5Eself%20tag%3A%20%27tr%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_td',
+smalltalk.method({
+selector: 'td',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["td"]);
+return self;},
+source: unescape('td%20%0A%20%20%20%20%5Eself%20tag%3A%20%27td%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_th',
+smalltalk.method({
+selector: 'th',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["th"]);
+return self;},
+source: unescape('th%0A%20%20%20%20%5Eself%20tag%3A%20%27th%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_form',
+smalltalk.method({
+selector: 'form',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["form"]);
+return self;},
+source: unescape('form%0A%20%20%20%20%5Eself%20tag%3A%20%27form%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_input',
+smalltalk.method({
+selector: 'input',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["input"]);
+return self;},
+source: unescape('input%0A%20%20%20%20%5Eself%20tag%3A%20%27input%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_button',
+smalltalk.method({
+selector: 'button',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["button"]);
+return self;},
+source: unescape('button%0A%20%20%20%20%5Eself%20tag%3A%20%27button%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_select',
+smalltalk.method({
+selector: 'select',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["select"]);
+return self;},
+source: unescape('select%0A%20%20%20%20%5Eself%20tag%3A%20%27select%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_option',
+smalltalk.method({
+selector: 'option',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["option"]);
+return self;},
+source: unescape('option%0A%20%20%20%20%5Eself%20tag%3A%20%27option%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_textarea',
+smalltalk.method({
+selector: 'textarea',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["textarea"]);
+return self;},
+source: unescape('textarea%0A%20%20%20%20%5Eself%20tag%3A%20%27textarea%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_a',
+smalltalk.method({
+selector: 'a',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["a"]);
+return self;},
+source: unescape('a%0A%20%20%20%20%5Eself%20tag%3A%20%27a%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_canvas',
+smalltalk.method({
+selector: 'canvas',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["canvas"]);
+return self;},
+source: unescape('canvas%0A%09%5Eself%20tag%3A%20%27canvas%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_initializeFromJQuery_',
+smalltalk.method({
+selector: 'initializeFromJQuery:',
+category: 'initialization',
+fn: function (aJQuery){
+var self=this;
+self['@root']=smalltalk.send(smalltalk.TagBrush, "_fromJQuery_canvas_", [aJQuery, self]);
+return self;},
+source: unescape('initializeFromJQuery%3A%20aJQuery%0A%20%20%20%20root%20%3A%3D%20TagBrush%20fromJQuery%3A%20aJQuery%20canvas%3A%20self'),
+messageSends: ["fromJQuery:canvas:"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_pre',
+smalltalk.method({
+selector: 'pre',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["pre"]);
+return self;},
+source: unescape('pre%0A%20%20%20%20%5Eself%20tag%3A%20%27pre%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_code',
+smalltalk.method({
+selector: 'code',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["code"]);
+return self;},
+source: unescape('code%0A%20%20%20%20%5Eself%20tag%3A%20%27code%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_br',
+smalltalk.method({
+selector: 'br',
+category: 'tags',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["br"]);
+return self;},
+source: unescape('br%0A%20%20%20%20%5Eself%20tag%3A%20%27br%27'),
+messageSends: ["tag:"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+
+
+smalltalk.addMethod(
+'_onJQuery_',
+smalltalk.method({
+selector: 'onJQuery:',
+category: 'instance creation',
+fn: function (aJQuery){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_initializeFromJQuery_", [aJQuery]);smalltalk.send($rec, "_initialize", []);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_basicNew", []));
+return self;},
+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.klass);
+
+
+smalltalk.setup(smalltalk.HTMLCanvas);
+smalltalk.addClass('TagBrush', smalltalk.Object, ['canvas', 'element'], 'Canvas');
+smalltalk.addMethod(
+'_contents_',
+smalltalk.method({
+selector: 'contents:',
+category: 'adding',
+fn: function (anObject){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []);
+smalltalk.send(self, "_append_", [anObject]);
+return self;},
+source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20asJQuery%20empty.%0A%20%20%20%20self%20append%3A%20anObject'),
+messageSends: ["empty", "asJQuery", "append:"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_addBrush_',
+smalltalk.method({
+selector: 'addBrush:',
+category: 'adding',
+fn: function (aTagBrush){
+var self=this;
+smalltalk.send(self, "_appendChild_", [smalltalk.send(aTagBrush, "_element", [])]);
+return aTagBrush;
+return self;},
+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.TagBrush);
+
+smalltalk.addMethod(
+'_with_',
+smalltalk.method({
+selector: 'with:',
+category: 'adding',
+fn: function (anObject){
+var self=this;
+smalltalk.send(self, "_append_", [anObject]);
+return self;},
+source: unescape('with%3A%20anObject%0A%20%20%20%20self%20append%3A%20anObject'),
+messageSends: ["append:"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_append_',
+smalltalk.method({
+selector: 'append:',
+category: 'adding',
+fn: function (anObject){
+var self=this;
+smalltalk.send(anObject, "_appendToBrush_", [self]);
+return self;},
+source: unescape('append%3A%20anObject%0A%20%20%20%20anObject%20appendToBrush%3A%20self'),
+messageSends: ["appendToBrush:"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_appendToBrush_',
+smalltalk.method({
+selector: 'appendToBrush:',
+category: 'adding',
+fn: function (aTagBrush){
+var self=this;
+smalltalk.send(aTagBrush, "_addBrush_", [self]);
+return self;},
+source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20addBrush%3A%20self'),
+messageSends: ["addBrush:"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_appendBlock_',
+smalltalk.method({
+selector: 'appendBlock:',
+category: 'adding',
+fn: function (aBlock){
+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 self;},
+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.TagBrush);
+
+smalltalk.addMethod(
+'_appendChild_',
+smalltalk.method({
+selector: 'appendChild:',
+category: 'adding',
+fn: function (anElement){
+var self=this;
+self['@element'].appendChild(anElement);
+return self;},
+source: unescape('appendChild%3A%20anElement%0A%20%20%20%20%3Cself%5B%27@element%27%5D.appendChild%28anElement%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_appendString_',
+smalltalk.method({
+selector: 'appendString:',
+category: 'adding',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_appendChild_", [smalltalk.send(self, "_createTextNodeFor_", [aString])]);
+return self;},
+source: unescape('appendString%3A%20aString%0A%20%20%20%20self%20appendChild%3A%20%28self%20createTextNodeFor%3A%20aString%29'),
+messageSends: ["appendChild:", "createTextNodeFor:"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_at_put_',
+smalltalk.method({
+selector: 'at:put:',
+category: 'attributes',
+fn: function (aString, aValue){
+var self=this;
+self['@element'].setAttribute(aString, aValue);
+return self;},
+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.TagBrush);
+
+smalltalk.addMethod(
+'_removeAt_',
+smalltalk.method({
+selector: 'removeAt:',
+category: 'attributes',
+fn: function (aString){
+var self=this;
+self['@element'].removeAttribute(aString);
+return self;},
+source: unescape('removeAt%3A%20aString%0A%20%20%20%20%3Cself%5B%27@element%27%5D.removeAttribute%28aString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_class_',
+smalltalk.method({
+selector: 'class:',
+category: 'attributes',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_at_put_", ["class", aString]);
+return self;},
+source: unescape('class%3A%20aString%0A%20%20%20%20self%20at%3A%20%27class%27%20put%3A%20aString'),
+messageSends: ["at:put:"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_id_',
+smalltalk.method({
+selector: 'id:',
+category: 'attributes',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_at_put_", ["id", aString]);
+return self;},
+source: unescape('id%3A%20aString%0A%20%20%20%20self%20at%3A%20%27id%27%20put%3A%20aString'),
+messageSends: ["at:put:"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_src_',
+smalltalk.method({
+selector: 'src:',
+category: 'attributes',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_at_put_", ["src", aString]);
+return self;},
+source: unescape('src%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27src%27%20put%3A%20aString'),
+messageSends: ["at:put:"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_href_',
+smalltalk.method({
+selector: 'href:',
+category: 'attributes',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_at_put_", ["href", aString]);
+return self;},
+source: unescape('href%3A%20aString%0A%20%20%20%20self%20at%3A%20%27href%27%20put%3A%20aString'),
+messageSends: ["at:put:"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_title_',
+smalltalk.method({
+selector: 'title:',
+category: 'attributes',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_at_put_", ["title", aString]);
+return self;},
+source: unescape('title%3A%20aString%0A%20%20%20%20self%20at%3A%20%27title%27%20put%3A%20aString'),
+messageSends: ["at:put:"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_style_',
+smalltalk.method({
+selector: 'style:',
+category: 'attributes',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_at_put_", ["style", aString]);
+return self;},
+source: unescape('style%3A%20aString%0A%20%20%20%20self%20at%3A%20%27style%27%20put%3A%20aString'),
+messageSends: ["at:put:"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_initializeFromString_canvas_',
+smalltalk.method({
+selector: 'initializeFromString:canvas:',
+category: 'initialization',
+fn: function (aString, aCanvas){
+var self=this;
+self['@element']=smalltalk.send(self, "_createElementFor_", [aString]);
+self['@canvas']=aCanvas;
+return self;},
+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.TagBrush);
+
+smalltalk.addMethod(
+'_element',
+smalltalk.method({
+selector: 'element',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@element'];
+return self;},
+source: unescape('element%0A%20%20%20%20%5Eelement'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_asJQuery',
+smalltalk.method({
+selector: 'asJQuery',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.JQuery._from_(jQuery(self['@element']));
+return self;},
+source: unescape('asJQuery%0A%09%3Creturn%20smalltalk.JQuery._from_%28jQuery%28self%5B%27@element%27%5D%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_asJQueryDo_',
+smalltalk.method({
+selector: 'asJQueryDo:',
+category: 'converting',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_asJQuery", [])]);
+return self;},
+source: unescape('asJQueryDo%3A%20aBlock%0A%20%20%20%20aBlock%20value%3A%20self%20asJQuery'),
+messageSends: ["value:", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_onKeyDown_',
+smalltalk.method({
+selector: 'onKeyDown:',
+category: 'events',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["keydown", aBlock]);
+return self;},
+source: unescape('onKeyDown%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27keydown%27%20do%3A%20aBlock'),
+messageSends: ["on:do:", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_onKeyPress_',
+smalltalk.method({
+selector: 'onKeyPress:',
+category: 'events',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["keypress", aBlock]);
+return self;},
+source: unescape('onKeyPress%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27keypress%27%20do%3A%20aBlock'),
+messageSends: ["on:do:", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_onKeyUp_',
+smalltalk.method({
+selector: 'onKeyUp:',
+category: 'events',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["keyup", aBlock]);
+return self;},
+source: unescape('onKeyUp%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27keyup%27%20do%3A%20aBlock'),
+messageSends: ["on:do:", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_onFocus_',
+smalltalk.method({
+selector: 'onFocus:',
+category: 'events',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["focus", aBlock]);
+return self;},
+source: unescape('onFocus%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27focus%27%20do%3A%20aBlock'),
+messageSends: ["on:do:", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_onBlur_',
+smalltalk.method({
+selector: 'onBlur:',
+category: 'events',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["blur", aBlock]);
+return self;},
+source: unescape('onBlur%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27blur%27%20do%3A%20aBlock'),
+messageSends: ["on:do:", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_onChange_',
+smalltalk.method({
+selector: 'onChange:',
+category: 'events',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["change", aBlock]);
+return self;},
+source: unescape('onChange%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27change%27%20do%3A%20aBlock'),
+messageSends: ["on:do:", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_onClick_',
+smalltalk.method({
+selector: 'onClick:',
+category: 'events',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["click", aBlock]);
+return self;},
+source: unescape('onClick%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27click%27%20do%3A%20aBlock'),
+messageSends: ["on:do:", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_createElementFor_',
+smalltalk.method({
+selector: 'createElementFor:',
+category: 'private',
+fn: function (aString){
+var self=this;
+return document.createElement(String(aString));
+return self;},
+source: unescape('createElementFor%3A%20aString%0A%09%3Creturn%20document.createElement%28String%28aString%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_createTextNodeFor_',
+smalltalk.method({
+selector: 'createTextNodeFor:',
+category: 'private',
+fn: function (aString){
+var self=this;
+return document.createTextNode(String(aString));
+return self;},
+source: unescape('createTextNodeFor%3A%20aString%0A%09%3Creturn%20document.createTextNode%28String%28aString%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_initializeFromJQuery_canvas_',
+smalltalk.method({
+selector: 'initializeFromJQuery:canvas:',
+category: 'initialization',
+fn: function (aJQuery, aCanvas){
+var self=this;
+self['@element']=smalltalk.send(smalltalk.send(aJQuery, "_jquery", []), "_get_", [(0)]);
+self['@canvas']=aCanvas;
+return self;},
+source: unescape('initializeFromJQuery%3A%20aJQuery%20canvas%3A%20aCanvas%0A%20%20%20%20element%20%3A%3D%20aJQuery%20jquery%20get%3A%200.%0A%20%20%20%20canvas%20%3A%3D%20aCanvas'),
+messageSends: ["get:", "jquery"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
+
+smalltalk.addMethod(
+'_fromString_canvas_',
+smalltalk.method({
+selector: 'fromString:canvas:',
+category: 'instance creation',
+fn: function (aString, aCanvas){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_initializeFromString_canvas_", [aString, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;},
+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.TagBrush.klass);
+
+smalltalk.addMethod(
+'_fromJQuery_canvas_',
+smalltalk.method({
+selector: 'fromJQuery:canvas:',
+category: 'instance creation',
+fn: function (aJQuery, aCanvas){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_initializeFromJQuery_canvas_", [aJQuery, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;},
+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.TagBrush.klass);
+
+
+smalltalk.setup(smalltalk.TagBrush);
+smalltalk.addClass('Widget', smalltalk.Object, [], 'Canvas');
+smalltalk.addMethod(
+'_appendToBrush_',
+smalltalk.method({
+selector: 'appendToBrush:',
+category: 'adding',
+fn: function (aTagBrush){
+var self=this;
+smalltalk.send(self, "_appendToJQuery_", [smalltalk.send(aTagBrush, "_asJQuery", [])]);
+return self;},
+source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20self%20appendToJQuery%3A%20aTagBrush%20asJQuery'),
+messageSends: ["appendToJQuery:", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.Widget);
+
+smalltalk.addMethod(
+'_appendToJQuery_',
+smalltalk.method({
+selector: 'appendToJQuery:',
+category: 'adding',
+fn: function (aJQuery){
+var self=this;
+smalltalk.send(self, "_renderOn_", [smalltalk.send(smalltalk.HTMLCanvas, "_onJQuery_", [aJQuery])]);
+return self;},
+source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20self%20renderOn%3A%20%28HTMLCanvas%20onJQuery%3A%20aJQuery%29'),
+messageSends: ["renderOn:", "onJQuery:"],
+referencedClasses: [smalltalk.HTMLCanvas]
+}),
+smalltalk.Widget);
+
+smalltalk.addMethod(
+'_alert_',
+smalltalk.method({
+selector: 'alert:',
+category: 'actions',
+fn: function (aString){
+var self=this;
+alert(aString);
+return self;},
+source: unescape('alert%3A%20aString%0A%20%20%20%20%3Calert%28aString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Widget);
+
+smalltalk.addMethod(
+'_confirm_',
+smalltalk.method({
+selector: 'confirm:',
+category: 'actions',
+fn: function (aString){
+var self=this;
+return window.confirm(aString);
+return self;},
+source: unescape('confirm%3A%20aString%0A%20%20%20%20%3Creturn%20window.confirm%28aString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Widget);
+
+smalltalk.addMethod(
+'_prompt_',
+smalltalk.method({
+selector: 'prompt:',
+category: 'actions',
+fn: function (aString){
+var self=this;
+return smalltalk.send(self, "_prompt_default_", [aString, ""]);
+return self;},
+source: unescape('prompt%3A%20aString%0A%20%20%20%20%5Eself%20prompt%3A%20aString%20default%3A%20%27%27'),
+messageSends: ["prompt:default:"],
+referencedClasses: []
+}),
+smalltalk.Widget);
+
+smalltalk.addMethod(
+'_prompt_default_',
+smalltalk.method({
+selector: 'prompt:default:',
+category: 'actions',
+fn: function (aString, anotherString){
+var self=this;
+return window.prompt(aString, anotherString);
+return self;},
+source: unescape('prompt%3A%20aString%20default%3A%20anotherString%0A%20%20%20%20%3Creturn%20window.prompt%28aString%2C%20anotherString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Widget);
+
+smalltalk.addMethod(
+'_renderOn_',
+smalltalk.method({
+selector: 'renderOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+self;
+return self;},
+source: unescape('renderOn%3A%20html%0A%20%20%20%20self'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Widget);
+
+
+
+smalltalk.setup(smalltalk.Widget);
+smalltalk.addClass('CanvasBrush', smalltalk.TagBrush, [], 'Canvas');
+smalltalk.addMethod(
+'_createElement',
+smalltalk.method({
+selector: 'createElement',
+category: 'private',
+fn: function (){
+var self=this;
+return document.createElement('canvas');
+return self;},
+source: unescape('createElement%0A%09%3Creturn%20document.createElement%28%27canvas%27%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasBrush);
+
+smalltalk.addMethod(
+'_initializeWithCanvas_',
+smalltalk.method({
+selector: 'initializeWithCanvas:',
+category: 'initialization',
+fn: function (aCanvas){
+var self=this;
+canvas=aCanvas;
+return self;},
+source: unescape('initializeWithCanvas%3A%20aCanvas%0A%09canvas%20%3A%3D%20aCanvas'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.CanvasBrush);
+
+
+smalltalk.addMethod(
+'_canvas_',
+smalltalk.method({
+selector: 'canvas:',
+category: 'instance creation',
+fn: function (aCanvas){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_initializeWithCanvas_", [aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;},
+source: unescape('canvas%3A%20aCanvas%0A%09%5Eself%20new%0A%09%09initializeWithCanvas%3A%20aCanvas%3B%0A%09%09yourself'),
+messageSends: ["initializeWithCanvas:", "yourself", "new"],
+referencedClasses: []
+}),
+smalltalk.CanvasBrush.klass);
+
+
+smalltalk.setup(smalltalk.CanvasBrush);
+smalltalk.addMethod(
+'_appendToBrush_',
+smalltalk.method({
+selector: 'appendToBrush:',
+category: '*Canvas',
+fn: function (aTagBrush){
+var self=this;
+smalltalk.send(aTagBrush, "_append_", [smalltalk.send(self, "_asString", [])]);
+return self;},
+source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20append%3A%20self%20asString'),
+messageSends: ["append:", "asString"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_appendToBrush_',
+smalltalk.method({
+selector: 'appendToBrush:',
+category: '*Canvas',
+fn: function (aTagBrush){
+var self=this;
+smalltalk.send(aTagBrush, "_appendBlock_", [self]);
+return self;},
+source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20appendBlock%3A%20self'),
+messageSends: ["appendBlock:"],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_appendToBrush_',
+smalltalk.method({
+selector: 'appendToBrush:',
+category: '*Canvas',
+fn: function (aTagBrush){
+var self=this;
+smalltalk.send(aTagBrush, "_appendString_", [self]);
+return self;},
+source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20appendString%3A%20self'),
+messageSends: ["appendString:"],
+referencedClasses: []
+}),
+smalltalk.String);
+

+ 5 - 0
js/Canvas.js

@@ -226,6 +226,7 @@ referencedClasses: []
 smalltalk.CanvasRenderingContext.klass);
 
 
+smalltalk.setup(smalltalk.CanvasRenderingContext);
 smalltalk.addClass('HTMLCanvas', smalltalk.Object, ['root'], 'Canvas');
 smalltalk.addMethod(
 '_root_',
@@ -770,6 +771,7 @@ referencedClasses: []
 smalltalk.HTMLCanvas.klass);
 
 
+smalltalk.setup(smalltalk.HTMLCanvas);
 smalltalk.addClass('TagBrush', smalltalk.Object, ['canvas', 'element'], 'Canvas');
 smalltalk.addMethod(
 '_contents_',
@@ -1261,6 +1263,7 @@ referencedClasses: []
 smalltalk.TagBrush.klass);
 
 
+smalltalk.setup(smalltalk.TagBrush);
 smalltalk.addClass('Widget', smalltalk.Object, [], 'Canvas');
 smalltalk.addMethod(
 '_appendToBrush_',
@@ -1369,6 +1372,7 @@ smalltalk.Widget);
 
 
 
+smalltalk.setup(smalltalk.Widget);
 smalltalk.addClass('CanvasBrush', smalltalk.TagBrush, [], 'Canvas');
 smalltalk.addMethod(
 '_createElement',
@@ -1417,6 +1421,7 @@ referencedClasses: []
 smalltalk.CanvasBrush.klass);
 
 
+smalltalk.setup(smalltalk.CanvasBrush);
 smalltalk.addMethod(
 '_appendToBrush_',
 smalltalk.method({

ファイルの差分が大きいため隠しています
+ 1172 - 0
js/Compiler.deploy.js


ファイルの差分が大きいため隠しています
+ 18 - 2
js/Compiler.js


+ 808 - 0
js/Examples.deploy.js

@@ -0,0 +1,808 @@
+smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples');
+smalltalk.addMethod(
+'_increase',
+smalltalk.method({
+selector: 'increase',
+category: 'actions',
+fn: function (){
+var self=this;
+self['@count']=smalltalk.send(self['@count'], "__plus", [(1)]);
+smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]);
+return self;},
+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);
+
+smalltalk.addMethod(
+'_decrease',
+smalltalk.method({
+selector: 'decrease',
+category: 'actions',
+fn: function (){
+var self=this;
+self['@count']=smalltalk.send(self['@count'], "__minus", [(1)]);
+smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]);
+return self;},
+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(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.Widget);
+self['@count']=(0);
+return self;},
+source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20count%20%3A%3D%200'),
+messageSends: ["initialize"],
+referencedClasses: []
+}),
+smalltalk.Counter);
+
+smalltalk.addMethod(
+'_renderOn_',
+smalltalk.method({
+selector: 'renderOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+self['@header']=(function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_h1", []));
+(function($rec){smalltalk.send($rec, "_with_", [unescape("++")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_increase", []);})]);})(smalltalk.send(html, "_button", []));
+(function($rec){smalltalk.send($rec, "_with_", [unescape("--")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_decrease", []);})]);})(smalltalk.send(html, "_button", []));
+return self;},
+source: unescape('renderOn%3A%20html%0A%20%20%20%20header%20%3A%3D%20html%20h1%20%0A%09with%3A%20count%20asString%3B%0A%09yourself.%0A%20%20%20%20html%20button%0A%09with%3A%20%27++%27%3B%0A%09onClick%3A%20%5Bself%20increase%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27--%27%3B%0A%09onClick%3A%20%5Bself%20decrease%5D'),
+messageSends: ["with:", "asString", "yourself", "h1", "onClick:", "increase", "button", "decrease"],
+referencedClasses: []
+}),
+smalltalk.Counter);
+
+
+
+smalltalk.setup(smalltalk.Counter);
+smalltalk.addClass('Tetris', smalltalk.Widget, ['renderingContext', 'timer', 'speed', 'score', 'rows', 'movingPiece'], 'Examples');
+smalltalk.addMethod(
+'_width',
+smalltalk.method({
+selector: 'width',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_class", []), "_width", []);
+return self;},
+source: unescape('width%0A%09%5Eself%20class%20width'),
+messageSends: ["width", "class"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_height',
+smalltalk.method({
+selector: 'height',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_class", []), "_height", []);
+return self;},
+source: unescape('height%0A%09%5Eself%20class%20height'),
+messageSends: ["height", "class"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_squares',
+smalltalk.method({
+selector: 'squares',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_class", []), "_squares", []);
+return self;},
+source: unescape('squares%0A%09%5Eself%20class%20squares'),
+messageSends: ["squares", "class"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_gluePiece_',
+smalltalk.method({
+selector: 'gluePiece:',
+category: 'accessing',
+fn: function (aPiece){
+var self=this;
+smalltalk.send(aPiece, "_glueOn_", [self]);
+return self;},
+source: unescape('gluePiece%3A%20aPiece%0A%09aPiece%20glueOn%3A%20self'),
+messageSends: ["glueOn:"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_rows',
+smalltalk.method({
+selector: 'rows',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@rows'];
+return self;},
+source: unescape('rows%0A%09%22An%20array%20of%20rows.%20Each%20row%20is%20a%20collection%20of%20points.%22%0A%09%5Erows'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_addRow_',
+smalltalk.method({
+selector: 'addRow:',
+category: 'accessing',
+fn: function (aCollection){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_rows", []), "_add_", [aCollection]);
+return self;},
+source: unescape('addRow%3A%20aCollection%0A%09self%20rows%20add%3A%20aCollection'),
+messageSends: ["add:", "rows"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_startNewGame',
+smalltalk.method({
+selector: 'startNewGame',
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_newGame", []);
+smalltalk.send(self['@timer'], "_ifNotNil_", [(function(){return smalltalk.send(self['@timer'], "_clearInterval", []);})]);
+self['@timer']=smalltalk.send((function(){return smalltalk.send(self, "_nextStep", []);}), "_valueWithInterval_", [self['@speed']]);
+return self;},
+source: unescape('startNewGame%0A%09self%20newGame.%0A%09timer%20ifNotNil%3A%20%5Btimer%20clearInterval%5D.%0A%09timer%20%3A%3D%20%5Bself%20nextStep%5D%20valueWithInterval%3A%20speed'),
+messageSends: ["newGame", "ifNotNil:", "clearInterval", "valueWithInterval:", "nextStep"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_nextStep',
+smalltalk.method({
+selector: 'nextStep',
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(self['@movingPiece'], "_ifNil_", [(function(){return smalltalk.send(self, "_newPiece", []);})]);
+smalltalk.send(smalltalk.send(self['@movingPiece'], "_canMoveIn_", [self]), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@movingPiece'], "_position_", [smalltalk.send(smalltalk.send(self['@movingPiece'], "_position", []), "__plus", [smalltalk.send((0), "__at", [(1)])])]);}), (function(){return smalltalk.send(self, "_newPiece", []);})]);
+smalltalk.send(self, "_redraw", []);
+return self;},
+source: unescape('nextStep%0A%09movingPiece%20ifNil%3A%20%5Bself%20newPiece%5D.%0A%09%28movingPiece%20canMoveIn%3A%20self%29%0A%09%09ifTrue%3A%20%5BmovingPiece%20position%3A%20movingPiece%20position%20+%20%280@1%29%5D%0A%09%09ifFalse%3A%20%5Bself%20newPiece%5D.%0A%09self%20redraw'),
+messageSends: ["ifNil:", "newPiece", "ifTrue:ifFalse:", "canMoveIn:", "position:", unescape("+"), "position", unescape("@"), "redraw"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_redraw',
+smalltalk.method({
+selector: 'redraw',
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(self['@renderingContext'], "_clearRectFrom_to_", [smalltalk.send((0), "__at", [smalltalk.send(self, "_width", [])]), smalltalk.send((0), "__at", [smalltalk.send(self, "_height", [])])]);
+(function($rec){smalltalk.send($rec, "_drawMap", []);return smalltalk.send($rec, "_drawPiece", []);})(self);
+return self;},
+source: unescape('redraw%0A%09renderingContext%20clearRectFrom%3A%200@%20self%20width%20to%3A%200@%20self%20height.%0A%09self%20%0A%09%09drawMap%3B%0A%09%09drawPiece'),
+messageSends: ["clearRectFrom:to:", unescape("@"), "width", "height", "drawMap", "drawPiece"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_drawMap',
+smalltalk.method({
+selector: 'drawMap',
+category: 'actions',
+fn: function (){
+var self=this;
+(function($rec){smalltalk.send($rec, "_fillStyle_", [unescape("%23fafafa")]);return smalltalk.send($rec, "_fillRectFrom_to_", [smalltalk.send((0), "__at", [(0)]), smalltalk.send(smalltalk.send(self, "_width", []), "__at", [smalltalk.send(self, "_height", [])])]);})(self['@renderingContext']);
+(function($rec){smalltalk.send($rec, "_lineWidth_", [(0.5)]);return smalltalk.send($rec, "_strokeStyle_", [unescape("%23999")]);})(self['@renderingContext']);
+smalltalk.send((0), "_to_do_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_squares", []), "_x", []), (function(each){var x=nil;
+x=smalltalk.send(each, "__star", [smalltalk.send(smalltalk.send(self, "_class", []), "_squareSize", [])]);return smalltalk.send(self, "_drawLineFrom_to_", [smalltalk.send(x, "__at", [(0)]), smalltalk.send(x, "__at", [smalltalk.send(self, "_height", [])])]);})]);
+smalltalk.send((0), "_to_do_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_squares", []), "_y", []), (function(each){var y=nil;
+y=smalltalk.send(each, "__star", [smalltalk.send(smalltalk.send(self, "_class", []), "_squareSize", [])]);return smalltalk.send(self, "_drawLineFrom_to_", [smalltalk.send((0), "__at", [y]), smalltalk.send(smalltalk.send(self, "_width", []), "__at", [y])]);})]);
+return self;},
+source: unescape('drawMap%0A%09renderingContext%20%0A%09%09fillStyle%3A%20%27%23fafafa%27%3B%0A%09%09fillRectFrom%3A%200@0%20to%3A%20self%20width@self%20height.%0A%09renderingContext%20%0A%09%09lineWidth%3A%200.5%3B%0A%09%09strokeStyle%3A%20%27%23999%27.%0A%090%20to%3A%20self%20class%20squares%20x%20do%3A%20%5B%3Aeach%20%7C%20%7C%20x%20%7C%0A%09%09x%20%3A%3D%20each%20*%20self%20class%20squareSize.%0A%09%09self%20drawLineFrom%3A%20x@0%20to%3A%20x@self%20height%5D.%0A%090%20to%3A%20self%20class%20squares%20y%20do%3A%20%5B%3Aeach%20%7C%20%7C%20y%20%7C%0A%09%09y%20%3A%3D%20each%20*%20self%20class%20squareSize.%0A%09%09self%20drawLineFrom%3A%200@y%20to%3A%20self%20width@y%5D.'),
+messageSends: ["fillStyle:", "fillRectFrom:to:", unescape("@"), "width", "height", "lineWidth:", "strokeStyle:", "to:do:", "x", "squares", "class", unescape("*"), "squareSize", "drawLineFrom:to:", "y"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_drawLineFrom_to_',
+smalltalk.method({
+selector: 'drawLineFrom:to:',
+category: 'actions',
+fn: function (aPoint, anotherPoint){
+var self=this;
+(function($rec){smalltalk.send($rec, "_beginPath", []);smalltalk.send($rec, "_moveTo_", [aPoint]);smalltalk.send($rec, "_lineTo_", [anotherPoint]);return smalltalk.send($rec, "_stroke", []);})(self['@renderingContext']);
+return self;},
+source: unescape('drawLineFrom%3A%20aPoint%20to%3A%20anotherPoint%0A%09renderingContext%20%0A%09%09beginPath%3B%0A%09%09moveTo%3A%20aPoint%3B%0A%09%09lineTo%3A%20anotherPoint%3B%0A%09%09stroke'),
+messageSends: ["beginPath", "moveTo:", "lineTo:", "stroke"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_newGame',
+smalltalk.method({
+selector: 'newGame',
+category: 'actions',
+fn: function (){
+var self=this;
+self['@rows']=[];
+self['@movingPiece']=nil;
+self['@speed']=(200);
+self['@score']=(0);
+return self;},
+source: unescape('newGame%0A%09rows%20%3A%3D%20%23%28%29.%0A%09movingPiece%20%3A%3D%20nil.%0A%09speed%20%3A%3D%20200.%0A%09score%20%3A%3D%200'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_newPiece',
+smalltalk.method({
+selector: 'newPiece',
+category: 'actions',
+fn: function (){
+var self=this;
+self['@movingPiece']=smalltalk.send(smalltalk.TetrisPiece, "_atRandom", []);
+return self;},
+source: unescape('newPiece%0A%09movingPiece%20%3A%3D%20TetrisPiece%20atRandom'),
+messageSends: ["atRandom"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_drawRows',
+smalltalk.method({
+selector: 'drawRows',
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_rows", []), "_do_", [(function(each){return nil;})]);
+smalltalk.send(self['@movingPiece'], "_ifNotNil_", [(function(){return smalltalk.send(self['@movingPiece'], "_drawOn_", [self['@renderingContext']]);})]);
+return self;},
+source: unescape('drawRows%0A%09self%20rows%20do%3A%20%5B%3Aeach%20%7C%5D.%0A%09movingPiece%20ifNotNil%3A%20%5BmovingPiece%20drawOn%3A%20renderingContext%5D'),
+messageSends: ["do:", "rows", "ifNotNil:", "drawOn:"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_drawPiece',
+smalltalk.method({
+selector: 'drawPiece',
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(self['@movingPiece'], "_ifNotNil_", [(function(){return smalltalk.send(self['@movingPiece'], "_drawOn_", [self['@renderingContext']]);})]);
+return self;},
+source: unescape('drawPiece%0A%09movingPiece%20ifNotNil%3A%20%5B%0A%09%09movingPiece%20drawOn%3A%20renderingContext%5D'),
+messageSends: ["ifNotNil:", "drawOn:"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.Widget);
+smalltalk.send(self, "_newGame", []);
+return self;},
+source: unescape('initialize%0A%09super%20initialize.%0A%09self%20newGame'),
+messageSends: ["initialize", "newGame"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_renderOn_',
+smalltalk.method({
+selector: 'renderOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+(function($rec){smalltalk.send($rec, "_class_", ["tetris"]);return smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_h3", []), "_with_", ["Tetris"]);smalltalk.send(self, "_renderCanvasOn_", [html]);return smalltalk.send(self, "_renderButtonsOn_", [html]);})]);})(smalltalk.send(html, "_div", []));
+return self;},
+source: unescape('renderOn%3A%20html%0A%09html%20div%0A%09%09class%3A%20%27tetris%27%3B%0A%09%09with%3A%20%5B%0A%09%09%09html%20h3%20with%3A%20%27Tetris%27.%0A%09%09%09self%20renderCanvasOn%3A%20html.%0A%09%09%09self%20renderButtonsOn%3A%20html%5D'),
+messageSends: ["class:", "with:", "h3", "renderCanvasOn:", "renderButtonsOn:", "div"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_renderCanvasOn_',
+smalltalk.method({
+selector: 'renderCanvasOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+var canvas=nil;
+canvas=smalltalk.send(html, "_canvas", []);
+smalltalk.send(canvas, "_at_put_", ["width", smalltalk.send(smalltalk.send(self, "_width", []), "_asString", [])]);
+smalltalk.send(canvas, "_at_put_", ["height", smalltalk.send(smalltalk.send(self, "_height", []), "_asString", [])]);
+self['@renderingContext']=smalltalk.send(smalltalk.CanvasRenderingContext, "_tagBrush_", [canvas]);
+smalltalk.send(self, "_redraw", []);
+return self;},
+source: unescape('renderCanvasOn%3A%20html%0A%09%7C%20canvas%20%7C%0A%09canvas%20%3A%3D%20html%20canvas.%0A%09canvas%20at%3A%20%27width%27%20put%3A%20self%20width%20asString.%0A%09canvas%20at%3A%20%27height%27%20put%3A%20self%20height%20asString.%0A%09renderingContext%20%3A%3D%20CanvasRenderingContext%20tagBrush%3A%20canvas.%0A%09self%20redraw'),
+messageSends: ["canvas", "at:put:", "asString", "width", "height", "tagBrush:", "redraw"],
+referencedClasses: [smalltalk.CanvasRenderingContext]
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_renderButtonsOn_',
+smalltalk.method({
+selector: 'renderButtonsOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+(function($rec){smalltalk.send($rec, "_class_", ["tetris_buttons"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_with_", ["New game"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_startNewGame", []);})]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_with_", [unescape("play/pause")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_update", []);})]);})(smalltalk.send(html, "_button", []));})]);})(smalltalk.send(html, "_div", []));
+return self;},
+source: unescape('renderButtonsOn%3A%20html%0A%09html%20div%20%0A%09%09class%3A%20%27tetris_buttons%27%3B%0A%09%09with%3A%20%5B%0A%09%09%09html%20button%0A%09%09%09%09with%3A%20%27New%20game%27%3B%0A%09%09%09%09onClick%3A%20%5Bself%20startNewGame%5D.%0A%09%09%09html%20button%0A%09%09%09%09with%3A%20%27play/pause%27%3B%0A%09%09%09%09onClick%3A%20%5Bself%20update%5D%5D'),
+messageSends: ["class:", "with:", "onClick:", "startNewGame", "button", "update", "div"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+
+smalltalk.addMethod(
+'_squareSize',
+smalltalk.method({
+selector: 'squareSize',
+category: 'accessing',
+fn: function (){
+var self=this;
+return (22);
+return self;},
+source: unescape('squareSize%0A%09%5E22'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Tetris.klass);
+
+smalltalk.addMethod(
+'_width',
+smalltalk.method({
+selector: 'width',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_squareSize", []), "__star", [smalltalk.send(smalltalk.send(self, "_squares", []), "_x", [])]);
+return self;},
+source: unescape('width%0A%09%5Eself%20squareSize%20*%20%28self%20squares%20x%29'),
+messageSends: [unescape("*"), "squareSize", "x", "squares"],
+referencedClasses: []
+}),
+smalltalk.Tetris.klass);
+
+smalltalk.addMethod(
+'_height',
+smalltalk.method({
+selector: 'height',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_squareSize", []), "__star", [smalltalk.send(smalltalk.send(self, "_squares", []), "_y", [])]);
+return self;},
+source: unescape('height%0A%09%5Eself%20squareSize%20*%20%28self%20squares%20y%29'),
+messageSends: [unescape("*"), "squareSize", "y", "squares"],
+referencedClasses: []
+}),
+smalltalk.Tetris.klass);
+
+smalltalk.addMethod(
+'_squares',
+smalltalk.method({
+selector: 'squares',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send((10), "__at", [(15)]);
+return self;},
+source: unescape('squares%0A%09%5E10@15'),
+messageSends: [unescape("@")],
+referencedClasses: []
+}),
+smalltalk.Tetris.klass);
+
+
+smalltalk.setup(smalltalk.Tetris);
+smalltalk.addClass('TetrisPiece', smalltalk.Widget, ['rotation', 'position'], 'Examples');
+smalltalk.addMethod(
+'_rotation',
+smalltalk.method({
+selector: 'rotation',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self['@rotation'], "_ifNil_", [(function(){return self['@rotation']=(1);})]);
+return self;},
+source: unescape('rotation%0A%09%5Erotation%20ifNil%3A%20%5Brotation%20%3A%3D%201%5D'),
+messageSends: ["ifNil:"],
+referencedClasses: []
+}),
+smalltalk.TetrisPiece);
+
+smalltalk.addMethod(
+'_rotation_',
+smalltalk.method({
+selector: 'rotation:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self['@rotation']=aNumber;
+return self;},
+source: unescape('rotation%3A%20aNumber%0A%09rotation%20%3A%3D%20aNumber'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TetrisPiece);
+
+smalltalk.addMethod(
+'_position',
+smalltalk.method({
+selector: 'position',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self['@position'], "_ifNil_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Tetris, "_squares", []), "_x", []), "__slash", [(2)]), "__minus", [(1)]), "__at", [(0)]);})]);
+return self;},
+source: unescape('position%0A%09%5Eposition%20ifNil%3A%20%5B%28Tetris%20squares%20x%20/%202%29%20-1%20@%200%5D'),
+messageSends: ["ifNil:", unescape("@"), unescape("-"), unescape("/"), "x", "squares"],
+referencedClasses: [smalltalk.Tetris]
+}),
+smalltalk.TetrisPiece);
+
+smalltalk.addMethod(
+'_position_',
+smalltalk.method({
+selector: 'position:',
+category: 'accessing',
+fn: function (aPoint){
+var self=this;
+return self['@position']=aPoint;
+return self;},
+source: unescape('position%3A%20aPoint%0A%09%5Eposition%20%3A%3D%20aPoint'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TetrisPiece);
+
+smalltalk.addMethod(
+'_bounds',
+smalltalk.method({
+selector: 'bounds',
+category: 'accessing',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_subclassResponsibility", []);
+return self;},
+source: unescape('bounds%0A%09self%20subclassResponsibility'),
+messageSends: ["subclassResponsibility"],
+referencedClasses: []
+}),
+smalltalk.TetrisPiece);
+
+smalltalk.addMethod(
+'_color',
+smalltalk.method({
+selector: 'color',
+category: 'accessing',
+fn: function (){
+var self=this;
+return unescape("%23afa");
+return self;},
+source: unescape('color%0A%09%5E%27%23afa%27'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TetrisPiece);
+
+smalltalk.addMethod(
+'_height',
+smalltalk.method({
+selector: 'height',
+category: 'accessing',
+fn: function (){
+var self=this;
+return (2);
+return self;},
+source: unescape('height%0A%09%5E2'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TetrisPiece);
+
+smalltalk.addMethod(
+'_drawOn_',
+smalltalk.method({
+selector: 'drawOn:',
+category: 'drawing',
+fn: function (aRenderingContext){
+var self=this;
+smalltalk.send(aRenderingContext, "_fillStyle_", [smalltalk.send(self, "_color", [])]);
+smalltalk.send(smalltalk.send(self, "_bounds", []), "_do_", [(function(each){return (function($rec){smalltalk.send($rec, "_fillRectFrom_to_", [smalltalk.send(smalltalk.send(each, "__plus", [smalltalk.send(self, "_position", [])]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])]), smalltalk.send(smalltalk.send((1), "__at", [(1)]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])])]);smalltalk.send($rec, "_strokeStyle_", [unescape("%23999")]);smalltalk.send($rec, "_lineWidth_", [(2)]);return smalltalk.send($rec, "_strokeRectFrom_to_", [smalltalk.send(smalltalk.send(each, "__plus", [smalltalk.send(self, "_position", [])]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])]), smalltalk.send(smalltalk.send((1), "__at", [(1)]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])])]);})(aRenderingContext);})]);
+return self;},
+source: unescape('drawOn%3A%20aRenderingContext%0A%09aRenderingContext%20fillStyle%3A%20self%20color.%0A%09self%20bounds%20do%3A%20%5B%3Aeach%20%7C%0A%09%09aRenderingContext%20%0A%09%09%09fillRectFrom%3A%20each%20+%20self%20position*%20Tetris%20squareSize%20to%3A%201@1%20*%20Tetris%20squareSize%3B%0A%09%09%09strokeStyle%3A%20%27%23999%27%3B%0A%09%09%09lineWidth%3A%202%3B%0A%09%09%09strokeRectFrom%3A%20each%20+%20self%20position*%20Tetris%20squareSize%20to%3A%201@1%20*%20Tetris%20squareSize%5D'),
+messageSends: ["fillStyle:", "color", "do:", "bounds", "fillRectFrom:to:", unescape("*"), unescape("+"), "position", "squareSize", unescape("@"), "strokeStyle:", "lineWidth:", "strokeRectFrom:to:"],
+referencedClasses: [smalltalk.Tetris]
+}),
+smalltalk.TetrisPiece);
+
+smalltalk.addMethod(
+'_canMove',
+smalltalk.method({
+selector: 'canMove',
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_position", []), "_y", []), "__lt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Tetris, "_squares", []), "_y", []), "__minus", [smalltalk.send(self, "_height", [])])]);
+return self;},
+source: unescape('canMove%0A%09%5Eself%20position%20y%20%3C%20%28Tetris%20squares%20y%20-%20self%20height%29'),
+messageSends: [unescape("%3C"), "y", "position", unescape("-"), "squares", "height"],
+referencedClasses: [smalltalk.Tetris]
+}),
+smalltalk.TetrisPiece);
+
+smalltalk.addMethod(
+'_canMoveIn_',
+smalltalk.method({
+selector: 'canMoveIn:',
+category: 'testing',
+fn: function (aTetris){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_position", []), "_y", []), "__lt", [smalltalk.send(smalltalk.send(smalltalk.send(aTetris, "_squares", []), "_y", []), "__minus", [smalltalk.send(self, "_height", [])])]);
+return self;},
+source: unescape('canMoveIn%3A%20aTetris%0A%09%5Eself%20position%20y%20%3C%20%28aTetris%20squares%20y%20-%20self%20height%29'),
+messageSends: [unescape("%3C"), "y", "position", unescape("-"), "squares", "height"],
+referencedClasses: []
+}),
+smalltalk.TetrisPiece);
+
+
+smalltalk.addMethod(
+'_atRandom',
+smalltalk.method({
+selector: 'atRandom',
+category: 'instance creation',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_subclasses", []), "_at_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_subclasses", []), "_size", []), "_atRandom", [])]), "_new", []);
+return self;},
+source: unescape('atRandom%0A%09%5E%28self%20subclasses%20at%3A%20self%20subclasses%20size%20atRandom%29%20new'),
+messageSends: ["new", "at:", "subclasses", "atRandom", "size"],
+referencedClasses: []
+}),
+smalltalk.TetrisPiece.klass);
+
+
+smalltalk.setup(smalltalk.TetrisPiece);
+smalltalk.addClass('TetrisPieceO', smalltalk.TetrisPiece, [], 'Examples');
+smalltalk.addMethod(
+'_bounds',
+smalltalk.method({
+selector: 'bounds',
+category: 'accessing',
+fn: function (){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(1)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(1)])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.Array, "_new", []));
+return self;},
+source: unescape('bounds%0A%09%5EArray%20new%0A%09%09add%3A%200@0%3B%0A%09%09add%3A%200@1%3B%0A%09%09add%3A%201@0%3B%0A%09%09add%3A%201@1%3B%0A%09%09yourself'),
+messageSends: ["add:", unescape("@"), "yourself", "new"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.TetrisPieceO);
+
+
+
+smalltalk.setup(smalltalk.TetrisPieceO);
+smalltalk.addClass('TetrisPieceL', smalltalk.TetrisPiece, [], 'Examples');
+smalltalk.addMethod(
+'_bounds',
+smalltalk.method({
+selector: 'bounds',
+category: 'accessing',
+fn: function (){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(1)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(2)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(2)])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.Array, "_new", []));
+return self;},
+source: unescape('bounds%0A%09%5EArray%20new%0A%09%09add%3A%200@0%3B%0A%09%09add%3A%200@1%3B%0A%09%09add%3A%200@2%3B%0A%09%09add%3A%201@2%3B%0A%09%09yourself'),
+messageSends: ["add:", unescape("@"), "yourself", "new"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.TetrisPieceL);
+
+smalltalk.addMethod(
+'_color',
+smalltalk.method({
+selector: 'color',
+category: 'accessing',
+fn: function (){
+var self=this;
+return unescape("%23ffa");
+return self;},
+source: unescape('color%0A%09%5E%27%23ffa%27'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TetrisPieceL);
+
+smalltalk.addMethod(
+'_height',
+smalltalk.method({
+selector: 'height',
+category: 'accessing',
+fn: function (){
+var self=this;
+return (3);
+return self;},
+source: unescape('height%0A%09%5E3'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TetrisPieceL);
+
+
+
+smalltalk.setup(smalltalk.TetrisPieceL);
+smalltalk.addClass('TetrisPieceJ', smalltalk.TetrisPiece, [], 'Examples');
+smalltalk.addMethod(
+'_color',
+smalltalk.method({
+selector: 'color',
+category: 'accessing',
+fn: function (){
+var self=this;
+return unescape("%23aaf");
+return self;},
+source: unescape('color%0A%09%5E%27%23aaf%27'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TetrisPieceJ);
+
+smalltalk.addMethod(
+'_bounds',
+smalltalk.method({
+selector: 'bounds',
+category: 'accessing',
+fn: function (){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(1)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(2)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(2)])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.Array, "_new", []));
+return self;},
+source: unescape('bounds%0A%09%5EArray%20new%0A%09%09add%3A%201@0%3B%0A%09%09add%3A%201@1%3B%0A%09%09add%3A%201@2%3B%0A%09%09add%3A%200@2%3B%0A%09%09yourself'),
+messageSends: ["add:", unescape("@"), "yourself", "new"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.TetrisPieceJ);
+
+smalltalk.addMethod(
+'_height',
+smalltalk.method({
+selector: 'height',
+category: 'accessing',
+fn: function (){
+var self=this;
+return (3);
+return self;},
+source: unescape('height%0A%09%5E3'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TetrisPieceJ);
+
+
+
+smalltalk.setup(smalltalk.TetrisPieceJ);
+smalltalk.addClass('TetrisPieceI', smalltalk.TetrisPiece, [], 'Examples');
+smalltalk.addMethod(
+'_color',
+smalltalk.method({
+selector: 'color',
+category: 'accessing',
+fn: function (){
+var self=this;
+return unescape("%23faa");
+return self;},
+source: unescape('color%0A%09%5E%27%23faa%27'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TetrisPieceI);
+
+smalltalk.addMethod(
+'_bounds',
+smalltalk.method({
+selector: 'bounds',
+category: 'accessing',
+fn: function (){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(1)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(2)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(3)])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.Array, "_new", []));
+return self;},
+source: unescape('bounds%0A%09%5EArray%20new%0A%09%09add%3A%200@0%3B%0A%09%09add%3A%200@1%3B%0A%09%09add%3A%200@2%3B%0A%09%09add%3A%200@3%3B%0A%09%09yourself'),
+messageSends: ["add:", unescape("@"), "yourself", "new"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.TetrisPieceI);
+
+smalltalk.addMethod(
+'_height',
+smalltalk.method({
+selector: 'height',
+category: 'accessing',
+fn: function (){
+var self=this;
+return (4);
+return self;},
+source: unescape('height%0A%09%5E4'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TetrisPieceI);
+
+
+
+smalltalk.setup(smalltalk.TetrisPieceI);
+smalltalk.addClass('TetrisPieceT', smalltalk.TetrisPiece, [], 'Examples');
+smalltalk.addMethod(
+'_bounds',
+smalltalk.method({
+selector: 'bounds',
+category: 'accessing',
+fn: function (){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((2), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(1)])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.Array, "_new", []));
+return self;},
+source: unescape('bounds%0A%09%5EArray%20new%0A%09%09add%3A%200@0%3B%0A%09%09add%3A%201@0%3B%0A%09%09add%3A%202@0%3B%0A%09%09add%3A%201@1%3B%0A%09%09yourself'),
+messageSends: ["add:", unescape("@"), "yourself", "new"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.TetrisPieceT);
+
+smalltalk.addMethod(
+'_color',
+smalltalk.method({
+selector: 'color',
+category: 'accessing',
+fn: function (){
+var self=this;
+return unescape("%23aaf");
+return self;},
+source: unescape('color%0A%09%5E%27%23aaf%27'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TetrisPieceT);
+
+
+
+smalltalk.setup(smalltalk.TetrisPieceT);

+ 9 - 1
js/Examples.js

@@ -66,6 +66,7 @@ smalltalk.Counter);
 
 
 
+smalltalk.setup(smalltalk.Counter);
 smalltalk.addClass('Tetris', smalltalk.Widget, ['renderingContext', 'timer', 'speed', 'score', 'rows', 'movingPiece'], 'Examples');
 smalltalk.addMethod(
 '_width',
@@ -271,7 +272,7 @@ self['@movingPiece']=smalltalk.send(smalltalk.TetrisPiece, "_atRandom", []);
 return self;},
 source: unescape('newPiece%0A%09movingPiece%20%3A%3D%20TetrisPiece%20atRandom'),
 messageSends: ["atRandom"],
-referencedClasses: [smalltalk.TetrisPiece]
+referencedClasses: [smalltalk.nil]
 }),
 smalltalk.Tetris);
 
@@ -434,6 +435,7 @@ referencedClasses: []
 smalltalk.Tetris.klass);
 
 
+smalltalk.setup(smalltalk.Tetris);
 smalltalk.addClass('TetrisPiece', smalltalk.Widget, ['rotation', 'position'], 'Examples');
 smalltalk.addMethod(
 '_rotation',
@@ -603,6 +605,7 @@ referencedClasses: []
 smalltalk.TetrisPiece.klass);
 
 
+smalltalk.setup(smalltalk.TetrisPiece);
 smalltalk.addClass('TetrisPieceO', smalltalk.TetrisPiece, [], 'Examples');
 smalltalk.addMethod(
 '_bounds',
@@ -621,6 +624,7 @@ smalltalk.TetrisPieceO);
 
 
 
+smalltalk.setup(smalltalk.TetrisPieceO);
 smalltalk.addClass('TetrisPieceL', smalltalk.TetrisPiece, [], 'Examples');
 smalltalk.addMethod(
 '_bounds',
@@ -669,6 +673,7 @@ smalltalk.TetrisPieceL);
 
 
 
+smalltalk.setup(smalltalk.TetrisPieceL);
 smalltalk.addClass('TetrisPieceJ', smalltalk.TetrisPiece, [], 'Examples');
 smalltalk.addMethod(
 '_color',
@@ -717,6 +722,7 @@ smalltalk.TetrisPieceJ);
 
 
 
+smalltalk.setup(smalltalk.TetrisPieceJ);
 smalltalk.addClass('TetrisPieceI', smalltalk.TetrisPiece, [], 'Examples');
 smalltalk.addMethod(
 '_color',
@@ -765,6 +771,7 @@ smalltalk.TetrisPieceI);
 
 
 
+smalltalk.setup(smalltalk.TetrisPieceI);
 smalltalk.addClass('TetrisPieceT', smalltalk.TetrisPiece, [], 'Examples');
 smalltalk.addMethod(
 '_bounds',
@@ -798,3 +805,4 @@ smalltalk.TetrisPieceT);
 
 
 
+smalltalk.setup(smalltalk.TetrisPieceT);

ファイルの差分が大きいため隠しています
+ 1207 - 0
js/IDE.deploy.js


ファイルの差分が大きいため隠しています
+ 4 - 1
js/IDE.js


+ 900 - 0
js/JQuery.deploy.js

@@ -0,0 +1,900 @@
+smalltalk.addClass('JQuery', smalltalk.Object, ['jquery'], 'JQuery');
+smalltalk.addMethod(
+'_append_',
+smalltalk.method({
+selector: 'append:',
+category: 'DOM insertion',
+fn: function (anObject){
+var self=this;
+smalltalk.send(anObject, "_appendToJQuery_", [self]);
+return self;},
+source: unescape('append%3A%20anObject%0A%20%20%20%20%22Append%20anObject%20at%20the%20end%20of%20the%20element.%22%0A%20%20%20%20anObject%20appendToJQuery%3A%20self'),
+messageSends: ["appendToJQuery:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_appendElement_',
+smalltalk.method({
+selector: 'appendElement:',
+category: 'DOM insertion',
+fn: function (anElement){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["append", anElement]);
+return self;},
+source: unescape('appendElement%3A%20anElement%0A%20%20%20%20%22Append%20anElement%20at%20the%20end%20of%20the%20element.%0A%20%20%20%20%20Dont%27t%20call%20this%20method%20directly%2C%20use%20%23append%3A%20instead%22%0A%20%20%20%20self%20call%3A%20%27append%27%20withArgument%3A%20anElement'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_appendToJQuery_',
+smalltalk.method({
+selector: 'appendToJQuery:',
+category: 'DOM insertion',
+fn: function (aJQuery){
+var self=this;
+smalltalk.send(aJQuery, "_appendElement_", [self['@jquery']]);
+return self;},
+source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20aJQuery%20appendElement%3A%20jquery'),
+messageSends: ["appendElement:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_contents_',
+smalltalk.method({
+selector: 'contents:',
+category: 'DOM insertion',
+fn: function (anObject){
+var self=this;
+smalltalk.send(self, "_empty", []);
+smalltalk.send(self, "_append_", [anObject]);
+return self;},
+source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20empty.%0A%20%20%20%20self%20append%3A%20anObject'),
+messageSends: ["empty", "append:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_empty',
+smalltalk.method({
+selector: 'empty',
+category: 'DOM insertion',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_call_", ["empty"]);
+return self;},
+source: unescape('empty%0A%20%20%20%20%5Eself%20call%3A%20%27empty%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_jquery',
+smalltalk.method({
+selector: 'jquery',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@jquery'];
+return self;},
+source: unescape('jquery%0A%09%5Ejquery'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_removeAttribute_',
+smalltalk.method({
+selector: 'removeAttribute:',
+category: 'attributes',
+fn: function (aString){
+var self=this;
+return smalltalk.send(self, "_call_withArgument_", ["removeAttribute", aString]);
+return self;},
+source: unescape('removeAttribute%3A%20aString%0A%20%20%20%20%22Remove%20an%20attribute%20from%20each%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27removeAttribute%27%20withArgument%3A%20aString'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_attr_',
+smalltalk.method({
+selector: 'attr:',
+category: 'attributes',
+fn: function (aString){
+var self=this;
+return smalltalk.send(self, "_call_withArgument_", ["attr", aString]);
+return self;},
+source: unescape('attr%3A%20aString%0A%20%20%20%20%22Get%20the%20value%20of%20an%20attribute%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27attr%27%20withArgument%3A%20aString'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_val',
+smalltalk.method({
+selector: 'val',
+category: 'attributes',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_call_", ["val"]);
+return self;},
+source: unescape('val%0A%20%20%20%20%22Get%20the%20current%20value%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27val%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_val_',
+smalltalk.method({
+selector: 'val:',
+category: 'attributes',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["val", aString]);
+return self;},
+source: unescape('val%3A%20aString%0A%20%20%20%20self%20call%3A%20%27val%27%20withArgument%3A%20aString'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_cssAt_',
+smalltalk.method({
+selector: 'cssAt:',
+category: 'css',
+fn: function (aString){
+var self=this;
+return self['@jquery'].css(aString);
+return self;},
+source: unescape('cssAt%3A%20aString%0A%09%3Creturn%20self%5B%27@jquery%27%5D.css%28aString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_cssAt_put_',
+smalltalk.method({
+selector: 'cssAt:put:',
+category: 'css',
+fn: function (aString, anotherString){
+var self=this;
+self['@jquery'].css(aString, anotherString);
+return self;},
+source: unescape('cssAt%3A%20aString%20put%3A%20anotherString%0A%20%20%20%20%3Cself%5B%27@jquery%27%5D.css%28aString%2C%20anotherString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_addClass_',
+smalltalk.method({
+selector: 'addClass:',
+category: 'css',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["addClass", aString]);
+return self;},
+source: unescape('addClass%3A%20aString%0A%20%20%20%20%22Adds%20the%20specified%20class%28es%29%20to%20each%20of%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20self%20call%3A%20%27addClass%27%20withArgument%3A%20aString'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_removeClass_',
+smalltalk.method({
+selector: 'removeClass:',
+category: 'css',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["removeClass", aString]);
+return self;},
+source: unescape('removeClass%3A%20aString%0A%20%20%20%20%22Remove%20a%20single%20class%2C%20multiple%20classes%2C%20or%20all%20classes%20from%20each%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20self%20call%3A%20%27removeClass%27%20withArgument%3A%20aString'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_toggleClass_',
+smalltalk.method({
+selector: 'toggleClass:',
+category: 'css',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["toggleClass", aString]);
+return self;},
+source: unescape('toggleClass%3A%20aString%0A%20%20%20%20%22Add%20or%20remove%20one%20or%20more%20classes%20from%20each%20element%20in%20the%20set%20of%20matched%20elements%2C%20depending%20on%20either%20the%20class%27s%20presence%20or%20the%20value%20of%20the%20switch%20argument.%22%0A%20%20%20%20self%20call%3A%20%27toggleClass%27%20withArgument%3A%20aString'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_height',
+smalltalk.method({
+selector: 'height',
+category: 'css',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_call_", ["height"]);
+return self;},
+source: unescape('height%20%0A%20%20%20%20%22Get%20the%20current%20computed%20height%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27height%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_height_',
+smalltalk.method({
+selector: 'height:',
+category: 'css',
+fn: function (anInteger){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["height", anInteger]);
+return self;},
+source: unescape('height%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27height%27%20withArgument%3A%20anInteger'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_width_',
+smalltalk.method({
+selector: 'width:',
+category: 'css',
+fn: function (anInteger){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["width", anInteger]);
+return self;},
+source: unescape('width%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27width%27%20withArgument%3A%20anInteger'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_width',
+smalltalk.method({
+selector: 'width',
+category: 'css',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_call_", ["width"]);
+return self;},
+source: unescape('width%0A%20%20%20%20%22Get%20the%20current%20computed%20width%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27width%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_innerHeight',
+smalltalk.method({
+selector: 'innerHeight',
+category: 'css',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_call_", ["innerHeight"]);
+return self;},
+source: unescape('innerHeight%0A%20%20%20%20%22Get%20the%20current%20computed%20height%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%20but%20not%20border.%22%0A%20%20%20%20%5Eself%20call%3A%20%27innerHeight%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_innerWidth',
+smalltalk.method({
+selector: 'innerWidth',
+category: 'css',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_call_", ["innerWidth"]);
+return self;},
+source: unescape('innerWidth%0A%20%20%20%20%22Get%20the%20current%20computed%20width%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%20but%20not%20border.%22%0A%20%20%20%20%5Eself%20call%3A%20%27innerWidth%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_outerHeight',
+smalltalk.method({
+selector: 'outerHeight',
+category: 'css',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_call_", ["outerHeight"]);
+return self;},
+source: unescape('outerHeight%0A%20%20%20%20%22Get%20the%20current%20computed%20height%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%2C%20border%2C%20and%20optionally%20margin.%22%0A%20%20%20%20%5Eself%20call%3A%20%27outerHeight%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_outerWidth',
+smalltalk.method({
+selector: 'outerWidth',
+category: 'css',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_call_", ["outerWidth"]);
+return self;},
+source: unescape('outerWidth%0A%20%20%20%20%22Get%20the%20current%20computed%20width%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%20and%20border.%22%0A%20%20%20%20%5Eself%20call%3A%20%27outerWidth%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_top',
+smalltalk.method({
+selector: 'top',
+category: 'css',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_call_", ["position"]), "_basicAt_", ["top"]);
+return self;},
+source: unescape('top%0A%20%20%20%20%22Get%20the%20current%20y%20coordinate%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20offset%20parent.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27position%27%29%20basicAt%3A%20%27top%27'),
+messageSends: ["basicAt:", "call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_left',
+smalltalk.method({
+selector: 'left',
+category: 'css',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_call_", ["position"]), "_basicAt_", ["left"]);
+return self;},
+source: unescape('left%0A%20%20%20%20%22Get%20the%20current%20x%20coordinate%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20offset%20parent.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27position%27%29%20basicAt%3A%20%27left%27'),
+messageSends: ["basicAt:", "call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_offsetLeft',
+smalltalk.method({
+selector: 'offsetLeft',
+category: 'css',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_call_", ["offset"]), "_basicAt_", ["left"]);
+return self;},
+source: unescape('offsetLeft%0A%20%20%20%20%22Get%20the%20current%20coordinates%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20document.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27offset%27%29%20basicAt%3A%20%27left%27'),
+messageSends: ["basicAt:", "call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_offsetTop',
+smalltalk.method({
+selector: 'offsetTop',
+category: 'css',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_call_", ["offset"]), "_basicAt_", ["top"]);
+return self;},
+source: unescape('offsetTop%0A%20%20%20%20%22Get%20the%20current%20coordinates%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20document.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27offset%27%29%20basicAt%3A%20%27top%27'),
+messageSends: ["basicAt:", "call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_scrollLeft',
+smalltalk.method({
+selector: 'scrollLeft',
+category: 'css',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_call_", ["scrollLeft"]);
+return self;},
+source: unescape('scrollLeft%0A%20%20%20%20%22Get%20the%20current%20horizontal%20position%20of%20the%20scroll%20bar%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27scrollLeft%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_scrollTop',
+smalltalk.method({
+selector: 'scrollTop',
+category: 'css',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_call_", ["scrollTop"]);
+return self;},
+source: unescape('scrollTop%0A%20%20%20%20%22Get%20the%20current%20vertical%20position%20of%20the%20scroll%20bar%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27scrollTop%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_scrollLeft_',
+smalltalk.method({
+selector: 'scrollLeft:',
+category: 'css',
+fn: function (anInteger){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["scrollLeft", anInteger]);
+return self;},
+source: unescape('scrollLeft%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27scrollLeft%27%20withArgument%3A%20anInteger'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_scrollTop_',
+smalltalk.method({
+selector: 'scrollTop:',
+category: 'css',
+fn: function (anInteger){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["scrollTop", anInteger]);
+return self;},
+source: unescape('scrollTop%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27scrollTop%27%20withArgument%3A%20anInteger'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_focus',
+smalltalk.method({
+selector: 'focus',
+category: 'events',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_call_", ["focus"]);
+return self;},
+source: unescape('focus%0A%20%20%20%20self%20call%3A%20%27focus%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_show',
+smalltalk.method({
+selector: 'show',
+category: 'events',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_call_", ["show"]);
+return self;},
+source: unescape('show%0A%20%20%20%20self%20call%3A%20%27show%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_hide',
+smalltalk.method({
+selector: 'hide',
+category: 'events',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_call_", ["hide"]);
+return self;},
+source: unescape('hide%0A%20%20%20%20self%20call%3A%20%27hide%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_remove',
+smalltalk.method({
+selector: 'remove',
+category: 'events',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_call_", ["remove"]);
+return self;},
+source: unescape('remove%0A%20%20%20%20self%20call%3A%20%27remove%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_on_do_',
+smalltalk.method({
+selector: 'on:do:',
+category: 'events',
+fn: function (anEventString, aBlock){
+var self=this;
+self['@jquery'].bind(anEventString, function(e){aBlock(e, self)});
+return self;},
+source: unescape('on%3A%20anEventString%20do%3A%20aBlock%0A%20%20%20%20%22Attach%20aBlock%20for%20anEventString%20on%20the%20element%22%0A%20%20%20%20%3Cself%5B%27@jquery%27%5D.bind%28anEventString%2C%20function%28e%29%7BaBlock%28e%2C%20self%29%7D%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_removeEvents_',
+smalltalk.method({
+selector: 'removeEvents:',
+category: 'events',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["unbind", aString]);
+return self;},
+source: unescape('removeEvents%3A%20aString%0A%20%20%20%20%22Unbind%20all%20handlers%20attached%20to%20the%20event%20aString%22%0A%20%20%20%20self%20call%3A%20%27unbind%27%20withArgument%3A%20aString'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_initializeWithJQueryObject_',
+smalltalk.method({
+selector: 'initializeWithJQueryObject:',
+category: 'initialization',
+fn: function (anObject){
+var self=this;
+self['@jquery']=anObject;
+return self;},
+source: unescape('initializeWithJQueryObject%3A%20anObject%0A%20%20%20%20jquery%20%3A%3D%20anObject'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_call_',
+smalltalk.method({
+selector: 'call:',
+category: 'private',
+fn: function (aString){
+var self=this;
+return self['@jquery'][aString]();
+return self;},
+source: unescape('call%3A%20aString%0A%09%3Creturn%20self%5B%27@jquery%27%5D%5BaString%5D%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_call_withArgument_',
+smalltalk.method({
+selector: 'call:withArgument:',
+category: 'private',
+fn: function (aString, anObject){
+var self=this;
+return self['@jquery'][aString](anObject);
+return self;},
+source: unescape('call%3A%20aString%20withArgument%3A%20anObject%0A%20%20%20%20%3Creturn%20self%5B%27@jquery%27%5D%5BaString%5D%28anObject%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_hasClass_',
+smalltalk.method({
+selector: 'hasClass:',
+category: 'testing',
+fn: function (aString){
+var self=this;
+return smalltalk.send(self, "_call_withArgument_", ["hasClass", aString]);
+return self;},
+source: unescape('hasClass%3A%20aString%0A%20%20%20%20%22Determine%20whether%20any%20of%20the%20matched%20elements%20are%20assigned%20the%20given%20class.%22%0A%20%20%20%20%5Eself%20call%3A%20%27hasClass%27%20withArgument%3A%20aString'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+
+smalltalk.addMethod(
+'_fromString_',
+smalltalk.method({
+selector: 'fromString:',
+category: 'instance creation',
+fn: function (aString){
+var self=this;
+var newJQuery=nil;
+newJQuery = jQuery(String(aString));
+return smalltalk.send(self, "_from_", [newJQuery]);
+return self;},
+source: unescape('fromString%3A%20aString%0A%20%20%20%20%7C%20newJQuery%20%7C%0A%20%20%20%20%3CnewJQuery%20%3D%20jQuery%28String%28aString%29%29%3E.%0A%20%20%20%20%5Eself%20from%3A%20newJQuery'),
+messageSends: ["from:"],
+referencedClasses: []
+}),
+smalltalk.JQuery.klass);
+
+smalltalk.addMethod(
+'_from_',
+smalltalk.method({
+selector: 'from:',
+category: 'instance creation',
+fn: function (anObject){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_initializeWithJQueryObject_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;},
+source: unescape('from%3A%20anObject%0A%20%20%20%20%5Eself%20new%0A%09initializeWithJQueryObject%3A%20anObject%3B%0A%09yourself'),
+messageSends: ["initializeWithJQueryObject:", "yourself", "new"],
+referencedClasses: []
+}),
+smalltalk.JQuery.klass);
+
+smalltalk.addMethod(
+'_window',
+smalltalk.method({
+selector: 'window',
+category: 'instance creation',
+fn: function (){
+var self=this;
+return self._from_(jQuery(window));
+return self;},
+source: unescape('window%0A%09%3Creturn%20self._from_%28jQuery%28window%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery.klass);
+
+smalltalk.addMethod(
+'_body',
+smalltalk.method({
+selector: 'body',
+category: 'instance creation',
+fn: function (){
+var self=this;
+return self._from_(jQuery('body'));
+return self;},
+source: unescape('body%0A%09%3Creturn%20self._from_%28jQuery%28%27body%27%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery.klass);
+
+smalltalk.addMethod(
+'_document',
+smalltalk.method({
+selector: 'document',
+category: 'instance creation',
+fn: function (){
+var self=this;
+return self._from_(jQuery(document));
+return self;},
+source: unescape('document%0A%09%3Creturn%20self._from_%28jQuery%28document%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery.klass);
+
+smalltalk.addMethod(
+'_fromElement_',
+smalltalk.method({
+selector: 'fromElement:',
+category: 'instance creation',
+fn: function (anElement){
+var self=this;
+var newJQuery=nil;
+newJQuery = jQuery(anElement);
+return smalltalk.send(self, "_from_", [newJQuery]);
+return self;},
+source: unescape('fromElement%3A%20anElement%0A%20%20%20%20%7C%20newJQuery%20%7C%0A%20%20%20%20%3CnewJQuery%20%3D%20jQuery%28anElement%29%3E.%0A%20%20%20%20%5Eself%20from%3A%20newJQuery'),
+messageSends: ["from:"],
+referencedClasses: []
+}),
+smalltalk.JQuery.klass);
+
+smalltalk.addMethod(
+'_documentReady_',
+smalltalk.method({
+selector: 'documentReady:',
+category: 'instance creation',
+fn: function (aBlock){
+var self=this;
+jQuery(document).ready(aBlock);
+return self;},
+source: unescape('documentReady%3A%20aBlock%0A%09%3CjQuery%28document%29.ready%28aBlock%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery.klass);
+
+
+smalltalk.setup(smalltalk.JQuery);
+smalltalk.addClass('Ajax', smalltalk.Object, ['settings'], 'JQuery');
+smalltalk.Ajax.comment=unescape('instance%20variable%20names%3A%0A-%20settings%20%20A%20set%20of%20key/value%20pairs%20that%20configure%20the%20Ajax%20request.%20All%20settings%20are%20optional.%0A%0AFull%20list%20of%20settings%20options%20at%20http%3A//api.jquery.com/jQuery.ajax/')
+smalltalk.addMethod(
+'_at_',
+smalltalk.method({
+selector: 'at:',
+category: 'accessing',
+fn: function (aKey){
+var self=this;
+return smalltalk.send(self['@settings'], "_at_ifAbsent_", [aKey, (function(){return nil;})]);
+return self;},
+source: unescape('at%3A%20aKey%0A%20%20%20%20%5Esettings%20at%3A%20aKey%20ifAbsent%3A%20%5Bnil%5D'),
+messageSends: ["at:ifAbsent:"],
+referencedClasses: []
+}),
+smalltalk.Ajax);
+
+smalltalk.addMethod(
+'_at_put_',
+smalltalk.method({
+selector: 'at:put:',
+category: 'accessing',
+fn: function (aKey, aValue){
+var self=this;
+smalltalk.send(self['@settings'], "_at_put_", [aKey, aValue]);
+return self;},
+source: unescape('at%3A%20aKey%20put%3A%20aValue%0A%20%20%20%20settings%20at%3A%20aKey%20put%3A%20aValue'),
+messageSends: ["at:put:"],
+referencedClasses: []
+}),
+smalltalk.Ajax);
+
+smalltalk.addMethod(
+'_url',
+smalltalk.method({
+selector: 'url',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_at_", ["url"]);
+return self;},
+source: unescape('url%0A%20%20%20%20%5Eself%20at%3A%20%27url%27'),
+messageSends: ["at:"],
+referencedClasses: []
+}),
+smalltalk.Ajax);
+
+smalltalk.addMethod(
+'_url_',
+smalltalk.method({
+selector: 'url:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_at_put_", ["url", aString]);
+return self;},
+source: unescape('url%3A%20aString%0A%20%20%20%20self%20at%3A%20%27url%27%20put%3A%20aString'),
+messageSends: ["at:put:"],
+referencedClasses: []
+}),
+smalltalk.Ajax);
+
+smalltalk.addMethod(
+'_send',
+smalltalk.method({
+selector: 'send',
+category: 'actions',
+fn: function (){
+var self=this;
+jQuery.ajax(self['@settings']);
+return self;},
+source: unescape('send%0A%20%20%20%20%3CjQuery.ajax%28self%5B%27@settings%27%5D%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Ajax);
+
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+self['@settings']=smalltalk.send(smalltalk.Dictionary, "_new", []);
+return self;},
+source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20settings%20%3A%3D%20Dictionary%20new'),
+messageSends: ["initialize", "new"],
+referencedClasses: [smalltalk.Dictionary]
+}),
+smalltalk.Ajax);
+
+
+smalltalk.addMethod(
+'_url_',
+smalltalk.method({
+selector: 'url:',
+category: 'instance creation',
+fn: function (aString){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_url_", [aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;},
+source: unescape('url%3A%20aString%0A%20%20%20%20%5Eself%20new%0A%09url%3A%20aString%3B%0A%09yourself'),
+messageSends: ["url:", "yourself", "new"],
+referencedClasses: []
+}),
+smalltalk.Ajax.klass);
+
+
+smalltalk.setup(smalltalk.Ajax);
+smalltalk.addMethod(
+'_appendToJQuery_',
+smalltalk.method({
+selector: 'appendToJQuery:',
+category: '*JQuery',
+fn: function (aJQuery){
+var self=this;
+smalltalk.send(self, "_value_", [smalltalk.send(smalltalk.HTMLCanvas, "_onJQuery_", [aJQuery])]);
+return self;},
+source: unescape('appendToJQuery%3A%20aJQuery%0A%09self%20value%3A%20%28HTMLCanvas%20onJQuery%3A%20aJQuery%29'),
+messageSends: ["value:", "onJQuery:"],
+referencedClasses: [smalltalk.HTMLCanvas]
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_asJQuery',
+smalltalk.method({
+selector: 'asJQuery',
+category: '*JQuery',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.JQuery, "_fromString_", [self]);
+return self;},
+source: unescape('asJQuery%0A%20%20%20%20%5EJQuery%20fromString%3A%20self'),
+messageSends: ["fromString:"],
+referencedClasses: [smalltalk.JQuery]
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_appendToJQuery_',
+smalltalk.method({
+selector: 'appendToJQuery:',
+category: '*JQuery',
+fn: function (aJQuery){
+var self=this;
+aJQuery._appendElement_(String(self));
+return self;},
+source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20%3CaJQuery._appendElement_%28String%28self%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_appendToJQuery_',
+smalltalk.method({
+selector: 'appendToJQuery:',
+category: '*JQuery',
+fn: function (aJQuery){
+var self=this;
+smalltalk.send(aJQuery, "_appendElement_", [smalltalk.send(self['@root'], "_element", [])]);
+return self;},
+source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20aJQuery%20appendElement%3A%20root%20element'),
+messageSends: ["appendElement:", "element"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+

+ 2 - 0
js/JQuery.js

@@ -726,6 +726,7 @@ referencedClasses: []
 smalltalk.JQuery.klass);
 
 
+smalltalk.setup(smalltalk.JQuery);
 smalltalk.addClass('Ajax', smalltalk.Object, ['settings'], 'JQuery');
 smalltalk.Ajax.comment=unescape('instance%20variable%20names%3A%0A-%20settings%20%20A%20set%20of%20key/value%20pairs%20that%20configure%20the%20Ajax%20request.%20All%20settings%20are%20optional.%0A%0AFull%20list%20of%20settings%20options%20at%20http%3A//api.jquery.com/jQuery.ajax/')
 smalltalk.addMethod(
@@ -836,6 +837,7 @@ referencedClasses: []
 smalltalk.Ajax.klass);
 
 
+smalltalk.setup(smalltalk.Ajax);
 smalltalk.addMethod(
 '_appendToJQuery_',
 smalltalk.method({

+ 6791 - 0
js/Kernel.deploy.js

@@ -0,0 +1,6791 @@
+smalltalk.addClass('Object', smalltalk.nil, [], 'Kernel');
+smalltalk.addMethod(
+'__eq',
+smalltalk.method({
+selector: '=',
+category: 'comparing',
+fn: function (anObject){
+var self=this;
+return self == anObject;
+return self;},
+source: unescape('%3D%20anObject%0A%09%3Creturn%20self%20%3D%3D%20anObject%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_~_eq',
+smalltalk.method({
+selector: '~=',
+category: 'comparing',
+fn: function (anObject){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "__eq", [anObject]), "__eq_eq", [false]);
+return self;},
+source: unescape('%7E%3D%20anObject%0A%09%5E%28self%20%3D%20anObject%29%20%3D%3D%20false'),
+messageSends: [unescape("%3D%3D"), unescape("%3D")],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+
+return self;},
+source: unescape('initialize'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_yourself',
+smalltalk.method({
+selector: 'yourself',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self;
+return self;},
+source: unescape('yourself%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_class',
+smalltalk.method({
+selector: 'class',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.klass;
+return self;},
+source: unescape('class%0A%09%3Creturn%20self.klass%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_size',
+smalltalk.method({
+selector: 'size',
+category: 'accessing',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_error_", ["Object not indexable"]);
+return self;},
+source: unescape('size%0A%09self%20error%3A%20%27Object%20not%20indexable%27'),
+messageSends: ["error:"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_copy',
+smalltalk.method({
+selector: 'copy',
+category: 'copying',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_shallowCopy", []), "_postCopy", []);
+return self;},
+source: unescape('copy%0A%09%5Eself%20shallowCopy%20postCopy'),
+messageSends: ["postCopy", "shallowCopy"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_shallowCopy',
+smalltalk.method({
+selector: 'shallowCopy',
+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 self;},
+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(
+'_deepCopy',
+smalltalk.method({
+selector: 'deepCopy',
+category: 'copying',
+fn: function (){
+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;},
+source: unescape('deepCopy%0A%09%3C%20%20%20%20%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._deepCopy%28%29%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(
+'_postCopy',
+smalltalk.method({
+selector: 'postCopy',
+category: 'copying',
+fn: function (){
+var self=this;
+
+return self;},
+source: unescape('postCopy'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'__minus_gt',
+smalltalk.method({
+selector: '->',
+category: 'converting',
+fn: function (anObject){
+var self=this;
+return smalltalk.send(smalltalk.Association, "_key_value_", [self, anObject]);
+return self;},
+source: unescape('-%3E%20anObject%0A%09%5EAssociation%20key%3A%20self%20value%3A%20anObject'),
+messageSends: ["key:value:"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_asString',
+smalltalk.method({
+selector: 'asString',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_printString", []);
+return self;},
+source: unescape('asString%0A%09%5Eself%20printString'),
+messageSends: ["printString"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_asJavascript',
+smalltalk.method({
+selector: 'asJavascript',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_asString", []);
+return self;},
+source: unescape('asJavascript%0A%09%5Eself%20asString'),
+messageSends: ["asString"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_perform_',
+smalltalk.method({
+selector: 'perform:',
+category: 'message handling',
+fn: function (aSymbol){
+var self=this;
+return smalltalk.send(self, "_perform_withArguments_", [aSymbol, []]);
+return self;},
+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(
+'_perform_withArguments_',
+smalltalk.method({
+selector: 'perform:withArguments:',
+category: 'message handling',
+fn: function (aSymbol, aCollection){
+var self=this;
+return smalltalk.send(self, "_basicPerform_withArguments_", [smalltalk.send(aSymbol, "_asSelector", []), aCollection]);
+return self;},
+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(
+'_instVarAt_',
+smalltalk.method({
+selector: 'instVarAt:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+return self['@'+aString];
+return self;},
+source: unescape('instVarAt%3A%20aString%0A%09%3Creturn%20self%5B%27@%27+aString%5D%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_instVarAt_put_',
+smalltalk.method({
+selector: 'instVarAt:put:',
+category: 'accessing',
+fn: function (aString, anObject){
+var self=this;
+self['@' + aString] = anObject;
+return self;},
+source: unescape('instVarAt%3A%20aString%20put%3A%20anObject%0A%09%3Cself%5B%27@%27%20+%20aString%5D%20%3D%20anObject%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_basicAt_',
+smalltalk.method({
+selector: 'basicAt:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+return self[aString];
+return self;},
+source: unescape('basicAt%3A%20aString%0A%09%3Creturn%20self%5BaString%5D%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_basicAt_put_',
+smalltalk.method({
+selector: 'basicAt:put:',
+category: 'accessing',
+fn: function (aString, anObject){
+var self=this;
+return self[aString] = anObject;
+return self;},
+source: unescape('basicAt%3A%20aString%20put%3A%20anObject%0A%09%3Creturn%20self%5BaString%5D%20%3D%20anObject%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_error_',
+smalltalk.method({
+selector: 'error:',
+category: 'error handling',
+fn: function (aString){
+var self=this;
+smalltalk.send(smalltalk.Error, "_signal_", [aString]);
+return self;},
+source: unescape('error%3A%20aString%0A%09Error%20signal%3A%20aString'),
+messageSends: ["signal:"],
+referencedClasses: [smalltalk.Error]
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_subclassResponsibility',
+smalltalk.method({
+selector: 'subclassResponsibility',
+category: 'error handling',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_error_", ["This method is a responsibility of a subclass"]);
+return self;},
+source: unescape('subclassResponsibility%0A%09self%20error%3A%20%27This%20method%20is%20a%20responsibility%20of%20a%20subclass%27'),
+messageSends: ["error:"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_shouldNotImplement',
+smalltalk.method({
+selector: 'shouldNotImplement',
+category: 'error handling',
+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;},
+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(
+'_try_catch_',
+smalltalk.method({
+selector: 'try:catch:',
+category: 'error handling',
+fn: function (aBlock, anotherBlock){
+var self=this;
+try{aBlock()} catch(e) {anotherBlock(e)};
+return self;},
+source: unescape('try%3A%20aBlock%20catch%3A%20anotherBlock%0A%09%3Ctry%7BaBlock%28%29%7D%20catch%28e%29%20%7BanotherBlock%28e%29%7D%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_printString',
+smalltalk.method({
+selector: 'printString',
+category: 'printing',
+fn: function (){
+var self=this;
+return smalltalk.send("a ", "__comma", [smalltalk.send(smalltalk.send(self, "_class", []), "_name", [])]);
+return self;},
+source: unescape('printString%0A%09%5E%27a%20%27%2C%20self%20class%20name'),
+messageSends: [unescape("%2C"), "name", "class"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_printNl',
+smalltalk.method({
+selector: 'printNl',
+category: 'printing',
+fn: function (){
+var self=this;
+console.log(self);
+return self;},
+source: unescape('printNl%0A%09%3Cconsole.log%28self%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_isKindOf_',
+smalltalk.method({
+selector: 'isKindOf:',
+category: 'testing',
+fn: function (aClass){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_isMemberOf_", [aClass]), "_ifTrue_ifFalse_", [(function(){return true;}), (function(){return smalltalk.send(smalltalk.send(self, "_class", []), "_inheritsFrom_", [aClass]);})]);
+return self;},
+source: unescape('isKindOf%3A%20aClass%0A%09%5E%28self%20isMemberOf%3A%20aClass%29%0A%09%20%20%20%20ifTrue%3A%20%5Btrue%5D%0A%09%20%20%20%20ifFalse%3A%20%5Bself%20class%20inheritsFrom%3A%20aClass%5D'),
+messageSends: ["ifTrue:ifFalse:", "isMemberOf:", "inheritsFrom:", "class"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_isMemberOf_',
+smalltalk.method({
+selector: 'isMemberOf:',
+category: 'testing',
+fn: function (aClass){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [aClass]);
+return self;},
+source: unescape('isMemberOf%3A%20aClass%0A%09%5Eself%20class%20%3D%20aClass'),
+messageSends: [unescape("%3D"), "class"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_ifNil_',
+smalltalk.method({
+selector: 'ifNil:',
+category: 'testing',
+fn: function (aBlock){
+var self=this;
+return self;
+return self;},
+source: unescape('ifNil%3A%20aBlock%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_ifNil_ifNotNil_',
+smalltalk.method({
+selector: 'ifNil:ifNotNil:',
+category: 'testing',
+fn: function (aBlock, anotherBlock){
+var self=this;
+return smalltalk.send(anotherBlock, "_value", []);
+return self;},
+source: unescape('ifNil%3A%20aBlock%20ifNotNil%3A%20anotherBlock%0A%09%5EanotherBlock%20value'),
+messageSends: ["value"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_ifNotNil_',
+smalltalk.method({
+selector: 'ifNotNil:',
+category: 'testing',
+fn: function (aBlock){
+var self=this;
+return smalltalk.send(aBlock, "_value", []);
+return self;},
+source: unescape('ifNotNil%3A%20aBlock%0A%09%5EaBlock%20value'),
+messageSends: ["value"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_ifNotNil_ifNil_',
+smalltalk.method({
+selector: 'ifNotNil:ifNil:',
+category: 'testing',
+fn: function (aBlock, anotherBlock){
+var self=this;
+return smalltalk.send(aBlock, "_value", []);
+return self;},
+source: unescape('ifNotNil%3A%20aBlock%20ifNil%3A%20anotherBlock%0A%09%5EaBlock%20value'),
+messageSends: ["value"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_isNil',
+smalltalk.method({
+selector: 'isNil',
+category: 'testing',
+fn: function (){
+var self=this;
+return false;
+return self;},
+source: unescape('isNil%0A%09%5Efalse'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_notNil',
+smalltalk.method({
+selector: 'notNil',
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_isNil", []), "_not", []);
+return self;},
+source: unescape('notNil%0A%09%5Eself%20isNil%20not'),
+messageSends: ["not", "isNil"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_isClass',
+smalltalk.method({
+selector: 'isClass',
+category: 'testing',
+fn: function (){
+var self=this;
+return false;
+return self;},
+source: unescape('isClass%0A%09%5Efalse'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_isMetaclass',
+smalltalk.method({
+selector: 'isMetaclass',
+category: 'testing',
+fn: function (){
+var self=this;
+return false;
+return self;},
+source: unescape('isMetaclass%0A%09%5Efalse'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_isNumber',
+smalltalk.method({
+selector: 'isNumber',
+category: 'testing',
+fn: function (){
+var self=this;
+return false;
+return self;},
+source: unescape('isNumber%0A%09%5Efalse'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_isString',
+smalltalk.method({
+selector: 'isString',
+category: 'testing',
+fn: function (){
+var self=this;
+return false;
+return self;},
+source: unescape('isString%0A%09%5Efalse'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_isParseFailure',
+smalltalk.method({
+selector: 'isParseFailure',
+category: 'testing',
+fn: function (){
+var self=this;
+return false;
+return self;},
+source: unescape('isParseFailure%0A%09%5Efalse'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_basicPerform_',
+smalltalk.method({
+selector: 'basicPerform:',
+category: 'message handling',
+fn: function (aSymbol){
+var self=this;
+return smalltalk.send(self, "_basicPerform_withArguments_", [aSymbol, []]);
+return self;},
+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(
+'_basicPerform_withArguments_',
+smalltalk.method({
+selector: 'basicPerform:withArguments:',
+category: 'message handling',
+fn: function (aSymbol, aCollection){
+var self=this;
+return self[aSymbol].apply(self, aCollection);;
+return self;},
+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(
+'_basicDelete_',
+smalltalk.method({
+selector: 'basicDelete:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+delete self[aString];
+return self;},
+source: unescape('basicDelete%3A%20aString%0A%20%20%20%20%3Cdelete%20self%5BaString%5D%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_doesNotUnderstand_',
+smalltalk.method({
+selector: 'doesNotUnderstand:',
+category: 'error handling',
+fn: function (aMessage){
+var self=this;
+(function($rec){smalltalk.send($rec, "_receiver_", [self]);smalltalk.send($rec, "_message_", [aMessage]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send(smalltalk.MessageNotUnderstood, "_new", []));
+return self;},
+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: [smalltalk.nil]
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_asJSON',
+smalltalk.method({
+selector: 'asJSON',
+category: 'converting',
+fn: function (){
+var self=this;
+return JSON.stringify(self._asJSONObject());
+return self;},
+source: unescape('asJSON%0A%09%3Creturn%20JSON.stringify%28self._asJSONObject%28%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_asJSONObject',
+smalltalk.method({
+selector: 'asJSONObject',
+category: 'converting',
+fn: function (){
+var self=this;
+var object=nil;
+object=smalltalk.send(smalltalk.Object, "_new", []);
+smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_instanceVariableNames", []), "_do_", [(function(each){return smalltalk.send(object, "_basicAt_put_", [each, smalltalk.send(smalltalk.send(self, "_instVarAt_", [each]), "_asJSONObject", [])]);})]);
+return object;
+return self;},
+source: unescape('asJSONObject%0A%09%7C%20object%20%7C%0A%09object%20%3A%3D%20Object%20new.%0A%09self%20class%20instanceVariableNames%20do%3A%20%5B%3Aeach%20%7C%0A%09%09object%20basicAt%3A%20each%20put%3A%20%28self%20instVarAt%3A%20each%29%20asJSONObject%5D.%0A%09%5Eobject'),
+messageSends: ["new", "do:", "instanceVariableNames", "class", "basicAt:put:", "asJSONObject", "instVarAt:"],
+referencedClasses: [smalltalk.Object]
+}),
+smalltalk.Object);
+
+smalltalk.addMethod(
+'_halt',
+smalltalk.method({
+selector: 'halt',
+category: 'error handling',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_error_", ["Halt encountered"]);
+return self;},
+source: unescape('halt%0A%09self%20error%3A%20%27Halt%20encountered%27'),
+messageSends: ["error:"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
+
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+
+return self;},
+source: unescape('initialize%0A%09%22no%20op%22'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Object.klass);
+
+
+smalltalk.setup(smalltalk.Object);
+smalltalk.addClass('Smalltalk', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_classes',
+smalltalk.method({
+selector: 'classes',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.classes();
+return self;},
+source: unescape('classes%0A%09%3Creturn%20self.classes%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Smalltalk);
+
+smalltalk.addMethod(
+'_readJSON_',
+smalltalk.method({
+selector: 'readJSON:',
+category: 'accessing',
+fn: function (anObject){
+var self=this;
+return self.readJSObject(anObject);
+return self;},
+source: unescape('readJSON%3A%20anObject%0A%09%3Creturn%20self.readJSObject%28anObject%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Smalltalk);
+
+smalltalk.addMethod(
+'_at_',
+smalltalk.method({
+selector: 'at:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+return self[aString];
+return self;},
+source: unescape('at%3A%20aString%0A%09%3Creturn%20self%5BaString%5D%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Smalltalk);
+
+smalltalk.addMethod(
+'_removeClass_',
+smalltalk.method({
+selector: 'removeClass:',
+category: 'accessing',
+fn: function (aClass){
+var self=this;
+smalltalk.send(smalltalk.send(aClass, "_isMetaclass", []), "_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;},
+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.Smalltalk);
+
+
+smalltalk.Smalltalk.klass.iVarNames = ['current'];
+smalltalk.addMethod(
+'_current',
+smalltalk.method({
+selector: 'current',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk;
+return self;},
+source: unescape('current%0A%09%3Creturn%20smalltalk%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Smalltalk.klass);
+
+
+smalltalk.setup(smalltalk.Smalltalk);
+smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_new',
+smalltalk.method({
+selector: 'new',
+category: 'instance creation',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
+return self;},
+source: unescape('new%0A%09%5Eself%20basicNew%20initialize'),
+messageSends: ["initialize", "basicNew"],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_basicNew',
+smalltalk.method({
+selector: 'basicNew',
+category: 'instance creation',
+fn: function (){
+var self=this;
+return new self.fn();
+return self;},
+source: unescape('basicNew%0A%09%3Creturn%20new%20self.fn%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_name',
+smalltalk.method({
+selector: 'name',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.className || nil;
+return self;},
+source: unescape('name%0A%09%3Creturn%20self.className%20%7C%7C%20nil%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_superclass',
+smalltalk.method({
+selector: 'superclass',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.superclass || nil;
+return self;},
+source: unescape('superclass%0A%09%3Creturn%20self.superclass%20%7C%7C%20nil%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_subclasses',
+smalltalk.method({
+selector: 'subclasses',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.subclasses(self);
+return self;},
+source: unescape('subclasses%0A%09%3Creturn%20smalltalk.subclasses%28self%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_allSubclasses',
+smalltalk.method({
+selector: 'allSubclasses',
+category: 'accessing',
+fn: function (){
+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;
+return self;},
+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(
+'_withAllSubclasses',
+smalltalk.method({
+selector: 'withAllSubclasses',
+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, "_with_", [self]));
+return self;},
+source: unescape('withAllSubclasses%0A%09%5E%28Array%20with%3A%20self%29%20addAll%3A%20self%20allSubclasses%3B%20yourself'),
+messageSends: ["addAll:", "allSubclasses", "yourself", "with:"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_prototype',
+smalltalk.method({
+selector: 'prototype',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.fn.prototype;
+return self;},
+source: unescape('prototype%0A%09%3Creturn%20self.fn.prototype%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_methodDictionary',
+smalltalk.method({
+selector: 'methodDictionary',
+category: 'accessing',
+fn: function (){
+var self=this;
+var dict = smalltalk.Dictionary._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;},
+source: unescape('methodDictionary%0A%09%3Cvar%20dict%20%3D%20smalltalk.Dictionary._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(
+'_methodsFor_',
+smalltalk.method({
+selector: 'methodsFor:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_class_category_", [self, aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.ClassCategoryReader, "_new", []));
+return self;},
+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: [smalltalk.nil]
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_addCompiledMethod_',
+smalltalk.method({
+selector: 'addCompiledMethod:',
+category: 'accessing',
+fn: function (aMethod){
+var self=this;
+smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
+return self;},
+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(
+'_instanceVariableNames',
+smalltalk.method({
+selector: 'instanceVariableNames',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.iVarNames;
+return self;},
+source: unescape('instanceVariableNames%0A%09%3Creturn%20self.iVarNames%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_comment',
+smalltalk.method({
+selector: 'comment',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_basicAt_", ["comment"]), "_ifNil_", [(function(){return "";})]);
+return self;},
+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(
+'_comment_',
+smalltalk.method({
+selector: 'comment:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_basicAt_put_", ["comment", aString]);
+return self;},
+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(
+'_commentStamp',
+smalltalk.method({
+selector: 'commentStamp',
+category: 'accessing',
+fn: function (){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.ClassCommentReader, "_new", []));
+return self;},
+source: unescape('commentStamp%0A%20%20%20%20%5EClassCommentReader%20new%0A%09class%3A%20self%3B%0A%09yourself'),
+messageSends: ["class:", "yourself", "new"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_removeCompiledMethod_',
+smalltalk.method({
+selector: 'removeCompiledMethod:',
+category: 'accessing',
+fn: function (aMethod){
+var self=this;
+delete self.fn.prototype[aMethod.selector._asSelector()];
+	delete self.fn.prototype.methods[aMethod.selector];
+	smalltalk.init(self);;
+return self;},
+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(
+'_inheritsFrom_',
+smalltalk.method({
+selector: 'inheritsFrom:',
+category: 'instance creation',
+fn: function (aClass){
+var self=this;
+return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
+return self;},
+source: unescape('inheritsFrom%3A%20aClass%0A%09%5EaClass%20allSubclasses%20includes%3A%20self'),
+messageSends: ["includes:", "allSubclasses"],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_protocols',
+smalltalk.method({
+selector: 'protocols',
+category: 'accessing',
+fn: function (){
+var self=this;
+var protocols=nil;
+protocols=smalltalk.send(smalltalk.Array, "_new", []);
+smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(protocols, "_includes_", [smalltalk.send(each, "_category", [])]), "_ifFalse_", [(function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})]);})]);
+return smalltalk.send(protocols, "_sort", []);
+return self;},
+source: unescape('protocols%0A%20%20%20%20%7C%20protocols%20%7C%0A%20%20%20%20protocols%20%3A%3D%20Array%20new.%0A%20%20%20%20self%20methodDictionary%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20%28protocols%20includes%3A%20each%20category%29%20ifFalse%3A%20%5B%0A%09%09protocols%20add%3A%20each%20category%5D%5D.%0A%20%20%20%20%5Eprotocols%20sort'),
+messageSends: ["new", "do:", "methodDictionary", "ifFalse:", "includes:", "category", "add:", "sort"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_protocolsDo_',
+smalltalk.method({
+selector: 'protocolsDo:',
+category: 'accessing',
+fn: function (aBlock){
+var self=this;
+var methodsByCategory=nil;
+methodsByCategory=smalltalk.send(smalltalk.Dictionary, "_new", []);
+smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_values", []), "_do_", [(function(m){return smalltalk.send(smalltalk.send(methodsByCategory, "_at_ifAbsentPut_", [smalltalk.send(m, "_category", []), (function(){return smalltalk.send(smalltalk.Array, "_new", []);})]), "_add_", [m]);})]);
+smalltalk.send(smalltalk.send(self, "_protocols", []), "_do_", [(function(category){return smalltalk.send(aBlock, "_value_value_", [category, smalltalk.send(methodsByCategory, "_at_", [category])]);})]);
+return self;},
+source: unescape('protocolsDo%3A%20aBlock%0A%09%22Execute%20aBlock%20for%20each%20method%20category%20with%0A%09its%20collection%20of%20methods%20in%20the%20sort%20order%20of%20category%20name.%22%0A%0A%09%7C%20methodsByCategory%20%7C%0A%09methodsByCategory%20%3A%3D%20Dictionary%20new.%0A%09self%20methodDictionary%20values%20do%3A%20%5B%3Am%20%7C%0A%09%09%28methodsByCategory%20at%3A%20m%20category%20ifAbsentPut%3A%20%5BArray%20new%5D%29%0A%20%09%09%09add%3A%20m%5D.%20%0A%09self%20protocols%20do%3A%20%5B%3Acategory%20%7C%0A%09%09aBlock%20value%3A%20category%20value%3A%20%28methodsByCategory%20at%3A%20category%29%5D'),
+messageSends: ["new", "do:", "values", "methodDictionary", "add:", "at:ifAbsentPut:", "category", "protocols", "value:value:", "at:"],
+referencedClasses: [smalltalk.nil,smalltalk.Array]
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+'_allInstanceVariableNames',
+smalltalk.method({
+selector: 'allInstanceVariableNames',
+category: 'accessing',
+fn: function (){
+var self=this;
+var result=nil;
+result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", []);
+smalltalk.send(smalltalk.send(self, "_superclass", []), "_ifNotNil_", [(function(){return smalltalk.send(result, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allInstanceVariableNames", [])]);})]);
+return result;
+return self;},
+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(
+'_methodAt_',
+smalltalk.method({
+selector: 'methodAt:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+return smalltalk.methods(self)[aString];
+return self;},
+source: unescape('methodAt%3A%20aString%0A%09%3Creturn%20smalltalk.methods%28self%29%5BaString%5D%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
+
+
+smalltalk.setup(smalltalk.Behavior);
+smalltalk.addClass('Class', smalltalk.Behavior, [], 'Kernel');
+smalltalk.addMethod(
+'_category',
+smalltalk.method({
+selector: 'category',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.category;
+return self;},
+source: unescape('category%0A%09%3Creturn%20self.category%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Class);
+
+smalltalk.addMethod(
+'_category_',
+smalltalk.method({
+selector: 'category:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+self.category = aString;
+return self;},
+source: unescape('category%3A%20aString%0A%09%3Cself.category%20%3D%20aString%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Class);
+
+smalltalk.addMethod(
+'_subclass_instanceVariableNames_',
+smalltalk.method({
+selector: 'subclass:instanceVariableNames:',
+category: 'class creation',
+fn: function (aString, anotherString){
+var self=this;
+return smalltalk.send(self, "_subclass_instanceVariableNames_category_", [aString, anotherString, nil]);
+return self;},
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20category%3A%20nil'),
+messageSends: ["subclass:instanceVariableNames:category:"],
+referencedClasses: []
+}),
+smalltalk.Class);
+
+smalltalk.addMethod(
+'_subclass_instanceVariableNames_category_',
+smalltalk.method({
+selector: 'subclass:instanceVariableNames:category:',
+category: 'class creation',
+fn: function (aString, aString2, aString3){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.ClassBuilder, "_new", []), "_superclass_subclass_instanceVariableNames_category_", [self, aString, aString2, aString3]);
+return self;},
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%5EClassBuilder%20new%0A%09%20%20%20%20superclass%3A%20self%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3'),
+messageSends: ["superclass:subclass:instanceVariableNames:category:", "new"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.Class);
+
+smalltalk.addMethod(
+'_isClass',
+smalltalk.method({
+selector: 'isClass',
+category: 'testing',
+fn: function (){
+var self=this;
+return true;
+return self;},
+source: unescape('isClass%0A%09%5Etrue'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Class);
+
+smalltalk.addMethod(
+'_printString',
+smalltalk.method({
+selector: 'printString',
+category: 'printing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_name", []);
+return self;},
+source: unescape('printString%0A%09%5Eself%20name'),
+messageSends: ["name"],
+referencedClasses: []
+}),
+smalltalk.Class);
+
+smalltalk.addMethod(
+'_rename_',
+smalltalk.method({
+selector: 'rename:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+
+		smalltalk[aString] = self;
+		delete smalltalk[self.className];
+		self.className = aString;
+	;
+return self;},
+source: unescape('rename%3A%20aString%0A%09%3C%0A%09%09smalltalk%5BaString%5D%20%3D%20self%3B%0A%09%09delete%20smalltalk%5Bself.className%5D%3B%0A%09%09self.className%20%3D%20aString%3B%0A%09%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Class);
+
+
+
+smalltalk.setup(smalltalk.Class);
+smalltalk.addClass('Metaclass', smalltalk.Behavior, [], 'Kernel');
+smalltalk.addMethod(
+'_instanceClass',
+smalltalk.method({
+selector: 'instanceClass',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.instanceClass;
+return self;},
+source: unescape('instanceClass%0A%09%3Creturn%20self.instanceClass%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Metaclass);
+
+smalltalk.addMethod(
+'_instanceVariableNames_',
+smalltalk.method({
+selector: 'instanceVariableNames:',
+category: 'accessing',
+fn: function (aCollection){
+var self=this;
+smalltalk.send(smalltalk.send(smalltalk.ClassBuilder, "_new", []), "_class_instanceVariableNames_", [self, aCollection]);
+return self;},
+source: unescape('instanceVariableNames%3A%20aCollection%0A%09ClassBuilder%20new%0A%09%20%20%20%20class%3A%20self%20instanceVariableNames%3A%20aCollection'),
+messageSends: ["class:instanceVariableNames:", "new"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.Metaclass);
+
+smalltalk.addMethod(
+'_isMetaclass',
+smalltalk.method({
+selector: 'isMetaclass',
+category: 'testing',
+fn: function (){
+var self=this;
+return true;
+return self;},
+source: unescape('isMetaclass%0A%09%5Etrue'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Metaclass);
+
+smalltalk.addMethod(
+'_printString',
+smalltalk.method({
+selector: 'printString',
+category: 'printing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_instanceClass", []), "_name", []), "__comma", [" class"]);
+return self;},
+source: unescape('printString%0A%09%5Eself%20instanceClass%20name%2C%20%27%20class%27'),
+messageSends: [unescape("%2C"), "name", "instanceClass"],
+referencedClasses: []
+}),
+smalltalk.Metaclass);
+
+
+
+smalltalk.setup(smalltalk.Metaclass);
+smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_source',
+smalltalk.method({
+selector: 'source',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_basicAt_", ["source"]), "_ifNil_", [(function(){return "";})]);
+return self;},
+source: unescape('source%0A%09%5E%28self%20basicAt%3A%20%27source%27%29%20ifNil%3A%20%5B%27%27%5D'),
+messageSends: ["ifNil:", "basicAt:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+'_source_',
+smalltalk.method({
+selector: 'source:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_basicAt_put_", ["source", aString]);
+return self;},
+source: unescape('source%3A%20aString%0A%09self%20basicAt%3A%20%27source%27%20put%3A%20aString'),
+messageSends: ["basicAt:put:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+'_category',
+smalltalk.method({
+selector: 'category',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_basicAt_", ["category"]), "_ifNil_", [(function(){return "";})]);
+return self;},
+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.CompiledMethod);
+
+smalltalk.addMethod(
+'_category_',
+smalltalk.method({
+selector: 'category:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_basicAt_put_", ["category", aString]);
+return self;},
+source: unescape('category%3A%20aString%0A%09self%20basicAt%3A%20%27category%27%20put%3A%20aString'),
+messageSends: ["basicAt:put:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+'_selector',
+smalltalk.method({
+selector: 'selector',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_basicAt_", ["selector"]);
+return self;},
+source: unescape('selector%0A%09%5Eself%20basicAt%3A%20%27selector%27'),
+messageSends: ["basicAt:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+'_selector_',
+smalltalk.method({
+selector: 'selector:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_basicAt_put_", ["selector", aString]);
+return self;},
+source: unescape('selector%3A%20aString%0A%09self%20basicAt%3A%20%27selector%27%20put%3A%20aString'),
+messageSends: ["basicAt:put:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+'_fn',
+smalltalk.method({
+selector: 'fn',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_basicAt_", ["fn"]);
+return self;},
+source: unescape('fn%0A%09%5Eself%20basicAt%3A%20%27fn%27'),
+messageSends: ["basicAt:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+'_fn_',
+smalltalk.method({
+selector: 'fn:',
+category: 'accessing',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(self, "_basicAt_put_", ["fn", aBlock]);
+return self;},
+source: unescape('fn%3A%20aBlock%0A%09self%20basicAt%3A%20%27fn%27%20put%3A%20aBlock'),
+messageSends: ["basicAt:put:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+'_messageSends',
+smalltalk.method({
+selector: 'messageSends',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_basicAt_", ["messageSends"]);
+return self;},
+source: unescape('messageSends%0A%09%5Eself%20basicAt%3A%20%27messageSends%27'),
+messageSends: ["basicAt:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+'_methodClass',
+smalltalk.method({
+selector: 'methodClass',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_basicAt_", ["methodClass"]);
+return self;},
+source: unescape('methodClass%0A%09%5Eself%20basicAt%3A%20%27methodClass%27'),
+messageSends: ["basicAt:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+'_referencedClasses',
+smalltalk.method({
+selector: 'referencedClasses',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_basicAt_", ["referencedClasses"]);
+return self;},
+source: unescape('referencedClasses%0A%09%5Eself%20basicAt%3A%20%27referencedClasses%27'),
+messageSends: ["basicAt:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+
+
+smalltalk.setup(smalltalk.CompiledMethod);
+smalltalk.addClass('Number', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'__eq',
+smalltalk.method({
+selector: '=',
+category: 'comparing',
+fn: function (aNumber){
+var self=this;
+return Number(self) == aNumber;
+return self;},
+source: unescape('%3D%20aNumber%0A%09%3Creturn%20Number%28self%29%20%3D%3D%20aNumber%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'__gt',
+smalltalk.method({
+selector: '>',
+category: 'comparing',
+fn: function (aNumber){
+var self=this;
+return self > aNumber;
+return self;},
+source: unescape('%3E%20aNumber%0A%09%3Creturn%20self%20%3E%3E%20aNumber%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'__lt',
+smalltalk.method({
+selector: '<',
+category: 'comparing',
+fn: function (aNumber){
+var self=this;
+return self < aNumber;
+return self;},
+source: unescape('%3C%20aNumber%0A%09%3Creturn%20self%20%3C%20aNumber%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'__gt_eq',
+smalltalk.method({
+selector: '>=',
+category: 'comparing',
+fn: function (aNumber){
+var self=this;
+return self >= aNumber;
+return self;},
+source: unescape('%3E%3D%20aNumber%0A%09%3Creturn%20self%20%3E%3E%3D%20aNumber%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'__lt_eq',
+smalltalk.method({
+selector: '<=',
+category: 'comparing',
+fn: function (aNumber){
+var self=this;
+return self <= aNumber;
+return self;},
+source: unescape('%3C%3D%20aNumber%0A%09%3Creturn%20self%20%3C%3D%20aNumber%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'__plus',
+smalltalk.method({
+selector: '+',
+category: 'arithmetic',
+fn: function (aNumber){
+var self=this;
+return self + aNumber;
+return self;},
+source: unescape('+%20aNumber%0A%09%3Creturn%20self%20+%20aNumber%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'__minus',
+smalltalk.method({
+selector: '-',
+category: 'arithmetic',
+fn: function (aNumber){
+var self=this;
+return self - aNumber;
+return self;},
+source: unescape('-%20aNumber%0A%09%3Creturn%20self%20-%20aNumber%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'__star',
+smalltalk.method({
+selector: '*',
+category: 'arithmetic',
+fn: function (aNumber){
+var self=this;
+return self * aNumber;
+return self;},
+source: unescape('*%20aNumber%0A%09%3Creturn%20self%20*%20aNumber%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'__slash',
+smalltalk.method({
+selector: '/',
+category: 'arithmetic',
+fn: function (aNumber){
+var self=this;
+return self / aNumber;
+return self;},
+source: unescape('/%20aNumber%0A%09%3Creturn%20self%20/%20aNumber%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_max_',
+smalltalk.method({
+selector: 'max:',
+category: 'arithmetic',
+fn: function (aNumber){
+var self=this;
+return Math.max(self, aNumber);;
+return self;},
+source: unescape('max%3A%20aNumber%0A%09%3Creturn%20Math.max%28self%2C%20aNumber%29%3B%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_min_',
+smalltalk.method({
+selector: 'min:',
+category: 'arithmetic',
+fn: function (aNumber){
+var self=this;
+return Math.min(self, aNumber);;
+return self;},
+source: unescape('min%3A%20aNumber%0A%09%3Creturn%20Math.min%28self%2C%20aNumber%29%3B%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_rounded',
+smalltalk.method({
+selector: 'rounded',
+category: 'converting',
+fn: function (){
+var self=this;
+return Math.round(self);;
+return self;},
+source: unescape('rounded%0A%09%3Creturn%20Math.round%28self%29%3B%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_truncated',
+smalltalk.method({
+selector: 'truncated',
+category: 'converting',
+fn: function (){
+var self=this;
+return Math.floor(self);;
+return self;},
+source: unescape('truncated%0A%09%3Creturn%20Math.floor%28self%29%3B%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_to_',
+smalltalk.method({
+selector: 'to:',
+category: 'converting',
+fn: function (aNumber){
+var self=this;
+var array=nil;
+var first=nil;
+var last=nil;
+var count=nil;
+first=smalltalk.send(self, "_truncated", []);
+last=smalltalk.send(smalltalk.send(aNumber, "_truncated", []), "__plus", [(1)]);
+count=(1);
+smalltalk.send(smalltalk.send(first, "__lt_eq", [last]), "_ifFalse_", [(function(){return smalltalk.send(self, "_error_", ["Wrong interval"]);})]);
+array=smalltalk.send(smalltalk.Array, "_new", []);
+smalltalk.send(smalltalk.send(last, "__minus", [first]), "_timesRepeat_", [(function(){smalltalk.send(array, "_at_put_", [count, first]);count=smalltalk.send(count, "__plus", [(1)]);return first=smalltalk.send(first, "__plus", [(1)]);})]);
+return array;
+return self;},
+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%09%28first%20%3C%3D%20last%29%20ifFalse%3A%20%5Bself%20error%3A%20%27Wrong%20interval%27%5D.%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("+"), "ifFalse:", unescape("%3C%3D"), "error:", "new", "timesRepeat:", unescape("-"), "at:put:"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_timesRepeat_',
+smalltalk.method({
+selector: 'timesRepeat:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+var integer=nil;
+var count=nil;
+integer=smalltalk.send(self, "_truncated", []);
+count=(1);
+smalltalk.send((function(){return smalltalk.send(count, "__gt", [self]);}), "_whileFalse_", [(function(){smalltalk.send(aBlock, "_value", []);return count=smalltalk.send(count, "__plus", [(1)]);})]);
+return self;},
+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.Number);
+
+smalltalk.addMethod(
+'_to_do_',
+smalltalk.method({
+selector: 'to:do:',
+category: 'enumerating',
+fn: function (aNumber, aBlock){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_to_", [aNumber]), "_do_", [aBlock]);
+return self;},
+source: unescape('to%3A%20aNumber%20do%3A%20aBlock%0A%09%5E%28self%20to%3A%20aNumber%29%20do%3A%20aBlock'),
+messageSends: ["do:", "to:"],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_asString',
+smalltalk.method({
+selector: 'asString',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_printString", []);
+return self;},
+source: unescape('asString%0A%09%5Eself%20printString'),
+messageSends: ["printString"],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_asJavascript',
+smalltalk.method({
+selector: 'asJavascript',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(unescape("%28"), "__comma", [smalltalk.send(self, "_printString", [])]), "__comma", [unescape("%29")]);
+return self;},
+source: unescape('asJavascript%0A%09%5E%27%28%27%2C%20self%20printString%2C%20%27%29%27'),
+messageSends: [unescape("%2C"), "printString"],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_printString',
+smalltalk.method({
+selector: 'printString',
+category: 'printing',
+fn: function (){
+var self=this;
+return String(self);
+return self;},
+source: unescape('printString%0A%09%3Creturn%20String%28self%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_isNumber',
+smalltalk.method({
+selector: 'isNumber',
+category: 'testing',
+fn: function (){
+var self=this;
+return true;
+return self;},
+source: unescape('isNumber%0A%09%5Etrue'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_atRandom',
+smalltalk.method({
+selector: 'atRandom',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Random, "_new", []), "_next", []), "__star", [self]), "_truncated", []), "__plus", [(1)]);
+return self;},
+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: [smalltalk.nil]
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'__at',
+smalltalk.method({
+selector: '@',
+category: 'converting',
+fn: function (aNumber){
+var self=this;
+return smalltalk.send(smalltalk.Point, "_x_y_", [self, aNumber]);
+return self;},
+source: unescape('@%20aNumber%0A%09%5EPoint%20x%3A%20self%20y%3A%20aNumber'),
+messageSends: ["x:y:"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_asPoint',
+smalltalk.method({
+selector: 'asPoint',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.Point, "_x_y_", [self, self]);
+return self;},
+source: unescape('asPoint%0A%09%5EPoint%20x%3A%20self%20y%3A%20self'),
+messageSends: ["x:y:"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_clearInterval',
+smalltalk.method({
+selector: 'clearInterval',
+category: 'timeouts/intervals',
+fn: function (){
+var self=this;
+clearInterval(Number(self));
+return self;},
+source: unescape('clearInterval%0A%09%3CclearInterval%28Number%28self%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_asJSONObject',
+smalltalk.method({
+selector: 'asJSONObject',
+category: 'converting',
+fn: function (){
+var self=this;
+return self;
+return self;},
+source: unescape('asJSONObject%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_clearTimeout',
+smalltalk.method({
+selector: 'clearTimeout',
+category: 'timeouts/intervals',
+fn: function (){
+var self=this;
+clearTimeout(Number(self));
+return self;},
+source: unescape('clearTimeout%0A%09%3CclearTimeout%28Number%28self%29%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+
+smalltalk.addMethod(
+'_pi',
+smalltalk.method({
+selector: 'pi',
+category: 'instance creation',
+fn: function (){
+var self=this;
+return Math.PI;
+return self;},
+source: unescape('pi%0A%09%3Creturn%20Math.PI%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number.klass);
+
+
+smalltalk.setup(smalltalk.Number);
+smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_compiledSource',
+smalltalk.method({
+selector: 'compiledSource',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.toString();
+return self;},
+source: unescape('compiledSource%0A%09%3Creturn%20self.toString%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_whileTrue_',
+smalltalk.method({
+selector: 'whileTrue:',
+category: 'controlling',
+fn: function (aBlock){
+var self=this;
+while(self()) {aBlock()};
+return self;},
+source: unescape('whileTrue%3A%20aBlock%0A%09%3Cwhile%28self%28%29%29%20%7BaBlock%28%29%7D%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_whileFalse_',
+smalltalk.method({
+selector: 'whileFalse:',
+category: 'controlling',
+fn: function (aBlock){
+var self=this;
+while(!self()) {aBlock()};
+return self;},
+source: unescape('whileFalse%3A%20aBlock%0A%09%3Cwhile%28%21self%28%29%29%20%7BaBlock%28%29%7D%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_value',
+smalltalk.method({
+selector: 'value',
+category: 'evaluating',
+fn: function (){
+var self=this;
+return self();;
+return self;},
+source: unescape('value%0A%09%3Creturn%20self%28%29%3B%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_value_',
+smalltalk.method({
+selector: 'value:',
+category: 'evaluating',
+fn: function (anArg){
+var self=this;
+return self(anArg);;
+return self;},
+source: unescape('value%3A%20anArg%0A%09%3Creturn%20self%28anArg%29%3B%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_value_value_',
+smalltalk.method({
+selector: 'value:value:',
+category: 'evaluating',
+fn: function (firstArg, secondArg){
+var self=this;
+return self(firstArg, secondArg);;
+return self;},
+source: unescape('value%3A%20firstArg%20value%3A%20secondArg%0A%09%3Creturn%20self%28firstArg%2C%20secondArg%29%3B%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_value_value_value_',
+smalltalk.method({
+selector: 'value:value:value:',
+category: 'evaluating',
+fn: function (firstArg, secondArg, thirdArg){
+var self=this;
+return self(firstArg, secondArg, thirdArg);;
+return self;},
+source: unescape('value%3A%20firstArg%20value%3A%20secondArg%20value%3A%20thirdArg%0A%09%3Creturn%20self%28firstArg%2C%20secondArg%2C%20thirdArg%29%3B%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_valueWithPossibleArguments_',
+smalltalk.method({
+selector: 'valueWithPossibleArguments:',
+category: 'evaluating',
+fn: function (aCollection){
+var self=this;
+return self.apply(null, aCollection);;
+return self;},
+source: unescape('valueWithPossibleArguments%3A%20aCollection%0A%09%3Creturn%20self.apply%28null%2C%20aCollection%29%3B%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_on_do_',
+smalltalk.method({
+selector: 'on:do:',
+category: 'error handling',
+fn: function (anErrorClass, aBlock){
+var self=this;
+smalltalk.send(self, "_try_catch_", [self, (function(error){return smalltalk.send(smalltalk.send(error, "_isKindOf_", [anErrorClass]), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(aBlock, "_value_", [error]);}), (function(){return smalltalk.send(error, "_signal", []);})]);})]);
+return self;},
+source: unescape('on%3A%20anErrorClass%20do%3A%20aBlock%0A%09self%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(
+'_valueWithTimeout_',
+smalltalk.method({
+selector: 'valueWithTimeout:',
+category: 'timeout/interval',
+fn: function (aNumber){
+var self=this;
+return setTimeout(self, aNumber);
+return self;},
+source: unescape('valueWithTimeout%3A%20aNumber%0A%09%3Creturn%20setTimeout%28self%2C%20aNumber%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_valueWithInterval_',
+smalltalk.method({
+selector: 'valueWithInterval:',
+category: 'timeout/interval',
+fn: function (aNumber){
+var self=this;
+return setInterval(self, aNumber);
+return self;},
+source: unescape('valueWithInterval%3A%20aNumber%0A%09%3Creturn%20setInterval%28self%2C%20aNumber%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+
+
+smalltalk.setup(smalltalk.BlockClosure);
+smalltalk.addClass('Boolean', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'__eq',
+smalltalk.method({
+selector: '=',
+category: 'comparing',
+fn: function (aBoolean){
+var self=this;
+return Boolean(self == true) == aBoolean;
+return self;},
+source: unescape('%3D%20aBoolean%0A%09%3Creturn%20Boolean%28self%20%3D%3D%20true%29%20%3D%3D%20aBoolean%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Boolean);
+
+smalltalk.addMethod(
+'_shallowCopy',
+smalltalk.method({
+selector: 'shallowCopy',
+category: 'copying',
+fn: function (){
+var self=this;
+return self;
+return self;},
+source: unescape('shallowCopy%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Boolean);
+
+smalltalk.addMethod(
+'_deepCopy',
+smalltalk.method({
+selector: 'deepCopy',
+category: 'copying',
+fn: function (){
+var self=this;
+return self;
+return self;},
+source: unescape('deepCopy%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Boolean);
+
+smalltalk.addMethod(
+'_ifTrue_',
+smalltalk.method({
+selector: 'ifTrue:',
+category: 'controlling',
+fn: function (aBlock){
+var self=this;
+return smalltalk.send(self, "_ifTrue_ifFalse_", [aBlock, (function(){return nil;})]);
+return self;},
+source: unescape('ifTrue%3A%20aBlock%0A%09%5Eself%20ifTrue%3A%20aBlock%20ifFalse%3A%20%5B%5D'),
+messageSends: ["ifTrue:ifFalse:"],
+referencedClasses: []
+}),
+smalltalk.Boolean);
+
+smalltalk.addMethod(
+'_ifFalse_',
+smalltalk.method({
+selector: 'ifFalse:',
+category: 'controlling',
+fn: function (aBlock){
+var self=this;
+return smalltalk.send(self, "_ifTrue_ifFalse_", [(function(){return nil;}), aBlock]);
+return self;},
+source: unescape('ifFalse%3A%20aBlock%0A%09%5Eself%20ifTrue%3A%20%5B%5D%20ifFalse%3A%20aBlock'),
+messageSends: ["ifTrue:ifFalse:"],
+referencedClasses: []
+}),
+smalltalk.Boolean);
+
+smalltalk.addMethod(
+'_ifFalse_ifTrue_',
+smalltalk.method({
+selector: 'ifFalse:ifTrue:',
+category: 'controlling',
+fn: function (aBlock, anotherBlock){
+var self=this;
+return smalltalk.send(self, "_ifTrue_ifFalse_", [anotherBlock, aBlock]);
+return self;},
+source: unescape('ifFalse%3A%20aBlock%20ifTrue%3A%20anotherBlock%0A%09%5Eself%20ifTrue%3A%20anotherBlock%20ifFalse%3A%20aBlock'),
+messageSends: ["ifTrue:ifFalse:"],
+referencedClasses: []
+}),
+smalltalk.Boolean);
+
+smalltalk.addMethod(
+'_ifTrue_ifFalse_',
+smalltalk.method({
+selector: 'ifTrue:ifFalse:',
+category: 'controlling',
+fn: function (aBlock, anotherBlock){
+var self=this;
+
+	    if(self == true) {
+		return aBlock();
+	    } else {
+		return anotherBlock();
+	    }
+	;
+return self;},
+source: unescape('ifTrue%3A%20aBlock%20ifFalse%3A%20anotherBlock%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.Boolean);
+
+smalltalk.addMethod(
+'_and_',
+smalltalk.method({
+selector: 'and:',
+category: 'controlling',
+fn: function (aBlock){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "__eq", [true]), "_ifTrue_ifFalse_", [aBlock, (function(){return false;})]);
+return self;},
+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.Boolean);
+
+smalltalk.addMethod(
+'_or_',
+smalltalk.method({
+selector: 'or:',
+category: 'controlling',
+fn: function (aBlock){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "__eq", [true]), "_ifTrue_ifFalse_", [(function(){return true;}), aBlock]);
+return self;},
+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.Boolean);
+
+smalltalk.addMethod(
+'_not',
+smalltalk.method({
+selector: 'not',
+category: 'controlling',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "__eq", [false]);
+return self;},
+source: unescape('not%0A%09%5Eself%20%3D%20false'),
+messageSends: [unescape("%3D")],
+referencedClasses: []
+}),
+smalltalk.Boolean);
+
+smalltalk.addMethod(
+'_printString',
+smalltalk.method({
+selector: 'printString',
+category: 'printing',
+fn: function (){
+var self=this;
+return self.toString();
+return self;},
+source: unescape('printString%0A%09%3Creturn%20self.toString%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Boolean);
+
+smalltalk.addMethod(
+'_asJSONObject',
+smalltalk.method({
+selector: 'asJSONObject',
+category: 'comparing',
+fn: function (){
+var self=this;
+return self;
+return self;},
+source: unescape('asJSONObject%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Boolean);
+
+
+
+smalltalk.setup(smalltalk.Boolean);
+smalltalk.addClass('Date', smalltalk.Object, [], 'Kernel');
+smalltalk.Date.comment=unescape('The%20Date%20class%20is%20used%20to%20work%20with%20dates%20and%20times.')
+smalltalk.addMethod(
+'_year',
+smalltalk.method({
+selector: 'year',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.getFullYear();
+return self;},
+source: unescape('year%0A%09%3Creturn%20self.getFullYear%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_month',
+smalltalk.method({
+selector: 'month',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.getMonth() + 1;
+return self;},
+source: unescape('month%0A%09%3Creturn%20self.getMonth%28%29%20+%201%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_month_',
+smalltalk.method({
+selector: 'month:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self.setMonth(aNumber - 1);
+return self;},
+source: unescape('month%3A%20aNumber%0A%09%3Cself.setMonth%28aNumber%20-%201%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_day',
+smalltalk.method({
+selector: 'day',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_dayOfWeek", []);
+return self;},
+source: unescape('day%0A%09%5Eself%20dayOfWeek'),
+messageSends: ["dayOfWeek"],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_dayOfWeek',
+smalltalk.method({
+selector: 'dayOfWeek',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.getDay() + 1;
+return self;},
+source: unescape('dayOfWeek%0A%09%3Creturn%20self.getDay%28%29%20+%201%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_dayOfWeek_',
+smalltalk.method({
+selector: 'dayOfWeek:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+return self.setDay(aNumber - 1);
+return self;},
+source: unescape('dayOfWeek%3A%20aNumber%0A%09%3Creturn%20self.setDay%28aNumber%20-%201%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_day_',
+smalltalk.method({
+selector: 'day:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+smalltalk.send(self, "_day_", [aNumber]);
+return self;},
+source: unescape('day%3A%20aNumber%0A%09self%20day%3A%20aNumber'),
+messageSends: ["day:"],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_year_',
+smalltalk.method({
+selector: 'year:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self.setFullYear(aNumber);
+return self;},
+source: unescape('year%3A%20aNumber%0A%09%3Cself.setFullYear%28aNumber%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_dayOfMonth',
+smalltalk.method({
+selector: 'dayOfMonth',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.getDate();
+return self;},
+source: unescape('dayOfMonth%0A%09%3Creturn%20self.getDate%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_dayOfMonth_',
+smalltalk.method({
+selector: 'dayOfMonth:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self.setDate(aNumber);
+return self;},
+source: unescape('dayOfMonth%3A%20aNumber%0A%09%3Cself.setDate%28aNumber%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_asString',
+smalltalk.method({
+selector: 'asString',
+category: 'converting',
+fn: function (){
+var self=this;
+return self.toString();
+return self;},
+source: unescape('asString%0A%09%3Creturn%20self.toString%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_printString',
+smalltalk.method({
+selector: 'printString',
+category: 'printing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_asString", []);
+return self;},
+source: unescape('printString%0A%09%5Eself%20asString'),
+messageSends: ["asString"],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_asMilliseconds',
+smalltalk.method({
+selector: 'asMilliseconds',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_time", []);
+return self;},
+source: unescape('asMilliseconds%0A%09%5Eself%20time'),
+messageSends: ["time"],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_time',
+smalltalk.method({
+selector: 'time',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.getTime();
+return self;},
+source: unescape('time%0A%09%3Creturn%20self.getTime%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_time_',
+smalltalk.method({
+selector: 'time:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self.setTime(aNumber);
+return self;},
+source: unescape('time%3A%20aNumber%0A%09%3Cself.setTime%28aNumber%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_asDateString',
+smalltalk.method({
+selector: 'asDateString',
+category: 'converting',
+fn: function (){
+var self=this;
+return self.toDateString();
+return self;},
+source: unescape('asDateString%0A%09%3Creturn%20self.toDateString%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_asTimeString',
+smalltalk.method({
+selector: 'asTimeString',
+category: 'converting',
+fn: function (){
+var self=this;
+return self.toTimeString();
+return self;},
+source: unescape('asTimeString%0A%09%3Creturn%20self.toTimeString%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_asLocaleString',
+smalltalk.method({
+selector: 'asLocaleString',
+category: 'converting',
+fn: function (){
+var self=this;
+return self.toLocaleString();
+return self;},
+source: unescape('asLocaleString%0A%09%3Creturn%20self.toLocaleString%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_asNumber',
+smalltalk.method({
+selector: 'asNumber',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_asMilliseconds", []);
+return self;},
+source: unescape('asNumber%0A%09%5Eself%20asMilliseconds'),
+messageSends: ["asMilliseconds"],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_hours_',
+smalltalk.method({
+selector: 'hours:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self.setHours(aNumber);
+return self;},
+source: unescape('hours%3A%20aNumber%0A%09%3Cself.setHours%28aNumber%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_minutes_',
+smalltalk.method({
+selector: 'minutes:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self.setMinutes(aNumber);
+return self;},
+source: unescape('minutes%3A%20aNumber%0A%09%3Cself.setMinutes%28aNumber%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_seconds_',
+smalltalk.method({
+selector: 'seconds:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self.setSeconds(aNumber);
+return self;},
+source: unescape('seconds%3A%20aNumber%0A%09%3Cself.setSeconds%28aNumber%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_milliseconds_',
+smalltalk.method({
+selector: 'milliseconds:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self.setMilliseconds(aNumber);
+return self;},
+source: unescape('milliseconds%3A%20aNumber%0A%09%3Cself.setMilliseconds%28aNumber%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_hours',
+smalltalk.method({
+selector: 'hours',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.getHours();
+return self;},
+source: unescape('hours%0A%09%3Creturn%20self.getHours%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_minutes',
+smalltalk.method({
+selector: 'minutes',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.getMinutes();
+return self;},
+source: unescape('minutes%0A%09%3Creturn%20self.getMinutes%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_seconds',
+smalltalk.method({
+selector: 'seconds',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.getSeconds();
+return self;},
+source: unescape('seconds%0A%09%3Creturn%20self.getSeconds%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_milliseconds',
+smalltalk.method({
+selector: 'milliseconds',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.getMilliseconds();
+return self;},
+source: unescape('milliseconds%0A%09%3Creturn%20self.getMilliseconds%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'__lt',
+smalltalk.method({
+selector: '<',
+category: 'comparing',
+fn: function (aDate){
+var self=this;
+return self < aDate;
+return self;},
+source: unescape('%3C%20aDate%0A%09%3Creturn%20self%20%3C%20aDate%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'__gt',
+smalltalk.method({
+selector: '>',
+category: 'comparing',
+fn: function (aDate){
+var self=this;
+return self > aDate;
+return self;},
+source: unescape('%3E%20aDate%0A%09%3Creturn%20self%20%3E%3E%20aDate%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'__lt_eq',
+smalltalk.method({
+selector: '<=',
+category: 'comparing',
+fn: function (aDate){
+var self=this;
+self <= aDate;
+return self;},
+source: unescape('%3C%3D%20aDate%0A%09%3Cself%20%3C%3D%20aDate%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'__gt_eq',
+smalltalk.method({
+selector: '>=',
+category: 'comparing',
+fn: function (aDate){
+var self=this;
+self >= aDate;
+return self;},
+source: unescape('%3E%3D%20aDate%0A%09%3Cself%20%3E%3E%3D%20aDate%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'__minus',
+smalltalk.method({
+selector: '-',
+category: 'arithmetic',
+fn: function (aDate){
+var self=this;
+return self - aDate;
+return self;},
+source: unescape('-%20aDate%0A%09%3Creturn%20self%20-%20aDate%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'__plus',
+smalltalk.method({
+selector: '+',
+category: 'arithmetic',
+fn: function (aDate){
+var self=this;
+return self + aDate;
+return self;},
+source: unescape('+%20aDate%0A%09%3Creturn%20self%20+%20aDate%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+smalltalk.addMethod(
+'_asJSONObject',
+smalltalk.method({
+selector: 'asJSONObject',
+category: 'converting',
+fn: function (){
+var self=this;
+return self;
+return self;},
+source: unescape('asJSONObject%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date);
+
+
+smalltalk.addMethod(
+'_new_',
+smalltalk.method({
+selector: 'new:',
+category: 'instance creation',
+fn: function (anObject){
+var self=this;
+return new Date(anObject);
+return self;},
+source: unescape('new%3A%20anObject%0A%09%3Creturn%20new%20Date%28anObject%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Date.klass);
+
+smalltalk.addMethod(
+'_fromString_',
+smalltalk.method({
+selector: 'fromString:',
+category: 'instance creation',
+fn: function (aString){
+var self=this;
+return smalltalk.send(self, "_new_", [aString]);
+return self;},
+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(
+'_fromSeconds_',
+smalltalk.method({
+selector: 'fromSeconds:',
+category: 'instance creation',
+fn: function (aNumber){
+var self=this;
+return smalltalk.send(self, "_fromMilliseconds_", [smalltalk.send(aNumber, "__star", [(1000)])]);
+return self;},
+source: unescape('fromSeconds%3A%20aNumber%0A%09%5Eself%20fromMilliseconds%3A%20aNumber%20*%201000'),
+messageSends: ["fromMilliseconds:", unescape("*")],
+referencedClasses: []
+}),
+smalltalk.Date.klass);
+
+smalltalk.addMethod(
+'_fromMilliseconds_',
+smalltalk.method({
+selector: 'fromMilliseconds:',
+category: 'instance creation',
+fn: function (aNumber){
+var self=this;
+return smalltalk.send(self, "_new_", [aNumber]);
+return self;},
+source: unescape('fromMilliseconds%3A%20aNumber%0A%09%5Eself%20new%3A%20aNumber'),
+messageSends: ["new:"],
+referencedClasses: []
+}),
+smalltalk.Date.klass);
+
+smalltalk.addMethod(
+'_today',
+smalltalk.method({
+selector: 'today',
+category: 'instance creation',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_new", []);
+return self;},
+source: unescape('today%0A%09%5Eself%20new'),
+messageSends: ["new"],
+referencedClasses: []
+}),
+smalltalk.Date.klass);
+
+smalltalk.addMethod(
+'_now',
+smalltalk.method({
+selector: 'now',
+category: 'instance creation',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_today", []);
+return self;},
+source: unescape('now%0A%09%5Eself%20today'),
+messageSends: ["today"],
+referencedClasses: []
+}),
+smalltalk.Date.klass);
+
+smalltalk.addMethod(
+'_millisecondsToRun_',
+smalltalk.method({
+selector: 'millisecondsToRun:',
+category: 'instance creation',
+fn: function (aBlock){
+var self=this;
+var t=nil;
+t=smalltalk.send(smalltalk.Date, "_now", []);
+smalltalk.send(aBlock, "_value", []);
+return smalltalk.send(smalltalk.send(smalltalk.Date, "_now", []), "__minus", [t]);
+return self;},
+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: [smalltalk.Date]
+}),
+smalltalk.Date.klass);
+
+
+smalltalk.setup(smalltalk.Date);
+smalltalk.addClass('UndefinedObject', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_subclass_instanceVariableNames_',
+smalltalk.method({
+selector: 'subclass:instanceVariableNames:',
+category: 'class creation',
+fn: function (aString, anotherString){
+var self=this;
+return smalltalk.send(self, "_subclass_instanceVariableNames_category_", [aString, anotherString, nil]);
+return self;},
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20category%3A%20nil'),
+messageSends: ["subclass:instanceVariableNames:category:"],
+referencedClasses: []
+}),
+smalltalk.UndefinedObject);
+
+smalltalk.addMethod(
+'_subclass_instanceVariableNames_category_',
+smalltalk.method({
+selector: 'subclass:instanceVariableNames:category:',
+category: 'class creation',
+fn: function (aString, aString2, aString3){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.ClassBuilder, "_new", []), "_superclass_subclass_instanceVariableNames_category_", [self, aString, aString2, aString3]);
+return self;},
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%5EClassBuilder%20new%0A%09%20%20%20%20superclass%3A%20self%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3'),
+messageSends: ["superclass:subclass:instanceVariableNames:category:", "new"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.UndefinedObject);
+
+smalltalk.addMethod(
+'_shallowCopy',
+smalltalk.method({
+selector: 'shallowCopy',
+category: 'copying',
+fn: function (){
+var self=this;
+return self;
+return self;},
+source: unescape('shallowCopy%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.UndefinedObject);
+
+smalltalk.addMethod(
+'_deepCopy',
+smalltalk.method({
+selector: 'deepCopy',
+category: 'copying',
+fn: function (){
+var self=this;
+return self;
+return self;},
+source: unescape('deepCopy%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.UndefinedObject);
+
+smalltalk.addMethod(
+'_ifNil_',
+smalltalk.method({
+selector: 'ifNil:',
+category: 'testing',
+fn: function (aBlock){
+var self=this;
+return smalltalk.send(self, "_ifNil_ifNotNil_", [aBlock, (function(){return nil;})]);
+return self;},
+source: unescape('ifNil%3A%20aBlock%0A%09%5Eself%20ifNil%3A%20aBlock%20ifNotNil%3A%20%5B%5D'),
+messageSends: ["ifNil:ifNotNil:"],
+referencedClasses: []
+}),
+smalltalk.UndefinedObject);
+
+smalltalk.addMethod(
+'_ifNotNil_',
+smalltalk.method({
+selector: 'ifNotNil:',
+category: 'testing',
+fn: function (aBlock){
+var self=this;
+return self;
+return self;},
+source: unescape('ifNotNil%3A%20aBlock%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.UndefinedObject);
+
+smalltalk.addMethod(
+'_ifNil_ifNotNil_',
+smalltalk.method({
+selector: 'ifNil:ifNotNil:',
+category: 'testing',
+fn: function (aBlock, anotherBlock){
+var self=this;
+return smalltalk.send(aBlock, "_value", []);
+return self;},
+source: unescape('ifNil%3A%20aBlock%20ifNotNil%3A%20anotherBlock%0A%09%5EaBlock%20value'),
+messageSends: ["value"],
+referencedClasses: []
+}),
+smalltalk.UndefinedObject);
+
+smalltalk.addMethod(
+'_ifNotNil_ifNil_',
+smalltalk.method({
+selector: 'ifNotNil:ifNil:',
+category: 'testing',
+fn: function (aBlock, anotherBlock){
+var self=this;
+return smalltalk.send(anotherBlock, "_value", []);
+return self;},
+source: unescape('ifNotNil%3A%20aBlock%20ifNil%3A%20anotherBlock%0A%09%5EanotherBlock%20value'),
+messageSends: ["value"],
+referencedClasses: []
+}),
+smalltalk.UndefinedObject);
+
+smalltalk.addMethod(
+'_isNil',
+smalltalk.method({
+selector: 'isNil',
+category: 'testing',
+fn: function (){
+var self=this;
+return true;
+return self;},
+source: unescape('isNil%0A%09%5Etrue'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.UndefinedObject);
+
+smalltalk.addMethod(
+'_notNil',
+smalltalk.method({
+selector: 'notNil',
+category: 'testing',
+fn: function (){
+var self=this;
+return false;
+return self;},
+source: unescape('notNil%0A%09%5Efalse'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.UndefinedObject);
+
+smalltalk.addMethod(
+'_printString',
+smalltalk.method({
+selector: 'printString',
+category: 'printing',
+fn: function (){
+var self=this;
+return "nil";
+return self;},
+source: unescape('printString%0A%20%20%20%20%5E%27nil%27'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.UndefinedObject);
+
+
+smalltalk.addMethod(
+'_new',
+smalltalk.method({
+selector: 'new',
+category: 'instance creation',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_error_", ["You cannot create new instances of UndefinedObject. Use nil"]);
+return self;},
+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.UndefinedObject.klass);
+
+
+smalltalk.setup(smalltalk.UndefinedObject);
+smalltalk.addClass('Collection', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_size',
+smalltalk.method({
+selector: 'size',
+category: 'accessing',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_subclassResponsibility", []);
+return self;},
+source: unescape('size%0A%09self%20subclassResponsibility'),
+messageSends: ["subclassResponsibility"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_readStream',
+smalltalk.method({
+selector: 'readStream',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_stream", []);
+return self;},
+source: unescape('readStream%0A%09%5Eself%20stream'),
+messageSends: ["stream"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_writeStream',
+smalltalk.method({
+selector: 'writeStream',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_stream", []);
+return self;},
+source: unescape('writeStream%0A%09%5Eself%20stream'),
+messageSends: ["stream"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_stream',
+smalltalk.method({
+selector: 'stream',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_streamClass", []), "_on_", [self]);
+return self;},
+source: unescape('stream%0A%09%5Eself%20streamClass%20on%3A%20self'),
+messageSends: ["on:", "streamClass"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_streamClass',
+smalltalk.method({
+selector: 'streamClass',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_class", []), "_streamClass", []);
+return self;},
+source: unescape('streamClass%0A%09%5Eself%20class%20streamClass'),
+messageSends: ["streamClass", "class"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_add_',
+smalltalk.method({
+selector: 'add:',
+category: 'adding/removing',
+fn: function (anObject){
+var self=this;
+smalltalk.send(self, "_subclassResponsibility", []);
+return self;},
+source: unescape('add%3A%20anObject%0A%09self%20subclassResponsibility'),
+messageSends: ["subclassResponsibility"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_addAll_',
+smalltalk.method({
+selector: 'addAll:',
+category: 'adding/removing',
+fn: function (aCollection){
+var self=this;
+smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(self, "_add_", [each]);})]);
+return aCollection;
+return self;},
+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.Collection);
+
+smalltalk.addMethod(
+'__comma',
+smalltalk.method({
+selector: ',',
+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;},
+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.Collection);
+
+smalltalk.addMethod(
+'_copyWith_',
+smalltalk.method({
+selector: 'copyWith:',
+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;},
+source: unescape('copyWith%3A%20anObject%0A%09%5Eself%20copy%20add%3A%20anObject%3B%20yourself'),
+messageSends: ["add:", "yourself", "copy"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_copyWithAll_',
+smalltalk.method({
+selector: 'copyWithAll:',
+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;},
+source: unescape('copyWithAll%3A%20aCollection%0A%09%5Eself%20copy%20addAll%3A%20aCollection%3B%20yourself'),
+messageSends: ["addAll:", "yourself", "copy"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_asArray',
+smalltalk.method({
+selector: 'asArray',
+category: 'converting',
+fn: function (){
+var self=this;
+var array=nil;
+var index=nil;
+array=smalltalk.send(smalltalk.Array, "_new", []);
+index=(0);
+smalltalk.send(self, "_do_", [(function(each){index=smalltalk.send(index, "__plus", [(1)]);return smalltalk.send(array, "_at_put_", [index, each]);})]);
+return array;
+return self;},
+source: unescape('asArray%0A%09%7C%20array%20index%20%7C%0A%09array%20%3A%3D%20Array%20new.%0A%09index%20%3A%3D%200.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20index%20%3A%3D%20index%20+%201.%0A%09%20%20%20%20array%20at%3A%20index%20put%3A%20each%5D.%0A%09%5Earray'),
+messageSends: ["new", "do:", unescape("+"), "at:put:"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_do_',
+smalltalk.method({
+selector: 'do:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+for(var i=0;i<self.length;i++){aBlock(self[i]);};
+return self;},
+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.Collection);
+
+smalltalk.addMethod(
+'_collect_',
+smalltalk.method({
+selector: 'collect:',
+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;
+return self;},
+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.Collection);
+
+smalltalk.addMethod(
+'_detect_',
+smalltalk.method({
+selector: 'detect:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+return smalltalk.send(self, "_detect_ifNone_", [aBlock, (function(){return smalltalk.send(self, "_errorNotFound", []);})]);
+return self;},
+source: unescape('detect%3A%20aBlock%0A%09%5Eself%20detect%3A%20aBlock%20ifNone%3A%20%5Bself%20errorNotFound%5D'),
+messageSends: ["detect:ifNone:", "errorNotFound"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_detect_ifNone_',
+smalltalk.method({
+selector: 'detect:ifNone:',
+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 self;},
+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.Collection);
+
+smalltalk.addMethod(
+'_do_separatedBy_',
+smalltalk.method({
+selector: 'do:separatedBy:',
+category: 'enumerating',
+fn: function (aBlock, anotherBlock){
+var self=this;
+var first=nil;
+first=true;
+smalltalk.send(self, "_do_", [(function(each){smalltalk.send(first, "_ifTrue_ifFalse_", [(function(){return first=false;}), (function(){return smalltalk.send(anotherBlock, "_value", []);})]);return smalltalk.send(aBlock, "_value_", [each]);})]);
+return self;},
+source: unescape('do%3A%20aBlock%20separatedBy%3A%20anotherBlock%0A%20%20%20%20%09%7C%20first%20%7C%0A%20%20%20%20%09first%20%3A%3D%20true.%0A%20%20%20%20%09self%20do%3A%20%5B%3Aeach%20%7C%0A%20%20%20%20%09%20%20%20%20first%0A%20%20%20%20%09%09ifTrue%3A%20%5Bfirst%20%3A%3D%20false%5D%0A%20%20%20%20%09%09ifFalse%3A%20%5BanotherBlock%20value%5D.%0A%20%20%20%20%09%20%20%20%20aBlock%20value%3A%20each%5D'),
+messageSends: ["do:", "ifTrue:ifFalse:", "value", "value:"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_inject_into_',
+smalltalk.method({
+selector: 'inject:into:',
+category: 'enumerating',
+fn: function (anObject, 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;
+return self;},
+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.Collection);
+
+smalltalk.addMethod(
+'_reject_',
+smalltalk.method({
+selector: 'reject:',
+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]);})]);
+return self;},
+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.Collection);
+
+smalltalk.addMethod(
+'_select_',
+smalltalk.method({
+selector: 'select:',
+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 smalltalk.send(smalltalk.send(aBlock, "_value_", [each]), "_ifTrue_", [(function(){return smalltalk.send(stream, "_nextPut_", [each]);})]);})]);
+return smalltalk.send(stream, "_contents", []);
+return self;},
+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.Collection);
+
+smalltalk.addMethod(
+'_errorNotFound',
+smalltalk.method({
+selector: 'errorNotFound',
+category: 'error handling',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_error_", ["Object is not in the collection"]);
+return self;},
+source: unescape('errorNotFound%0A%09self%20error%3A%20%27Object%20is%20not%20in%20the%20collection%27'),
+messageSends: ["error:"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_includes_',
+smalltalk.method({
+selector: 'includes:',
+category: 'testing',
+fn: function (anObject){
+var self=this;
+
+		var i = self.length;
+		while (i--) {
+			if (smalltalk.send(self[i], "__eq", [anObject])) {return true;}	
+		}
+		return false
+	;
+return self;},
+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.Collection);
+
+smalltalk.addMethod(
+'_notEmpty',
+smalltalk.method({
+selector: 'notEmpty',
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_isEmpty", []), "_not", []);
+return self;},
+source: unescape('notEmpty%0A%09%5Eself%20isEmpty%20not'),
+messageSends: ["not", "isEmpty"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_isEmpty',
+smalltalk.method({
+selector: 'isEmpty',
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [(0)]);
+return self;},
+source: unescape('isEmpty%0A%09%5Eself%20size%20%3D%200'),
+messageSends: [unescape("%3D"), "size"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+smalltalk.addMethod(
+'_remove_',
+smalltalk.method({
+selector: 'remove:',
+category: 'adding/removing',
+fn: function (anObject){
+var self=this;
+smalltalk.send(self, "_subclassResponsibility", []);
+return self;},
+source: unescape('remove%3A%20anObject%0A%20%20%20%20self%20subclassResponsibility'),
+messageSends: ["subclassResponsibility"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
+
+smalltalk.addMethod(
+'_streamClass',
+smalltalk.method({
+selector: 'streamClass',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.Stream;
+return self;},
+source: unescape('streamClass%0A%09%20%20%20%20%5EStream'),
+messageSends: [],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.Collection.klass);
+
+smalltalk.addMethod(
+'_with_',
+smalltalk.method({
+selector: 'with:',
+category: 'instance creation',
+fn: function (anObject){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_add_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;},
+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.klass);
+
+smalltalk.addMethod(
+'_with_with_',
+smalltalk.method({
+selector: 'with:with:',
+category: 'instance creation',
+fn: function (anObject, anotherObject){
+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;},
+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.klass);
+
+smalltalk.addMethod(
+'_with_with_with_',
+smalltalk.method({
+selector: 'with:with:with:',
+category: 'instance creation',
+fn: function (firstObject, secondObject, thirdObject){
+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 self;},
+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.klass);
+
+smalltalk.addMethod(
+'_withAll_',
+smalltalk.method({
+selector: 'withAll:',
+category: 'instance creation',
+fn: function (aCollection){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_addAll_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;},
+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.klass);
+
+
+smalltalk.setup(smalltalk.Collection);
+smalltalk.addClass('SequenceableCollection', smalltalk.Collection, [], 'Kernel');
+smalltalk.addMethod(
+'_at_',
+smalltalk.method({
+selector: 'at:',
+category: 'accessing',
+fn: function (anIndex){
+var self=this;
+return smalltalk.send(self, "_at_ifAbsent_", [anIndex, (function(){return smalltalk.send(self, "_errorNotFound", []);})]);
+return self;},
+source: unescape('at%3A%20anIndex%0A%09%5Eself%20at%3A%20anIndex%20ifAbsent%3A%20%5B%0A%09%20%20%20%20self%20errorNotFound%5D'),
+messageSends: ["at:ifAbsent:", "errorNotFound"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_at_ifAbsent_',
+smalltalk.method({
+selector: 'at:ifAbsent:',
+category: 'accessing',
+fn: function (anIndex, aBlock){
+var self=this;
+smalltalk.send(self, "_subclassResponsibility", []);
+return self;},
+source: unescape('at%3A%20anIndex%20ifAbsent%3A%20aBlock%0A%09self%20subclassResponsibility'),
+messageSends: ["subclassResponsibility"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_at_put_',
+smalltalk.method({
+selector: 'at:put:',
+category: 'accessing',
+fn: function (anIndex, anObject){
+var self=this;
+smalltalk.send(self, "_subclassResponsibility", []);
+return self;},
+source: unescape('at%3A%20anIndex%20put%3A%20anObject%0A%09self%20subclassResponsibility'),
+messageSends: ["subclassResponsibility"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_copyFrom_to_',
+smalltalk.method({
+selector: 'copyFrom:to:',
+category: 'copying',
+fn: function (anIndex, anotherIndex){
+var self=this;
+smalltalk.send(self, "_subclassResponsibility", []);
+return self;},
+source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09self%20subclassResponsibility'),
+messageSends: ["subclassResponsibility"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_first',
+smalltalk.method({
+selector: 'first',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_at_", [(1)]);
+return self;},
+source: unescape('first%0A%09%5Eself%20at%3A%201'),
+messageSends: ["at:"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_fourth',
+smalltalk.method({
+selector: 'fourth',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_at_", [(4)]);
+return self;},
+source: unescape('fourth%0A%09%5Eself%20at%3A%204'),
+messageSends: ["at:"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_last',
+smalltalk.method({
+selector: 'last',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_at_", [smalltalk.send(self, "_size", [])]);
+return self;},
+source: unescape('last%0A%09%5Eself%20at%3A%20self%20size'),
+messageSends: ["at:", "size"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_second',
+smalltalk.method({
+selector: 'second',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_at_", [(2)]);
+return self;},
+source: unescape('second%0A%09%5Eself%20at%3A%202'),
+messageSends: ["at:"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_third',
+smalltalk.method({
+selector: 'third',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_at_", [(3)]);
+return self;},
+source: unescape('third%0A%09%5Eself%20at%3A%203'),
+messageSends: ["at:"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_removeLast',
+smalltalk.method({
+selector: 'removeLast',
+category: 'adding',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_remove_", [smalltalk.send(self, "_last", [])]);
+return self;},
+source: unescape('removeLast%0A%09self%20remove%3A%20self%20last'),
+messageSends: ["remove:", "last"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_addLast_',
+smalltalk.method({
+selector: 'addLast:',
+category: 'adding',
+fn: function (anObject){
+var self=this;
+smalltalk.send(self, "_add_", [anObject]);
+return self;},
+source: unescape('addLast%3A%20anObject%0A%09self%20add%3A%20anObject'),
+messageSends: ["add:"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_withIndexDo_',
+smalltalk.method({
+selector: 'withIndexDo:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+for(var i=0;i<self.length;i++){aBlock(self[i], i+1);};
+return self;},
+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(
+'_allButFirst',
+smalltalk.method({
+selector: 'allButFirst',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_copyFrom_to_", [(2), smalltalk.send(self, "_size", [])]);
+return self;},
+source: unescape('allButFirst%0A%09%5Eself%20copyFrom%3A%202%20to%3A%20self%20size'),
+messageSends: ["copyFrom:to:", "size"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_allButLast',
+smalltalk.method({
+selector: 'allButLast',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_copyFrom_to_", [(1), smalltalk.send(smalltalk.send(self, "_size", []), "__minus", [(1)])]);
+return self;},
+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(
+'_indexOf_',
+smalltalk.method({
+selector: 'indexOf:',
+category: 'accessing',
+fn: function (anObject){
+var self=this;
+return smalltalk.send(self, "_indexOf_ifAbsent_", [anObject, (function(){return smalltalk.send(self, "_errorNotFound", []);})]);
+return self;},
+source: unescape('indexOf%3A%20anObject%0A%09%5Eself%20indexOf%3A%20anObject%20ifAbsent%3A%20%5Bself%20errorNotFound%5D'),
+messageSends: ["indexOf:ifAbsent:", "errorNotFound"],
+referencedClasses: []
+}),
+smalltalk.SequenceableCollection);
+
+smalltalk.addMethod(
+'_indexOf_ifAbsent_',
+smalltalk.method({
+selector: 'indexOf:ifAbsent:',
+category: 'accessing',
+fn: function (anObject, aBlock){
+var self=this;
+
+		for(var i=0;i<self.length;i++){
+			if(self[i].__eq(anObject)) {return i+1}
+		}
+		return aBlock();
+	;
+return self;},
+source: unescape('indexOf%3A%20anObject%20ifAbsent%3A%20aBlock%0A%09%3C%0A%09%09for%28var%20i%3D0%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.setup(smalltalk.SequenceableCollection);
+smalltalk.addClass('String', smalltalk.SequenceableCollection, [], 'Kernel');
+smalltalk.addMethod(
+'__eq',
+smalltalk.method({
+selector: '=',
+category: 'comparing',
+fn: function (aString){
+var self=this;
+return String(self) == aString;
+return self;},
+source: unescape('%3D%20aString%0A%09%3Creturn%20String%28self%29%20%3D%3D%20aString%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_size',
+smalltalk.method({
+selector: 'size',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.length;
+return self;},
+source: unescape('size%0A%09%3Creturn%20self.length%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_at_',
+smalltalk.method({
+selector: 'at:',
+category: 'accessing',
+fn: function (anIndex){
+var self=this;
+return self[anIndex - 1];
+return self;},
+source: unescape('at%3A%20anIndex%0A%09%3Creturn%20self%5BanIndex%20-%201%5D%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_at_put_',
+smalltalk.method({
+selector: 'at:put:',
+category: 'accessing',
+fn: function (anIndex, anObject){
+var self=this;
+smalltalk.send(self, "_errorReadOnly", []);
+return self;},
+source: unescape('at%3A%20anIndex%20put%3A%20anObject%0A%20%20%20%20%09self%20errorReadOnly'),
+messageSends: ["errorReadOnly"],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_at_ifAbsent_',
+smalltalk.method({
+selector: 'at:ifAbsent:',
+category: 'accessing',
+fn: function (anIndex, aBlock){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_at_", [anIndex]), "_ifNil_", [(function(){return aBlock;})]);
+return self;},
+source: unescape('at%3A%20anIndex%20ifAbsent%3A%20aBlock%0A%20%20%20%20%09%28self%20at%3A%20anIndex%29%20ifNil%3A%20%5BaBlock%5D'),
+messageSends: ["ifNil:", "at:"],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_escaped',
+smalltalk.method({
+selector: 'escaped',
+category: 'accessing',
+fn: function (){
+var self=this;
+return escape(self);
+return self;},
+source: unescape('escaped%0A%09%3Creturn%20escape%28self%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_unescaped',
+smalltalk.method({
+selector: 'unescaped',
+category: 'accessing',
+fn: function (){
+var self=this;
+return unescape(self);
+return self;},
+source: unescape('unescaped%0A%09%3Creturn%20unescape%28self%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_add_',
+smalltalk.method({
+selector: 'add:',
+category: 'adding',
+fn: function (anObject){
+var self=this;
+smalltalk.send(self, "_errorReadOnly", []);
+return self;},
+source: unescape('add%3A%20anObject%0A%20%20%20%20%09self%20errorReadOnly'),
+messageSends: ["errorReadOnly"],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'__comma',
+smalltalk.method({
+selector: ',',
+category: 'copying',
+fn: function (aString){
+var self=this;
+return self + aString;
+return self;},
+source: unescape('%2C%20aString%0A%09%3Creturn%20self%20+%20aString%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_copyFrom_to_',
+smalltalk.method({
+selector: 'copyFrom:to:',
+category: 'copying',
+fn: function (anIndex, anotherIndex){
+var self=this;
+return self.substring(anIndex - 1, anotherIndex);
+return self;},
+source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09%3Creturn%20self.substring%28anIndex%20-%201%2C%20anotherIndex%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_shallowCopy',
+smalltalk.method({
+selector: 'shallowCopy',
+category: 'copying',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_class", []), "_fromString_", [self]);
+return self;},
+source: unescape('shallowCopy%0A%20%20%20%20%09%5Eself%20class%20fromString%3A%20self'),
+messageSends: ["fromString:", "class"],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_deepCopy',
+smalltalk.method({
+selector: 'deepCopy',
+category: 'copying',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_shallowCopy", []);
+return self;},
+source: unescape('deepCopy%0A%20%20%20%20%09%5Eself%20shallowCopy'),
+messageSends: ["shallowCopy"],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_asSelector',
+smalltalk.method({
+selector: 'asSelector',
+category: 'converting',
+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 self;},
+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%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%3A%27%20with%3A%20%27_%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B+%5D%27%20with%3A%20%27_plus%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27-%27%20with%3A%20%27_minus%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B*%5D%27%20with%3A%20%27_star%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B/%5D%27%20with%3A%20%27_slash%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%3E%27%20with%3A%20%27_gt%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%3C%27%20with%3A%20%27_lt%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%3D%27%20with%3A%20%27_eq%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%2C%27%20with%3A%20%27_comma%27.%0A%20%20%20%20%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.String);
+
+smalltalk.addMethod(
+'_asJavascript',
+smalltalk.method({
+selector: 'asJavascript',
+category: 'converting',
+fn: function (){
+var self=this;
+
+		if(self.search(/^[a-zA-Z0-9_:.$ ]*$/) == -1)
+			return "unescape(\"" + escape(self) + "\")";
+		else
+			return "\"" + self + "\"";
+	;
+return self;},
+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.String);
+
+smalltalk.addMethod(
+'_replace_with_',
+smalltalk.method({
+selector: 'replace:with:',
+category: 'regular expressions',
+fn: function (aString, anotherString){
+var self=this;
+return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send(smalltalk.RegularExpression, "_fromString_flag_", [aString, "g"]), anotherString]);
+return self;},
+source: unescape('replace%3A%20aString%20with%3A%20anotherString%0A%20%20%20%20%09%5Eself%20replaceRegexp%3A%20%28RegularExpression%20fromString%3A%20aString%20flag%3A%20%27g%27%29%20with%3A%20anotherString'),
+messageSends: ["replaceRegexp:with:", "fromString:flag:"],
+referencedClasses: [smalltalk.RegularExpression]
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_replaceRegexp_with_',
+smalltalk.method({
+selector: 'replaceRegexp:with:',
+category: 'regular expressions',
+fn: function (aRegexp, aString){
+var self=this;
+return self.replace(aRegexp, aString);
+return self;},
+source: unescape('replaceRegexp%3A%20aRegexp%20with%3A%20aString%0A%09%3Creturn%20self.replace%28aRegexp%2C%20aString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_tokenize_',
+smalltalk.method({
+selector: 'tokenize:',
+category: 'converting',
+fn: function (aString){
+var self=this;
+return self.split(aString);
+return self;},
+source: unescape('tokenize%3A%20aString%0A%09%3Creturn%20self.split%28aString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_match_',
+smalltalk.method({
+selector: 'match:',
+category: 'regular expressions',
+fn: function (aRegexp){
+var self=this;
+return self.search(aRegexp) != -1;
+return self;},
+source: unescape('match%3A%20aRegexp%0A%09%3Creturn%20self.search%28aRegexp%29%20%21%3D%20-1%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_asString',
+smalltalk.method({
+selector: 'asString',
+category: 'converting',
+fn: function (){
+var self=this;
+return self;
+return self;},
+source: unescape('asString%0A%20%20%20%20%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_asNumber',
+smalltalk.method({
+selector: 'asNumber',
+category: 'converting',
+fn: function (){
+var self=this;
+return Number(self);
+return self;},
+source: unescape('asNumber%0A%09%3Creturn%20Number%28self%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_asParser',
+smalltalk.method({
+selector: 'asParser',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.PPStringParser, "_new", []), "_string_", [self]);
+return self;},
+source: unescape('asParser%0A%20%20%20%20%09%5EPPStringParser%20new%20string%3A%20self'),
+messageSends: ["string:", "new"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_asChoiceParser',
+smalltalk.method({
+selector: 'asChoiceParser',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.PPChoiceParser, "_withAll_", [smalltalk.send(smalltalk.send(self, "_asArray", []), "_collect_", [(function(each){return smalltalk.send(each, "_asParser", []);})])]);
+return self;},
+source: unescape('asChoiceParser%0A%20%20%20%20%09%5EPPChoiceParser%20withAll%3A%20%28self%20asArray%20collect%3A%20%5B%3Aeach%20%7C%20each%20asParser%5D%29'),
+messageSends: ["withAll:", "collect:", "asArray", "asParser"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_asCharacterParser',
+smalltalk.method({
+selector: 'asCharacterParser',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.PPCharacterParser, "_new", []), "_string_", [self]);
+return self;},
+source: unescape('asCharacterParser%0A%20%20%20%20%09%5EPPCharacterParser%20new%20string%3A%20self'),
+messageSends: ["string:", "new"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_errorReadOnly',
+smalltalk.method({
+selector: 'errorReadOnly',
+category: 'error handling',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_error_", [unescape("Object%20is%20read-only")]);
+return self;},
+source: unescape('errorReadOnly%0A%20%20%20%20%09self%20error%3A%20%27Object%20is%20read-only%27'),
+messageSends: ["error:"],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_printString',
+smalltalk.method({
+selector: 'printString',
+category: 'printing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [self]), "__comma", [unescape("%27")]);
+return self;},
+source: unescape('printString%0A%20%20%20%20%09%5E%27%27%27%27%2C%20self%2C%20%27%27%27%27'),
+messageSends: [unescape("%2C")],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_printNl',
+smalltalk.method({
+selector: 'printNl',
+category: 'printing',
+fn: function (){
+var self=this;
+console.log(self);
+return self;},
+source: unescape('printNl%0A%09%3Cconsole.log%28self%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_isString',
+smalltalk.method({
+selector: 'isString',
+category: 'testing',
+fn: function (){
+var self=this;
+return true;
+return self;},
+source: unescape('isString%0A%20%20%20%20%09%5Etrue'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'__gt',
+smalltalk.method({
+selector: '>',
+category: 'comparing',
+fn: function (aString){
+var self=this;
+return String(self) > aString;
+return self;},
+source: unescape('%3E%20aString%0A%09%3Creturn%20String%28self%29%20%3E%3E%20aString%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'__lt',
+smalltalk.method({
+selector: '<',
+category: 'comparing',
+fn: function (aString){
+var self=this;
+return String(self) < aString;
+return self;},
+source: unescape('%3C%20aString%0A%09%3Creturn%20String%28self%29%20%3C%20aString%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'__gt_eq',
+smalltalk.method({
+selector: '>=',
+category: 'comparing',
+fn: function (aString){
+var self=this;
+return String(self) >= aString;
+return self;},
+source: unescape('%3E%3D%20aString%0A%09%3Creturn%20String%28self%29%20%3E%3E%3D%20aString%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'__lt_eq',
+smalltalk.method({
+selector: '<=',
+category: 'comparing',
+fn: function (aString){
+var self=this;
+return String(self) <= aString;
+return self;},
+source: unescape('%3C%3D%20aString%0A%09%3Creturn%20String%28self%29%20%3C%3D%20aString%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_remove_',
+smalltalk.method({
+selector: 'remove:',
+category: 'adding',
+fn: function (anObject){
+var self=this;
+smalltalk.send(self, "_errorReadOnly", []);
+return self;},
+source: unescape('remove%3A%20anObject%0A%09self%20errorReadOnly'),
+messageSends: ["errorReadOnly"],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_asJSONObject',
+smalltalk.method({
+selector: 'asJSONObject',
+category: 'converting',
+fn: function (){
+var self=this;
+return self;
+return self;},
+source: unescape('asJSONObject%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_trimLeft_',
+smalltalk.method({
+selector: 'trimLeft:',
+category: 'regular expressions',
+fn: function (separators){
+var self=this;
+return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send(smalltalk.RegularExpression, "_fromString_flag_", [smalltalk.send(smalltalk.send(unescape("%5E%5B"), "__comma", [separators]), "__comma", [unescape("%5D+")]), "g"]), ""]);
+return self;},
+source: unescape('trimLeft%3A%20separators%0A%0A%20%20%20%20%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: [smalltalk.RegularExpression]
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_trimRight_',
+smalltalk.method({
+selector: 'trimRight:',
+category: 'regular expressions',
+fn: function (separators){
+var self=this;
+return smalltalk.send(self, "_replaceRegexp_with_", [smalltalk.send(smalltalk.RegularExpression, "_fromString_flag_", [smalltalk.send(smalltalk.send(unescape("%5B"), "__comma", [separators]), "__comma", [unescape("%5D+%24")]), "g"]), ""]);
+return self;},
+source: unescape('trimRight%3A%20separators%0A%0A%20%20%20%20%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: [smalltalk.RegularExpression]
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_trimLeft',
+smalltalk.method({
+selector: 'trimLeft',
+category: 'regular expressions',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_trimLeft_", [unescape("%5Cs")]);
+return self;},
+source: unescape('trimLeft%0A%09%5Eself%20trimLeft%3A%20%27%5Cs%27'),
+messageSends: ["trimLeft:"],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_trimRight',
+smalltalk.method({
+selector: 'trimRight',
+category: 'regular expressions',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_trimRight_", [unescape("%5Cs")]);
+return self;},
+source: unescape('trimRight%0A%09%5Eself%20trimRight%3A%20%27%5Cs%27'),
+messageSends: ["trimRight:"],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_trimBoth',
+smalltalk.method({
+selector: 'trimBoth',
+category: 'regular expressions',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_trimBoth_", [unescape("%5Cs")]);
+return self;},
+source: unescape('trimBoth%0A%09%5Eself%20trimBoth%3A%20%27%5Cs%27'),
+messageSends: ["trimBoth:"],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_trimBoth_',
+smalltalk.method({
+selector: 'trimBoth:',
+category: 'regular expressions',
+fn: function (separators){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_trimLeft_", [separators]), "_trimRight_", [separators]);
+return self;},
+source: unescape('trimBoth%3A%20separators%0A%0A%20%20%20%20%09%5E%28self%20trimLeft%3A%20separators%29%20trimRight%3A%20separators'),
+messageSends: ["trimRight:", "trimLeft:"],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_asLowercase',
+smalltalk.method({
+selector: 'asLowercase',
+category: 'converting',
+fn: function (){
+var self=this;
+return self.toLowerCase();
+return self;},
+source: unescape('asLowercase%0A%09%3Creturn%20self.toLowerCase%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+smalltalk.addMethod(
+'_asUppercase',
+smalltalk.method({
+selector: 'asUppercase',
+category: 'converting',
+fn: function (){
+var self=this;
+return self.toUpperCase();
+return self;},
+source: unescape('asUppercase%0A%09%3Creturn%20self.toUpperCase%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String);
+
+
+smalltalk.addMethod(
+'_streamClass',
+smalltalk.method({
+selector: 'streamClass',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.StringStream;
+return self;},
+source: unescape('streamClass%0A%09%20%20%20%20%5EStringStream'),
+messageSends: [],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.String.klass);
+
+smalltalk.addMethod(
+'_fromString_',
+smalltalk.method({
+selector: 'fromString:',
+category: 'instance creation',
+fn: function (aString){
+var self=this;
+return new self.fn(aString);
+return self;},
+source: unescape('fromString%3A%20aString%0A%09%20%20%20%20%3Creturn%20new%20self.fn%28aString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String.klass);
+
+smalltalk.addMethod(
+'_cr',
+smalltalk.method({
+selector: 'cr',
+category: 'accessing',
+fn: function (){
+var self=this;
+return '\r';
+return self;},
+source: unescape('cr%0A%09%3Creturn%20%27%5Cr%27%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String.klass);
+
+smalltalk.addMethod(
+'_lf',
+smalltalk.method({
+selector: 'lf',
+category: 'accessing',
+fn: function (){
+var self=this;
+return '\n';
+return self;},
+source: unescape('lf%0A%09%3Creturn%20%27%5Cn%27%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String.klass);
+
+smalltalk.addMethod(
+'_space',
+smalltalk.method({
+selector: 'space',
+category: 'accessing',
+fn: function (){
+var self=this;
+return ' ';
+return self;},
+source: unescape('space%0A%09%3Creturn%20%27%20%27%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String.klass);
+
+smalltalk.addMethod(
+'_tab',
+smalltalk.method({
+selector: 'tab',
+category: 'accessing',
+fn: function (){
+var self=this;
+return '\t';
+return self;},
+source: unescape('tab%0A%09%3Creturn%20%27%5Ct%27%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String.klass);
+
+smalltalk.addMethod(
+'_crlf',
+smalltalk.method({
+selector: 'crlf',
+category: 'accessing',
+fn: function (){
+var self=this;
+return '\r\n';
+return self;},
+source: unescape('crlf%0A%09%3Creturn%20%27%5Cr%5Cn%27%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.String.klass);
+
+
+smalltalk.setup(smalltalk.String);
+smalltalk.addClass('Array', smalltalk.SequenceableCollection, [], 'Kernel');
+smalltalk.addMethod(
+'_size',
+smalltalk.method({
+selector: 'size',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.length;
+return self;},
+source: unescape('size%0A%09%3Creturn%20self.length%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_at_put_',
+smalltalk.method({
+selector: 'at:put:',
+category: 'accessing',
+fn: function (anIndex, anObject){
+var self=this;
+return self[anIndex - 1] = anObject;
+return self;},
+source: unescape('at%3A%20anIndex%20put%3A%20anObject%0A%09%3Creturn%20self%5BanIndex%20-%201%5D%20%3D%20anObject%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_at_ifAbsent_',
+smalltalk.method({
+selector: 'at:ifAbsent:',
+category: 'accessing',
+fn: function (anIndex, aBlock){
+var self=this;
+
+	    var value = self[anIndex - 1];
+	    if(value === undefined) {
+		return aBlock();
+	    } else {
+		return value;
+	    }
+	;
+return self;},
+source: unescape('at%3A%20anIndex%20ifAbsent%3A%20aBlock%0A%09%3C%0A%09%20%20%20%20var%20value%20%3D%20self%5BanIndex%20-%201%5D%3B%0A%09%20%20%20%20if%28value%20%3D%3D%3D%20undefined%29%20%7B%0A%09%09return%20aBlock%28%29%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%09return%20value%3B%0A%09%20%20%20%20%7D%0A%09%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_add_',
+smalltalk.method({
+selector: 'add:',
+category: 'adding/removing',
+fn: function (anObject){
+var self=this;
+self.push(anObject); return anObject;;
+return self;},
+source: unescape('add%3A%20anObject%0A%09%3Cself.push%28anObject%29%3B%20return%20anObject%3B%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_shallowCopy',
+smalltalk.method({
+selector: 'shallowCopy',
+category: 'copying',
+fn: function (){
+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_", [each]);})]);
+return newCollection;
+return self;},
+source: unescape('shallowCopy%0A%09%7C%20newCollection%20%7C%0A%09newCollection%20%3A%3D%20self%20class%20new.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%20newCollection%20add%3A%20each%5D.%0A%09%5EnewCollection'),
+messageSends: ["new", "class", "do:", "add:"],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_deepCopy',
+smalltalk.method({
+selector: 'deepCopy',
+category: 'copying',
+fn: function (){
+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(each, "_deepCopy", [])]);})]);
+return newCollection;
+return self;},
+source: unescape('deepCopy%0A%09%7C%20newCollection%20%7C%0A%09newCollection%20%3A%3D%20self%20class%20new.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%20newCollection%20add%3A%20each%20deepCopy%5D.%0A%09%5EnewCollection'),
+messageSends: ["new", "class", "do:", "add:", "deepCopy"],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_copyFrom_to_',
+smalltalk.method({
+selector: 'copyFrom:to:',
+category: 'copying',
+fn: function (anIndex, anotherIndex){
+var self=this;
+var array=nil;
+array=smalltalk.send(smalltalk.send(self, "_class", []), "_new", []);
+smalltalk.send(anIndex, "_to_do_", [anotherIndex, (function(each){return smalltalk.send(array, "_add_", [smalltalk.send(self, "_at_", [each])]);})]);
+return array;
+return self;},
+source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09%7C%20array%20%7C%0A%09array%20%3A%3D%20self%20class%20new.%0A%09anIndex%20to%3A%20anotherIndex%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20array%20add%3A%20%28self%20at%3A%20each%29%5D.%0A%09%5Earray'),
+messageSends: ["new", "class", "to:do:", "add:", "at:"],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_join_',
+smalltalk.method({
+selector: 'join:',
+category: 'enumerating',
+fn: function (aString){
+var self=this;
+return self.join(aString);
+return self;},
+source: unescape('join%3A%20aString%0A%09%3Creturn%20self.join%28aString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_asJavascript',
+smalltalk.method({
+selector: 'asJavascript',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(unescape("%5B"), "__comma", [smalltalk.send(smalltalk.send(self, "_collect_", [(function(each){return smalltalk.send(each, "_asJavascript", []);})]), "_join_", [unescape("%2C%20")])]), "__comma", [unescape("%5D")]);
+return self;},
+source: unescape('asJavascript%0A%09%5E%27%5B%27%2C%20%28%28self%20collect%3A%20%5B%3Aeach%20%7C%20each%20asJavascript%5D%29%20join%3A%20%27%2C%20%27%29%2C%20%20%27%5D%27'),
+messageSends: [unescape("%2C"), "join:", "collect:", "asJavascript"],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_sort',
+smalltalk.method({
+selector: 'sort',
+category: 'enumerating',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_basicPerform_", ["sort"]);
+return self;},
+source: unescape('sort%0A%20%20%20%20%5Eself%20basicPerform%3A%20%27sort%27'),
+messageSends: ["basicPerform:"],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_sort_',
+smalltalk.method({
+selector: 'sort:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+
+		return self.sort(function(a, b) {
+			if(aBlock(a,b)) {return 1} else {return -1}
+		})
+	;
+return self;},
+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%201%7D%20else%20%7Breturn%20-1%7D%0A%09%09%7D%29%0A%09%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_remove_',
+smalltalk.method({
+selector: 'remove:',
+category: 'adding/removing',
+fn: function (anObject){
+var self=this;
+
+		for(var i=0;i<self.length;i++) {
+			if(self[i] == anObject) {
+				self.splice(i,1);
+				break;
+			}
+		}
+	;
+return self;},
+source: unescape('remove%3A%20anObject%0A%09%3C%0A%09%09for%28var%20i%3D0%3Bi%3Cself.length%3Bi++%29%20%7B%0A%09%09%09if%28self%5Bi%5D%20%3D%3D%20anObject%29%20%7B%0A%09%09%09%09self.splice%28i%2C1%29%3B%0A%09%09%09%09break%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_sorted',
+smalltalk.method({
+selector: 'sorted',
+category: 'enumerating',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_copy", []), "_sort", []);
+return self;},
+source: unescape('sorted%0A%09%5Eself%20copy%20sort'),
+messageSends: ["sort", "copy"],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_sorted_',
+smalltalk.method({
+selector: 'sorted:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_copy", []), "_sorted_", [aBlock]);
+return self;},
+source: unescape('sorted%3A%20aBlock%0A%09%5Eself%20copy%20sorted%3A%20aBlock'),
+messageSends: ["sorted:", "copy"],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_asJSONObject',
+smalltalk.method({
+selector: 'asJSONObject',
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_collect_", [(function(each){return smalltalk.send(each, "_asJSONObject", []);})]);
+return self;},
+source: unescape('asJSONObject%0A%09%5Eself%20collect%3A%20%5B%3Aeach%20%7C%20each%20asJSONObject%5D'),
+messageSends: ["collect:", "asJSONObject"],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_removeFrom_to_',
+smalltalk.method({
+selector: 'removeFrom:to:',
+category: 'adding/removing',
+fn: function (aNumber, anotherNumber){
+var self=this;
+self.splice(aNumber - 1,anotherNumber - 1);
+return self;},
+source: unescape('removeFrom%3A%20aNumber%20to%3A%20anotherNumber%0A%09%3Cself.splice%28aNumber%20-%201%2CanotherNumber%20-%201%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+'_printString',
+smalltalk.method({
+selector: 'printString',
+category: 'enumerating',
+fn: function (){
+var self=this;
+var str=nil;
+str=smalltalk.send("", "_writeStream", []);
+smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.SequenceableCollection), "__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;},
+source: unescape('printString%0A%09%7C%20str%20%7C%0A%09str%20%3A%3D%20%27%27%20writeStream.%0A%09str%20nextPutAll%3A%20super%20printString%2C%20%27%20%28%27.%0A%09self%20%0A%09%09do%3A%20%5B%3Aeach%20%7C%20str%20nextPutAll%3A%20each%20printString%5D%0A%09%09separatedBy%3A%20%5Bstr%20nextPutAll%3A%20%27%20%27%5D.%0A%09str%20nextPutAll%3A%20%27%29%27.%0A%09%5Estr%20contents'),
+messageSends: ["writeStream", "nextPutAll:", unescape("%2C"), "printString", "do:separatedBy:", "contents"],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+
+
+smalltalk.setup(smalltalk.Array);
+smalltalk.addClass('RegularExpression', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_compile_',
+smalltalk.method({
+selector: 'compile:',
+category: 'evaluating',
+fn: function (aString){
+var self=this;
+return self.compile(aString);
+return self;},
+source: unescape('compile%3A%20aString%0A%09%3Creturn%20self.compile%28aString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.RegularExpression);
+
+smalltalk.addMethod(
+'_exec_',
+smalltalk.method({
+selector: 'exec:',
+category: 'evaluating',
+fn: function (aString){
+var self=this;
+return self.exec(aString) || nil;
+return self;},
+source: unescape('exec%3A%20aString%0A%09%3Creturn%20self.exec%28aString%29%20%7C%7C%20nil%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.RegularExpression);
+
+smalltalk.addMethod(
+'_test_',
+smalltalk.method({
+selector: 'test:',
+category: 'evaluating',
+fn: function (aString){
+var self=this;
+return self.test(aString);
+return self;},
+source: unescape('test%3A%20aString%0A%09%3Creturn%20self.test%28aString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.RegularExpression);
+
+
+smalltalk.addMethod(
+'_fromString_flag_',
+smalltalk.method({
+selector: 'fromString:flag:',
+category: 'instance creation',
+fn: function (aString, anotherString){
+var self=this;
+return new RegExp(aString, anotherString);
+return self;},
+source: unescape('fromString%3A%20aString%20flag%3A%20anotherString%0A%09%3Creturn%20new%20RegExp%28aString%2C%20anotherString%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.RegularExpression.klass);
+
+smalltalk.addMethod(
+'_fromString_',
+smalltalk.method({
+selector: 'fromString:',
+category: 'instance creation',
+fn: function (aString){
+var self=this;
+return smalltalk.send(self, "_fromString_flag_", [aString, ""]);
+return self;},
+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.RegularExpression.klass);
+
+
+smalltalk.setup(smalltalk.RegularExpression);
+smalltalk.addClass('Error', smalltalk.Object, ['messageText'], 'Kernel');
+smalltalk.addMethod(
+'_messageText',
+smalltalk.method({
+selector: 'messageText',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@messageText'];
+return self;},
+source: unescape('messageText%0A%09%5EmessageText'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Error);
+
+smalltalk.addMethod(
+'_messageText_',
+smalltalk.method({
+selector: 'messageText:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+self['@messageText']=aString;
+return self;},
+source: unescape('messageText%3A%20aString%0A%09messageText%20%3A%3D%20aString'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Error);
+
+smalltalk.addMethod(
+'_signal',
+smalltalk.method({
+selector: 'signal',
+category: 'signaling',
+fn: function (){
+var self=this;
+self.context = thisContext; self.smalltalkError = true; throw(self);
+return self;},
+source: unescape('signal%0A%09%3Cself.context%20%3D%20thisContext%3B%20self.smalltalkError%20%3D%20true%3B%20throw%28self%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Error);
+
+smalltalk.addMethod(
+'_context',
+smalltalk.method({
+selector: 'context',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.context;
+return self;},
+source: unescape('context%0A%09%3Creturn%20self.context%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Error);
+
+
+smalltalk.addMethod(
+'_signal_',
+smalltalk.method({
+selector: 'signal:',
+category: 'instance creation',
+fn: function (aString){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send(self, "_new", []));
+return self;},
+source: unescape('signal%3A%20aString%0A%09%20%20%20%20%5Eself%20new%0A%09%09messageText%3A%20aString%3B%0A%09%09signal'),
+messageSends: ["messageText:", "signal", "new"],
+referencedClasses: []
+}),
+smalltalk.Error.klass);
+
+
+smalltalk.setup(smalltalk.Error);
+smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_receiver',
+smalltalk.method({
+selector: 'receiver',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.receiver;
+return self;},
+source: unescape('receiver%0A%09%3Creturn%20self.receiver%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.MethodContext);
+
+smalltalk.addMethod(
+'_selector',
+smalltalk.method({
+selector: 'selector',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.convertSelector(self.selector);
+return self;},
+source: unescape('selector%0A%09%3Creturn%20smalltalk.convertSelector%28self.selector%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.MethodContext);
+
+smalltalk.addMethod(
+'_home',
+smalltalk.method({
+selector: 'home',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.homeContext;
+return self;},
+source: unescape('home%0A%09%3Creturn%20self.homeContext%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.MethodContext);
+
+smalltalk.addMethod(
+'_temps',
+smalltalk.method({
+selector: 'temps',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.temps;
+return self;},
+source: unescape('temps%0A%09%3Creturn%20self.temps%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.MethodContext);
+
+smalltalk.addMethod(
+'_printString',
+smalltalk.method({
+selector: '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;},
+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(
+'_asString',
+smalltalk.method({
+selector: '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;},
+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.setup(smalltalk.MethodContext);
+smalltalk.addClass('Association', smalltalk.Object, ['key', 'value'], 'Kernel');
+smalltalk.addMethod(
+'__eq',
+smalltalk.method({
+selector: '=',
+category: 'comparing',
+fn: function (anAssociation){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(anAssociation, "_class", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_key", []), "__eq", [smalltalk.send(anAssociation, "_key", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(self, "_value", []), "__eq", [smalltalk.send(anAssociation, "_value", [])]);})]);})]);
+return self;},
+source: unescape('%3D%20anAssociation%0A%09%5Eself%20class%20%3D%20anAssociation%20class%20and%3A%20%5B%0A%09%20%20%20%20self%20key%20%3D%20anAssociation%20key%20and%3A%20%5B%0A%09%09self%20value%20%3D%20anAssociation%20value%5D%5D'),
+messageSends: ["and:", unescape("%3D"), "class", "key", "value"],
+referencedClasses: []
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+'_key_',
+smalltalk.method({
+selector: 'key:',
+category: 'accessing',
+fn: function (aKey){
+var self=this;
+self['@key']=aKey;
+return self;},
+source: unescape('key%3A%20aKey%0A%09key%20%3A%3D%20aKey'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+'_key',
+smalltalk.method({
+selector: 'key',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@key'];
+return self;},
+source: unescape('key%0A%09%5Ekey'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+'_value_',
+smalltalk.method({
+selector: 'value:',
+category: 'accessing',
+fn: function (aValue){
+var self=this;
+self['@value']=aValue;
+return self;},
+source: unescape('value%3A%20aValue%0A%09value%20%3A%3D%20aValue'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+'_value',
+smalltalk.method({
+selector: 'value',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@value'];
+return self;},
+source: unescape('value%0A%09%5Evalue'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Association);
+
+
+smalltalk.addMethod(
+'_key_value_',
+smalltalk.method({
+selector: 'key:value:',
+category: 'instance creation',
+fn: function (aKey, aValue){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_key_", [aKey]);smalltalk.send($rec, "_value_", [aValue]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;},
+source: unescape('key%3A%20aKey%20value%3A%20aValue%0A%09%20%20%20%20%5Eself%20new%0A%09%09key%3A%20aKey%3B%0A%09%09value%3A%20aValue%3B%0A%09%09yourself'),
+messageSends: ["key:", "value:", "yourself", "new"],
+referencedClasses: []
+}),
+smalltalk.Association.klass);
+
+
+smalltalk.setup(smalltalk.Association);
+smalltalk.addClass('Dictionary', smalltalk.Collection, ['keys'], 'Kernel');
+smalltalk.addMethod(
+'__eq',
+smalltalk.method({
+selector: '=',
+category: 'comparing',
+fn: function (aDictionary){
+var self=this;
+try{smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(aDictionary, "_class", [])]), "_ifFalse_", [(function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})]);
+smalltalk.send(self, "_associationsDo_", [(function(assoc){return smalltalk.send(smalltalk.send(smalltalk.send(aDictionary, "_at_ifAbsent_", [smalltalk.send(assoc, "_key", []), (function(){return (function(){throw({name: 'stReturn', selector: '__eq', fn: function(){return false}})})();})]), "__eq", [smalltalk.send(assoc, "_value", [])]), "_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)}},
+source: unescape('%3D%20aDictionary%0A%09self%20class%20%3D%20aDictionary%20class%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09self%20associationsDo%3A%20%5B%3Aassoc%20%7C%0A%09%20%20%20%20%28aDictionary%20at%3A%20assoc%20key%20ifAbsent%3A%20%5B%5Efalse%5D%29%20%3D%20assoc%20value%20%0A%09%09ifFalse%3A%20%5B%5Efalse%5D%5D.%0A%09%5Etrue'),
+messageSends: ["ifFalse:", unescape("%3D"), "class", "associationsDo:", "at:ifAbsent:", "key", "value"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_shallowCopy',
+smalltalk.method({
+selector: 'shallowCopy',
+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(each, "_value", [])]);})]);
+return copy;
+return self;},
+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.Dictionary);
+
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.Collection);
+self['@keys']=[];
+return self;},
+source: unescape('initialize%0A%20%20%20%20%09super%20initialize.%0A%20%20%20%20%09keys%20%3A%3D%20%23%28%29'),
+messageSends: ["initialize"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_size',
+smalltalk.method({
+selector: 'size',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self['@keys'], "_size", []);
+return self;},
+source: unescape('size%0A%09%5Ekeys%20size'),
+messageSends: ["size"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_associations',
+smalltalk.method({
+selector: 'associations',
+category: 'accessing',
+fn: function (){
+var self=this;
+var associations=nil;
+associations=[];
+smalltalk.send(self['@keys'], "_do_", [(function(each){return smalltalk.send(associations, "_add_", [smalltalk.send(smalltalk.Association, "_key_value_", [each, smalltalk.send(self, "_at_", [each])])]);})]);
+return associations;
+return self;},
+source: unescape('associations%0A%09%7C%20associations%20%7C%0A%09associations%20%3A%3D%20%23%28%29.%0A%09keys%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:", "add:", "key:value:", "at:"],
+referencedClasses: [smalltalk.Association]
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_keys',
+smalltalk.method({
+selector: 'keys',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self['@keys'], "_copy", []);
+return self;},
+source: unescape('keys%0A%09%5Ekeys%20copy'),
+messageSends: ["copy"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_values',
+smalltalk.method({
+selector: 'values',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self['@keys'], "_collect_", [(function(each){return smalltalk.send(self, "_at_", [each]);})]);
+return self;},
+source: unescape('values%0A%20%20%20%20%09%5Ekeys%20collect%3A%20%5B%3Aeach%20%7C%20self%20at%3A%20each%5D'),
+messageSends: ["collect:", "at:"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_at_put_',
+smalltalk.method({
+selector: 'at:put:',
+category: 'accessing',
+fn: function (aKey, aValue){
+var self=this;
+smalltalk.send(smalltalk.send(self['@keys'], "_includes_", [aKey]), "_ifFalse_", [(function(){return smalltalk.send(self['@keys'], "_add_", [aKey]);})]);
+return smalltalk.send(self, "_basicAt_put_", [aKey, aValue]);
+return self;},
+source: unescape('at%3A%20aKey%20put%3A%20aValue%0A%09%28keys%20includes%3A%20aKey%29%20ifFalse%3A%20%5Bkeys%20add%3A%20aKey%5D.%0A%09%5Eself%20basicAt%3A%20aKey%20put%3A%20aValue'),
+messageSends: ["ifFalse:", "includes:", "add:", "basicAt:put:"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_at_ifAbsent_',
+smalltalk.method({
+selector: 'at:ifAbsent:',
+category: 'accessing',
+fn: function (aKey, aBlock){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_keys", []), "_includes_", [aKey]), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_basicAt_", [aKey]);}), aBlock]);
+return self;},
+source: unescape('at%3A%20aKey%20ifAbsent%3A%20aBlock%0A%09%5E%28self%20keys%20includes%3A%20aKey%29%0A%09%09ifTrue%3A%20%5Bself%20basicAt%3A%20aKey%5D%0A%09%09ifFalse%3A%20aBlock'),
+messageSends: ["ifTrue:ifFalse:", "includes:", "keys", "basicAt:"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_at_ifAbsentPut_',
+smalltalk.method({
+selector: 'at:ifAbsentPut:',
+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;},
+source: unescape('at%3A%20aKey%20ifAbsentPut%3A%20aBlock%0A%20%20%20%20%09%5Eself%20at%3A%20aKey%20ifAbsent%3A%20%5B%0A%20%20%20%20%09%20%20%20%20self%20at%3A%20aKey%20put%3A%20aBlock%20value%5D'),
+messageSends: ["at:ifAbsent:", "at:put:", "value"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_at_ifPresent_',
+smalltalk.method({
+selector: 'at:ifPresent:',
+category: 'accessing',
+fn: function (aKey, aBlock){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_basicAt_", [aKey]), "_ifNotNil_", [(function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_at_", [aKey])]);})]);
+return self;},
+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.Dictionary);
+
+smalltalk.addMethod(
+'_at_ifPresent_ifAbsent_',
+smalltalk.method({
+selector: 'at:ifPresent:ifAbsent:',
+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;},
+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.Dictionary);
+
+smalltalk.addMethod(
+'_add_',
+smalltalk.method({
+selector: 'add:',
+category: 'adding/removing',
+fn: function (anAssociation){
+var self=this;
+smalltalk.send(self, "_at_put_", [smalltalk.send(anAssociation, "_key", []), smalltalk.send(anAssociation, "_value", [])]);
+return self;},
+source: unescape('add%3A%20anAssociation%0A%20%20%20%20%09self%20at%3A%20anAssociation%20key%20put%3A%20anAssociation%20value'),
+messageSends: ["at:put:", "key", "value"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_addAll_',
+smalltalk.method({
+selector: 'addAll:',
+category: 'adding/removing',
+fn: function (aDictionary){
+var self=this;
+smalltalk.send(self, "_addAll_", [smalltalk.send(aDictionary, "_associations", [])], smalltalk.Collection);
+return aDictionary;
+return self;},
+source: unescape('addAll%3A%20aDictionary%0A%20%20%20%20%09super%20addAll%3A%20aDictionary%20associations.%0A%20%20%20%20%09%5EaDictionary'),
+messageSends: ["addAll:", "associations"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'__comma',
+smalltalk.method({
+selector: ',',
+category: 'copying',
+fn: function (aCollection){
+var self=this;
+smalltalk.send(self, "_shouldNotImplement", []);
+return self;},
+source: unescape('%2C%20aCollection%0A%09self%20shouldNotImplement'),
+messageSends: ["shouldNotImplement"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_copyFrom_to_',
+smalltalk.method({
+selector: 'copyFrom:to:',
+category: 'copying',
+fn: function (anIndex, anotherIndex){
+var self=this;
+smalltalk.send(self, "_shouldNotImplement", []);
+return self;},
+source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09self%20shouldNotImplement'),
+messageSends: ["shouldNotImplement"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_associationsDo_',
+smalltalk.method({
+selector: 'associationsDo:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_associations", []), "_do_", [aBlock]);
+return self;},
+source: unescape('associationsDo%3A%20aBlock%0A%20%20%20%20%09self%20associations%20do%3A%20aBlock'),
+messageSends: ["do:", "associations"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_keysAndValuesDo_',
+smalltalk.method({
+selector: 'keysAndValuesDo:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(self, "_associationsDo_", [(function(each){return smalltalk.send(aBlock, "_value_value_", [smalltalk.send(each, "_key", []), smalltalk.send(each, "_value", [])]);})]);
+return self;},
+source: unescape('keysAndValuesDo%3A%20aBlock%0A%20%20%20%20%09self%20associationsDo%3A%20%5B%3Aeach%20%7C%0A%20%20%20%20%09%20%20%20%20aBlock%20value%3A%20each%20key%20value%3A%20each%20value%5D'),
+messageSends: ["associationsDo:", "value:value:", "key", "value"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_do_',
+smalltalk.method({
+selector: 'do:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_values", []), "_do_", [aBlock]);
+return self;},
+source: unescape('do%3A%20aBlock%0A%20%20%20%20%09self%20values%20do%3A%20aBlock'),
+messageSends: ["do:", "values"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_select_',
+smalltalk.method({
+selector: 'select:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+var newDict=nil;
+newDict=smalltalk.send(smalltalk.send(self, "_class", []), "_new", []);
+smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(smalltalk.send(aBlock, "_value_", [value]), "_ifTrue_", [(function(){return smalltalk.send(newDict, "_at_put_", [key, value]);})]);})]);
+return newDict;
+return self;},
+source: unescape('select%3A%20aBlock%0A%20%20%20%20%09%7C%20newDict%20%7C%0A%20%20%20%20%09newDict%20%3A%3D%20self%20class%20new.%0A%20%20%20%20%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%20%20%20%20%09%20%20%20%20%28aBlock%20value%3A%20value%29%20ifTrue%3A%20%5BnewDict%20at%3A%20key%20put%3A%20value%5D%5D.%0A%20%20%20%20%09%5EnewDict'),
+messageSends: ["new", "class", "keysAndValuesDo:", "ifTrue:", "value:", "at:put:"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_collect_',
+smalltalk.method({
+selector: 'collect:',
+category: 'enumerating',
+fn: function (aBlock){
+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 self;},
+source: unescape('collect%3A%20aBlock%0A%20%20%20%20%09%7C%20newDict%20%7C%0A%20%20%20%20%09newDict%20%3A%3D%20self%20class%20new.%0A%20%20%20%20%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%20%20%20%20%09%20%20%20%20newDict%20at%3A%20key%20put%3A%20%28aBlock%20value%3A%20value%29%5D.%0A%20%20%20%20%09%5EnewDict'),
+messageSends: ["new", "class", "keysAndValuesDo:", "at:put:", "value:"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_detect_ifNone_',
+smalltalk.method({
+selector: 'detect:ifNone:',
+category: 'enumerating',
+fn: function (aBlock, anotherBlock){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_values", []), "_detect_ifNone_", [aBlock, anotherBlock]);
+return self;},
+source: unescape('detect%3A%20aBlock%20ifNone%3A%20anotherBlock%0A%09%5Eself%20values%20detect%3A%20aBlock%20ifNone%3A%20anotherBlock'),
+messageSends: ["detect:ifNone:", "values"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_includes_',
+smalltalk.method({
+selector: 'includes:',
+category: 'enumerating',
+fn: function (anObject){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_values", []), "_includes_", [anObject]);
+return self;},
+source: unescape('includes%3A%20anObject%0A%09%5Eself%20values%20includes%3A%20anObject'),
+messageSends: ["includes:", "values"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_remove_',
+smalltalk.method({
+selector: 'remove:',
+category: 'adding/removing',
+fn: function (aKey){
+var self=this;
+smalltalk.send(self, "_removeKey_", [aKey]);
+return self;},
+source: unescape('remove%3A%20aKey%0A%20%20%20%20self%20removeKey%3A%20aKey'),
+messageSends: ["removeKey:"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_removeKey_',
+smalltalk.method({
+selector: 'removeKey:',
+category: 'adding/removing',
+fn: function (aKey){
+var self=this;
+smalltalk.send(self['@keys'], "_remove_", [aKey]);
+return self;},
+source: unescape('removeKey%3A%20aKey%0A%20%20%20%20keys%20remove%3A%20aKey'),
+messageSends: ["remove:"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_at_',
+smalltalk.method({
+selector: 'at:',
+category: 'accessing',
+fn: function (aKey){
+var self=this;
+return smalltalk.send(self, "_at_ifAbsent_", [aKey, (function(){return smalltalk.send(self, "_errorNotFound", []);})]);
+return self;},
+source: unescape('at%3A%20aKey%0A%09%5Eself%20at%3A%20aKey%20ifAbsent%3A%20%5Bself%20errorNotFound%5D'),
+messageSends: ["at:ifAbsent:", "errorNotFound"],
+referencedClasses: []
+}),
+smalltalk.Dictionary);
+
+smalltalk.addMethod(
+'_asJSONObject',
+smalltalk.method({
+selector: 'asJSONObject',
+category: 'converting',
+fn: function (){
+var self=this;
+var object=nil;
+object=smalltalk.send(smalltalk.Object, "_new", []);
+smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(object, "_basicAt_put_", [key, smalltalk.send(value, "_asJSONObject", [])]);})]);
+return object;
+return self;},
+source: unescape('asJSONObject%0A%09%7C%20object%20%7C%0A%09object%20%3A%3D%20Object%20new.%0A%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%09object%20basicAt%3A%20key%20put%3A%20value%20asJSONObject%5D.%0A%09%5Eobject'),
+messageSends: ["new", "keysAndValuesDo:", "basicAt:put:", "asJSONObject"],
+referencedClasses: [smalltalk.Object]
+}),
+smalltalk.Dictionary);
+
+
+
+smalltalk.setup(smalltalk.Dictionary);
+smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_superclass_subclass_',
+smalltalk.method({
+selector: 'superclass:subclass:',
+category: 'class creation',
+fn: function (aClass, aString){
+var self=this;
+smalltalk.send(self, "_superclass_subclass_instanceVariableNames_category_", [aClass, aString, "", nil]);
+return self;},
+source: unescape('superclass%3A%20aClass%20subclass%3A%20aString%0A%09self%20superclass%3A%20aClass%20subclass%3A%20aString%20instanceVariableNames%3A%20%27%27%20category%3A%20nil'),
+messageSends: ["superclass:subclass:instanceVariableNames:category:"],
+referencedClasses: []
+}),
+smalltalk.ClassBuilder);
+
+smalltalk.addMethod(
+'_superclass_subclass_instanceVariableNames_category_',
+smalltalk.method({
+selector: 'superclass:subclass:instanceVariableNames:category:',
+category: 'class creation',
+fn: function (aClass, aString, aString2, aString3){
+var self=this;
+var newClass=nil;
+newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_", [aClass, aString, smalltalk.send(self, "_instanceVariableNamesFor_", [aString2])]);
+smalltalk.send(self, "_setupClass_", [newClass]);
+smalltalk.send(newClass, "_category_", [smalltalk.send(aString3, "_ifNil_", [(function(){return "unclassified";})])]);
+return self;},
+source: unescape('superclass%3A%20aClass%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%7C%20newClass%20%7C%0A%09newClass%20%3A%3D%20self%20addSubclassOf%3A%20aClass%20named%3A%20aString%20instanceVariableNames%3A%20%28self%20instanceVariableNamesFor%3A%20aString2%29.%0A%09self%20setupClass%3A%20newClass.%0A%09newClass%20category%3A%20%28aString3%20ifNil%3A%20%5B%27unclassified%27%5D%29'),
+messageSends: ["addSubclassOf:named:instanceVariableNames:", "instanceVariableNamesFor:", "setupClass:", "category:", "ifNil:"],
+referencedClasses: []
+}),
+smalltalk.ClassBuilder);
+
+smalltalk.addMethod(
+'_class_instanceVariableNames_',
+smalltalk.method({
+selector: 'class:instanceVariableNames:',
+category: 'class creation',
+fn: function (aClass, aString){
+var self=this;
+smalltalk.send(smalltalk.send(aClass, "_isMetaclass", []), "_ifFalse_", [(function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_name", []), "__comma", [" is not a metaclass"])]);})]);
+smalltalk.send(aClass, "_basicAt_put_", ["iVarNames", smalltalk.send(self, "_instanceVariableNamesFor_", [aString])]);
+smalltalk.send(self, "_setupClass_", [aClass]);
+return self;},
+source: unescape('class%3A%20aClass%20instanceVariableNames%3A%20aString%0A%09aClass%20isMetaclass%20ifFalse%3A%20%5Bself%20error%3A%20aClass%20name%2C%20%27%20is%20not%20a%20metaclass%27%5D.%0A%09aClass%20basicAt%3A%20%27iVarNames%27%20put%3A%20%28self%20instanceVariableNamesFor%3A%20aString%29.%0A%09self%20setupClass%3A%20aClass'),
+messageSends: ["ifFalse:", "isMetaclass", "error:", unescape("%2C"), "name", "basicAt:put:", "instanceVariableNamesFor:", "setupClass:"],
+referencedClasses: []
+}),
+smalltalk.ClassBuilder);
+
+smalltalk.addMethod(
+'_instanceVariableNamesFor_',
+smalltalk.method({
+selector: 'instanceVariableNamesFor:',
+category: 'private',
+fn: function (aString){
+var self=this;
+return smalltalk.send(smalltalk.send(aString, "_tokenize_", [" "]), "_reject_", [(function(each){return smalltalk.send(each, "_isEmpty", []);})]);
+return self;},
+source: unescape('instanceVariableNamesFor%3A%20aString%0A%09%5E%28aString%20tokenize%3A%20%27%20%27%29%20reject%3A%20%5B%3Aeach%20%7C%20each%20isEmpty%5D'),
+messageSends: ["reject:", "tokenize:", "isEmpty"],
+referencedClasses: []
+}),
+smalltalk.ClassBuilder);
+
+smalltalk.addMethod(
+'_addSubclassOf_named_instanceVariableNames_',
+smalltalk.method({
+selector: 'addSubclassOf:named:instanceVariableNames:',
+category: 'private',
+fn: function (aClass, aString, aCollection){
+var self=this;
+smalltalk.addClass(aString, aClass, aCollection);
+	    return smalltalk[aString];
+return self;},
+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(
+'_setupClass_',
+smalltalk.method({
+selector: 'setupClass:',
+category: 'private',
+fn: function (aClass){
+var self=this;
+smalltalk.init(aClass);;
+return self;},
+source: unescape('setupClass%3A%20aClass%0A%09%3Csmalltalk.init%28aClass%29%3B%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.ClassBuilder);
+
+
+
+smalltalk.setup(smalltalk.ClassBuilder);
+smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel');
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+self['@chunkParser']=smalltalk.send(smalltalk.ChunkParser, "_new", []);
+return self;},
+source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'),
+messageSends: ["initialize", "new"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.ClassCategoryReader);
+
+smalltalk.addMethod(
+'_class_category_',
+smalltalk.method({
+selector: 'class:category:',
+category: 'accessing',
+fn: function (aClass, aString){
+var self=this;
+self['@class']=aClass;
+self['@category']=aString;
+return self;},
+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(
+'_scanFrom_',
+smalltalk.method({
+selector: 'scanFrom:',
+category: 'fileIn',
+fn: function (aStream){
+var self=this;
+var nextChunk=nil;
+nextChunk=smalltalk.send(smalltalk.send(smalltalk.send(self['@chunkParser'], "_emptyChunk", []), "__slash", [smalltalk.send(self['@chunkParser'], "_chunk", [])]), "_parse_", [aStream]);
+smalltalk.send(smalltalk.send(nextChunk, "_isEmptyChunk", []), "_ifFalse_", [(function(){smalltalk.send(self, "_compileMethod_", [smalltalk.send(nextChunk, "_contents", [])]);return smalltalk.send(self, "_scanFrom_", [aStream]);})]);
+return self;},
+source: unescape('scanFrom%3A%20aStream%0A%09%7C%20nextChunk%20%7C%0A%09nextChunk%20%3A%3D%20%28chunkParser%20emptyChunk%20/%20chunkParser%20chunk%29%20parse%3A%20aStream.%0A%09nextChunk%20isEmptyChunk%20ifFalse%3A%20%5B%0A%09%20%20%20%20self%20compileMethod%3A%20nextChunk%20contents.%0A%09%20%20%20%20self%20scanFrom%3A%20aStream%5D.'),
+messageSends: ["parse:", unescape("/"), "emptyChunk", "chunk", "ifFalse:", "isEmptyChunk", "compileMethod:", "contents", "scanFrom:"],
+referencedClasses: []
+}),
+smalltalk.ClassCategoryReader);
+
+smalltalk.addMethod(
+'_compileMethod_',
+smalltalk.method({
+selector: 'compileMethod:',
+category: 'private',
+fn: function (aString){
+var self=this;
+var method=nil;
+method=smalltalk.send(smalltalk.send(smalltalk.Compiler, "_new", []), "_load_forClass_", [aString, self['@class']]);
+smalltalk.send(method, "_category_", [self['@category']]);
+smalltalk.send(self['@class'], "_addCompiledMethod_", [method]);
+return self;},
+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: [smalltalk.nil]
+}),
+smalltalk.ClassCategoryReader);
+
+
+
+smalltalk.setup(smalltalk.ClassCategoryReader);
+smalltalk.addClass('Stream', smalltalk.Object, ['collection', 'position', 'streamSize'], 'Kernel');
+smalltalk.addMethod(
+'_collection',
+smalltalk.method({
+selector: 'collection',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@collection'];
+return self;},
+source: unescape('collection%0A%09%5Ecollection'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_setCollection_',
+smalltalk.method({
+selector: 'setCollection:',
+category: 'accessing',
+fn: function (aCollection){
+var self=this;
+self['@collection']=aCollection;
+return self;},
+source: unescape('setCollection%3A%20aCollection%0A%09collection%20%3A%3D%20aCollection'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_position',
+smalltalk.method({
+selector: 'position',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self['@position'], "_ifNil_", [(function(){return self['@position']=(0);})]);
+return self;},
+source: unescape('position%0A%09%5Eposition%20ifNil%3A%20%5Bposition%20%3A%3D%200%5D'),
+messageSends: ["ifNil:"],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_position_',
+smalltalk.method({
+selector: 'position:',
+category: 'accessing',
+fn: function (anInteger){
+var self=this;
+self['@position']=anInteger;
+return self;},
+source: unescape('position%3A%20anInteger%0A%09position%20%3A%3D%20anInteger'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_streamSize',
+smalltalk.method({
+selector: 'streamSize',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@streamSize'];
+return self;},
+source: unescape('streamSize%0A%09%5EstreamSize'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_setStreamSize_',
+smalltalk.method({
+selector: 'setStreamSize:',
+category: 'accessing',
+fn: function (anInteger){
+var self=this;
+self['@streamSize']=anInteger;
+return self;},
+source: unescape('setStreamSize%3A%20anInteger%0A%09streamSize%20%3A%3D%20anInteger'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_contents',
+smalltalk.method({
+selector: 'contents',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_collection", []), "_copyFrom_to_", [(1), smalltalk.send(self, "_streamSize", [])]);
+return self;},
+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.Stream);
+
+smalltalk.addMethod(
+'_size',
+smalltalk.method({
+selector: 'size',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_streamSize", []);
+return self;},
+source: unescape('size%0A%09%5Eself%20streamSize'),
+messageSends: ["streamSize"],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_reset',
+smalltalk.method({
+selector: 'reset',
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_position_", [(0)]);
+return self;},
+source: unescape('reset%0A%09self%20position%3A%200'),
+messageSends: ["position:"],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_close',
+smalltalk.method({
+selector: 'close',
+category: 'actions',
+fn: function (){
+var self=this;
+
+return self;},
+source: unescape('close'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_flush',
+smalltalk.method({
+selector: 'flush',
+category: 'actions',
+fn: function (){
+var self=this;
+
+return self;},
+source: unescape('flush'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_resetContents',
+smalltalk.method({
+selector: 'resetContents',
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_reset", []);
+smalltalk.send(self, "_setStreamSize_", [(0)]);
+return self;},
+source: unescape('resetContents%0A%09self%20reset.%0A%09self%20setStreamSize%3A%200'),
+messageSends: ["reset", "setStreamSize:"],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_do_',
+smalltalk.method({
+selector: 'do:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+smalltalk.send((function(){return smalltalk.send(self, "_atEnd", []);}), "_whileFalse_", [(function(){return smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_next", [])]);})]);
+return self;},
+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.Stream);
+
+smalltalk.addMethod(
+'_setToEnd',
+smalltalk.method({
+selector: 'setToEnd',
+category: 'positioning',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_position_", [smalltalk.send(self, "_size", [])]);
+return self;},
+source: unescape('setToEnd%0A%09self%20position%3A%20self%20size'),
+messageSends: ["position:", "size"],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_skip_',
+smalltalk.method({
+selector: 'skip:',
+category: 'positioning',
+fn: function (anInteger){
+var self=this;
+smalltalk.send(self, "_position_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_position", []), "__plus", [anInteger]), "_min_max_", [smalltalk.send(self, "_size", []), (0)])]);
+return self;},
+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.Stream);
+
+smalltalk.addMethod(
+'_next',
+smalltalk.method({
+selector: 'next',
+category: 'reading',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_position_", [smalltalk.send(smalltalk.send(self, "_position", []), "__plus", [(1)])]);
+return smalltalk.send(self['@collection'], "_at_", [smalltalk.send(self, "_position", [])]);
+return self;},
+source: unescape('next%0A%09self%20position%3A%20self%20position%20+%201.%20%0A%09%5Ecollection%20at%3A%20self%20position'),
+messageSends: ["position:", unescape("+"), "position", "at:"],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_next_',
+smalltalk.method({
+selector: 'next:',
+category: 'reading',
+fn: function (anInteger){
+var self=this;
+var tempCollection=nil;
+tempCollection=smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_class", []), "_new", []);
+smalltalk.send(anInteger, "_timesRepeat_", [(function(){return smalltalk.send(smalltalk.send(self, "_atEnd", []), "_ifFalse_", [(function(){return smalltalk.send(tempCollection, "_add_", [smalltalk.send(self, "_next", [])]);})]);})]);
+return tempCollection;
+return self;},
+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.Stream);
+
+smalltalk.addMethod(
+'_nextPut_',
+smalltalk.method({
+selector: 'nextPut:',
+category: 'writing',
+fn: function (anObject){
+var self=this;
+smalltalk.send(self, "_position_", [smalltalk.send(smalltalk.send(self, "_position", []), "__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;},
+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.Stream);
+
+smalltalk.addMethod(
+'_nextPutAll_',
+smalltalk.method({
+selector: 'nextPutAll:',
+category: 'writing',
+fn: function (aCollection){
+var self=this;
+smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send(self, "_nextPut_", [each]);})]);
+return self;},
+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.Stream);
+
+smalltalk.addMethod(
+'_peek',
+smalltalk.method({
+selector: 'peek',
+category: 'reading',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_atEnd", []), "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_collection", []), "_at_", [smalltalk.send(smalltalk.send(self, "_position", []), "__plus", [(1)])]);})]);
+return self;},
+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.Stream);
+
+smalltalk.addMethod(
+'_atEnd',
+smalltalk.method({
+selector: 'atEnd',
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_position", []), "__eq", [smalltalk.send(self, "_size", [])]);
+return self;},
+source: unescape('atEnd%0A%09%5Eself%20position%20%3D%20self%20size'),
+messageSends: [unescape("%3D"), "position", "size"],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_atStart',
+smalltalk.method({
+selector: 'atStart',
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_position", []), "__eq", [(0)]);
+return self;},
+source: unescape('atStart%0A%09%5Eself%20position%20%3D%200'),
+messageSends: [unescape("%3D"), "position"],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+smalltalk.addMethod(
+'_isEmpty',
+smalltalk.method({
+selector: 'isEmpty',
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_size", []), "__eq", [(0)]);
+return self;},
+source: unescape('isEmpty%0A%09%5Eself%20size%20%3D%200'),
+messageSends: [unescape("%3D"), "size"],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
+
+smalltalk.addMethod(
+'_on_',
+smalltalk.method({
+selector: 'on:',
+category: 'instance creation',
+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 self;},
+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.Stream.klass);
+
+
+smalltalk.setup(smalltalk.Stream);
+smalltalk.addClass('StringStream', smalltalk.Stream, [], 'Kernel');
+smalltalk.addMethod(
+'_next_',
+smalltalk.method({
+selector: 'next:',
+category: 'reading',
+fn: function (anInteger){
+var self=this;
+var tempCollection=nil;
+tempCollection=smalltalk.send(smalltalk.send(smalltalk.send(self, "_collection", []), "_class", []), "_new", []);
+smalltalk.send(anInteger, "_timesRepeat_", [(function(){return smalltalk.send(smalltalk.send(self, "_atEnd", []), "_ifFalse_", [(function(){return tempCollection=smalltalk.send(tempCollection, "__comma", [smalltalk.send(self, "_next", [])]);})]);})]);
+return tempCollection;
+return self;},
+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.StringStream);
+
+smalltalk.addMethod(
+'_nextPut_',
+smalltalk.method({
+selector: 'nextPut:',
+category: 'writing',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_nextPutAll_", [aString]);
+return self;},
+source: unescape('nextPut%3A%20aString%0A%09self%20nextPutAll%3A%20aString'),
+messageSends: ["nextPutAll:"],
+referencedClasses: []
+}),
+smalltalk.StringStream);
+
+smalltalk.addMethod(
+'_nextPutAll_',
+smalltalk.method({
+selector: 'nextPutAll:',
+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_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_position", []), "__plus", [(1)]), "__plus", [smalltalk.send(aString, "_size", [])]), smalltalk.send(smalltalk.send(self, "_collection", []), "_size", [])])])]);
+smalltalk.send(self, "_position_", [smalltalk.send(smalltalk.send(self, "_position", []), "__plus", [smalltalk.send(aString, "_size", [])])]);
+smalltalk.send(self, "_setStreamSize_", [smalltalk.send(smalltalk.send(self, "_streamSize", []), "_max_", [smalltalk.send(self, "_position", [])])]);
+return self;},
+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.StringStream);
+
+smalltalk.addMethod(
+'_cr',
+smalltalk.method({
+selector: 'cr',
+category: 'writing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_nextPutAll_", [smalltalk.send(smalltalk.String, "_cr", [])]);
+return self;},
+source: unescape('cr%0A%09%5Eself%20nextPutAll%3A%20String%20cr'),
+messageSends: ["nextPutAll:", "cr"],
+referencedClasses: [smalltalk.String]
+}),
+smalltalk.StringStream);
+
+smalltalk.addMethod(
+'_crlf',
+smalltalk.method({
+selector: 'crlf',
+category: 'writing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_nextPutAll_", [smalltalk.send(smalltalk.String, "_crlf", [])]);
+return self;},
+source: unescape('crlf%0A%09%5Eself%20nextPutAll%3A%20String%20crlf'),
+messageSends: ["nextPutAll:", "crlf"],
+referencedClasses: [smalltalk.String]
+}),
+smalltalk.StringStream);
+
+smalltalk.addMethod(
+'_lf',
+smalltalk.method({
+selector: 'lf',
+category: 'writing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_nextPutAll_", [smalltalk.send(smalltalk.String, "_lf", [])]);
+return self;},
+source: unescape('lf%0A%09%5Eself%20nextPutAll%3A%20String%20lf'),
+messageSends: ["nextPutAll:", "lf"],
+referencedClasses: [smalltalk.String]
+}),
+smalltalk.StringStream);
+
+
+
+smalltalk.setup(smalltalk.StringStream);
+smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel');
+smalltalk.addMethod(
+'_class_',
+smalltalk.method({
+selector: 'class:',
+category: 'accessing',
+fn: function (aClass){
+var self=this;
+self['@class']=aClass;
+return self;},
+source: unescape('class%3A%20aClass%0A%09class%20%3A%3D%20aClass'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.ClassCommentReader);
+
+smalltalk.addMethod(
+'_scanFrom_',
+smalltalk.method({
+selector: 'scanFrom:',
+category: 'fileIn',
+fn: function (aStream){
+var self=this;
+var nextChunk=nil;
+nextChunk=smalltalk.send(smalltalk.send(smalltalk.send(self['@chunkParser'], "_emptyChunk", []), "__slash", [smalltalk.send(self['@chunkParser'], "_chunk", [])]), "_parse_", [aStream]);
+smalltalk.send(smalltalk.send(nextChunk, "_isEmptyChunk", []), "_ifFalse_", [(function(){return smalltalk.send(self, "_setComment_", [smalltalk.send(nextChunk, "_contents", [])]);})]);
+return self;},
+source: unescape('scanFrom%3A%20aStream%0A%09%7C%20nextChunk%20%7C%0A%09nextChunk%20%3A%3D%20%28chunkParser%20emptyChunk%20/%20chunkParser%20chunk%29%20parse%3A%20aStream.%0A%09nextChunk%20isEmptyChunk%20ifFalse%3A%20%5B%0A%09%20%20%20%20self%20setComment%3A%20nextChunk%20contents%5D.'),
+messageSends: ["parse:", unescape("/"), "emptyChunk", "chunk", "ifFalse:", "isEmptyChunk", "setComment:", "contents"],
+referencedClasses: []
+}),
+smalltalk.ClassCommentReader);
+
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+self['@chunkParser']=smalltalk.send(smalltalk.ChunkParser, "_new", []);
+return self;},
+source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'),
+messageSends: ["initialize", "new"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.ClassCommentReader);
+
+smalltalk.addMethod(
+'_setComment_',
+smalltalk.method({
+selector: 'setComment:',
+category: 'private',
+fn: function (aString){
+var self=this;
+smalltalk.send(self['@class'], "_comment_", [aString]);
+return self;},
+source: unescape('setComment%3A%20aString%0A%20%20%20%20class%20comment%3A%20aString'),
+messageSends: ["comment:"],
+referencedClasses: []
+}),
+smalltalk.ClassCommentReader);
+
+
+
+smalltalk.setup(smalltalk.ClassCommentReader);
+smalltalk.addClass('Random', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_next',
+smalltalk.method({
+selector: 'next',
+category: 'accessing',
+fn: function (){
+var self=this;
+return Math.random();
+return self;},
+source: unescape('next%0A%09%3Creturn%20Math.random%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Random);
+
+smalltalk.addMethod(
+'_next_',
+smalltalk.method({
+selector: 'next:',
+category: 'accessing',
+fn: function (anInteger){
+var self=this;
+return smalltalk.send((1), "_to_collect_", [anInteger, (function(each){return smalltalk.send(self, "_next", []);})]);
+return self;},
+source: unescape('next%3A%20anInteger%0A%20%20%20%20%5E1%20to%3A%20anInteger%20collect%3A%20%5B%3Aeach%20%7C%20self%20next%5D'),
+messageSends: ["to:collect:", "next"],
+referencedClasses: []
+}),
+smalltalk.Random);
+
+
+
+smalltalk.setup(smalltalk.Random);
+smalltalk.addClass('Point', smalltalk.Object, ['x', 'y'], 'Kernel');
+smalltalk.addMethod(
+'_x',
+smalltalk.method({
+selector: 'x',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@x'];
+return self;},
+source: unescape('x%0A%09%5Ex'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Point);
+
+smalltalk.addMethod(
+'_y',
+smalltalk.method({
+selector: 'y',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@y'];
+return self;},
+source: unescape('y%0A%09%5Ey'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Point);
+
+smalltalk.addMethod(
+'_y_',
+smalltalk.method({
+selector: 'y:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self['@y']=aNumber;
+return self;},
+source: unescape('y%3A%20aNumber%0A%09y%20%3A%3D%20aNumber'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Point);
+
+smalltalk.addMethod(
+'_x_',
+smalltalk.method({
+selector: 'x:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self['@x']=aNumber;
+return self;},
+source: unescape('x%3A%20aNumber%0A%09x%20%3A%3D%20aNumber'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Point);
+
+smalltalk.addMethod(
+'__star',
+smalltalk.method({
+selector: '*',
+category: 'arithmetic',
+fn: function (aPoint){
+var self=this;
+return smalltalk.send(smalltalk.Point, "_x_y_", [smalltalk.send(smalltalk.send(self, "_x", []), "__star", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), smalltalk.send(smalltalk.send(self, "_y", []), "__star", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]);
+return self;},
+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: [smalltalk.Point]
+}),
+smalltalk.Point);
+
+smalltalk.addMethod(
+'__plus',
+smalltalk.method({
+selector: '+',
+category: 'arithmetic',
+fn: function (aPoint){
+var self=this;
+return smalltalk.send(smalltalk.Point, "_x_y_", [smalltalk.send(smalltalk.send(self, "_x", []), "__plus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), smalltalk.send(smalltalk.send(self, "_y", []), "__plus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]);
+return self;},
+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: [smalltalk.Point]
+}),
+smalltalk.Point);
+
+smalltalk.addMethod(
+'__minus',
+smalltalk.method({
+selector: '-',
+category: 'arithmetic',
+fn: function (aPoint){
+var self=this;
+return smalltalk.send(smalltalk.Point, "_x_y_", [smalltalk.send(smalltalk.send(self, "_x", []), "__minus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), smalltalk.send(smalltalk.send(self, "_y", []), "__minus", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]);
+return self;},
+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: [smalltalk.Point]
+}),
+smalltalk.Point);
+
+smalltalk.addMethod(
+'__slash',
+smalltalk.method({
+selector: '/',
+category: 'arithmetic',
+fn: function (aPoint){
+var self=this;
+return smalltalk.send(smalltalk.Point, "_x_y_", [smalltalk.send(smalltalk.send(self, "_x", []), "__slash", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_x", [])]), smalltalk.send(smalltalk.send(self, "_y", []), "__slash", [smalltalk.send(smalltalk.send(aPoint, "_asPoint", []), "_y", [])])]);
+return self;},
+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: [smalltalk.Point]
+}),
+smalltalk.Point);
+
+smalltalk.addMethod(
+'_asPoint',
+smalltalk.method({
+selector: 'asPoint',
+category: 'converting',
+fn: function (){
+var self=this;
+return self;
+return self;},
+source: unescape('asPoint%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Point);
+
+
+smalltalk.addMethod(
+'_x_y_',
+smalltalk.method({
+selector: 'x:y:',
+category: 'instance creation',
+fn: function (aNumber, anotherNumber){
+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 self;},
+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.Point.klass);
+
+
+smalltalk.setup(smalltalk.Point);
+smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel');
+smalltalk.addMethod(
+'_selector',
+smalltalk.method({
+selector: 'selector',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@selector'];
+return self;},
+source: unescape('selector%0A%09%5Eselector'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Message);
+
+smalltalk.addMethod(
+'_selector_',
+smalltalk.method({
+selector: 'selector:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+self['@selector']=aString;
+return self;},
+source: unescape('selector%3A%20aString%0A%09selector%20%3A%3D%20aString'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Message);
+
+smalltalk.addMethod(
+'_arguments_',
+smalltalk.method({
+selector: 'arguments:',
+category: 'accessing',
+fn: function (anArray){
+var self=this;
+self['@arguments']=anArray;
+return self;},
+source: unescape('arguments%3A%20anArray%0A%09arguments%20%3A%3D%20anArray'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Message);
+
+smalltalk.addMethod(
+'_arguments',
+smalltalk.method({
+selector: 'arguments',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@arguments'];
+return self;},
+source: unescape('arguments%0A%09%5Earguments'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Message);
+
+
+smalltalk.addMethod(
+'_selector_arguments_',
+smalltalk.method({
+selector: 'selector:arguments:',
+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;},
+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.setup(smalltalk.Message);
+smalltalk.addClass('MessageNotUnderstood', smalltalk.Error, ['message', 'receiver'], 'Kernel');
+smalltalk.addMethod(
+'_message',
+smalltalk.method({
+selector: 'message',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@message'];
+return self;},
+source: unescape('message%0A%09%5Emessage'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.MessageNotUnderstood);
+
+smalltalk.addMethod(
+'_message_',
+smalltalk.method({
+selector: 'message:',
+category: 'accessing',
+fn: function (aMessage){
+var self=this;
+self['@message']=aMessage;
+return self;},
+source: unescape('message%3A%20aMessage%0A%09message%20%3A%3D%20aMessage'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.MessageNotUnderstood);
+
+smalltalk.addMethod(
+'_receiver',
+smalltalk.method({
+selector: 'receiver',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@receiver'];
+return self;},
+source: unescape('receiver%0A%09%5Ereceiver'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.MessageNotUnderstood);
+
+smalltalk.addMethod(
+'_receiver_',
+smalltalk.method({
+selector: 'receiver:',
+category: 'accessing',
+fn: function (anObject){
+var self=this;
+self['@receiver']=anObject;
+return self;},
+source: unescape('receiver%3A%20anObject%0A%09receiver%20%3A%3D%20anObject'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.MessageNotUnderstood);
+
+smalltalk.addMethod(
+'_messageText',
+smalltalk.method({
+selector: '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;},
+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.setup(smalltalk.MessageNotUnderstood);
+smalltalk.addClass('ErrorHandler', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_handleError_',
+smalltalk.method({
+selector: 'handleError:',
+category: 'error handling',
+fn: function (anError){
+var self=this;
+smalltalk.send(smalltalk.send(anError, "_context", []), "_ifNotNil_", [(function(){return smalltalk.send(self, "_logErrorContext_", [smalltalk.send(anError, "_context", [])]);})]);
+smalltalk.send(self, "_logError_", [anError]);
+return self;},
+source: unescape('handleError%3A%20anError%0A%09anError%20context%20ifNotNil%3A%20%5Bself%20logErrorContext%3A%20anError%20context%5D.%0A%09self%20logError%3A%20anError'),
+messageSends: ["ifNotNil:", "context", "logErrorContext:", "logError:"],
+referencedClasses: []
+}),
+smalltalk.ErrorHandler);
+
+smalltalk.addMethod(
+'_logContext_',
+smalltalk.method({
+selector: 'logContext:',
+category: 'private',
+fn: function (aContext){
+var self=this;
+smalltalk.send(smalltalk.send(aContext, "_home", []), "_ifNotNil_", [(function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})]);
+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;},
+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);
+
+smalltalk.addMethod(
+'_logErrorContext_',
+smalltalk.method({
+selector: 'logErrorContext:',
+category: 'private',
+fn: function (aContext){
+var self=this;
+smalltalk.send(aContext, "_ifNotNil_", [(function(){return smalltalk.send(smalltalk.send(aContext, "_home", []), "_ifNotNil_", [(function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})]);})]);
+return self;},
+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);
+
+smalltalk.addMethod(
+'_logError_',
+smalltalk.method({
+selector: 'logError:',
+category: 'private',
+fn: function (anError){
+var self=this;
+smalltalk.send(self, "_log_", [smalltalk.send(anError, "_messageText", [])]);
+return self;},
+source: unescape('logError%3A%20anError%0A%09self%20log%3A%20anError%20messageText'),
+messageSends: ["log:", "messageText"],
+referencedClasses: []
+}),
+smalltalk.ErrorHandler);
+
+smalltalk.addMethod(
+'_log_',
+smalltalk.method({
+selector: 'log:',
+category: 'private',
+fn: function (aString){
+var self=this;
+smalltalk.send(console, "_log_", [aString]);
+return self;},
+source: unescape('log%3A%20aString%0A%09console%20log%3A%20aString'),
+messageSends: ["log:"],
+referencedClasses: []
+}),
+smalltalk.ErrorHandler);
+
+
+smalltalk.ErrorHandler.klass.iVarNames = ['current'];
+smalltalk.addMethod(
+'_current',
+smalltalk.method({
+selector: 'current',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@current'];
+return self;},
+source: unescape('current%0A%09%5Ecurrent'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.ErrorHandler.klass);
+
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_register", []);
+return self;},
+source: unescape('initialize%0A%09self%20register'),
+messageSends: ["register"],
+referencedClasses: []
+}),
+smalltalk.ErrorHandler.klass);
+
+smalltalk.addMethod(
+'_register',
+smalltalk.method({
+selector: 'register',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.ErrorHandler, "_setCurrent_", [smalltalk.send(self, "_new", [])]);
+return self;},
+source: unescape('register%0A%09ErrorHandler%20setCurrent%3A%20self%20new'),
+messageSends: ["setCurrent:", "new"],
+referencedClasses: [smalltalk.ErrorHandler]
+}),
+smalltalk.ErrorHandler.klass);
+
+smalltalk.addMethod(
+'_setCurrent_',
+smalltalk.method({
+selector: 'setCurrent:',
+category: 'accessing',
+fn: function (anHandler){
+var self=this;
+self['@current']=anHandler;
+return self;},
+source: unescape('setCurrent%3A%20anHandler%0A%09current%20%3A%3D%20anHandler'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.ErrorHandler.klass);
+
+
+smalltalk.setup(smalltalk.ErrorHandler);

+ 30 - 30
js/Kernel.js

@@ -710,6 +710,7 @@ referencedClasses: []
 smalltalk.Object.klass);
 
 
+smalltalk.setup(smalltalk.Object);
 smalltalk.addClass('Smalltalk', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '_classes',
@@ -726,36 +727,6 @@ referencedClasses: []
 }),
 smalltalk.Smalltalk);
 
-smalltalk.addMethod(
-'_debugMode',
-smalltalk.method({
-selector: 'debugMode',
-category: 'accessing',
-fn: function (){
-var self=this;
-return self.debugMode;
-return self;},
-source: unescape('debugMode%0A%09%3Creturn%20self.debugMode%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Smalltalk);
-
-smalltalk.addMethod(
-'_debugMode_',
-smalltalk.method({
-selector: 'debugMode:',
-category: 'accessing',
-fn: function (aBoolean){
-var self=this;
-self.debugMode = aBoolean;
-return self;},
-source: unescape('debugMode%3A%20aBoolean%0A%09%3Cself.debugMode%20%3D%20aBoolean%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Smalltalk);
-
 smalltalk.addMethod(
 '_readJSON_',
 smalltalk.method({
@@ -822,6 +793,7 @@ referencedClasses: []
 smalltalk.Smalltalk.klass);
 
 
+smalltalk.setup(smalltalk.Smalltalk);
 smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '_new',
@@ -1161,6 +1133,7 @@ smalltalk.Behavior);
 
 
 
+smalltalk.setup(smalltalk.Behavior);
 smalltalk.addClass('Class', smalltalk.Behavior, [], 'Kernel');
 smalltalk.addMethod(
 '_category',
@@ -1273,6 +1246,7 @@ smalltalk.Class);
 
 
 
+smalltalk.setup(smalltalk.Class);
 smalltalk.addClass('Metaclass', smalltalk.Behavior, [], 'Kernel');
 smalltalk.addMethod(
 '_instanceClass',
@@ -1336,6 +1310,7 @@ smalltalk.Metaclass);
 
 
 
+smalltalk.setup(smalltalk.Metaclass);
 smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '_source',
@@ -1504,6 +1479,7 @@ smalltalk.CompiledMethod);
 
 
 
+smalltalk.setup(smalltalk.CompiledMethod);
 smalltalk.addClass('Number', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '__eq',
@@ -1926,6 +1902,7 @@ referencedClasses: []
 smalltalk.Number.klass);
 
 
+smalltalk.setup(smalltalk.Number);
 smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '_compiledSource',
@@ -2094,6 +2071,7 @@ smalltalk.BlockClosure);
 
 
 
+smalltalk.setup(smalltalk.BlockClosure);
 smalltalk.addClass('Boolean', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '__eq',
@@ -2283,6 +2261,7 @@ smalltalk.Boolean);
 
 
 
+smalltalk.setup(smalltalk.Boolean);
 smalltalk.addClass('Date', smalltalk.Object, [], 'Kernel');
 smalltalk.Date.comment=unescape('The%20Date%20class%20is%20used%20to%20work%20with%20dates%20and%20times.')
 smalltalk.addMethod(
@@ -2905,6 +2884,7 @@ referencedClasses: [smalltalk.Date]
 smalltalk.Date.klass);
 
 
+smalltalk.setup(smalltalk.Date);
 smalltalk.addClass('UndefinedObject', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '_subclass_instanceVariableNames_',
@@ -3088,6 +3068,7 @@ referencedClasses: []
 smalltalk.UndefinedObject.klass);
 
 
+smalltalk.setup(smalltalk.UndefinedObject);
 smalltalk.addClass('Collection', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '_size',
@@ -3554,6 +3535,7 @@ referencedClasses: []
 smalltalk.Collection.klass);
 
 
+smalltalk.setup(smalltalk.Collection);
 smalltalk.addClass('SequenceableCollection', smalltalk.Collection, [], 'Kernel');
 smalltalk.addMethod(
 '_at_',
@@ -3802,6 +3784,7 @@ smalltalk.SequenceableCollection);
 
 
 
+smalltalk.setup(smalltalk.SequenceableCollection);
 smalltalk.addClass('String', smalltalk.SequenceableCollection, [], 'Kernel');
 smalltalk.addMethod(
 '__eq',
@@ -4542,6 +4525,7 @@ referencedClasses: []
 smalltalk.String.klass);
 
 
+smalltalk.setup(smalltalk.String);
 smalltalk.addClass('Array', smalltalk.SequenceableCollection, [], 'Kernel');
 smalltalk.addMethod(
 '_size',
@@ -4832,6 +4816,7 @@ smalltalk.Array);
 
 
 
+smalltalk.setup(smalltalk.Array);
 smalltalk.addClass('RegularExpression', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '_compile_',
@@ -4910,6 +4895,7 @@ referencedClasses: []
 smalltalk.RegularExpression.klass);
 
 
+smalltalk.setup(smalltalk.RegularExpression);
 smalltalk.addClass('Error', smalltalk.Object, ['messageText'], 'Kernel');
 smalltalk.addMethod(
 '_messageText',
@@ -4988,6 +4974,7 @@ referencedClasses: []
 smalltalk.Error.klass);
 
 
+smalltalk.setup(smalltalk.Error);
 smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '_receiver',
@@ -5081,6 +5068,7 @@ smalltalk.MethodContext);
 
 
 
+smalltalk.setup(smalltalk.MethodContext);
 smalltalk.addClass('Association', smalltalk.Object, ['key', 'value'], 'Kernel');
 smalltalk.addMethod(
 '__eq',
@@ -5174,6 +5162,7 @@ referencedClasses: []
 smalltalk.Association.klass);
 
 
+smalltalk.setup(smalltalk.Association);
 smalltalk.addClass('Dictionary', smalltalk.Collection, ['keys'], 'Kernel');
 smalltalk.addMethod(
 '__eq',
@@ -5603,6 +5592,7 @@ smalltalk.Dictionary);
 
 
 
+smalltalk.setup(smalltalk.Dictionary);
 smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '_superclass_subclass_',
@@ -5702,6 +5692,7 @@ smalltalk.ClassBuilder);
 
 
 
+smalltalk.setup(smalltalk.ClassBuilder);
 smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel');
 smalltalk.addMethod(
 '_initialize',
@@ -5772,6 +5763,7 @@ smalltalk.ClassCategoryReader);
 
 
 
+smalltalk.setup(smalltalk.ClassCategoryReader);
 smalltalk.addClass('Stream', smalltalk.Object, ['collection', 'position', 'streamSize'], 'Kernel');
 smalltalk.addMethod(
 '_collection',
@@ -6142,6 +6134,7 @@ referencedClasses: []
 smalltalk.Stream.klass);
 
 
+smalltalk.setup(smalltalk.Stream);
 smalltalk.addClass('StringStream', smalltalk.Stream, [], 'Kernel');
 smalltalk.addMethod(
 '_next_',
@@ -6240,6 +6233,7 @@ smalltalk.StringStream);
 
 
 
+smalltalk.setup(smalltalk.StringStream);
 smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel');
 smalltalk.addMethod(
 '_class_',
@@ -6306,6 +6300,7 @@ smalltalk.ClassCommentReader);
 
 
 
+smalltalk.setup(smalltalk.ClassCommentReader);
 smalltalk.addClass('Random', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '_next',
@@ -6339,6 +6334,7 @@ smalltalk.Random);
 
 
 
+smalltalk.setup(smalltalk.Random);
 smalltalk.addClass('Point', smalltalk.Object, ['x', 'y'], 'Kernel');
 smalltalk.addMethod(
 '_x',
@@ -6492,6 +6488,7 @@ referencedClasses: []
 smalltalk.Point.klass);
 
 
+smalltalk.setup(smalltalk.Point);
 smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel');
 smalltalk.addMethod(
 '_selector',
@@ -6570,6 +6567,7 @@ referencedClasses: []
 smalltalk.Message.klass);
 
 
+smalltalk.setup(smalltalk.Message);
 smalltalk.addClass('MessageNotUnderstood', smalltalk.Error, ['message', 'receiver'], 'Kernel');
 smalltalk.addMethod(
 '_message',
@@ -6648,6 +6646,7 @@ smalltalk.MessageNotUnderstood);
 
 
 
+smalltalk.setup(smalltalk.MessageNotUnderstood);
 smalltalk.addClass('ErrorHandler', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 '_handleError_',
@@ -6789,3 +6788,4 @@ referencedClasses: []
 smalltalk.ErrorHandler.klass);
 
 
+smalltalk.setup(smalltalk.ErrorHandler);

ファイルの差分が大きいため隠しています
+ 1103 - 0
js/Parser.deploy.js


ファイルの差分が大きいため隠しています
+ 32 - 15
js/Parser.js


+ 1067 - 0
js/SUnit.deploy.js

@@ -0,0 +1,1067 @@
+smalltalk.addClass('TestCase', smalltalk.Object, ['testedClass'], 'SUnit');
+smalltalk.addMethod(
+'_testedClass',
+smalltalk.method({
+selector: 'testedClass',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@testedClass'];
+return self;},
+source: unescape('testedClass%0A%09%5EtestedClass'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_testedClass_',
+smalltalk.method({
+selector: 'testedClass:',
+category: 'accessing',
+fn: function (aClass){
+var self=this;
+self['@testedClass']=aClass;
+return self;},
+source: unescape('testedClass%3A%20aClass%0A%09testedClass%20%3A%3D%20aClass'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_cleanUpInstanceVariables',
+smalltalk.method({
+selector: 'cleanUpInstanceVariables',
+category: 'private',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_instanceVariableNames", []), "_do_", [(function(name){return smalltalk.send(smalltalk.send(name, "__eq", ["testSelector"]), "_ifFalse_", [(function(){return smalltalk.send(self, "_instVarAt_put_", [name, nil]);})]);})]);
+return self;},
+source: unescape('cleanUpInstanceVariables%0A%09self%20class%20instanceVariableNames%20do%3A%20%5B%20%3Aname%20%7C%0A%09%09name%20%3D%20%27testSelector%27%20ifFalse%3A%20%5B%0A%09%09%09self%20instVarAt%3A%20name%20put%3A%20nil%20%5D%5D'),
+messageSends: ["do:", "instanceVariableNames", "class", "ifFalse:", unescape("%3D"), "instVarAt:put:"],
+referencedClasses: []
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_signalFailure_',
+smalltalk.method({
+selector: 'signalFailure:',
+category: 'private',
+fn: function (aString){
+var self=this;
+(function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send(smalltalk.TestFailure, "_new", []));
+return self;},
+source: unescape('signalFailure%3A%20aString%0A%09TestFailure%20new%0A%09%09messageText%3A%20aString%3B%0A%09%09signal'),
+messageSends: ["messageText:", "signal", "new"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_setUp',
+smalltalk.method({
+selector: 'setUp',
+category: 'running',
+fn: function (){
+var self=this;
+
+return self;},
+source: unescape('setUp'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_tearDown',
+smalltalk.method({
+selector: 'tearDown',
+category: 'running',
+fn: function (){
+var self=this;
+
+return self;},
+source: unescape('tearDown'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_methods',
+smalltalk.method({
+selector: 'methods',
+category: 'running',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", [unescape("%5Etest")]);})]);
+return self;},
+source: unescape('methods%0A%09%5Eself%20class%20methodDictionary%20keys%20select%3A%20%5B%3Aeach%20%7C%20each%20match%3A%20%27%5Etest%27%5D'),
+messageSends: ["select:", "keys", "methodDictionary", "class", "match:"],
+referencedClasses: []
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_runCaseFor_',
+smalltalk.method({
+selector: 'runCaseFor:',
+category: 'running',
+fn: function (aTestResult){
+var self=this;
+smalltalk.send((function(){smalltalk.send(self, "_setUp", []);return smalltalk.send(self, "_performTestFor_", [aTestResult]);}), "_on_do_", [smalltalk.Error, (function(ex){smalltalk.send(self, "_tearDown", []);smalltalk.send(self, "_cleanUpInstanceVariables", []);return smalltalk.send(ex, "_signal", []);})]);
+smalltalk.send(self, "_tearDown", []);
+smalltalk.send(self, "_cleanUpInstanceVariables", []);
+return self;},
+source: unescape('runCaseFor%3A%20aTestResult%0A%09%5Bself%20setUp.%0A%09self%20performTestFor%3A%20aTestResult%5D%0A%09%09on%3A%20Error%0A%09%09do%3A%20%5B%3Aex%20%7C%0A%09%09%09self%20tearDown.%0A%09%09%09self%20cleanUpInstanceVariables.%0A%09%09%09ex%20signal%5D.%0A%09self%20tearDown.%0A%09self%20cleanUpInstanceVariables'),
+messageSends: ["on:do:", "setUp", "performTestFor:", "tearDown", "cleanUpInstanceVariables", "signal"],
+referencedClasses: [smalltalk.Error]
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_performTestFor_',
+smalltalk.method({
+selector: 'performTestFor:',
+category: 'running',
+fn: function (aResult){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_methods", []), "_do_", [(function(each){smalltalk.send((function(){return smalltalk.send((function(){return smalltalk.send(self, "_perform_", [each]);}), "_on_do_", [smalltalk.TestFailure, (function(ex){return smalltalk.send(aResult, "_addFailure_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_name", []), "__comma", [unescape("%3E%3E")]), "__comma", [each])]);})]);}), "_on_do_", [smalltalk.Error, (function(ex){return smalltalk.send(aResult, "_addError_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_name", []), "__comma", [unescape("%3E%3E")]), "__comma", [each])]);})]);return smalltalk.send(aResult, "_increaseRuns", []);})]);
+return self;},
+source: unescape('performTestFor%3A%20aResult%0A%09self%20methods%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%5B%5Bself%20perform%3A%20each%5D%0A%09%09%09on%3A%20TestFailure%20do%3A%20%5B%3Aex%20%7C%20aResult%20addFailure%3A%20self%20class%20name%2C%20%27%3E%3E%27%2C%20each%5D%5D%0A%09%09%09on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%20aResult%20addError%3A%20self%20class%20name%2C%20%27%3E%3E%27%2C%20each%5D.%0A%09%09aResult%20increaseRuns%5D'),
+messageSends: ["do:", "methods", "on:do:", "perform:", "addFailure:", unescape("%2C"), "name", "class", "addError:", "increaseRuns"],
+referencedClasses: [smalltalk.nil,smalltalk.Error]
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_assert_',
+smalltalk.method({
+selector: 'assert:',
+category: 'testing',
+fn: function (aBoolean){
+var self=this;
+smalltalk.send(aBoolean, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", ["Assertion failed"]);})]);
+return self;},
+source: unescape('assert%3A%20aBoolean%0A%09aBoolean%20ifFalse%3A%20%5Bself%20signalFailure%3A%20%27Assertion%20failed%27%5D'),
+messageSends: ["ifFalse:", "signalFailure:"],
+referencedClasses: []
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_deny_',
+smalltalk.method({
+selector: 'deny:',
+category: 'testing',
+fn: function (aBoolean){
+var self=this;
+smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
+return self;},
+source: unescape('deny%3A%20aBoolean%0A%09self%20assert%3A%20aBoolean%20not'),
+messageSends: ["assert:", "not"],
+referencedClasses: []
+}),
+smalltalk.TestCase);
+
+
+
+smalltalk.setup(smalltalk.TestCase);
+smalltalk.addClass('ExampleTest', smalltalk.TestCase, ['test'], 'SUnit');
+smalltalk.addMethod(
+'_testFailure',
+smalltalk.method({
+selector: 'testFailure',
+category: 'not yet classified',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_deny_", [true]);
+return self;},
+source: unescape('testFailure%0A%09self%20deny%3A%20true'),
+messageSends: ["deny:"],
+referencedClasses: []
+}),
+smalltalk.ExampleTest);
+
+smalltalk.addMethod(
+'_testPasses',
+smalltalk.method({
+selector: 'testPasses',
+category: 'not yet classified',
+fn: function (){
+var self=this;
+smalltalk.send((100000), "_timesRepeat_", [(function(){return smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "__plus", [(1)]), "__eq", [(2)])]);})]);
+return self;},
+source: unescape('testPasses%0A%09100000%20timesRepeat%3A%20%5Bself%20assert%3A%201%20+%201%20%3D%202%5D'),
+messageSends: ["timesRepeat:", "assert:", unescape("%3D"), unescape("+")],
+referencedClasses: []
+}),
+smalltalk.ExampleTest);
+
+smalltalk.addMethod(
+'_testError',
+smalltalk.method({
+selector: 'testError',
+category: 'not yet classified',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_assert_", [smalltalk.send((1), "_foo", [])]);
+return self;},
+source: unescape('testError%0A%09self%20assert%3A%201%20foo'),
+messageSends: ["assert:", "foo"],
+referencedClasses: []
+}),
+smalltalk.ExampleTest);
+
+
+
+smalltalk.setup(smalltalk.ExampleTest);
+smalltalk.addClass('ProgressBar', smalltalk.TabWidget, ['percent', 'progressDiv', 'div'], 'SUnit');
+smalltalk.addMethod(
+'_percent',
+smalltalk.method({
+selector: 'percent',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self['@percent'], "_ifNil_", [(function(){return (0);})]);
+return self;},
+source: unescape('percent%0A%09%5Epercent%20ifNil%3A%20%5B0%5D'),
+messageSends: ["ifNil:"],
+referencedClasses: []
+}),
+smalltalk.ProgressBar);
+
+smalltalk.addMethod(
+'_percent_',
+smalltalk.method({
+selector: 'percent:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self['@percent']=aNumber;
+return self;},
+source: unescape('percent%3A%20aNumber%0A%09percent%20%3A%3D%20aNumber'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.ProgressBar);
+
+smalltalk.addMethod(
+'_renderOn_',
+smalltalk.method({
+selector: 'renderOn:',
+category: 'rendering',
+fn: function (html){
+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", []);
+return self;},
+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.ProgressBar);
+
+smalltalk.addMethod(
+'_updatePercent_',
+smalltalk.method({
+selector: 'updatePercent:',
+category: 'updating',
+fn: function (aNumber){
+var self=this;
+smalltalk.send(self, "_percent_", [aNumber]);
+smalltalk.send(self, "_renderProgressBar", []);
+return self;},
+source: unescape('updatePercent%3A%20aNumber%0A%09self%20percent%3A%20aNumber.%0A%09self%20renderProgressBar'),
+messageSends: ["percent:", "renderProgressBar"],
+referencedClasses: []
+}),
+smalltalk.ProgressBar);
+
+smalltalk.addMethod(
+'_renderProgressBar',
+smalltalk.method({
+selector: 'renderProgressBar',
+category: 'rendering',
+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", []));})]);
+return self;},
+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.ProgressBar);
+
+
+
+smalltalk.setup(smalltalk.ProgressBar);
+smalltalk.addClass('TestFailure', smalltalk.Error, [], 'SUnit');
+
+
+smalltalk.setup(smalltalk.TestFailure);
+smalltalk.addClass('TestRunner', smalltalk.TabWidget, ['selectedCategories', 'categoriesList', 'selectedClasses', 'classesList', 'selectedMethods', 'progressBar', 'methodsList', 'result', 'statusDiv'], 'SUnit');
+smalltalk.addMethod(
+'_label',
+smalltalk.method({
+selector: 'label',
+category: 'accessing',
+fn: function (){
+var self=this;
+return unescape("%5BTest%20runner%5D");
+return self;},
+source: unescape('label%0A%20%20%20%20%5E%27%5BTest%20runner%5D%27'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_categories',
+smalltalk.method({
+selector: 'categories',
+category: 'accessing',
+fn: function (){
+var self=this;
+var categories=nil;
+categories=smalltalk.send(smalltalk.Array, "_new", []);
+smalltalk.send(smalltalk.send(self, "_allClasses", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(categories, "_includes_", [smalltalk.send(each, "_category", [])]), "_ifFalse_", [(function(){return smalltalk.send(categories, "_add_", [smalltalk.send(each, "_category", [])]);})]);})]);
+return smalltalk.send(categories, "_sort", []);
+return self;},
+source: unescape('categories%0A%20%20%20%20%7C%20categories%20%7C%0A%20%20%20%20categories%20%3A%3D%20Array%20new.%0A%20%20%20%20self%20allClasses%20do%3A%20%5B%3Aeach%20%7C%0A%09%28categories%20includes%3A%20each%20category%29%20ifFalse%3A%20%5B%0A%09%20%20%20%20categories%20add%3A%20each%20category%5D%5D.%0A%20%20%20%20%5Ecategories%20sort'),
+messageSends: ["new", "do:", "allClasses", "ifFalse:", "includes:", "category", "add:", "sort"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_classes',
+smalltalk.method({
+selector: 'classes',
+category: 'accessing',
+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 smalltalk.send(smalltalk.send(a, "_name", []), "__gt", [smalltalk.send(b, "_name", [])]);})]);
+return self;},
+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(
+'_selectedCategories',
+smalltalk.method({
+selector: 'selectedCategories',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self['@selectedCategories'], "_ifNil_", [(function(){return self['@selectedCategories']=smalltalk.send(smalltalk.Array, "_new", []);})]);
+return self;},
+source: unescape('selectedCategories%0A%09%5EselectedCategories%20ifNil%3A%20%5BselectedCategories%20%3A%3D%20Array%20new%5D'),
+messageSends: ["ifNil:", "new"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_allClasses',
+smalltalk.method({
+selector: 'allClasses',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.TestCase, "_allSubclasses", []);
+return self;},
+source: unescape('allClasses%0A%09%5ETestCase%20allSubclasses'),
+messageSends: ["allSubclasses"],
+referencedClasses: [smalltalk.TestCase]
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_selectedClasses',
+smalltalk.method({
+selector: 'selectedClasses',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self['@selectedClasses'], "_ifNil_", [(function(){return self['@selectedClasses']=smalltalk.send(smalltalk.Array, "_new", []);})]);
+return self;},
+source: unescape('selectedClasses%0A%09%5EselectedClasses%20%20ifNil%3A%20%5BselectedClasses%20%3A%3D%20Array%20new%5D'),
+messageSends: ["ifNil:", "new"],
+referencedClasses: [smalltalk.Array]
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_progressBar',
+smalltalk.method({
+selector: 'progressBar',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self['@progressBar'], "_ifNil_", [(function(){return self['@progressBar']=smalltalk.send(smalltalk.ProgressBar, "_new", []);})]);
+return self;},
+source: unescape('progressBar%0A%09%5EprogressBar%20ifNil%3A%20%5BprogressBar%20%3A%3D%20ProgressBar%20new%5D'),
+messageSends: ["ifNil:", "new"],
+referencedClasses: [smalltalk.ProgressBar]
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_selectedMethods',
+smalltalk.method({
+selector: 'selectedMethods',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(self['@selectedMethods'], "_ifNil_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_collect_", [(function(each){return smalltalk.send(smalltalk.send(smalltalk.send(each, "_methodDictionary", []), "_keys", []), "_select_", [(function(key){return smalltalk.send(key, "_beginsWith_", ["test"]);})]);})]);})]);
+return self;},
+source: unescape('selectedMethods%0A%09%5EselectedMethods%20ifNil%3A%20%5Bself%20selectedClasses%20collect%3A%20%5B%3Aeach%20%7C%0A%09%09each%20methodDictionary%20keys%20select%3A%20%5B%3Akey%20%7C%20%20key%20beginsWith%3A%20%27test%27%20%5D%5D%5D'),
+messageSends: ["ifNil:", "collect:", "selectedClasses", "select:", "keys", "methodDictionary", "beginsWith:"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_statusInfo',
+smalltalk.method({
+selector: '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;},
+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(
+'_result',
+smalltalk.method({
+selector: 'result',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@result'];
+return self;},
+source: unescape('result%0A%09%5Eresult'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_failedMethods',
+smalltalk.method({
+selector: 'failedMethods',
+category: 'accessing',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_collect_", [(function(each){return (function($rec){smalltalk.send($rec, "_class_", ["failures"]);return smalltalk.send($rec, "_with_", [each]);})(smalltalk.send(html, "_li", []));})]);
+return self;},
+source: unescape('failedMethods%0A%09self%20result%20failures%20collect%3A%20%5B%3Aeach%20%7C%0A%09%09html%20li%20%0A%09%09%09class%3A%20%27failures%27%3B%0A%09%09%09with%3A%20each%5D'),
+messageSends: ["collect:", "failures", "result", "class:", "with:", "li"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_selectAllCategories',
+smalltalk.method({
+selector: 'selectAllCategories',
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_categories", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(self['@selectedCategories'], "_includes_", [each]), "_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;},
+source: unescape('selectAllCategories%0A%09self%20categories%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:", "categories", "ifFalse:", "includes:", "add:", "selectedCategories", "updateCategoriesList", "updateClassesList"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_toggleCategory_',
+smalltalk.method({
+selector: 'toggleCategory:',
+category: 'actions',
+fn: function (aCategory){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_isSelectedCategory_", [aCategory]), "_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;},
+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(
+'_toggleClass_',
+smalltalk.method({
+selector: 'toggleClass:',
+category: 'actions',
+fn: function (aClass){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_isSelectedClass_", [aClass]), "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedClasses'], "_add_", [aClass]);}), (function(){return smalltalk.send(self['@selectedClasses'], "_remove_", [aClass]);})]);
+smalltalk.send(self, "_updateClassesList", []);
+return self;},
+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);
+
+smalltalk.addMethod(
+'_selectAllClasses',
+smalltalk.method({
+selector: 'selectAllClasses',
+category: 'actions',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_classes", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(self['@selectedClasses'], "_includes_", [each]), "_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;},
+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(
+'_run_',
+smalltalk.method({
+selector: 'run:',
+category: 'actions',
+fn: function (aCollection){
+var self=this;
+self['@result']=smalltalk.send(smalltalk.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, "_inject_into_", [(0), (function(acc, each){return smalltalk.send(acc, "__plus", [smalltalk.send(smalltalk.send(each, "_methods", []), "_size", [])]);})])]);
+smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send((function(){smalltalk.send(each, "_runCaseFor_", [self['@result']]);smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [smalltalk.send(smalltalk.send(smalltalk.send(self['@result'], "_runs", []), "__slash", [smalltalk.send(self['@result'], "_total", [])]), "__star", [(100)])]);smalltalk.send(self, "_updateStatusDiv", []);return smalltalk.send(self, "_updateMethodsList", []);}), "_valueWithTimeout_", [(100)]);})]);
+return self;},
+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%20%28aCollection%20inject%3A%200%20into%3A%20%5B%3Aacc%20%3Aeach%20%7C%20acc%20+%20each%20methods%20size%5D%29.%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:", "inject:into:", unescape("+"), "size", "methods", "do:", "valueWithTimeout:", "runCaseFor:", unescape("*"), unescape("/"), "runs", "total"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.TabWidget);
+self['@result']=smalltalk.send(smalltalk.TestResult, "_new", []);
+return self;},
+source: unescape('initialize%0A%09super%20initialize.%0A%09result%20%3A%3D%20TestResult%20new'),
+messageSends: ["initialize", "new"],
+referencedClasses: [smalltalk.nil]
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_printErrors',
+smalltalk.method({
+selector: 'printErrors',
+category: 'printing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_errors", []), "_size", []), "_asString", []), "__comma", [unescape("%20errors%2C%20")]);
+return self;},
+source: unescape('printErrors%0A%09%5Eself%20result%20errors%20size%20asString%20%2C%20%27%20errors%2C%20%27'),
+messageSends: [unescape("%2C"), "asString", "size", "errors", "result"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_printFailures',
+smalltalk.method({
+selector: 'printFailures',
+category: 'printing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_size", []), "_asString", []), "__comma", [" failures"]);
+return self;},
+source: unescape('printFailures%0A%09%5Eself%20result%20failures%20size%20asString%2C%20%27%20failures%27'),
+messageSends: [unescape("%2C"), "asString", "size", "failures", "result"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_printPasses',
+smalltalk.method({
+selector: 'printPasses',
+category: 'printing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_total", []), "__minus", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_errors", []), "_size", []), "__plus", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_size", [])])]), "_asString", []), "__comma", [unescape("%20passes%2C%20")]);
+return self;},
+source: unescape('printPasses%0A%09%5E%28%28%28self%20result%20total%29%20-%20%28self%20result%20errors%20size%20+%20%28self%20result%20failures%20size%29%29%29%20asString%29%20%2C%20%27%20passes%2C%20%27'),
+messageSends: [unescape("%2C"), "asString", unescape("-"), "total", "result", unescape("+"), "size", "errors", "failures"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_printTotal',
+smalltalk.method({
+selector: 'printTotal',
+category: 'printing',
+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;},
+source: unescape('printTotal%0A%09%5Eself%20result%20total%20asString%2C%20%27%20runs%2C%20%27'),
+messageSends: [unescape("%2C"), "asString", "total", "result"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_renderBoxOn_',
+smalltalk.method({
+selector: 'renderBoxOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+(function($rec){smalltalk.send($rec, "_renderCategoriesOn_", [html]);smalltalk.send($rec, "_renderClassesOn_", [html]);return smalltalk.send($rec, "_renderResultsOn_", [html]);})(self);
+return self;},
+source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20self%20%0A%09renderCategoriesOn%3A%20html%3B%0A%09renderClassesOn%3A%20html%3B%0A%09renderResultsOn%3A%20html'),
+messageSends: ["renderCategoriesOn:", "renderClassesOn:", "renderResultsOn:"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_renderButtonsOn_',
+smalltalk.method({
+selector: 'renderButtonsOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+(function($rec){smalltalk.send($rec, "_with_", ["Run selected"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_run_", [smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_collect_", [(function(each){return smalltalk.send(each, "_new", []);})])]);})]);})(smalltalk.send(html, "_button", []));
+return self;},
+source: unescape('renderButtonsOn%3A%20html%0A%20%20%20%20html%20button%0A%09with%3A%20%27Run%20selected%27%3B%0A%09onClick%3A%20%5Bself%20run%3A%20%28self%20selectedClasses%20collect%3A%20%5B%3Aeach%20%7C%20each%20new%5D%29%5D'),
+messageSends: ["with:", "onClick:", "run:", "collect:", "selectedClasses", "new", "button"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_renderCategoriesOn_',
+smalltalk.method({
+selector: 'renderCategoriesOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+self['@categoriesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit categories"]);
+smalltalk.send(self, "_updateCategoriesList", []);
+return self;},
+source: unescape('renderCategoriesOn%3A%20html%0A%20%20%20%20%09categoriesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20sunit%20categories%27.%0A%09self%20updateCategoriesList'),
+messageSends: ["class:", "ul", "updateCategoriesList"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_renderClassesOn_',
+smalltalk.method({
+selector: 'renderClassesOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+self['@classesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit classes"]);
+smalltalk.send(self, "_updateClassesList", []);
+return self;},
+source: unescape('renderClassesOn%3A%20html%0A%20%20%20%20%09classesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20sunit%20classes%27.%0A%09self%20updateClassesList'),
+messageSends: ["class:", "ul", "updateClassesList"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_renderResultsOn_',
+smalltalk.method({
+selector: 'renderResultsOn:',
+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 methods"]);
+smalltalk.send(self, "_updateMethodsList", []);
+smalltalk.send(self, "_updateStatusDiv", []);
+return self;},
+source: unescape('renderResultsOn%3A%20html%0A%20%20%20%20%09statusDiv%20%3A%3D%20html%20div.%0A%09html%20with%3A%20self%20progressBar.%0A%20%20%20%09methodsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20sunit%20methods%27.%0A%09self%20updateMethodsList.%0A%09self%20updateStatusDiv'),
+messageSends: ["div", "with:", "progressBar", "class:", "ul", "updateMethodsList", "updateStatusDiv"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_renderFailuresOn_',
+smalltalk.method({
+selector: 'renderFailuresOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_do_", [(function(each){return (function($rec){smalltalk.send($rec, "_class_", ["failures"]);return smalltalk.send($rec, "_with_", [each]);})(smalltalk.send(html, "_li", []));})]);
+return self;},
+source: unescape('renderFailuresOn%3A%20html%0A%09self%20result%20failures%20do%3A%20%5B%3Aeach%20%7C%0A%09%09html%20li%20%0A%09%09%09class%3A%20%27failures%27%3B%0A%09%09%09with%3A%20each%5D'),
+messageSends: ["do:", "failures", "result", "class:", "with:", "li"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_renderErrorsOn_',
+smalltalk.method({
+selector: 'renderErrorsOn:',
+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"]);return smalltalk.send($rec, "_with_", [each]);})(smalltalk.send(html, "_li", []));})]);
+return self;},
+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%5D'),
+messageSends: ["do:", "errors", "result", "class:", "with:", "li"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_canBeClosed',
+smalltalk.method({
+selector: 'canBeClosed',
+category: 'testing',
+fn: function (){
+var self=this;
+return true;
+return self;},
+source: unescape('canBeClosed%0A%20%20%20%20%5Etrue'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_isSelectedClass_',
+smalltalk.method({
+selector: 'isSelectedClass:',
+category: 'testing',
+fn: function (aClass){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_includes_", [aClass]);
+return self;},
+source: unescape('isSelectedClass%3A%20aClass%0A%09%5E%28self%20selectedClasses%20includes%3A%20aClass%29'),
+messageSends: ["includes:", "selectedClasses"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_isSelectedCategory_',
+smalltalk.method({
+selector: 'isSelectedCategory:',
+category: 'testing',
+fn: function (aCategory){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [aCategory]);
+return self;},
+source: unescape('isSelectedCategory%3A%20aCategory%0A%09%5E%28self%20selectedCategories%20includes%3A%20aCategory%29'),
+messageSends: ["includes:", "selectedCategories"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_updateCategoriesList',
+smalltalk.method({
+selector: 'updateCategoriesList',
+category: 'updating',
+fn: function (){
+var self=this;
+smalltalk.send(self['@categoriesList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["all"]);smalltalk.send($rec, "_with_", ["All"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectAllCategories", []);})]);})(smalltalk.send(html, "_li", []));return smalltalk.send(smalltalk.send(self, "_categories", []), "_do_", [(function(each){var li=nil;
+li=smalltalk.send(html, "_li", []);smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [each]), "_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, "_toggleCategory_", [each]);})]);})(li);})]);})]);
+return self;},
+source: unescape('updateCategoriesList%0A%20%20%20%20categoriesList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%20%20%20%20html%20li%20%0A%09%09class%3A%20%27all%27%3B%0A%09%09with%3A%20%27All%27%3B%0A%09%09onClick%3A%20%5Bself%20selectAllCategories%5D.%0A%09self%20categories%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%20%28self%20selectedCategories%20includes%3A%20each%29%20ifTrue%3A%20%5B%0A%09%09li%20class%3A%20%27selected%27%5D.%0A%09%20%20%20%20li%0A%09%09with%3A%20each%3B%0A%09%09onClick%3A%20%5Bself%20toggleCategory%3A%20each%5D%5D%5D'),
+messageSends: ["contents:", "class:", "with:", "onClick:", "selectAllCategories", "li", "do:", "categories", "ifTrue:", "includes:", "selectedCategories", "toggleCategory:"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_updateClassesList',
+smalltalk.method({
+selector: 'updateClassesList',
+category: 'updating',
+fn: function (){
+var self=this;
+smalltalk.send(self['@classesList'], "_contents_", [(function(html){smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_isEmpty", []), "_ifFalse_", [(function(){return (function($rec){smalltalk.send($rec, "_class_", ["all"]);smalltalk.send($rec, "_with_", ["All"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectAllClasses", []);})]);})(smalltalk.send(html, "_li", []));})]);return smalltalk.send(smalltalk.send(self, "_classes", []), "_do_", [(function(each){var li=nil;
+li=smalltalk.send(html, "_li", []);smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_includes_", [each]), "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]);return (function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(each, "_name", [])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_toggleClass_", [each]);})]);})(li);})]);})]);
+return self;},
+source: unescape('updateClassesList%0A%20%20%20%20classesList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%28self%20selectedCategories%20isEmpty%29%20ifFalse%3A%20%5B%0A%09%09html%20li%0A%09%09%09class%3A%20%27all%27%3B%0A%09%09%09with%3A%20%27All%27%3B%0A%09%09%09onClick%3A%20%5Bself%20selectAllClasses%5D%5D.%0A%09self%20classes%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%09li%20%3A%3D%20html%20li.%0A%09%09%28self%20selectedClasses%20includes%3A%20each%29%20ifTrue%3A%20%5B%0A%09%09%09li%20class%3A%20%27selected%27%5D.%0A%09%09li%0A%09%09%09with%3A%20each%20name%3B%0A%09%09%09onClick%3A%20%5Bself%20toggleClass%3A%20each%5D%5D%5D'),
+messageSends: ["contents:", "ifFalse:", "isEmpty", "selectedCategories", "class:", "with:", "onClick:", "selectAllClasses", "li", "do:", "classes", "ifTrue:", "includes:", "selectedClasses", "name", "toggleClass:"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_updateMethodsList',
+smalltalk.method({
+selector: 'updateMethodsList',
+category: 'updating',
+fn: function (){
+var self=this;
+smalltalk.send(self['@methodsList'], "_contents_", [(function(html){smalltalk.send(self, "_renderFailuresOn_", [html]);return smalltalk.send(self, "_renderErrorsOn_", [html]);})]);
+return self;},
+source: unescape('updateMethodsList%0A%09methodsList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09self%20renderFailuresOn%3A%20html.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%20renderErrorsOn%3A%20html%5D'),
+messageSends: ["contents:", "renderFailuresOn:", "renderErrorsOn:"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_updateStatusDiv',
+smalltalk.method({
+selector: 'updateStatusDiv',
+category: 'updating',
+fn: function (){
+var self=this;
+smalltalk.send(self['@statusDiv'], "_class_", [smalltalk.send("sunit status ", "__comma", [smalltalk.send(self['@result'], "_status", [])])]);
+smalltalk.send(self['@statusDiv'], "_contents_", [(function(html){return smalltalk.send(smalltalk.send(html, "_span", []), "_with_", [smalltalk.send(self, "_statusInfo", [])]);})]);
+return self;},
+source: unescape('updateStatusDiv%0A%09statusDiv%20class%3A%20%27sunit%20status%20%27%2C%20result%20status.%0A%09statusDiv%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09html%20span%20with%3A%20self%20statusInfo%5D'),
+messageSends: ["class:", unescape("%2C"), "status", "contents:", "with:", "span", "statusInfo"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+
+
+smalltalk.setup(smalltalk.TestRunner);
+smalltalk.addClass('TestResult', smalltalk.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit');
+smalltalk.addMethod(
+'_timestamp',
+smalltalk.method({
+selector: 'timestamp',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@timestamp'];
+return self;},
+source: unescape('timestamp%0A%09%5Etimestamp'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestResult);
+
+smalltalk.addMethod(
+'_errors',
+smalltalk.method({
+selector: 'errors',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@errors'];
+return self;},
+source: unescape('errors%0A%09%5Eerrors'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestResult);
+
+smalltalk.addMethod(
+'_failures',
+smalltalk.method({
+selector: 'failures',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@failures'];
+return self;},
+source: unescape('failures%0A%09%5Efailures'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestResult);
+
+smalltalk.addMethod(
+'_total',
+smalltalk.method({
+selector: 'total',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@total'];
+return self;},
+source: unescape('total%0A%09%5Etotal'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestResult);
+
+smalltalk.addMethod(
+'_total_',
+smalltalk.method({
+selector: 'total:',
+category: 'accessing',
+fn: function (aNumber){
+var self=this;
+self['@total']=aNumber;
+return self;},
+source: unescape('total%3A%20aNumber%0A%09total%20%3A%3D%20aNumber'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestResult);
+
+smalltalk.addMethod(
+'_addError_',
+smalltalk.method({
+selector: 'addError:',
+category: 'accessing',
+fn: function (anError){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]);
+return self;},
+source: unescape('addError%3A%20anError%0A%09self%20errors%20add%3A%20anError'),
+messageSends: ["add:", "errors"],
+referencedClasses: []
+}),
+smalltalk.TestResult);
+
+smalltalk.addMethod(
+'_addFailure_',
+smalltalk.method({
+selector: 'addFailure:',
+category: 'accessing',
+fn: function (aFailure){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]);
+return self;},
+source: unescape('addFailure%3A%20aFailure%0A%09self%20failures%20add%3A%20aFailure'),
+messageSends: ["add:", "failures"],
+referencedClasses: []
+}),
+smalltalk.TestResult);
+
+smalltalk.addMethod(
+'_runs',
+smalltalk.method({
+selector: 'runs',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@runs'];
+return self;},
+source: unescape('runs%0A%09%5Eruns'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestResult);
+
+smalltalk.addMethod(
+'_increaseRuns',
+smalltalk.method({
+selector: 'increaseRuns',
+category: 'accessing',
+fn: function (){
+var self=this;
+self['@runs']=smalltalk.send(self['@runs'], "__plus", [(1)]);
+return self;},
+source: unescape('increaseRuns%0A%09runs%20%3A%3D%20runs%20+%201'),
+messageSends: [unescape("+")],
+referencedClasses: []
+}),
+smalltalk.TestResult);
+
+smalltalk.addMethod(
+'_status',
+smalltalk.method({
+selector: 'status',
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", []), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", []), "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]);}), (function(){return "error";})]);
+return self;},
+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(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+self['@timestamp']=smalltalk.send(smalltalk.Date, "_now", []);
+self['@runs']=(0);
+self['@errors']=smalltalk.send(smalltalk.Array, "_new", []);
+self['@failures']=smalltalk.send(smalltalk.Array, "_new", []);
+self['@total']=(0);
+return self;},
+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: [smalltalk.Date,smalltalk.Array]
+}),
+smalltalk.TestResult);
+
+
+
+smalltalk.setup(smalltalk.TestResult);
+smalltalk.addClass('ExampleTest2', smalltalk.TestCase, [], 'SUnit');
+smalltalk.addMethod(
+'_testPasses',
+smalltalk.method({
+selector: 'testPasses',
+category: 'not yet classified',
+fn: function (){
+var self=this;
+smalltalk.send((100000), "_timesRepeat_", [(function(){return smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "__plus", [(1)]), "__eq", [(2)])]);})]);
+return self;},
+source: unescape('testPasses%0A%09100000%20timesRepeat%3A%20%5Bself%20assert%3A%201%20+%201%20%3D%202%5D'),
+messageSends: ["timesRepeat:", "assert:", unescape("%3D"), unescape("+")],
+referencedClasses: []
+}),
+smalltalk.ExampleTest2);
+
+
+
+smalltalk.setup(smalltalk.ExampleTest2);
+smalltalk.addClass('ExampleTest3', smalltalk.TestCase, [], 'SUnit');
+smalltalk.addMethod(
+'_testPasses',
+smalltalk.method({
+selector: 'testPasses',
+category: 'not yet classified',
+fn: function (){
+var self=this;
+smalltalk.send((100000), "_timesRepeat_", [(function(){return smalltalk.send(self, "_assert_", [smalltalk.send(smalltalk.send((1), "__plus", [(1)]), "__eq", [(2)])]);})]);
+return self;},
+source: unescape('testPasses%0A%09100000%20timesRepeat%3A%20%5Bself%20assert%3A%201%20+%201%20%3D%202%5D'),
+messageSends: ["timesRepeat:", "assert:", unescape("%3D"), unescape("+")],
+referencedClasses: []
+}),
+smalltalk.ExampleTest3);
+
+
+
+smalltalk.setup(smalltalk.ExampleTest3);

+ 8 - 0
js/SUnit.js

@@ -168,6 +168,7 @@ smalltalk.TestCase);
 
 
 
+smalltalk.setup(smalltalk.TestCase);
 smalltalk.addClass('ExampleTest', smalltalk.TestCase, ['test'], 'SUnit');
 smalltalk.addMethod(
 '_testFailure',
@@ -216,6 +217,7 @@ smalltalk.ExampleTest);
 
 
 
+smalltalk.setup(smalltalk.ExampleTest);
 smalltalk.addClass('ProgressBar', smalltalk.TabWidget, ['percent', 'progressDiv', 'div'], 'SUnit');
 smalltalk.addMethod(
 '_percent',
@@ -296,9 +298,11 @@ smalltalk.ProgressBar);
 
 
 
+smalltalk.setup(smalltalk.ProgressBar);
 smalltalk.addClass('TestFailure', smalltalk.Error, [], 'SUnit');
 
 
+smalltalk.setup(smalltalk.TestFailure);
 smalltalk.addClass('TestRunner', smalltalk.TabWidget, ['selectedCategories', 'categoriesList', 'selectedClasses', 'classesList', 'selectedMethods', 'progressBar', 'methodsList', 'result', 'statusDiv'], 'SUnit');
 smalltalk.addMethod(
 '_label',
@@ -848,6 +852,7 @@ smalltalk.TestRunner);
 
 
 
+smalltalk.setup(smalltalk.TestRunner);
 smalltalk.addClass('TestResult', smalltalk.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit');
 smalltalk.addMethod(
 '_timestamp',
@@ -1021,6 +1026,7 @@ smalltalk.TestResult);
 
 
 
+smalltalk.setup(smalltalk.TestResult);
 smalltalk.addClass('ExampleTest2', smalltalk.TestCase, [], 'SUnit');
 smalltalk.addMethod(
 '_testPasses',
@@ -1039,6 +1045,7 @@ smalltalk.ExampleTest2);
 
 
 
+smalltalk.setup(smalltalk.ExampleTest2);
 smalltalk.addClass('ExampleTest3', smalltalk.TestCase, [], 'SUnit');
 smalltalk.addMethod(
 '_testPasses',
@@ -1057,3 +1064,4 @@ smalltalk.ExampleTest3);
 
 
 
+smalltalk.setup(smalltalk.ExampleTest3);

+ 17 - 6
js/boot.js

@@ -47,7 +47,6 @@ function SmalltalkNil(){};
 function Smalltalk(){
 
     var st = this;
-    st.debugMode = true;
 
     /* Smalltalk class creation. A class is an instance of an automatically 
        created metaclass object. Newly created classes (not their metaclass) 
@@ -122,6 +121,11 @@ function Smalltalk(){
 	}
     };
 
+    st.setup = function(klass) {
+	st.init(klass);
+	klass._initialize();
+    }
+
     /* Answer all registered Smalltalk classes */
 
     st.classes = function() {
@@ -262,11 +266,6 @@ function Smalltalk(){
 	return messageNotUnderstood(receiver, selector, args);
     };
 
-    /*  */
-
-    st.send = sendWithContext;
-
-
     /* Handles Smalltalk errors. Triggers the registered ErrorHandler 
        (See the Smalltalk class ErrorHandler and its subclasses */
     
@@ -387,6 +386,18 @@ function Smalltalk(){
 	}
 	return object;
     };
+
+    /* Toggle deployment mode (no context will be handled during message send */
+    st.setDeploymentMode = function() {
+	st.send = sendWithoutContext;
+    };
+
+    st.setDevelopmentMode = function() {
+	st.send = sendWithContext;
+    }
+
+    /* Set development mode by default */
+    st.setDevelopmentMode();
 }
 
 function SmalltalkMethodContext(spec) {

+ 0 - 2
js/init.js

@@ -1,2 +0,0 @@
-smalltalk.init(smalltalk.Object);
-smalltalk.classes()._do_(function(each) {each._initialize()});

+ 0 - 6395
js/jtalk.deploy.js

@@ -1,6395 +0,0 @@
-function Smalltalk(){};
-function SmalltalkObject(){};
-function SmalltalkBehavior(){};
-function SmalltalkClass(){};
-function SmalltalkMetaclass(){
-    this.meta = true;
-};
-function SmalltalkMethod(){};
-function SmalltalkNil(){};
-
-var nil = new SmalltalkNil();
-var smalltalk = new Smalltalk();
-
-smalltalk.klass = function(spec) {
-    var spec = spec || {};
-    var that;
-    if(spec.meta) {
-	that = new SmalltalkMetaclass();
-    } else {
-	that = new (smalltalk.klass({meta: true})).fn;
-	that.klass.instanceClass = that;
-	that.className = spec.className;
-	that.klass.className = that.className + ' class';
-    }
-	
-    that.fn = spec.fn || function(){};
-    that.superclass = spec.superclass;
-    that.iVarNames = spec.iVarNames || [];
-    if(that.superclass) {
-	that.klass.superclass = that.superclass.klass;
-    }
-    that.category = spec.category || "";
-    that.fn.prototype.methods = {};
-    that.fn.prototype.klass = that;
-
-    return that;
-};
-
-smalltalk.method = function(spec) {
-    var that = new SmalltalkMethod();
-    that.selector = spec.selector;
-    that.category = spec.category;
-    that.source   = spec.source;
-    that.fn       = spec.fn;
-    return that
-};
-
-smalltalk.init = function(klass) {
-    var subclasses = smalltalk.subclasses(klass);
-    for(var i=0;i<klass.iVarNames.length;i++) {
-	klass.fn.prototype["@"+klass.iVarNames[i]] = nil;
-    }
-    if(klass.superclass && klass.superclass !== nil) {
-	klass.fn.prototype.__proto__ = klass.superclass.fn.prototype;
-	for(var i=0;i<klass.superclass.iVarNames.length;i++) {
-	    if(!klass["@"+klass.superclass.iVarNames[i]]) {
-		klass.fn.prototype["@"+klass.superclass.iVarNames[i]] = nil;
-	    }
-	}
-    }
-    for(var i=0;i<subclasses.length;i++) {
-     	smalltalk.init(subclasses[i]);
-    }
-    if(klass.klass && !klass.meta) {
-	smalltalk.init(klass.klass);
-    }
-};
-
-smalltalk.classes = function() {
-    var classes = [];
-    for(var i in smalltalk) {
-	if(i.search(/^[A-Z]/g) != -1) {
-	    classes.push(smalltalk[i]);
-	}
-
-    }
-    return classes
-};
-
-smalltalk.subclasses = function(klass) {
-    var subclasses = [];
-    var classes = smalltalk.classes();
-    for(var i in classes) {
-	if(classes[i].fn) {
-	    //Metaclasses
-	    if(classes[i].klass && classes[i].klass.superclass === klass) {
-		subclasses.push(classes[i].klass);
-	    }
-	    //Classes
-	    if(classes[i].superclass === klass) {
-		subclasses.push(classes[i]);
-	    }
-	}
-    }
-    return subclasses;
-};
-
-smalltalk.mapClassName = function(className, category, fn, superclass) {
-    smalltalk[className] = smalltalk.klass({
-		className:  className, 
-		category:   category, 
-		superclass: superclass,
-		fn:         fn
-	});
-};
-
-smalltalk.addClass = function(className, superclass, iVarNames, category) {
-    if(smalltalk[className]) {
-	smalltalk[className].superclass = superclass;
-	smalltalk[className].iVarNames = iVarNames;
-    } else {
-	smalltalk[className] = smalltalk.klass({
-		className: className, 
-		iVarNames: iVarNames,
-		superclass: superclass
-	    });
-    }
-    smalltalk[className].category = category || '';
-};
-
-smalltalk.addMethod = function(jsSelector, method, klass) {
-    klass.fn.prototype[jsSelector] = method.fn;
-    klass.fn.prototype.methods[method.selector] = method;
-};
-
-smalltalk.mapClassName("Object", "Kernel", SmalltalkObject);
-smalltalk.mapClassName("Smalltalk", "Kernel", Smalltalk, smalltalk.Object);
-smalltalk.mapClassName("Behavior", "Kernel", SmalltalkBehavior, smalltalk.Object);
-smalltalk.mapClassName("Class", "Kernel", SmalltalkClass, smalltalk.Behavior);
-smalltalk.mapClassName("Metaclass", "Kernel", SmalltalkMetaclass, smalltalk.Behavior);
-smalltalk.mapClassName("CompiledMethod", "Kernel", SmalltalkMethod, smalltalk.Object);
-
-smalltalk.Object.klass.superclass = smalltalk.Class
-
-smalltalk.mapClassName("Number", "Kernel", Number, smalltalk.Object);
-smalltalk.mapClassName("BlockClosure", "Kernel", Function, smalltalk.Object);
-smalltalk.mapClassName("Boolean", "Kernel", Boolean, smalltalk.Object);
-smalltalk.mapClassName("UndefinedObject", "Kernel", SmalltalkNil, smalltalk.Object);
-
-smalltalk.mapClassName("Collection", "Kernel", null, smalltalk.Object);
-smalltalk.mapClassName("String", "Kernel", String, smalltalk.Collection);
-smalltalk.mapClassName("RegularExpression", "Kernel", RegExp, smalltalk.String);
-smalltalk.mapClassName("Array", "Kernel", Array, smalltalk.Collection);
-
-if(CanvasRenderingContext2D) {
-    smalltalk.mapClassName("CanvasRenderingContext", "Canvas", CanvasRenderingContext2D, smalltalk.Object);
-}
-
-smalltalk.addClass('Object', smalltalk.nil, [], 'Kernel');
-smalltalk.addMethod(
-'__eq',
-smalltalk.method({
-selector: '=',
-category: 'comparing',
-fn: function (anObject) {
-    var self = this;
-    return function () {return self == anObject;}();
-    return self;
-},
-source: unescape('%3D%20anObject%0A%09%5E%7B%27return%20self%20%3D%3D%20anObject%27%7D%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_~_eq',
-smalltalk.method({
-selector: '~=',
-category: 'comparing',
-fn: function (anObject) {
-    var self = this;
-    return self.__eq(anObject).__eq_eq(false);
-    return self;
-},
-source: unescape('%7E%3D%20anObject%0A%09%5E%28self%20%3D%20anObject%29%20%3D%3D%20false%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_initialize',
-smalltalk.method({
-selector: 'initialize',
-category: 'initialization',
-fn: function () {
-    var self = this;
-    return self;
-},
-source: unescape('initialize%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_yourself',
-smalltalk.method({
-selector: 'yourself',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self;
-    return self;
-},
-source: unescape('yourself%0A%09%5Eself%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_class',
-smalltalk.method({
-selector: 'class',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return self.klass;}();
-    return self;
-},
-source: unescape('class%0A%09%5E%7B%27return%20self.klass%27%7D%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_size',
-smalltalk.method({
-selector: 'size',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    self._error_("Object not indexable");
-    return self;
-},
-source: unescape('size%0A%09self%20error%3A%20%27Object%20not%20indexable%27%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_copy',
-smalltalk.method({
-selector: 'copy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    return self._shallowCopy()._postCopy();
-    return self;
-},
-source: unescape('copy%0A%09%5Eself%20shallowCopy%20postCopy%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_shallowCopy',
-smalltalk.method({
-selector: 'shallowCopy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    return function () {var copy = self.klass._new();for (var i in self) {if (/^@.+/.test(i)) {copy[i] = self[i];}}return copy;}();
-    return self;
-},
-source: unescape('shallowCopy%0A%09%5E%7B%27%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%27%7D%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_deepCopy',
-smalltalk.method({
-selector: 'deepCopy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    (function () {var copy = self.klass._new();for (var i in self) {if (/^@.+/.test(i)) {copy[i] = self[i]._deepCopy();}}return copy;}());
-    return self;
-},
-source: unescape('deepCopy%0A%09%7B%27%09%20%20%20%20%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._deepCopy%28%29%3B%0A%09%09%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20copy%3B%0A%09%27%7D.%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_postCopy',
-smalltalk.method({
-selector: 'postCopy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    return self;
-},
-source: unescape('postCopy%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'__minus_gt',
-smalltalk.method({
-selector: '->',
-category: 'converting',
-fn: function (anObject) {
-    var self = this;
-    return smalltalk.Association._key_value_(self, anObject);
-    return self;
-},
-source: unescape('-%3E%20anObject%0A%09%5EAssociation%20key%3A%20self%20value%3A%20anObject%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_asString',
-smalltalk.method({
-selector: 'asString',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return self._printString();
-    return self;
-},
-source: unescape('asString%0A%09%5Eself%20printString%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_asJavascript',
-smalltalk.method({
-selector: 'asJavascript',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return self._asString();
-    return self;
-},
-source: unescape('asJavascript%0A%09%5Eself%20asString%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_perform_',
-smalltalk.method({
-selector: 'perform:',
-category: 'message handling',
-fn: function (aSymbol) {
-    var self = this;
-    return self._perform_withArguments_(aSymbol, []);
-    return self;
-},
-source: unescape('perform%3A%20aSymbol%0A%09%5Eself%20perform%3A%20aSymbol%20withArguments%3A%20%23%28%29%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_perform_withArguments_',
-smalltalk.method({
-selector: 'perform:withArguments:',
-category: 'error handling',
-fn: function (aSymbol, aCollection) {
-    var self = this;
-    return self._basicPerform_withArguments_(aSymbol._asSelector(), aCollection);
-    return self;
-},
-source: unescape('perform%3A%20aSymbol%20withArguments%3A%20aCollection%0A%09%5Eself%20basicPerform%3A%20aSymbol%20asSelector%20withArguments%3A%20aCollection%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_instVarAt_',
-smalltalk.method({
-selector: 'instVarAt:',
-category: 'accessing',
-fn: function (aString) {
-    var self = this;
-    return function () {var value = self["@" + aString];if (typeof value == "undefined") {return nil;} else {return value;}}();
-    return self;
-},
-source: unescape('instVarAt%3A%20aString%0A%09%5E%7B%27%0A%09%20%20%20%20var%20value%20%3D%20self%5B%27%27@%27%27+aString%5D%3B%0A%09%20%20%20%20if%28typeof%28value%29%20%3D%3D%20%27%27undefined%27%27%29%20%7B%0A%09%09return%20nil%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%27%7D%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_instVarAt_put_',
-smalltalk.method({
-selector: 'instVarAt:put:',
-category: 'accessing',
-fn: function (aString, anObject) {
-    var self = this;
-    return function () {self["@" + aString] = anObject;}();
-    return self;
-},
-source: unescape('instVarAt%3A%20aString%20put%3A%20anObject%0A%09%5E%7B%27self%5B%27%27@%27%27%20+%20aString%5D%20%3D%20anObject%27%7D%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_basicAt_',
-smalltalk.method({
-selector: 'basicAt:',
-category: 'accessing',
-fn: function (aString) {
-    var self = this;
-    return function () {var value = self[aString];if (typeof value == "undefined") {return nil;} else {return value;}}();
-    return self;
-},
-source: unescape('basicAt%3A%20aString%0A%09%5E%7B%27%0A%09%20%20%20%20var%20value%20%3D%20self%5BaString%5D%3B%0A%09%20%20%20%20if%28typeof%28value%29%20%3D%3D%20%27%27undefined%27%27%29%20%7B%0A%09%09return%20nil%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%27%7D%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_basicAt_put_',
-smalltalk.method({
-selector: 'basicAt:put:',
-category: 'accessing',
-fn: function (aString, anObject) {
-    var self = this;
-    return function () {return self[aString] = anObject;}();
-    return self;
-},
-source: unescape('basicAt%3A%20aString%20put%3A%20anObject%0A%09%5E%7B%27return%20self%5BaString%5D%20%3D%20anObject%27%7D%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_error_',
-smalltalk.method({
-selector: 'error:',
-category: 'error handling',
-fn: function (aString) {
-    var self = this;
-    smalltalk.Error._signal_(aString);
-    return self;
-},
-source: unescape('error%3A%20aString%0A%09Error%20signal%3A%20aString%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_subclassResponsibility',
-smalltalk.method({
-selector: 'subclassResponsibility',
-category: 'error handling',
-fn: function () {
-    var self = this;
-    self._error_("This method is a responsibility of a subclass");
-    return self;
-},
-source: unescape('subclassResponsibility%0A%09self%20error%3A%20%27This%20method%20is%20a%20responsibility%20of%20a%20subclass%27%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_shouldNotImplement',
-smalltalk.method({
-selector: 'shouldNotImplement',
-category: 'error handling',
-fn: function () {
-    var self = this;
-    self._error_("This method should not be implemented in ".__comma(self._class()._name()));
-    return self;
-},
-source: unescape('shouldNotImplement%0A%09self%20error%3A%20%27This%20method%20should%20not%20be%20implemented%20in%20%27%2C%20self%20class%20name%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_try_catch_',
-smalltalk.method({
-selector: 'try:catch:',
-category: 'error handling',
-fn: function (aBlock, anotherBlock) {
-    var self = this;
-    (function () {try {aBlock();} catch (e) {anotherBlock(e);}}());
-    return self;
-},
-source: unescape('try%3A%20aBlock%20catch%3A%20anotherBlock%0A%09%7B%27try%7BaBlock%28%29%7D%20catch%28e%29%20%7BanotherBlock%28e%29%7D%27%7D%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_printString',
-smalltalk.method({
-selector: 'printString',
-category: 'printing',
-fn: function () {
-    var self = this;
-    return "a ".__comma(self._class()._name());
-    return self;
-},
-source: unescape('printString%0A%09%5E%27a%20%27%2C%20self%20class%20name%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_printNl',
-smalltalk.method({
-selector: 'printNl',
-category: 'printing',
-fn: function () {
-    var self = this;
-    (function () {console.log(self);}());
-    return self;
-},
-source: unescape('printNl%0A%09%7B%27console.log%28self%29%27%7D%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_isKindOf_',
-smalltalk.method({
-selector: 'isKindOf:',
-category: 'testing',
-fn: function (aClass) {
-    var self = this;
-    return self._isMemberOf_(aClass)._ifTrue_ifFalse_(function () {return true;}, function () {return self._class()._inheritsFrom_(aClass);});
-    return self;
-},
-source: unescape('isKindOf%3A%20aClass%0A%09%5E%28self%20isMemberOf%3A%20aClass%29%0A%09%20%20%20%20ifTrue%3A%20%5Btrue%5D%0A%09%20%20%20%20ifFalse%3A%20%5Bself%20class%20inheritsFrom%3A%20aClass%5D%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_isMemberOf_',
-smalltalk.method({
-selector: 'isMemberOf:',
-category: 'testing',
-fn: function (aClass) {
-    var self = this;
-    return self._class().__eq(aClass);
-    return self;
-},
-source: unescape('isMemberOf%3A%20aClass%0A%09%5Eself%20class%20%3D%20aClass%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_ifNil_',
-smalltalk.method({
-selector: 'ifNil:',
-category: 'testing',
-fn: function (aBlock) {
-    var self = this;
-    return self;
-    return self;
-},
-source: unescape('ifNil%3A%20aBlock%0A%09%5Eself%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_ifNil_ifNotNil_',
-smalltalk.method({
-selector: 'ifNil:ifNotNil:',
-category: 'testing',
-fn: function (aBlock, anotherBlock) {
-    var self = this;
-    return anotherBlock._value();
-    return self;
-},
-source: unescape('ifNil%3A%20aBlock%20ifNotNil%3A%20anotherBlock%0A%09%5EanotherBlock%20value%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_ifNotNil_',
-smalltalk.method({
-selector: 'ifNotNil:',
-category: 'testing',
-fn: function (aBlock) {
-    var self = this;
-    return aBlock._value();
-    return self;
-},
-source: unescape('ifNotNil%3A%20aBlock%0A%09%5EaBlock%20value%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_ifNotNil_ifNil_',
-smalltalk.method({
-selector: 'ifNotNil:ifNil:',
-category: 'testing',
-fn: function (aBlock, anotherBlock) {
-    var self = this;
-    return aBlock._value();
-    return self;
-},
-source: unescape('ifNotNil%3A%20aBlock%20ifNil%3A%20anotherBlock%0A%09%5EaBlock%20value%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_isNil',
-smalltalk.method({
-selector: 'isNil',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return false;
-    return self;
-},
-source: unescape('isNil%0A%09%5Efalse%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_notNil',
-smalltalk.method({
-selector: 'notNil',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return self._isNil()._not();
-    return self;
-},
-source: unescape('notNil%0A%09%5Eself%20isNil%20not%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_isClass',
-smalltalk.method({
-selector: 'isClass',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return false;
-    return self;
-},
-source: unescape('isClass%0A%09%5Efalse%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_isMetaclass',
-smalltalk.method({
-selector: 'isMetaclass',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return false;
-    return self;
-},
-source: unescape('isMetaclass%0A%09%5Efalse%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_isNumber',
-smalltalk.method({
-selector: 'isNumber',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return false;
-    return self;
-},
-source: unescape('isNumber%0A%09%5Efalse%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_isString',
-smalltalk.method({
-selector: 'isString',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return false;
-    return self;
-},
-source: unescape('isString%0A%09%5Efalse%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_isParseFailure',
-smalltalk.method({
-selector: 'isParseFailure',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return false;
-    return self;
-},
-source: unescape('isParseFailure%0A%09%5Efalse%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_basicPerform_',
-smalltalk.method({
-selector: 'basicPerform:',
-category: 'error handling',
-fn: function (aSymbol) {
-    var self = this;
-    return self._basicPerform_withArguments_(aSymbol, []);
-    return self;
-},
-source: unescape('basicPerform%3A%20aSymbol%20%0A%20%20%20%20%5Eself%20basicPerform%3A%20aSymbol%20withArguments%3A%20%23%28%29%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_basicPerform_withArguments_',
-smalltalk.method({
-selector: 'basicPerform:withArguments:',
-category: 'error handling',
-fn: function (aSymbol, aCollection) {
-    var self = this;
-    return function () {return self[aSymbol].apply(self, aCollection);}();
-    return self;
-},
-source: unescape('basicPerform%3A%20aSymbol%20withArguments%3A%20aCollection%0A%09%5E%7B%27return%20self%5BaSymbol%5D.apply%28self%2C%20aCollection%29%3B%27%7D%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_appendToBrush_',
-smalltalk.method({
-selector: 'appendToBrush:',
-category: '*Canvas',
-fn: function (aTagBrush) {
-    var self = this;
-    aTagBrush._append_(self._asString());
-    return self;
-},
-source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20append%3A%20self%20asString%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_basicDelete_',
-smalltalk.method({
-selector: 'basicDelete:',
-category: 'accessing',
-fn: function (aString) {
-    var self = this;
-    (function () {delete self[aString];}());
-    return self;
-},
-source: unescape('basicDelete%3A%20aString%0A%20%20%20%20%7B%27delete%20self%5BaString%5D%27%7D%0A')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_inspect',
-smalltalk.method({
-selector: 'inspect',
-category: '*IDE',
-fn: function () {
-    var self = this;
-    (function ($rec) {$rec._inspect_(self);return $rec._open();}(smalltalk.Inspector._new()));
-    return self;
-},
-source: unescape('inspect%0A%09Inspector%20new%20%0A%09%09inspect%3A%20self%3B%0A%09%09open')}),
-smalltalk.Object);
-
-smalltalk.addMethod(
-'_inspectOn_',
-smalltalk.method({
-selector: 'inspectOn:',
-category: '*IDE',
-fn: function (anInspector) {
-    var self = this;
-    var variables = nil;
-    variables = smalltalk.Dictionary._new();
-    variables._at_put_(unescape("%23self"), self);
-    self._class()._instanceVariableNames()._do_(function (each) {return variables._at_put_(each, self._instVarAt_(each));});
-    (function ($rec) {$rec._setLabel_(self._printString());return $rec._setVariables_(variables);}(anInspector));
-    return self;
-},
-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%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%0A%09%0A%09')}),
-smalltalk.Object);
-
-
-
-smalltalk.addClass('Smalltalk', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'_classes',
-smalltalk.method({
-selector: 'classes',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return self.classes();}();
-    return self;
-},
-source: unescape('classes%0A%09%5E%7B%27return%20self.classes%28%29%27%7D%0A')}),
-smalltalk.Smalltalk);
-
-
-smalltalk.Smalltalk.klass.iVarNames = ['current'];
-smalltalk.addMethod(
-'_current',
-smalltalk.method({
-selector: 'current',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return smalltalk;}();
-    return self;
-},
-source: unescape('current%0A%09%20%20%20%20%5E%7B%27return%20smalltalk%27%7D%0A')}),
-smalltalk.Smalltalk.klass);
-
-
-smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'_new',
-smalltalk.method({
-selector: 'new',
-category: 'instance creation',
-fn: function () {
-    var self = this;
-    return function ($rec) {$rec._initialize();return $rec._yourself();}(self._basicNew());
-    return self;
-},
-source: unescape('new%0A%09%5Eself%20basicNew%20%0A%09%20%20%20%20initialize%3B%0A%09%20%20%20%20yourself%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_basicNew',
-smalltalk.method({
-selector: 'basicNew',
-category: 'instance creation',
-fn: function () {
-    var self = this;
-    return function () {return new self.fn;}();
-    return self;
-},
-source: unescape('basicNew%0A%09%5E%7B%27return%20new%20self.fn%28%29%3B%27%7D%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_name',
-smalltalk.method({
-selector: 'name',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return self.className || nil;}();
-    return self;
-},
-source: unescape('name%0A%09%5E%7B%27return%20self.className%20%7C%7C%20nil%27%7D%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_superclass',
-smalltalk.method({
-selector: 'superclass',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return self.superclass || nil;}();
-    return self;
-},
-source: unescape('superclass%0A%09%5E%7B%27return%20self.superclass%20%7C%7C%20nil%27%7D%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_subclasses',
-smalltalk.method({
-selector: 'subclasses',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return smalltalk.subclasses(self);}();
-    return self;
-},
-source: unescape('subclasses%0A%09%5E%7B%27return%20smalltalk.subclasses%28self%29%27%7D%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_allSubclasses',
-smalltalk.method({
-selector: 'allSubclasses',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    var result = nil;
-    result = self._subclasses();
-    self._subclasses()._do_(function (each) {return result._addAll_(each._allSubclasses());});
-    return result;
-    return self;
-},
-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%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_withAllSubclasses',
-smalltalk.method({
-selector: 'withAllSubclasses',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function ($rec) {$rec._addAll_(self._allSubclasses());return $rec._yourself();}(smalltalk.Array._with_(self));
-    return self;
-},
-source: unescape('withAllSubclasses%0A%09%5E%28Array%20with%3A%20self%29%20addAll%3A%20self%20allSubclasses%3B%20yourself%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_prototype',
-smalltalk.method({
-selector: 'prototype',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return self.fn.prototype;}();
-    return self;
-},
-source: unescape('prototype%0A%09%5E%7B%27return%20self.fn.prototype%27%7D%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_methodDictionary',
-smalltalk.method({
-selector: 'methodDictionary',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {var dict = smalltalk.Dictionary._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;
-},
-source: unescape('methodDictionary%0A%09%5E%7B%27var%20dict%20%3D%20smalltalk.Dictionary._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%27%7D%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_instVarNames',
-smalltalk.method({
-selector: 'instVarNames',
-category: '',
-fn: function () {
-    var self = this;
-    return function () {return self.iVarNames;}();
-    return self;
-},
-source: unescape('')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_methodsFor_',
-smalltalk.method({
-selector: 'methodsFor:',
-category: 'accessing',
-fn: function (aString) {
-    var self = this;
-    return function ($rec) {$rec._class_category_(self, aString);return $rec._yourself();}(smalltalk.ClassCategoryReader._new());
-    return self;
-},
-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%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_addCompiledMethod_',
-smalltalk.method({
-selector: 'addCompiledMethod:',
-category: 'accessing',
-fn: function (aMethod) {
-    var self = this;
-    (function () {self.fn.prototype[aMethod.selector._asSelector()] = aMethod.fn;self.fn.prototype.methods[aMethod.selector] = aMethod;}());
-    return self;
-},
-source: unescape('addCompiledMethod%3A%20aMethod%0A%09%7B%27self.fn.prototype%5BaMethod.selector._asSelector%28%29%5D%20%3D%20aMethod.fn%3B%0A%09self.fn.prototype.methods%5BaMethod.selector%5D%20%3D%20aMethod%27%7D%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_instanceVariableNames',
-smalltalk.method({
-selector: 'instanceVariableNames',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return self.iVarNames;}();
-    return self;
-},
-source: unescape('instanceVariableNames%0A%09%5E%7B%27return%20self.iVarNames%27%7D%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_comment',
-smalltalk.method({
-selector: 'comment',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._basicAt_("comment")._ifNil_(function () {return "";});
-    return self;
-},
-source: unescape('comment%0A%20%20%20%20%5E%28self%20basicAt%3A%20%27comment%27%29%20ifNil%3A%20%5B%27%27%5D%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_comment_',
-smalltalk.method({
-selector: 'comment:',
-category: 'accessing',
-fn: function (aString) {
-    var self = this;
-    self._basicAt_put_("comment", aString);
-    return self;
-},
-source: unescape('comment%3A%20aString%0A%20%20%20%20self%20basicAt%3A%20%27comment%27%20put%3A%20aString%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_commentStamp',
-smalltalk.method({
-selector: 'commentStamp',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function ($rec) {$rec._class_(self);return $rec._yourself();}(smalltalk.ClassCommentReader._new());
-    return self;
-},
-source: unescape('commentStamp%0A%20%20%20%20%5EClassCommentReader%20new%0A%09class%3A%20self%3B%0A%09yourself%0A')}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-'_removeCompiledMethod_',
-smalltalk.method({
-selector: 'removeCompiledMethod:',
-category: 'accessing',
-fn: function (aMethod) {
-    var self = this;
-    (function () {delete self.fn.prototype[aMethod.selector._asSelector()];delete self.fn.prototype.methods[aMethod.selector];}());
-    return self;
-},
-source: unescape('removeCompiledMethod%3A%20aMethod%0A%09%7B%27delete%20self.fn.prototype%5BaMethod.selector._asSelector%28%29%5D%3B%0A%09delete%20self.fn.prototype.methods%5BaMethod.selector%5D%27%7D%0A')}),
-smalltalk.Behavior);
-
-
-
-smalltalk.addClass('Class', smalltalk.Behavior, [], 'Kernel');
-smalltalk.addMethod(
-'_category',
-smalltalk.method({
-selector: 'category',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return self.category;}();
-    return self;
-},
-source: unescape('category%0A%09%5E%7B%27return%20self.category%27%7D%0A')}),
-smalltalk.Class);
-
-smalltalk.addMethod(
-'_category_',
-smalltalk.method({
-selector: 'category:',
-category: 'accessing',
-fn: function (aString) {
-    var self = this;
-    (function () {self.category = aString;}());
-    return self;
-},
-source: unescape('category%3A%20aString%0A%09%7B%27self.category%20%3D%20aString%27%7D%0A')}),
-smalltalk.Class);
-
-smalltalk.addMethod(
-'_subclass_instanceVariableNames_',
-smalltalk.method({
-selector: 'subclass:instanceVariableNames:',
-category: 'class creation',
-fn: function (aString, anotherString) {
-    var self = this;
-    return self._subclass_instanceVariableNames_category_(aString, anotherString, nil);
-    return self;
-},
-source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20category%3A%20nil%0A')}),
-smalltalk.Class);
-
-smalltalk.addMethod(
-'_subclass_instanceVariableNames_category_',
-smalltalk.method({
-selector: 'subclass:instanceVariableNames:category:',
-category: 'class creation',
-fn: function (aString, aString2, aString3) {
-    var self = this;
-    return smalltalk.ClassBuilder._new()._superclass_subclass_instanceVariableNames_category_(self, aString, aString2, aString3);
-    return self;
-},
-source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%5EClassBuilder%20new%0A%09%20%20%20%20superclass%3A%20self%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A')}),
-smalltalk.Class);
-
-smalltalk.addMethod(
-'_isClass',
-smalltalk.method({
-selector: 'isClass',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return true;
-    return self;
-},
-source: unescape('isClass%0A%09%5Etrue%0A')}),
-smalltalk.Class);
-
-smalltalk.addMethod(
-'_printString',
-smalltalk.method({
-selector: 'printString',
-category: 'printing',
-fn: function () {
-    var self = this;
-    return self._name();
-    return self;
-},
-source: unescape('printString%0A%09%5Eself%20name%0A')}),
-smalltalk.Class);
-
-smalltalk.addMethod(
-'_rename_',
-smalltalk.method({
-selector: 'rename:',
-category: 'accessing',
-fn: function (aString) {
-    var self = this;
-    (function () {smalltalk[aString] = self;delete smalltalk[self.className];self.className = aString;}());
-    return self;
-},
-source: unescape('rename%3A%20aString%0A%09%7B%27%0A%09%09smalltalk%5BaString%5D%20%3D%20self%3B%0A%09%09delete%20smalltalk%5Bself.className%5D%3B%0A%09%09self.className%20%3D%20aString%3B%0A%09%27%7D')}),
-smalltalk.Class);
-
-
-
-smalltalk.addClass('Metaclass', smalltalk.Behavior, [], 'Kernel');
-smalltalk.addMethod(
-'_instanceClass',
-smalltalk.method({
-selector: 'instanceClass',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return self.instanceClass;}();
-    return self;
-},
-source: unescape('instanceClass%0A%09%5E%7B%27return%20self.instanceClass%27%7D%0A')}),
-smalltalk.Metaclass);
-
-smalltalk.addMethod(
-'_instanceVariableNames_',
-smalltalk.method({
-selector: 'instanceVariableNames:',
-category: 'accessing',
-fn: function (aCollection) {
-    var self = this;
-    smalltalk.ClassBuilder._new()._class_instanceVariableNames_(self, aCollection);
-    return self;
-},
-source: unescape('instanceVariableNames%3A%20aCollection%0A%09ClassBuilder%20new%0A%09%20%20%20%20class%3A%20self%20instanceVariableNames%3A%20aCollection%0A')}),
-smalltalk.Metaclass);
-
-smalltalk.addMethod(
-'_isMetaclass',
-smalltalk.method({
-selector: 'isMetaclass',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return true;
-    return self;
-},
-source: unescape('isMetaclass%0A%09%5Etrue%0A')}),
-smalltalk.Metaclass);
-
-smalltalk.addMethod(
-'_printString',
-smalltalk.method({
-selector: 'printString',
-category: 'printing',
-fn: function () {
-    var self = this;
-    return self._instanceClass()._name().__comma(" class");
-    return self;
-},
-source: unescape('printString%0A%09%5Eself%20instanceClass%20name%2C%20%27%20class%27%0A')}),
-smalltalk.Metaclass);
-
-
-
-smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'_source',
-smalltalk.method({
-selector: 'source',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._basicAt_("source")._ifNil_(function () {return "";});
-    return self;
-},
-source: unescape('source%0A%09%5E%28self%20basicAt%3A%20%27source%27%29%20ifNil%3A%20%5B%27%27%5D%0A')}),
-smalltalk.CompiledMethod);
-
-smalltalk.addMethod(
-'_source_',
-smalltalk.method({
-selector: 'source:',
-category: 'accessing',
-fn: function (aString) {
-    var self = this;
-    self._basicAt_put_("source", aString);
-    return self;
-},
-source: unescape('source%3A%20aString%0A%09self%20basicAt%3A%20%27source%27%20put%3A%20aString%0A')}),
-smalltalk.CompiledMethod);
-
-smalltalk.addMethod(
-'_category',
-smalltalk.method({
-selector: 'category',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._basicAt_("category")._ifNil_(function () {return "";});
-    return self;
-},
-source: unescape('category%0A%09%5E%28self%20basicAt%3A%20%27category%27%29%20ifNil%3A%20%5B%27%27%5D%0A')}),
-smalltalk.CompiledMethod);
-
-smalltalk.addMethod(
-'_category_',
-smalltalk.method({
-selector: 'category:',
-category: 'accessing',
-fn: function (aString) {
-    var self = this;
-    self._basicAt_put_("category", aString);
-    return self;
-},
-source: unescape('category%3A%20aString%0A%09self%20basicAt%3A%20%27category%27%20put%3A%20aString%0A')}),
-smalltalk.CompiledMethod);
-
-smalltalk.addMethod(
-'_selector',
-smalltalk.method({
-selector: 'selector',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._basicAt_("selector");
-    return self;
-},
-source: unescape('selector%0A%09%5Eself%20basicAt%3A%20%27selector%27%0A')}),
-smalltalk.CompiledMethod);
-
-smalltalk.addMethod(
-'_selector_',
-smalltalk.method({
-selector: 'selector:',
-category: 'accessing',
-fn: function (aString) {
-    var self = this;
-    self._basicAt_put_("selector", aString);
-    return self;
-},
-source: unescape('selector%3A%20aString%0A%09self%20basicAt%3A%20%27selector%27%20put%3A%20aString%0A')}),
-smalltalk.CompiledMethod);
-
-smalltalk.addMethod(
-'_fn',
-smalltalk.method({
-selector: 'fn',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._basicAt_("fn");
-    return self;
-},
-source: unescape('fn%0A%09%5Eself%20basicAt%3A%20%27fn%27%0A')}),
-smalltalk.CompiledMethod);
-
-smalltalk.addMethod(
-'_fn_',
-smalltalk.method({
-selector: 'fn:',
-category: 'accessing',
-fn: function (aBlock) {
-    var self = this;
-    self._basicAt_put_("fn", aBlock);
-    return self;
-},
-source: unescape('fn%3A%20aBlock%0A%09self%20basicAt%3A%20%27fn%27%20put%3A%20aBlock%0A')}),
-smalltalk.CompiledMethod);
-
-
-
-smalltalk.addClass('Number', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'__eq',
-smalltalk.method({
-selector: '=',
-category: 'comparing',
-fn: function (aNumber) {
-    var self = this;
-    return function () {return Number(self) == aNumber;}();
-    return self;
-},
-source: unescape('%3D%20aNumber%0A%09%5E%7B%27return%20Number%28self%29%20%3D%3D%20aNumber%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'__gt',
-smalltalk.method({
-selector: '>',
-category: 'comparing',
-fn: function (aNumber) {
-    var self = this;
-    return function () {return self > aNumber;}();
-    return self;
-},
-source: unescape('%3E%20aNumber%0A%09%5E%7B%27return%20self%20%3E%20aNumber%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'__lt',
-smalltalk.method({
-selector: '<',
-category: 'comparing',
-fn: function (aNumber) {
-    var self = this;
-    return function () {return self < aNumber;}();
-    return self;
-},
-source: unescape('%3C%20aNumber%0A%09%5E%7B%27return%20self%20%3C%20aNumber%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'__gt_eq',
-smalltalk.method({
-selector: '>=',
-category: 'comparing',
-fn: function (aNumber) {
-    var self = this;
-    return function () {return self >= aNumber;}();
-    return self;
-},
-source: unescape('%3E%3D%20aNumber%0A%09%5E%7B%27return%20self%20%3E%3D%20aNumber%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'__lt_eq',
-smalltalk.method({
-selector: '<=',
-category: 'comparing',
-fn: function (aNumber) {
-    var self = this;
-    return function () {return self <= aNumber;}();
-    return self;
-},
-source: unescape('%3C%3D%20aNumber%0A%09%5E%7B%27return%20self%20%3C%3D%20aNumber%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'__plus',
-smalltalk.method({
-selector: '+',
-category: 'arithmetic',
-fn: function (aNumber) {
-    var self = this;
-    return function () {return self + aNumber;}();
-    return self;
-},
-source: unescape('+%20aNumber%0A%09%5E%7B%27return%20self%20+%20aNumber%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'__minus',
-smalltalk.method({
-selector: '-',
-category: 'arithmetic',
-fn: function (aNumber) {
-    var self = this;
-    return function () {return self - aNumber;}();
-    return self;
-},
-source: unescape('-%20aNumber%0A%09%5E%7B%27return%20self%20-%20aNumber%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'__star',
-smalltalk.method({
-selector: '*',
-category: 'arithmetic',
-fn: function (aNumber) {
-    var self = this;
-    return function () {return self * aNumber;}();
-    return self;
-},
-source: unescape('*%20aNumber%0A%09%5E%7B%27return%20self%20*%20aNumber%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'__slash',
-smalltalk.method({
-selector: '/',
-category: 'arithmetic',
-fn: function (aNumber) {
-    var self = this;
-    return function () {return self / aNumber;}();
-    return self;
-},
-source: unescape('/%20aNumber%0A%09%5E%7B%27return%20self%20/%20aNumber%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_max_',
-smalltalk.method({
-selector: 'max:',
-category: 'arithmetic',
-fn: function (aNumber) {
-    var self = this;
-    return function () {return Math.max(self, aNumber);}();
-    return self;
-},
-source: unescape('max%3A%20aNumber%0A%09%5E%7B%27return%20Math.max%28self%2C%20aNumber%29%3B%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_min_',
-smalltalk.method({
-selector: 'min:',
-category: 'arithmetic',
-fn: function (aNumber) {
-    var self = this;
-    return function () {return Math.min(self, aNumber);}();
-    return self;
-},
-source: unescape('min%3A%20aNumber%0A%09%5E%7B%27return%20Math.min%28self%2C%20aNumber%29%3B%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_rounded',
-smalltalk.method({
-selector: 'rounded',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return function () {return Math.round(self);}();
-    return self;
-},
-source: unescape('rounded%0A%09%5E%7B%27return%20Math.round%28self%29%3B%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_truncated',
-smalltalk.method({
-selector: 'truncated',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return function () {return Math.floor(self);}();
-    return self;
-},
-source: unescape('truncated%0A%09%5E%7B%27return%20Math.floor%28self%29%3B%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_to_',
-smalltalk.method({
-selector: 'to:',
-category: 'converting',
-fn: function (aNumber) {
-    var self = this;
-    var array = nil;
-    var first = nil;
-    var last = nil;
-    var count = nil;
-    first = self._truncated();
-    last = aNumber._truncated().__plus(1);
-    count = 1;
-    first.__lt_eq(last)._ifFalse_(function () {return self._error_("Wrong interval");});
-    array = smalltalk.Array._new();
-    last.__minus(first)._timesRepeat_(function () {array._at_put_(count, first);count = count.__plus(1);return first = first.__plus(1);});
-    return array;
-    return self;
-},
-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%09%28first%20%3C%3D%20last%29%20ifFalse%3A%20%5Bself%20error%3A%20%27Wrong%20interval%27%5D.%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%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_timesRepeat_',
-smalltalk.method({
-selector: 'timesRepeat:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    var integer = nil;
-    var count = nil;
-    integer = self._truncated();
-    count = 1;
-    (function () {return count.__gt(self);}._whileFalse_(function () {aBlock._value();return count = count.__plus(1);}));
-    return self;
-},
-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%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_to_do_',
-smalltalk.method({
-selector: 'to:do:',
-category: 'enumerating',
-fn: function (aNumber, aBlock) {
-    var self = this;
-    return self._to_(aNumber)._do_(aBlock);
-    return self;
-},
-source: unescape('to%3A%20aNumber%20do%3A%20aBlock%0A%09%5E%28self%20to%3A%20aNumber%29%20do%3A%20aBlock%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_asString',
-smalltalk.method({
-selector: 'asString',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return self._printString();
-    return self;
-},
-source: unescape('asString%0A%09%5Eself%20printString%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_asJavascript',
-smalltalk.method({
-selector: 'asJavascript',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return unescape("%28").__comma(self._printString()).__comma(unescape("%29"));
-    return self;
-},
-source: unescape('asJavascript%0A%09%5E%27%28%27%2C%20self%20printString%2C%20%27%29%27%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_printString',
-smalltalk.method({
-selector: 'printString',
-category: 'printing',
-fn: function () {
-    var self = this;
-    return function () {return String(self);}();
-    return self;
-},
-source: unescape('printString%0A%09%5E%7B%27return%20String%28self%29%27%7D%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_isNumber',
-smalltalk.method({
-selector: 'isNumber',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return true;
-    return self;
-},
-source: unescape('isNumber%0A%09%5Etrue%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_atRandom',
-smalltalk.method({
-selector: 'atRandom',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return smalltalk.Random._new()._next().__star(self)._truncated().__plus(1);
-    return self;
-},
-source: unescape('atRandom%0A%20%20%20%20%5E%28Random%20new%20next%20*%20self%29%20truncated%20+%201%0A')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'__at',
-smalltalk.method({
-selector: '@',
-category: 'converting',
-fn: function (aNumber) {
-    var self = this;
-    return smalltalk.Point._x_y_(self, aNumber);
-    return self;
-},
-source: unescape('@%20aNumber%0A%09%5EPoint%20x%3A%20self%20y%3A%20aNumber')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_asPoint',
-smalltalk.method({
-selector: 'asPoint',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return smalltalk.Point._x_y_(self, self);
-    return self;
-},
-source: unescape('asPoint%0A%09%5EPoint%20x%3A%20self%20y%3A%20self')}),
-smalltalk.Number);
-
-smalltalk.addMethod(
-'_clearInterval',
-smalltalk.method({
-selector: 'clearInterval',
-category: 'intervals',
-fn: function () {
-    var self = this;
-    (function () {clearInterval(Number(self));}());
-    return self;
-},
-source: unescape('clearInterval%0A%09%7B%27clearInterval%28Number%28self%29%29%27%7D')}),
-smalltalk.Number);
-
-
-smalltalk.addMethod(
-'_pi',
-smalltalk.method({
-selector: 'pi',
-category: 'instance creation',
-fn: function () {
-    var self = this;
-    return function () {return Math.PI;}();
-    return self;
-},
-source: unescape('pi%0A%09%5E%7B%27return%20Math.PI%27%7D')}),
-smalltalk.Number.klass);
-
-
-smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'_compiledSource',
-smalltalk.method({
-selector: 'compiledSource',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return self.toString();}();
-    return self;
-},
-source: unescape('compiledSource%0A%09%5E%7B%27return%20self.toString%28%29%27%7D%0A')}),
-smalltalk.BlockClosure);
-
-smalltalk.addMethod(
-'_whileTrue_',
-smalltalk.method({
-selector: 'whileTrue:',
-category: 'controlling',
-fn: function (aBlock) {
-    var self = this;
-    (function () {while (self()) {aBlock();}}());
-    return self;
-},
-source: unescape('whileTrue%3A%20aBlock%0A%09%7B%27while%28self%28%29%29%20%7BaBlock%28%29%7D%27%7D%0A')}),
-smalltalk.BlockClosure);
-
-smalltalk.addMethod(
-'_whileFalse_',
-smalltalk.method({
-selector: 'whileFalse:',
-category: 'controlling',
-fn: function (aBlock) {
-    var self = this;
-    (function () {while (!self()) {aBlock();}}());
-    return self;
-},
-source: unescape('whileFalse%3A%20aBlock%0A%09%7B%27while%28%21self%28%29%29%20%7BaBlock%28%29%7D%27%7D%0A')}),
-smalltalk.BlockClosure);
-
-smalltalk.addMethod(
-'_value',
-smalltalk.method({
-selector: 'value',
-category: 'evaluating',
-fn: function () {
-    var self = this;
-    return function () {return self();}();
-    return self;
-},
-source: unescape('value%0A%09%5E%7B%27return%20self%28%29%3B%27%7D%0A')}),
-smalltalk.BlockClosure);
-
-smalltalk.addMethod(
-'_value_',
-smalltalk.method({
-selector: 'value:',
-category: 'evaluating',
-fn: function (anArg) {
-    var self = this;
-    return function () {return self(anArg);}();
-    return self;
-},
-source: unescape('value%3A%20anArg%0A%09%5E%7B%27return%20self%28anArg%29%3B%27%7D%0A')}),
-smalltalk.BlockClosure);
-
-smalltalk.addMethod(
-'_value_value_',
-smalltalk.method({
-selector: 'value:value:',
-category: 'evaluating',
-fn: function (firstArg, secondArg) {
-    var self = this;
-    return function () {return self(firstArg, secondArg);}();
-    return self;
-},
-source: unescape('value%3A%20firstArg%20value%3A%20secondArg%0A%09%5E%7B%27return%20self%28firstArg%2C%20secondArg%29%3B%27%7D%0A')}),
-smalltalk.BlockClosure);
-
-smalltalk.addMethod(
-'_value_value_value_',
-smalltalk.method({
-selector: 'value:value:value:',
-category: 'evaluating',
-fn: function (firstArg, secondArg, thirdArg) {
-    var self = this;
-    return function () {return self(firstArg, secondArg, thirdArg);}();
-    return self;
-},
-source: unescape('value%3A%20firstArg%20value%3A%20secondArg%20value%3A%20thirdArg%0A%09%5E%7B%27return%20self%28firstArg%2C%20secondArg%2C%20thirdArg%29%3B%27%7D%0A')}),
-smalltalk.BlockClosure);
-
-smalltalk.addMethod(
-'_valueWithPossibleArguments_',
-smalltalk.method({
-selector: 'valueWithPossibleArguments:',
-category: 'evaluating',
-fn: function (aCollection) {
-    var self = this;
-    return function () {return self.apply(null, aCollection);}();
-    return self;
-},
-source: unescape('valueWithPossibleArguments%3A%20aCollection%0A%09%5E%7B%27return%20self.apply%28null%2C%20aCollection%29%3B%27%7D%0A')}),
-smalltalk.BlockClosure);
-
-smalltalk.addMethod(
-'_on_do_',
-smalltalk.method({
-selector: 'on:do:',
-category: 'error handling',
-fn: function (anErrorClass, aBlock) {
-    var self = this;
-    self._try_catch_(self, function (error) {return error._isKindOf_(anErrorClass)._ifTrue_ifFalse_(function () {return aBlock._value();}, function () {return error._signal();});});
-    return self;
-},
-source: unescape('on%3A%20anErrorClass%20do%3A%20aBlock%0A%09self%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%5D%0A%09%20%20%20%20%20ifFalse%3A%20%5Berror%20signal%5D%5D%0A')}),
-smalltalk.BlockClosure);
-
-smalltalk.addMethod(
-'_appendToJQuery_',
-smalltalk.method({
-selector: 'appendToJQuery:',
-category: '*JQuery',
-fn: function (aJQuery) {
-    var self = this;
-    var canvas = nil;
-    canvas = smalltalk.HTMLCanvas._new();
-    self._value_(canvas);
-    aJQuery._append_(canvas);
-    return self;
-},
-source: unescape('appendToJQuery%3A%20aJQuery%0A%09%7C%20canvas%20%7C%0A%09canvas%20%3A%3D%20HTMLCanvas%20new.%0A%09self%20value%3A%20canvas.%0A%09aJQuery%20append%3A%20canvas%0A')}),
-smalltalk.BlockClosure);
-
-smalltalk.addMethod(
-'_appendToBrush_',
-smalltalk.method({
-selector: 'appendToBrush:',
-category: '*Canvas',
-fn: function (aTagBrush) {
-    var self = this;
-    aTagBrush._appendBlock_(self);
-    return self;
-},
-source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20appendBlock%3A%20self%0A')}),
-smalltalk.BlockClosure);
-
-smalltalk.addMethod(
-'_valueWithTimeout_',
-smalltalk.method({
-selector: 'valueWithTimeout:',
-category: 'timeout/interval',
-fn: function (aNumber) {
-    var self = this;
-    (function () {setTimeout(self, aNumber);}());
-    return self;
-},
-source: unescape('valueWithTimeout%3A%20aNumber%0A%09%7B%27setTimeout%28self%2C%20aNumber%29%27%7D')}),
-smalltalk.BlockClosure);
-
-smalltalk.addMethod(
-'_valueWithInterval_',
-smalltalk.method({
-selector: 'valueWithInterval:',
-category: 'timeout/interval',
-fn: function (aNumber) {
-    var self = this;
-    return function () {return setInterval(self, aNumber);}();
-    return self;
-},
-source: unescape('valueWithInterval%3A%20aNumber%0A%09%5E%7B%27return%20setInterval%28self%2C%20aNumber%29%27%7D')}),
-smalltalk.BlockClosure);
-
-
-
-smalltalk.addClass('Boolean', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'__eq',
-smalltalk.method({
-selector: '=',
-category: 'comparing',
-fn: function (aBoolean) {
-    var self = this;
-    return function () {return Boolean(self == true) == aBoolean;}();
-    return self;
-},
-source: unescape('%3D%20aBoolean%0A%20%20%20%20%09%5E%7B%27return%20Boolean%28self%20%3D%3D%20true%29%20%3D%3D%20aBoolean%27%7D%0A')}),
-smalltalk.Boolean);
-
-smalltalk.addMethod(
-'_shallowCopy',
-smalltalk.method({
-selector: 'shallowCopy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    return self;
-    return self;
-},
-source: unescape('shallowCopy%0A%09%5Eself%0A')}),
-smalltalk.Boolean);
-
-smalltalk.addMethod(
-'_deepCopy',
-smalltalk.method({
-selector: 'deepCopy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    return self;
-    return self;
-},
-source: unescape('deepCopy%0A%09%5Eself%0A')}),
-smalltalk.Boolean);
-
-smalltalk.addMethod(
-'_ifTrue_',
-smalltalk.method({
-selector: 'ifTrue:',
-category: 'controlling',
-fn: function (aBlock) {
-    var self = this;
-    return self._ifTrue_ifFalse_(aBlock, function () {return nil;});
-    return self;
-},
-source: unescape('ifTrue%3A%20aBlock%0A%09%5Eself%20ifTrue%3A%20aBlock%20ifFalse%3A%20%5B%5D%0A')}),
-smalltalk.Boolean);
-
-smalltalk.addMethod(
-'_ifFalse_',
-smalltalk.method({
-selector: 'ifFalse:',
-category: 'controlling',
-fn: function (aBlock) {
-    var self = this;
-    return self._ifTrue_ifFalse_(function () {return nil;}, aBlock);
-    return self;
-},
-source: unescape('ifFalse%3A%20aBlock%0A%09%5Eself%20ifTrue%3A%20%5B%5D%20ifFalse%3A%20aBlock%0A')}),
-smalltalk.Boolean);
-
-smalltalk.addMethod(
-'_ifFalse_ifTrue_',
-smalltalk.method({
-selector: 'ifFalse:ifTrue:',
-category: 'controlling',
-fn: function (aBlock, anotherBlock) {
-    var self = this;
-    return self._ifTrue_ifFalse_(anotherBlock, aBlock);
-    return self;
-},
-source: unescape('ifFalse%3A%20aBlock%20ifTrue%3A%20anotherBlock%0A%09%5Eself%20ifTrue%3A%20anotherBlock%20ifFalse%3A%20aBlock%0A')}),
-smalltalk.Boolean);
-
-smalltalk.addMethod(
-'_ifTrue_ifFalse_',
-smalltalk.method({
-selector: 'ifTrue:ifFalse:',
-category: 'controlling',
-fn: function (aBlock, anotherBlock) {
-    var self = this;
-    return function () {if (self == true) {return aBlock();} else {return anotherBlock();}}();
-    return self;
-},
-source: unescape('ifTrue%3A%20aBlock%20ifFalse%3A%20anotherBlock%0A%09%5E%7B%27%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%27%7D%0A')}),
-smalltalk.Boolean);
-
-smalltalk.addMethod(
-'_and_',
-smalltalk.method({
-selector: 'and:',
-category: 'controlling',
-fn: function (aBlock) {
-    var self = this;
-    return self.__eq(true)._ifTrue_ifFalse_(aBlock, function () {return false;});
-    return self;
-},
-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%0A')}),
-smalltalk.Boolean);
-
-smalltalk.addMethod(
-'_or_',
-smalltalk.method({
-selector: 'or:',
-category: 'controlling',
-fn: function (aBlock) {
-    var self = this;
-    return self.__eq(true)._ifTrue_ifFalse_(function () {return true;}, aBlock);
-    return self;
-},
-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%0A')}),
-smalltalk.Boolean);
-
-smalltalk.addMethod(
-'_not',
-smalltalk.method({
-selector: 'not',
-category: 'controlling',
-fn: function () {
-    var self = this;
-    return self.__eq(false);
-    return self;
-},
-source: unescape('not%0A%09%5Eself%20%3D%20false%0A')}),
-smalltalk.Boolean);
-
-smalltalk.addMethod(
-'_printString',
-smalltalk.method({
-selector: 'printString',
-category: 'printing',
-fn: function () {
-    var self = this;
-    return function () {return self.toString();}();
-    return self;
-},
-source: unescape('printString%0A%09%5E%7B%27return%20self.toString%28%29%27%7D%0A')}),
-smalltalk.Boolean);
-
-
-
-smalltalk.addClass('UndefinedObject', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'_subclass_instanceVariableNames_',
-smalltalk.method({
-selector: 'subclass:instanceVariableNames:',
-category: 'class creation',
-fn: function (aString, anotherString) {
-    var self = this;
-    return self._subclass_instanceVariableNames_category_(aString, anotherString, nil);
-    return self;
-},
-source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20category%3A%20nil%0A')}),
-smalltalk.UndefinedObject);
-
-smalltalk.addMethod(
-'_subclass_instanceVariableNames_category_',
-smalltalk.method({
-selector: 'subclass:instanceVariableNames:category:',
-category: 'class creation',
-fn: function (aString, aString2, aString3) {
-    var self = this;
-    return smalltalk.ClassBuilder._new()._superclass_subclass_instanceVariableNames_category_(self, aString, aString2, aString3);
-    return self;
-},
-source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%5EClassBuilder%20new%0A%09%20%20%20%20superclass%3A%20self%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A')}),
-smalltalk.UndefinedObject);
-
-smalltalk.addMethod(
-'_shallowCopy',
-smalltalk.method({
-selector: 'shallowCopy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    return self;
-    return self;
-},
-source: unescape('shallowCopy%0A%09%5Eself%0A')}),
-smalltalk.UndefinedObject);
-
-smalltalk.addMethod(
-'_deepCopy',
-smalltalk.method({
-selector: 'deepCopy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    return self;
-    return self;
-},
-source: unescape('deepCopy%0A%09%5Eself%0A')}),
-smalltalk.UndefinedObject);
-
-smalltalk.addMethod(
-'_ifNil_',
-smalltalk.method({
-selector: 'ifNil:',
-category: 'testing',
-fn: function (aBlock) {
-    var self = this;
-    return self._ifNil_ifNotNil_(aBlock, function () {return nil;});
-    return self;
-},
-source: unescape('ifNil%3A%20aBlock%0A%09%5Eself%20ifNil%3A%20aBlock%20ifNotNil%3A%20%5B%5D%0A')}),
-smalltalk.UndefinedObject);
-
-smalltalk.addMethod(
-'_ifNotNil_',
-smalltalk.method({
-selector: 'ifNotNil:',
-category: 'testing',
-fn: function (aBlock) {
-    var self = this;
-    return self;
-    return self;
-},
-source: unescape('ifNotNil%3A%20aBlock%0A%09%5Eself%0A')}),
-smalltalk.UndefinedObject);
-
-smalltalk.addMethod(
-'_ifNil_ifNotNil_',
-smalltalk.method({
-selector: 'ifNil:ifNotNil:',
-category: 'testing',
-fn: function (aBlock, anotherBlock) {
-    var self = this;
-    return aBlock._value();
-    return self;
-},
-source: unescape('ifNil%3A%20aBlock%20ifNotNil%3A%20anotherBlock%0A%09%5EaBlock%20value%0A')}),
-smalltalk.UndefinedObject);
-
-smalltalk.addMethod(
-'_ifNotNil_ifNil_',
-smalltalk.method({
-selector: 'ifNotNil:ifNil:',
-category: 'testing',
-fn: function (aBlock, anotherBlock) {
-    var self = this;
-    return anotherBlock._value();
-    return self;
-},
-source: unescape('ifNotNil%3A%20aBlock%20ifNil%3A%20anotherBlock%0A%09%5EanotherBlock%20value%0A')}),
-smalltalk.UndefinedObject);
-
-smalltalk.addMethod(
-'_isNil',
-smalltalk.method({
-selector: 'isNil',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return true;
-    return self;
-},
-source: unescape('isNil%0A%09%5Etrue%0A')}),
-smalltalk.UndefinedObject);
-
-smalltalk.addMethod(
-'_notNil',
-smalltalk.method({
-selector: 'notNil',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return false;
-    return self;
-},
-source: unescape('notNil%0A%09%5Efalse%0A')}),
-smalltalk.UndefinedObject);
-
-smalltalk.addMethod(
-'_printString',
-smalltalk.method({
-selector: 'printString',
-category: 'printing',
-fn: function () {
-    var self = this;
-    return "nil";
-    return self;
-},
-source: unescape('printString%0A%20%20%20%20%5E%27nil%27%0A')}),
-smalltalk.UndefinedObject);
-
-
-smalltalk.addMethod(
-'_new',
-smalltalk.method({
-selector: 'new',
-category: 'instance creation',
-fn: function () {
-    var self = this;
-    self._error_("You cannot create new instances of UndefinedObject. Use nil");
-    return self;
-},
-source: unescape('new%0A%09%20%20%20%20self%20error%3A%20%27You%20cannot%20create%20new%20instances%20of%20UndefinedObject.%20Use%20nil%27%0A')}),
-smalltalk.UndefinedObject.klass);
-
-
-smalltalk.addClass('Collection', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'_size',
-smalltalk.method({
-selector: 'size',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    self._subclassResponsibility();
-    return self;
-},
-source: unescape('size%0A%09self%20subclassResponsibility%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_at_',
-smalltalk.method({
-selector: 'at:',
-category: 'accessing',
-fn: function (anIndex) {
-    var self = this;
-    return self._at_ifAbsent_(anIndex, function () {return self._errorNotFound();});
-    return self;
-},
-source: unescape('at%3A%20anIndex%0A%09%5Eself%20at%3A%20anIndex%20ifAbsent%3A%20%5B%0A%09%20%20%20%20self%20errorNotFound%5D%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_at_put_',
-smalltalk.method({
-selector: 'at:put:',
-category: 'accessing',
-fn: function (anIndex, anObject) {
-    var self = this;
-    self._subclassResponsibility();
-    return self;
-},
-source: unescape('at%3A%20anIndex%20put%3A%20anObject%0A%09self%20subclassResponsibility%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_at_ifAbsent_',
-smalltalk.method({
-selector: 'at:ifAbsent:',
-category: 'accessing',
-fn: function (anIndex, aBlock) {
-    var self = this;
-    self._subclassResponsibility();
-    return self;
-},
-source: unescape('at%3A%20anIndex%20ifAbsent%3A%20aBlock%0A%09self%20subclassResponsibility%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_first',
-smalltalk.method({
-selector: 'first',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._at_(1);
-    return self;
-},
-source: unescape('first%0A%09%5Eself%20at%3A%201%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_second',
-smalltalk.method({
-selector: 'second',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._at_(2);
-    return self;
-},
-source: unescape('second%0A%09%5Eself%20at%3A%202%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_third',
-smalltalk.method({
-selector: 'third',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._at_(3);
-    return self;
-},
-source: unescape('third%0A%09%5Eself%20at%3A%203%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_fourth',
-smalltalk.method({
-selector: 'fourth',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._at_(4);
-    return self;
-},
-source: unescape('fourth%0A%09%5Eself%20at%3A%204%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_last',
-smalltalk.method({
-selector: 'last',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._at_(self._size());
-    return self;
-},
-source: unescape('last%0A%09%5Eself%20at%3A%20self%20size%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_readStream',
-smalltalk.method({
-selector: 'readStream',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._stream();
-    return self;
-},
-source: unescape('readStream%0A%09%5Eself%20stream%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_writeStream',
-smalltalk.method({
-selector: 'writeStream',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._stream();
-    return self;
-},
-source: unescape('writeStream%0A%09%5Eself%20stream%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_stream',
-smalltalk.method({
-selector: 'stream',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._streamClass()._on_(self);
-    return self;
-},
-source: unescape('stream%0A%09%5Eself%20streamClass%20on%3A%20self%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_streamClass',
-smalltalk.method({
-selector: 'streamClass',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._class()._streamClass();
-    return self;
-},
-source: unescape('streamClass%0A%09%5Eself%20class%20streamClass%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_add_',
-smalltalk.method({
-selector: 'add:',
-category: 'adding/removing',
-fn: function (anObject) {
-    var self = this;
-    self._subclassResponsibility();
-    return self;
-},
-source: unescape('add%3A%20anObject%0A%09self%20subclassResponsibility%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_addAll_',
-smalltalk.method({
-selector: 'addAll:',
-category: 'adding/removing',
-fn: function (aCollection) {
-    var self = this;
-    aCollection._do_(function (each) {return self._add_(each);});
-    return aCollection;
-    return self;
-},
-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%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'__comma',
-smalltalk.method({
-selector: ',',
-category: 'copying',
-fn: function (aCollection) {
-    var self = this;
-    return function ($rec) {$rec._addAll_(aCollection);return $rec._yourself();}(self._copy());
-    return self;
-},
-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%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_copyFrom_to_',
-smalltalk.method({
-selector: 'copyFrom:to:',
-category: 'copying',
-fn: function (anIndex, anotherIndex) {
-    var self = this;
-    self._subclassResponsibility();
-    return self;
-},
-source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09self%20subclassResponsibility%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_copyWith_',
-smalltalk.method({
-selector: 'copyWith:',
-category: 'copying',
-fn: function (anObject) {
-    var self = this;
-    return function ($rec) {$rec._add_(anObject);return $rec._yourself();}(self._copy());
-    return self;
-},
-source: unescape('copyWith%3A%20anObject%0A%09%5Eself%20copy%20add%3A%20anObject%3B%20yourself%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_copyWithAll_',
-smalltalk.method({
-selector: 'copyWithAll:',
-category: 'copying',
-fn: function (aCollection) {
-    var self = this;
-    return function ($rec) {$rec._addAll_(aCollection);return $rec._yourself();}(self._copy());
-    return self;
-},
-source: unescape('copyWithAll%3A%20aCollection%0A%09%5Eself%20copy%20addAll%3A%20aCollection%3B%20yourself%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_asArray',
-smalltalk.method({
-selector: 'asArray',
-category: 'converting',
-fn: function () {
-    var self = this;
-    var array = nil;
-    var index = nil;
-    array = smalltalk.Array._new();
-    index = 0;
-    self._do_(function (each) {index = index.__plus(1);return array._at_put_(index, each);});
-    return array;
-    return self;
-},
-source: unescape('asArray%0A%09%7C%20array%20index%20%7C%0A%09array%20%3A%3D%20Array%20new.%0A%09index%20%3A%3D%200.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20index%20%3A%3D%20index%20+%201.%0A%09%20%20%20%20array%20at%3A%20index%20put%3A%20each%5D.%0A%09%5Earray%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_do_',
-smalltalk.method({
-selector: 'do:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    (function () {for (var i = 0; i < self.length; i++) {aBlock(self[i]);}}());
-    return self;
-},
-source: unescape('do%3A%20aBlock%0A%09%7B%27for%28var%20i%3D0%3Bi%3Cself.length%3Bi++%29%7BaBlock%28self%5Bi%5D%29%3B%7D%27%7D%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_collect_',
-smalltalk.method({
-selector: 'collect:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    var stream = nil;
-    stream = self._class()._new()._writeStream();
-    self._do_(function (each) {return stream._nextPut_(aBlock._value_(each));});
-    return stream._contents();
-    return self;
-},
-source: unescape('collect%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%20stream%20nextPut%3A%20%28aBlock%20value%3A%20each%29%5D.%0A%09%5Estream%20contents%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_detect_',
-smalltalk.method({
-selector: 'detect:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    return self._detect_ifNone_(aBlock, function () {return self._errorNotFound();});
-    return self;
-},
-source: unescape('detect%3A%20aBlock%0A%09%5Eself%20detect%3A%20aBlock%20ifNone%3A%20%5Bself%20errorNotFound%5D%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_detect_ifNone_',
-smalltalk.method({
-selector: 'detect:ifNone:',
-category: 'enumerating',
-fn: function (aBlock, anotherBlock) {
-    var self = this;
-    return function () {for (var i = 0; i < self.length; i++) {if (aBlock(self[i])) {return self[i];}}return anotherBlock();}();
-    return self;
-},
-source: unescape('detect%3A%20aBlock%20ifNone%3A%20anotherBlock%0A%09%5E%7B%27%0A%09for%28var%20i%20%3D%200%3B%20i%20%3C%20self.length%3B%20i++%29%0A%09%09if%28aBlock%28self%5Bi%5D%29%29%0A%09%09%09return%20self%5Bi%5D%3B%0A%09return%20anotherBlock%28%29%3B%0A%09%27%7D%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_do_separatedBy_',
-smalltalk.method({
-selector: 'do:separatedBy:',
-category: 'enumerating',
-fn: function (aBlock, anotherBlock) {
-    var self = this;
-    var first = nil;
-    first = true;
-    self._do_(function (each) {first._ifTrue_ifFalse_(function () {return first = false;}, function () {return anotherBlock._value();});return aBlock._value_(each);});
-    return self;
-},
-source: unescape('do%3A%20aBlock%20separatedBy%3A%20anotherBlock%0A%20%20%20%20%09%7C%20first%20%7C%0A%20%20%20%20%09first%20%3A%3D%20true.%0A%20%20%20%20%09self%20do%3A%20%5B%3Aeach%20%7C%0A%20%20%20%20%09%20%20%20%20first%0A%20%20%20%20%09%09ifTrue%3A%20%5Bfirst%20%3A%3D%20false%5D%0A%20%20%20%20%09%09ifFalse%3A%20%5BanotherBlock%20value%5D.%0A%20%20%20%20%09%20%20%20%20aBlock%20value%3A%20each%5D%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_inject_into_',
-smalltalk.method({
-selector: 'inject:into:',
-category: 'enumerating',
-fn: function (anObject, aBlock) {
-    var self = this;
-    var result = nil;
-    result = anObject;
-    self._do_(function (each) {return result = aBlock._value_value_(result, each);});
-    return result;
-    return self;
-},
-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%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_reject_',
-smalltalk.method({
-selector: 'reject:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    return self._select_(function (each) {return aBlock._value_(each).__eq(false);});
-    return self;
-},
-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%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_select_',
-smalltalk.method({
-selector: 'select:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    var stream = nil;
-    stream = self._class()._new()._writeStream();
-    self._do_(function (each) {return aBlock._value_(each)._ifTrue_(function () {return stream._nextPut_(each);});});
-    return stream._contents();
-    return self;
-},
-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%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_errorNotFound',
-smalltalk.method({
-selector: 'errorNotFound',
-category: 'error handling',
-fn: function () {
-    var self = this;
-    self._error_("Object is not in the collection");
-    return self;
-},
-source: unescape('errorNotFound%0A%09self%20error%3A%20%27Object%20is%20not%20in%20the%20collection%27%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_includes_',
-smalltalk.method({
-selector: 'includes:',
-category: 'testing',
-fn: function (anObject) {
-    var self = this;
-    return function () {var i = self.length;while (i--) {if (self[i].__eq(anObject)) {return true;}}return false;}();
-    return self;
-},
-source: unescape('includes%3A%20anObject%0A%09%5E%7B%27%0A%09%09var%20i%20%3D%20self.length%3B%0A%09%09while%20%28i--%29%20%7B%0A%09%09%09if%20%28self%5Bi%5D.__eq%28anObject%29%29%20%7B%0A%09%09%09%09return%20true%3B%0A%09%09%09%7D%09%0A%09%09%7D%0A%09%09return%20false%3B%0A%0A%09%27%7D%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_notEmpty',
-smalltalk.method({
-selector: 'notEmpty',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return self._isEmpty()._not();
-    return self;
-},
-source: unescape('notEmpty%0A%09%5Eself%20isEmpty%20not%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_isEmpty',
-smalltalk.method({
-selector: 'isEmpty',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return self._size().__eq(0);
-    return self;
-},
-source: unescape('isEmpty%0A%09%5Eself%20size%20%3D%200%0A')}),
-smalltalk.Collection);
-
-smalltalk.addMethod(
-'_remove_',
-smalltalk.method({
-selector: 'remove:',
-category: 'adding/removing',
-fn: function (anObject) {
-    var self = this;
-    self._subclassResponsibility();
-    return self;
-},
-source: unescape('remove%3A%20anObject%0A%20%20%20%20self%20subclassResponsibility%0A')}),
-smalltalk.Collection);
-
-
-smalltalk.addMethod(
-'_streamClass',
-smalltalk.method({
-selector: 'streamClass',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return smalltalk.Stream;
-    return self;
-},
-source: unescape('streamClass%0A%09%20%20%20%20%5EStream%0A')}),
-smalltalk.Collection.klass);
-
-smalltalk.addMethod(
-'_with_',
-smalltalk.method({
-selector: 'with:',
-category: 'instance creation',
-fn: function (anObject) {
-    var self = this;
-    return function ($rec) {$rec._add_(anObject);return $rec._yourself();}(self._new());
-    return self;
-},
-source: unescape('with%3A%20anObject%0A%09%20%20%20%20%5Eself%20new%0A%09%09add%3A%20anObject%3B%0A%09%09yourself%0A')}),
-smalltalk.Collection.klass);
-
-smalltalk.addMethod(
-'_with_with_',
-smalltalk.method({
-selector: 'with:with:',
-category: 'instance creation',
-fn: function (anObject, anotherObject) {
-    var self = this;
-    return function ($rec) {$rec._add_(anObject);$rec._add_(anotherObject);return $rec._yourself();}(self._new());
-    return self;
-},
-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%0A')}),
-smalltalk.Collection.klass);
-
-smalltalk.addMethod(
-'_with_with_with_',
-smalltalk.method({
-selector: 'with:with:with:',
-category: 'instance creation',
-fn: function (firstObject, secondObject, thirdObject) {
-    var self = this;
-    return function ($rec) {$rec._add_(firstObject);$rec._add_(secondObject);$rec._add_(thirdObject);return $rec._yourself();}(self._new());
-    return self;
-},
-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%0A')}),
-smalltalk.Collection.klass);
-
-smalltalk.addMethod(
-'_withAll_',
-smalltalk.method({
-selector: 'withAll:',
-category: 'instance creation',
-fn: function (aCollection) {
-    var self = this;
-    return function ($rec) {$rec._addAll_(aCollection);return $rec._yourself();}(self._new());
-    return self;
-},
-source: unescape('withAll%3A%20aCollection%0A%09%20%20%20%20%5Eself%20new%0A%09%09addAll%3A%20aCollection%3B%0A%09%09yourself%0A')}),
-smalltalk.Collection.klass);
-
-
-smalltalk.addClass('String', smalltalk.Collection, [], 'Kernel');
-smalltalk.addMethod(
-'__eq',
-smalltalk.method({
-selector: '=',
-category: 'comparing',
-fn: function (aString) {
-    var self = this;
-    return function () {return String(self) == aString;}();
-    return self;
-},
-source: unescape('%3D%20aString%0A%09%5E%7B%27return%20String%28self%29%20%3D%3D%20aString%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_size',
-smalltalk.method({
-selector: 'size',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return self.length;}();
-    return self;
-},
-source: unescape('size%0A%09%5E%7B%27return%20self.length%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_at_',
-smalltalk.method({
-selector: 'at:',
-category: 'accessing',
-fn: function (anIndex) {
-    var self = this;
-    return function () {return self[anIndex - 1] || nil;}();
-    return self;
-},
-source: unescape('at%3A%20anIndex%0A%20%20%20%20%09%5E%7B%27return%20self%5BanIndex%20-%201%5D%20%7C%7C%20nil%3B%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_at_put_',
-smalltalk.method({
-selector: 'at:put:',
-category: 'accessing',
-fn: function (anIndex, anObject) {
-    var self = this;
-    self._errorReadOnly();
-    return self;
-},
-source: unescape('at%3A%20anIndex%20put%3A%20anObject%0A%20%20%20%20%09self%20errorReadOnly%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_at_ifAbsent_',
-smalltalk.method({
-selector: 'at:ifAbsent:',
-category: 'accessing',
-fn: function (anIndex, aBlock) {
-    var self = this;
-    self._at_(anIndex)._ifNil_(function () {return aBlock;});
-    return self;
-},
-source: unescape('at%3A%20anIndex%20ifAbsent%3A%20aBlock%0A%20%20%20%20%09%28self%20at%3A%20anIndex%29%20ifNil%3A%20%5BaBlock%5D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_escaped',
-smalltalk.method({
-selector: 'escaped',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return escape(self);}();
-    return self;
-},
-source: unescape('escaped%0A%09%5E%7B%27return%20escape%28self%29%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_unescaped',
-smalltalk.method({
-selector: 'unescaped',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return unescape(self);}();
-    return self;
-},
-source: unescape('unescaped%0A%09%5E%7B%27return%20unescape%28self%29%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_add_',
-smalltalk.method({
-selector: 'add:',
-category: 'adding',
-fn: function (anObject) {
-    var self = this;
-    self._errorReadOnly();
-    return self;
-},
-source: unescape('add%3A%20anObject%0A%20%20%20%20%09self%20errorReadOnly%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'__comma',
-smalltalk.method({
-selector: ',',
-category: 'copying',
-fn: function (aString) {
-    var self = this;
-    return function () {return self + aString;}();
-    return self;
-},
-source: unescape('%2C%20aString%0A%20%20%20%20%09%5E%7B%27return%20self%20+%20aString%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_copyFrom_to_',
-smalltalk.method({
-selector: 'copyFrom:to:',
-category: 'copying',
-fn: function (anIndex, anotherIndex) {
-    var self = this;
-    return function () {return self.substring(anIndex - 1, anotherIndex);}();
-    return self;
-},
-source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%20%20%20%20%09%5E%7B%27return%20self.substring%28anIndex%20-%201%2C%20anotherIndex%29%3B%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_shallowCopy',
-smalltalk.method({
-selector: 'shallowCopy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    return self._class()._fromString_(self);
-    return self;
-},
-source: unescape('shallowCopy%0A%20%20%20%20%09%5Eself%20class%20fromString%3A%20self%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_deepCopy',
-smalltalk.method({
-selector: 'deepCopy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    return self._shallowCopy();
-    return self;
-},
-source: unescape('deepCopy%0A%20%20%20%20%09%5Eself%20shallowCopy%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_asSelector',
-smalltalk.method({
-selector: 'asSelector',
-category: 'converting',
-fn: function () {
-    var self = this;
-    var selector = nil;
-    selector = "_".__comma(self);
-    selector = selector._replace_with_(":", "_");
-    selector = selector._replace_with_(unescape("%5B+%5D"), "_plus");
-    selector = selector._replace_with_(unescape("-"), "_minus");
-    selector = selector._replace_with_(unescape("%5B*%5D"), "_star");
-    selector = selector._replace_with_(unescape("%5B/%5D"), "_slash");
-    selector = selector._replace_with_(unescape("%3E"), "_gt");
-    selector = selector._replace_with_(unescape("%3C"), "_lt");
-    selector = selector._replace_with_(unescape("%3D"), "_eq");
-    selector = selector._replace_with_(unescape("%2C"), "_comma");
-    selector = selector._replace_with_(unescape("%5B@%5D"), "_at");
-    return selector;
-    return self;
-},
-source: unescape('asSelector%0A%09%7C%20selector%20%7C%0A%09selector%20%3A%3D%20%27_%27%2C%20self.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%3A%27%20with%3A%20%27_%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B+%5D%27%20with%3A%20%27_plus%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27-%27%20with%3A%20%27_minus%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B*%5D%27%20with%3A%20%27_star%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B/%5D%27%20with%3A%20%27_slash%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%3E%27%20with%3A%20%27_gt%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%3C%27%20with%3A%20%27_lt%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%3D%27%20with%3A%20%27_eq%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%2C%27%20with%3A%20%27_comma%27.%0A%20%20%20%20%09selector%20%3A%3D%20selector%20replace%3A%20%27%5B@%5D%27%20with%3A%20%27_at%27.%0A%09%5Eselector%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_asJavascript',
-smalltalk.method({
-selector: 'asJavascript',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return function () {if (self.search(/^[a-zA-Z0-9_:.$ ]*$/) == -1) {return "unescape(\"" + escape(self) + "\")";} else {return "\"" + self + "\"";}}();
-    return self;
-},
-source: unescape('asJavascript%0A%09%5E%7B%27%0A%09if%28self.search%28/%5E%5Ba-zA-Z0-9_%3A.%24%20%5D*%24/%29%20%3D%3D%20-1%29%0A%09%09return%20%22unescape%28%5C%22%22%20+%20escape%28self%29%20+%20%22%5C%22%29%22%3B%0A%09else%0A%09%09return%20%22%5C%22%22%20+%20self%20+%20%22%5C%22%22%3B%0A%09%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_replace_with_',
-smalltalk.method({
-selector: 'replace:with:',
-category: 'regular expressions',
-fn: function (aString, anotherString) {
-    var self = this;
-    return self._replaceRegexp_with_(smalltalk.RegularExpression._fromString_flag_(aString, "g"), anotherString);
-    return self;
-},
-source: unescape('replace%3A%20aString%20with%3A%20anotherString%0A%20%20%20%20%09%5Eself%20replaceRegexp%3A%20%28RegularExpression%20fromString%3A%20aString%20flag%3A%20%27g%27%29%20with%3A%20anotherString%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_replaceRegexp_with_',
-smalltalk.method({
-selector: 'replaceRegexp:with:',
-category: 'regular expressions',
-fn: function (aRegexp, aString) {
-    var self = this;
-    return function () {return self.replace(aRegexp, aString);}();
-    return self;
-},
-source: unescape('replaceRegexp%3A%20aRegexp%20with%3A%20aString%0A%20%20%20%20%09%5E%7B%27return%20self.replace%28aRegexp%2C%20aString%29%3B%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_tokenize_',
-smalltalk.method({
-selector: 'tokenize:',
-category: 'converting',
-fn: function (aString) {
-    var self = this;
-    return function () {return self.split(aString);}();
-    return self;
-},
-source: unescape('tokenize%3A%20aString%0A%09%5E%7B%27return%20self.split%28aString%29%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_match_',
-smalltalk.method({
-selector: 'match:',
-category: 'regular expressions',
-fn: function (aRegexp) {
-    var self = this;
-    return function () {return self.search(aRegexp) != -1;}();
-    return self;
-},
-source: unescape('match%3A%20aRegexp%0A%20%20%20%20%09%5E%7B%27return%20self.search%28aRegexp%29%20%21%3D%20-1%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_asString',
-smalltalk.method({
-selector: 'asString',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return self;
-    return self;
-},
-source: unescape('asString%0A%20%20%20%20%09%5Eself%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_asNumber',
-smalltalk.method({
-selector: 'asNumber',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return function () {return Number(self);}();
-    return self;
-},
-source: unescape('asNumber%0A%09%5E%7B%27return%20Number%28self%29%3B%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_asParser',
-smalltalk.method({
-selector: 'asParser',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return smalltalk.PPStringParser._new()._string_(self);
-    return self;
-},
-source: unescape('asParser%0A%20%20%20%20%09%5EPPStringParser%20new%20string%3A%20self%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_asChoiceParser',
-smalltalk.method({
-selector: 'asChoiceParser',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return smalltalk.PPChoiceParser._withAll_(self._asArray()._collect_(function (each) {return each._asParser();}));
-    return self;
-},
-source: unescape('asChoiceParser%0A%20%20%20%20%09%5EPPChoiceParser%20withAll%3A%20%28self%20asArray%20collect%3A%20%5B%3Aeach%20%7C%20each%20asParser%5D%29%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_asCharacterParser',
-smalltalk.method({
-selector: 'asCharacterParser',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return smalltalk.PPCharacterParser._new()._string_(self);
-    return self;
-},
-source: unescape('asCharacterParser%0A%20%20%20%20%09%5EPPCharacterParser%20new%20string%3A%20self%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_errorReadOnly',
-smalltalk.method({
-selector: 'errorReadOnly',
-category: 'error handling',
-fn: function () {
-    var self = this;
-    self._error_(unescape("Object%20is%20read-only"));
-    return self;
-},
-source: unescape('errorReadOnly%0A%20%20%20%20%09self%20error%3A%20%27Object%20is%20read-only%27%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_printString',
-smalltalk.method({
-selector: 'printString',
-category: 'printing',
-fn: function () {
-    var self = this;
-    return unescape("%27").__comma(self).__comma(unescape("%27"));
-    return self;
-},
-source: unescape('printString%0A%20%20%20%20%09%5E%27%27%27%27%2C%20self%2C%20%27%27%27%27%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_printNl',
-smalltalk.method({
-selector: 'printNl',
-category: 'printing',
-fn: function () {
-    var self = this;
-    (function () {console.log(self);}());
-    return self;
-},
-source: unescape('printNl%0A%09%7B%27console.log%28self%29%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_isString',
-smalltalk.method({
-selector: 'isString',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return true;
-    return self;
-},
-source: unescape('isString%0A%20%20%20%20%09%5Etrue%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_asJQuery',
-smalltalk.method({
-selector: 'asJQuery',
-category: '*JQuery',
-fn: function () {
-    var self = this;
-    return smalltalk.JQuery._fromString_(self);
-    return self;
-},
-source: unescape('asJQuery%0A%20%20%20%20%5EJQuery%20fromString%3A%20self%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_appendToJQuery_',
-smalltalk.method({
-selector: 'appendToJQuery:',
-category: '*JQuery',
-fn: function (aJQuery) {
-    var self = this;
-    (function () {aJQuery._appendElement_(String(self));}());
-    return self;
-},
-source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20%7B%27aJQuery._appendElement_%28String%28self%29%29%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_appendToBrush_',
-smalltalk.method({
-selector: 'appendToBrush:',
-category: '*Canvas',
-fn: function (aTagBrush) {
-    var self = this;
-    aTagBrush._appendString_(self);
-    return self;
-},
-source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20appendString%3A%20self%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'__gt',
-smalltalk.method({
-selector: '>',
-category: 'comparing',
-fn: function (aString) {
-    var self = this;
-    return function () {return String(self) > aString;}();
-    return self;
-},
-source: unescape('%3E%20aString%0A%09%5E%7B%27return%20String%28self%29%20%3E%20aString%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'__lt',
-smalltalk.method({
-selector: '<',
-category: 'comparing',
-fn: function (aString) {
-    var self = this;
-    return function () {return String(self) < aString;}();
-    return self;
-},
-source: unescape('%3C%20aString%0A%09%5E%7B%27return%20String%28self%29%20%3C%20aString%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'__gt_eq',
-smalltalk.method({
-selector: '>=',
-category: 'comparing',
-fn: function (aString) {
-    var self = this;
-    return function () {return String(self) >= aString;}();
-    return self;
-},
-source: unescape('%3E%3D%20aString%0A%09%5E%7B%27return%20String%28self%29%20%3E%3D%20aString%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'__lt_eq',
-smalltalk.method({
-selector: '<=',
-category: 'comparing',
-fn: function (aString) {
-    var self = this;
-    return function () {return String(self) <= aString;}();
-    return self;
-},
-source: unescape('%3C%3D%20aString%0A%09%5E%7B%27return%20String%28self%29%20%3C%3D%20aString%27%7D%0A')}),
-smalltalk.String);
-
-smalltalk.addMethod(
-'_remove_',
-smalltalk.method({
-selector: 'remove:',
-category: 'adding',
-fn: function (anObject) {
-    var self = this;
-    self._errorReadOnly();
-    return self;
-},
-source: unescape('remove%3A%20anObject%0A%20%20%20%20self%20errorReadOnly%0A')}),
-smalltalk.String);
-
-
-smalltalk.addMethod(
-'_streamClass',
-smalltalk.method({
-selector: 'streamClass',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return smalltalk.StringStream;
-    return self;
-},
-source: unescape('streamClass%0A%09%20%20%20%20%5EStringStream%0A')}),
-smalltalk.String.klass);
-
-smalltalk.addMethod(
-'_fromString_',
-smalltalk.method({
-selector: 'fromString:',
-category: 'instance creation',
-fn: function (aString) {
-    var self = this;
-    return function () {return new self.fn(aString);}();
-    return self;
-},
-source: unescape('fromString%3A%20aString%0A%09%20%20%20%20%5E%7B%27return%20new%20self.fn%28aString%29%3B%27%7D%0A')}),
-smalltalk.String.klass);
-
-smalltalk.addMethod(
-'_cr',
-smalltalk.method({
-selector: 'cr',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return "\n";}();
-    return self;
-},
-source: unescape('cr%0A%09%20%20%20%20%5E%7B%27%7Breturn%20%27%27%5Cn%27%27%7D%3B%27%7D%0A')}),
-smalltalk.String.klass);
-
-smalltalk.addMethod(
-'_lf',
-smalltalk.method({
-selector: 'lf',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return "\r";}();
-    return self;
-},
-source: unescape('lf%0A%09%20%20%20%20%5E%7B%27return%20%27%27%5Cr%27%27%3B%27%7D%0A')}),
-smalltalk.String.klass);
-
-smalltalk.addMethod(
-'_space',
-smalltalk.method({
-selector: 'space',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return " ";}();
-    return self;
-},
-source: unescape('space%0A%09%20%20%20%20%5E%7B%27return%20%27%27%20%27%27%3B%27%7D%0A')}),
-smalltalk.String.klass);
-
-smalltalk.addMethod(
-'_tab',
-smalltalk.method({
-selector: 'tab',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return "\t";}();
-    return self;
-},
-source: unescape('tab%0A%09%20%20%20%20%5E%7B%27return%20%27%27%5Ct%27%27%3B%27%7D%0A')}),
-smalltalk.String.klass);
-
-
-smalltalk.addClass('RegularExpression', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'_compile_',
-smalltalk.method({
-selector: 'compile:',
-category: 'evaluating',
-fn: function (aString) {
-    var self = this;
-    return function () {return self.compile(aString);}();
-    return self;
-},
-source: unescape('compile%3A%20aString%0A%09%5E%7B%27return%20self.compile%28aString%29%3B%27%7D%0A')}),
-smalltalk.RegularExpression);
-
-smalltalk.addMethod(
-'_exec_',
-smalltalk.method({
-selector: 'exec:',
-category: 'evaluating',
-fn: function (aString) {
-    var self = this;
-    return function () {return self.exec(aString);}();
-    return self;
-},
-source: unescape('exec%3A%20aString%0A%09%5E%7B%27return%20self.exec%28aString%29%3B%27%7D%0A')}),
-smalltalk.RegularExpression);
-
-smalltalk.addMethod(
-'_test_',
-smalltalk.method({
-selector: 'test:',
-category: 'evaluating',
-fn: function (aString) {
-    var self = this;
-    return function () {return self.test(aString);}();
-    return self;
-},
-source: unescape('test%3A%20aString%0A%09%5E%7B%27return%20self.test%28aString%29%3B%27%7D%0A')}),
-smalltalk.RegularExpression);
-
-
-smalltalk.addMethod(
-'_fromString_flag_',
-smalltalk.method({
-selector: 'fromString:flag:',
-category: 'instance creation',
-fn: function (aString, anotherString) {
-    var self = this;
-    return function () {return new RegExp(aString, anotherString);}();
-    return self;
-},
-source: unescape('fromString%3A%20aString%20flag%3A%20anotherString%0A%09%20%20%20%20%5E%7B%27return%20new%20RegExp%28aString%2C%20anotherString%29%3B%27%7D%0A')}),
-smalltalk.RegularExpression.klass);
-
-smalltalk.addMethod(
-'_fromString_',
-smalltalk.method({
-selector: 'fromString:',
-category: 'instance creation',
-fn: function (aString) {
-    var self = this;
-    return self._fromString_flag_(aString, "");
-    return self;
-},
-source: unescape('fromString%3A%20aString%0A%09%20%20%20%20%5Eself%20fromString%3A%20aString%20flag%3A%20%27%27%0A')}),
-smalltalk.RegularExpression.klass);
-
-
-smalltalk.addClass('Array', smalltalk.Collection, [], 'Kernel');
-smalltalk.addMethod(
-'_size',
-smalltalk.method({
-selector: 'size',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return self.length;}();
-    return self;
-},
-source: unescape('size%0A%09%5E%7B%27return%20self.length%27%7D%0A')}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-'_at_put_',
-smalltalk.method({
-selector: 'at:put:',
-category: 'accessing',
-fn: function (anIndex, anObject) {
-    var self = this;
-    return function () {return self[anIndex - 1] = anObject;}();
-    return self;
-},
-source: unescape('at%3A%20anIndex%20put%3A%20anObject%0A%09%5E%7B%27return%20self%5BanIndex%20-%201%5D%20%3D%20anObject%27%7D%0A')}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-'_at_ifAbsent_',
-smalltalk.method({
-selector: 'at:ifAbsent:',
-category: 'accessing',
-fn: function (anIndex, aBlock) {
-    var self = this;
-    return function () {var value = self[anIndex - 1];if (value === undefined) {return aBlock();} else {return value;}}();
-    return self;
-},
-source: unescape('at%3A%20anIndex%20ifAbsent%3A%20aBlock%0A%09%5E%7B%27%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%27%7D%0A')}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-'_add_',
-smalltalk.method({
-selector: 'add:',
-category: 'adding',
-fn: function (anObject) {
-    var self = this;
-    return function () {self.push(anObject);return anObject;}();
-    return self;
-},
-source: unescape('add%3A%20anObject%0A%09%5E%7B%27self.push%28anObject%29%3B%20return%20anObject%3B%27%7D%0A')}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-'_addLast_',
-smalltalk.method({
-selector: 'addLast:',
-category: 'adding',
-fn: function (anObject) {
-    var self = this;
-    return self._add_(anObject);
-    return self;
-},
-source: unescape('addLast%3A%20anObject%0A%09%5Eself%20add%3A%20anObject%0A')}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-'_shallowCopy',
-smalltalk.method({
-selector: 'shallowCopy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    var newCollection = nil;
-    newCollection = self._class()._new();
-    self._do_(function (each) {return newCollection._add_(each);});
-    return newCollection;
-    return self;
-},
-source: unescape('shallowCopy%0A%09%7C%20newCollection%20%7C%0A%09newCollection%20%3A%3D%20self%20class%20new.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%20newCollection%20add%3A%20each%5D.%0A%09%5EnewCollection%0A')}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-'_deepCopy',
-smalltalk.method({
-selector: 'deepCopy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    var newCollection = nil;
-    newCollection = self._class()._new();
-    self._do_(function (each) {return newCollection._add_(each._deepCopy());});
-    return newCollection;
-    return self;
-},
-source: unescape('deepCopy%0A%09%7C%20newCollection%20%7C%0A%09newCollection%20%3A%3D%20self%20class%20new.%0A%09self%20do%3A%20%5B%3Aeach%20%7C%20newCollection%20add%3A%20each%20deepCopy%5D.%0A%09%5EnewCollection%0A')}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-'_copyFrom_to_',
-smalltalk.method({
-selector: 'copyFrom:to:',
-category: 'copying',
-fn: function (anIndex, anotherIndex) {
-    var self = this;
-    var array = nil;
-    array = self._class()._new();
-    anIndex._to_do_(anotherIndex, function (each) {return array._add_(self._at_(each));});
-    return array;
-    return self;
-},
-source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09%7C%20array%20%7C%0A%09array%20%3A%3D%20self%20class%20new.%0A%09anIndex%20to%3A%20anotherIndex%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20array%20add%3A%20%28self%20at%3A%20each%29%5D.%0A%09%5Earray%0A')}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-'_join_',
-smalltalk.method({
-selector: 'join:',
-category: 'enumerating',
-fn: function (aString) {
-    var self = this;
-    return function () {return self.join(aString);}();
-    return self;
-},
-source: unescape('join%3A%20aString%0A%09%5E%7B%27return%20self.join%28aString%29%3B%27%7D%0A')}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-'_asJavascript',
-smalltalk.method({
-selector: 'asJavascript',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return unescape("%5B").__comma(self._collect_(function (each) {return each._asJavascript();})._join_(unescape("%2C%20"))).__comma(unescape("%5D"));
-    return self;
-},
-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%0A')}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-'_sort',
-smalltalk.method({
-selector: 'sort',
-category: 'enumerating',
-fn: function () {
-    var self = this;
-    return self._copy()._basicPerform_("sort");
-    return self;
-},
-source: unescape('sort%0A%20%20%20%20%5Eself%20copy%20basicPerform%3A%20%27sort%27%0A')}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-'_sort_',
-smalltalk.method({
-selector: 'sort:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    return self._copy()._basicPerform_withArguments_("sort", smalltalk.Array._with_(aBlock));
-    return self;
-},
-source: unescape('sort%3A%20aBlock%0A%20%20%20%20%5Eself%20copy%20basicPerform%3A%20%27sort%27%20withArguments%3A%20%28Array%20with%3A%20aBlock%29%0A')}),
-smalltalk.Array);
-
-smalltalk.addMethod(
-'_remove_',
-smalltalk.method({
-selector: 'remove:',
-category: 'adding',
-fn: function (anObject) {
-    var self = this;
-    (function () {for (var i = 0; i < self.length; i++) {if (self[i] == anObject) {self.splice(i, 1);break;}}}());
-    return self;
-},
-source: unescape('remove%3A%20anObject%0A%20%20%20%20%7B%27for%28var%20i%3D0%3Bi%3Cself.length%3Bi++%29%20%7B%0A%09if%28self%5Bi%5D%20%3D%3D%20anObject%29%20%7B%0A%09%09self.splice%28i%2C1%29%3B%0A%09%09break%3B%0A%09%7D%0A%20%20%20%20%7D%27%7D%0A')}),
-smalltalk.Array);
-
-
-
-smalltalk.addClass('Error', smalltalk.Object, ['messageText'], 'Kernel');
-smalltalk.addMethod(
-'_messageText',
-smalltalk.method({
-selector: 'messageText',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@messageText'];
-    return self;
-},
-source: unescape('messageText%0A%09%5EmessageText%0A')}),
-smalltalk.Error);
-
-smalltalk.addMethod(
-'_messageText_',
-smalltalk.method({
-selector: 'messageText:',
-category: 'accessing',
-fn: function (aString) {
-    var self = this;
-    self['@messageText'] = aString;
-    return self;
-},
-source: unescape('messageText%3A%20aString%0A%09messageText%20%3A%3D%20aString%0A')}),
-smalltalk.Error);
-
-smalltalk.addMethod(
-'_signal',
-smalltalk.method({
-selector: 'signal',
-category: 'signaling',
-fn: function () {
-    var self = this;
-    return function () {throw {smalltalkError: self};}();
-    return self;
-},
-source: unescape('signal%0A%09%5E%7B%27throw%28%7BsmalltalkError%3A%20self%7D%29%27%7D%0A')}),
-smalltalk.Error);
-
-
-smalltalk.addMethod(
-'_signal_',
-smalltalk.method({
-selector: 'signal:',
-category: 'instance creation',
-fn: function (aString) {
-    var self = this;
-    return function ($rec) {$rec._messageText_(aString);return $rec._signal();}(self._new());
-    return self;
-},
-source: unescape('signal%3A%20aString%0A%09%20%20%20%20%5Eself%20new%0A%09%09messageText%3A%20aString%3B%0A%09%09signal%0A')}),
-smalltalk.Error.klass);
-
-
-smalltalk.addClass('Association', smalltalk.Object, ['key', 'value'], 'Kernel');
-smalltalk.addMethod(
-'__eq',
-smalltalk.method({
-selector: '=',
-category: 'comparing',
-fn: function (anAssociation) {
-    var self = this;
-    return self._class().__eq(anAssociation._class())._and_(function () {return self._key().__eq(anAssociation._key())._and_(function () {return self._value().__eq(anAssociation._value());});});
-    return self;
-},
-source: unescape('%3D%20anAssociation%0A%09%5Eself%20class%20%3D%20anAssociation%20class%20and%3A%20%5B%0A%09%20%20%20%20self%20key%20%3D%20anAssociation%20key%20and%3A%20%5B%0A%09%09self%20value%20%3D%20anAssociation%20value%5D%5D%0A')}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-'_key_',
-smalltalk.method({
-selector: 'key:',
-category: 'accessing',
-fn: function (aKey) {
-    var self = this;
-    self['@key'] = aKey;
-    return self;
-},
-source: unescape('key%3A%20aKey%0A%09key%20%3A%3D%20aKey%0A')}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-'_key',
-smalltalk.method({
-selector: 'key',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@key'];
-    return self;
-},
-source: unescape('key%0A%09%5Ekey%0A')}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-'_value_',
-smalltalk.method({
-selector: 'value:',
-category: 'accessing',
-fn: function (aValue) {
-    var self = this;
-    self['@value'] = aValue;
-    return self;
-},
-source: unescape('value%3A%20aValue%0A%09value%20%3A%3D%20aValue%0A')}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-'_value',
-smalltalk.method({
-selector: 'value',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@value'];
-    return self;
-},
-source: unescape('value%0A%09%5Evalue%0A')}),
-smalltalk.Association);
-
-
-smalltalk.addMethod(
-'_key_value_',
-smalltalk.method({
-selector: 'key:value:',
-category: 'instance creation',
-fn: function (aKey, aValue) {
-    var self = this;
-    return function ($rec) {$rec._key_(aKey);$rec._value_(aValue);return $rec._yourself();}(self._new());
-    return self;
-},
-source: unescape('key%3A%20aKey%20value%3A%20aValue%0A%09%20%20%20%20%5Eself%20new%0A%09%09key%3A%20aKey%3B%0A%09%09value%3A%20aValue%3B%0A%09%09yourself%0A')}),
-smalltalk.Association.klass);
-
-
-smalltalk.addClass('Dictionary', smalltalk.Collection, ['keys'], 'Kernel');
-smalltalk.addMethod(
-'__eq',
-smalltalk.method({
-selector: '=',
-category: 'comparing',
-fn: function (aDictionary) {
-    var self = this;
-    try {
-        self._class().__eq(aDictionary._class())._ifFalse_(function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();});
-        self._associationsDo_(function (assoc) {return aDictionary._at_ifAbsent_(assoc._key(), function () {return function () {throw {name: "stReturn", selector: "__eq", fn: function () {return false;}};}();}).__eq(assoc._value())._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;
-    }
-},
-source: unescape('%3D%20aDictionary%0A%09self%20class%20%3D%20aDictionary%20class%20ifFalse%3A%20%5B%5Efalse%5D.%0A%09self%20associationsDo%3A%20%5B%3Aassoc%20%7C%0A%09%20%20%20%20%28aDictionary%20at%3A%20assoc%20key%20ifAbsent%3A%20%5B%5Efalse%5D%29%20%3D%20assoc%20value%20%0A%09%09ifFalse%3A%20%5B%5Efalse%5D%5D.%0A%09%5Etrue%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_shallowCopy',
-smalltalk.method({
-selector: 'shallowCopy',
-category: 'copying',
-fn: function () {
-    var self = this;
-    var copy = nil;
-    copy = self._class()._new();
-    self._associationsDo_(function (each) {return copy._at_put_(each._key(), each._value());});
-    return copy;
-    return self;
-},
-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%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_initialize',
-smalltalk.method({
-selector: 'initialize',
-category: 'initialization',
-fn: function () {
-    var self = this;
-    self.klass.superclass.fn.prototype._initialize.apply(self, []);
-    self['@keys'] = [];
-    return self;
-},
-source: unescape('initialize%0A%20%20%20%20%09super%20initialize.%0A%20%20%20%20%09keys%20%3A%3D%20%23%28%29%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_size',
-smalltalk.method({
-selector: 'size',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@keys']._size();
-    return self;
-},
-source: unescape('size%0A%09%5Ekeys%20size%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_associations',
-smalltalk.method({
-selector: 'associations',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    var associations = nil;
-    associations = [];
-    self['@keys']._do_(function (each) {return associations._add_(smalltalk.Association._key_value_(each, self._at_(each)));});
-    return associations;
-    return self;
-},
-source: unescape('associations%0A%09%7C%20associations%20%7C%0A%09associations%20%3A%3D%20%23%28%29.%0A%09keys%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%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_keys',
-smalltalk.method({
-selector: 'keys',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@keys']._copy();
-    return self;
-},
-source: unescape('keys%0A%09%5Ekeys%20copy%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_values',
-smalltalk.method({
-selector: 'values',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@keys']._collect_(function (each) {return self._at_(each);});
-    return self;
-},
-source: unescape('values%0A%20%20%20%20%09%5Ekeys%20collect%3A%20%5B%3Aeach%20%7C%20self%20at%3A%20each%5D%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_at_put_',
-smalltalk.method({
-selector: 'at:put:',
-category: 'accessing',
-fn: function (aKey, aValue) {
-    var self = this;
-    self['@keys']._includes_(aKey)._ifFalse_(function () {return self['@keys']._add_(aKey);});
-    return self._basicAt_put_(aKey, aValue);
-    return self;
-},
-source: unescape('at%3A%20aKey%20put%3A%20aValue%0A%09%28keys%20includes%3A%20aKey%29%20ifFalse%3A%20%5Bkeys%20add%3A%20aKey%5D.%0A%09%5Eself%20basicAt%3A%20aKey%20put%3A%20aValue%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_at_ifAbsent_',
-smalltalk.method({
-selector: 'at:ifAbsent:',
-category: 'accessing',
-fn: function (aKey, aBlock) {
-    var self = this;
-    return self._basicAt_(aKey)._ifNil_(aBlock);
-    return self;
-},
-source: unescape('at%3A%20aKey%20ifAbsent%3A%20aBlock%0A%09%5E%28self%20basicAt%3A%20aKey%29%20ifNil%3A%20aBlock%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_at_ifAbsentPut_',
-smalltalk.method({
-selector: 'at:ifAbsentPut:',
-category: 'accessing',
-fn: function (aKey, aBlock) {
-    var self = this;
-    return self._at_ifAbsent_(aKey, function () {return self._at_put_(aKey, aBlock._value());});
-    return self;
-},
-source: unescape('at%3A%20aKey%20ifAbsentPut%3A%20aBlock%0A%20%20%20%20%09%5Eself%20at%3A%20aKey%20ifAbsent%3A%20%5B%0A%20%20%20%20%09%20%20%20%20self%20at%3A%20aKey%20put%3A%20aBlock%20value%5D%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_at_ifPresent_',
-smalltalk.method({
-selector: 'at:ifPresent:',
-category: 'accessing',
-fn: function (aKey, aBlock) {
-    var self = this;
-    return self._basicAt_(aKey)._ifNotNil_(function () {return aBlock._value_(self._at_(aKey));});
-    return self;
-},
-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%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_at_ifPresent_ifAbsent_',
-smalltalk.method({
-selector: 'at:ifPresent:ifAbsent:',
-category: 'accessing',
-fn: function (aKey, aBlock, anotherBlock) {
-    var self = this;
-    return self._basicAt_(aKey)._ifNil_ifNotNil_(anotherBlock, function () {return aBlock._value_(self._at_(aKey));});
-    return self;
-},
-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%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_add_',
-smalltalk.method({
-selector: 'add:',
-category: 'adding/removing',
-fn: function (anAssociation) {
-    var self = this;
-    self._at_put_(anAssociation._key(), anAssociation._value());
-    return self;
-},
-source: unescape('add%3A%20anAssociation%0A%20%20%20%20%09self%20at%3A%20anAssociation%20key%20put%3A%20anAssociation%20value%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_addAll_',
-smalltalk.method({
-selector: 'addAll:',
-category: 'adding/removing',
-fn: function (aDictionary) {
-    var self = this;
-    self.klass.superclass.fn.prototype._addAll_.apply(self, [aDictionary._associations()]);
-    return aDictionary;
-    return self;
-},
-source: unescape('addAll%3A%20aDictionary%0A%20%20%20%20%09super%20addAll%3A%20aDictionary%20associations.%0A%20%20%20%20%09%5EaDictionary%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'__comma',
-smalltalk.method({
-selector: ',',
-category: 'copying',
-fn: function (aCollection) {
-    var self = this;
-    self._shouldNotImplement();
-    return self;
-},
-source: unescape('%2C%20aCollection%0A%09self%20shouldNotImplement%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_copyFrom_to_',
-smalltalk.method({
-selector: 'copyFrom:to:',
-category: 'copying',
-fn: function (anIndex, anotherIndex) {
-    var self = this;
-    self._shouldNotImplement();
-    return self;
-},
-source: unescape('copyFrom%3A%20anIndex%20to%3A%20anotherIndex%0A%09self%20shouldNotImplement%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_associationsDo_',
-smalltalk.method({
-selector: 'associationsDo:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    self._associations()._do_(aBlock);
-    return self;
-},
-source: unescape('associationsDo%3A%20aBlock%0A%20%20%20%20%09self%20associations%20do%3A%20aBlock%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_keysAndValuesDo_',
-smalltalk.method({
-selector: 'keysAndValuesDo:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    self._associationsDo_(function (each) {return aBlock._value_value_(each._key(), each._value());});
-    return self;
-},
-source: unescape('keysAndValuesDo%3A%20aBlock%0A%20%20%20%20%09self%20associationsDo%3A%20%5B%3Aeach%20%7C%0A%20%20%20%20%09%20%20%20%20aBlock%20value%3A%20each%20key%20value%3A%20each%20value%5D%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_do_',
-smalltalk.method({
-selector: 'do:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    self._values()._do_(aBlock);
-    return self;
-},
-source: unescape('do%3A%20aBlock%0A%20%20%20%20%09self%20values%20do%3A%20aBlock%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_select_',
-smalltalk.method({
-selector: 'select:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    var newDict = nil;
-    newDict = self._class()._new();
-    self._keysAndValuesDo_(function (key, value) {return aBlock._value_(value)._ifTrue_(function () {return newDict._at_put_(key, value);});});
-    return newDict;
-    return self;
-},
-source: unescape('select%3A%20aBlock%0A%20%20%20%20%09%7C%20newDict%20%7C%0A%20%20%20%20%09newDict%20%3A%3D%20self%20class%20new.%0A%20%20%20%20%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%20%20%20%20%09%20%20%20%20%28aBlock%20value%3A%20value%29%20ifTrue%3A%20%5BnewDict%20at%3A%20key%20put%3A%20value%5D%5D.%0A%20%20%20%20%09%5EnewDict%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_collect_',
-smalltalk.method({
-selector: 'collect:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    var newDict = nil;
-    newDict = self._class()._new();
-    self._keysAndValuesDo_(function (key, value) {return aBlock._value_(value)._ifTrue_(function () {return newDict._at_put_(key, value);});});
-    return newDict;
-    return self;
-},
-source: unescape('collect%3A%20aBlock%0A%20%20%20%20%09%7C%20newDict%20%7C%0A%20%20%20%20%09newDict%20%3A%3D%20self%20class%20new.%0A%20%20%20%20%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%20%20%20%20%09%20%20%20%20%28aBlock%20value%3A%20value%29%20ifTrue%3A%20%5BnewDict%20at%3A%20key%20put%3A%20value%5D%5D.%0A%20%20%20%20%09%5EnewDict%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_detect_ifNone_',
-smalltalk.method({
-selector: 'detect:ifNone:',
-category: 'enumerating',
-fn: function (aBlock, anotherBlock) {
-    var self = this;
-    return self._values()._detect_ifNone_(aBlock, anotherBlock);
-    return self;
-},
-source: unescape('detect%3A%20aBlock%20ifNone%3A%20anotherBlock%0A%09%5Eself%20values%20detect%3A%20aBlock%20ifNone%3A%20anotherBlock%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_includes_',
-smalltalk.method({
-selector: 'includes:',
-category: 'enumerating',
-fn: function (anObject) {
-    var self = this;
-    return self._values()._includes_(anObject);
-    return self;
-},
-source: unescape('includes%3A%20anObject%0A%09%5Eself%20values%20includes%3A%20anObject%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_remove_',
-smalltalk.method({
-selector: 'remove:',
-category: 'adding/removing',
-fn: function (aKey) {
-    var self = this;
-    self._removeKey_(aKey);
-    return self;
-},
-source: unescape('remove%3A%20aKey%0A%20%20%20%20self%20removeKey%3A%20aKey%0A')}),
-smalltalk.Dictionary);
-
-smalltalk.addMethod(
-'_removeKey_',
-smalltalk.method({
-selector: 'removeKey:',
-category: 'adding/removing',
-fn: function (aKey) {
-    var self = this;
-    self['@keys']._remove_(aKey);
-    return self;
-},
-source: unescape('removeKey%3A%20aKey%0A%20%20%20%20keys%20remove%3A%20aKey%0A')}),
-smalltalk.Dictionary);
-
-
-
-smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'_superclass_subclass_',
-smalltalk.method({
-selector: 'superclass:subclass:',
-category: 'class creation',
-fn: function (aClass, aString) {
-    var self = this;
-    self._superclass_subclass_instanceVariableNames_category_(aClass, aString, "", nil);
-    return self;
-},
-source: unescape('superclass%3A%20aClass%20subclass%3A%20aString%0A%09self%20superclass%3A%20aClass%20subclass%3A%20aString%20instanceVariableNames%3A%20%27%27%20category%3A%20nil%0A')}),
-smalltalk.ClassBuilder);
-
-smalltalk.addMethod(
-'_superclass_subclass_instanceVariableNames_category_',
-smalltalk.method({
-selector: 'superclass:subclass:instanceVariableNames:category:',
-category: 'class creation',
-fn: function (aClass, aString, aString2, aString3) {
-    var self = this;
-    var newClass = nil;
-    newClass = self._addSubclassOf_named_instanceVariableNames_(aClass, aString, self._instanceVariableNamesFor_(aString2));
-    self._setupClass_(newClass);
-    newClass._category_(aString3._ifNil_(function () {return "unclassified";}));
-    return self;
-},
-source: unescape('superclass%3A%20aClass%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%7C%20newClass%20%7C%0A%09newClass%20%3A%3D%20self%20addSubclassOf%3A%20aClass%20named%3A%20aString%20instanceVariableNames%3A%20%28self%20instanceVariableNamesFor%3A%20aString2%29.%0A%09self%20setupClass%3A%20newClass.%0A%09newClass%20category%3A%20%28aString3%20ifNil%3A%20%5B%27unclassified%27%5D%29%0A')}),
-smalltalk.ClassBuilder);
-
-smalltalk.addMethod(
-'_class_instanceVariableNames_',
-smalltalk.method({
-selector: 'class:instanceVariableNames:',
-category: 'class creation',
-fn: function (aClass, aString) {
-    var self = this;
-    aClass._isMetaclass()._ifFalse_(function () {return self._error_(aClass._name().__comma(" is not a metaclass"));});
-    aClass._basicAt_put_("iVarNames", self._instanceVariableNamesFor_(aString));
-    self._setupClass_(aClass);
-    return self;
-},
-source: unescape('class%3A%20aClass%20instanceVariableNames%3A%20aString%0A%09aClass%20isMetaclass%20ifFalse%3A%20%5Bself%20error%3A%20aClass%20name%2C%20%27%20is%20not%20a%20metaclass%27%5D.%0A%09aClass%20basicAt%3A%20%27iVarNames%27%20put%3A%20%28self%20instanceVariableNamesFor%3A%20aString%29.%0A%09self%20setupClass%3A%20aClass%0A')}),
-smalltalk.ClassBuilder);
-
-smalltalk.addMethod(
-'_instanceVariableNamesFor_',
-smalltalk.method({
-selector: 'instanceVariableNamesFor:',
-category: 'private',
-fn: function (aString) {
-    var self = this;
-    return aString._tokenize_(" ")._reject_(function (each) {return each._isEmpty();});
-    return self;
-},
-source: unescape('instanceVariableNamesFor%3A%20aString%0A%09%5E%28aString%20tokenize%3A%20%27%20%27%29%20reject%3A%20%5B%3Aeach%20%7C%20each%20isEmpty%5D%0A')}),
-smalltalk.ClassBuilder);
-
-smalltalk.addMethod(
-'_addSubclassOf_named_instanceVariableNames_',
-smalltalk.method({
-selector: 'addSubclassOf:named:instanceVariableNames:',
-category: 'private',
-fn: function (aClass, aString, aCollection) {
-    var self = this;
-    return function () {smalltalk.addClass(aString, aClass, aCollection);return smalltalk[aString];}();
-    return self;
-},
-source: unescape('addSubclassOf%3A%20aClass%20named%3A%20aString%20instanceVariableNames%3A%20aCollection%0A%09%5E%7B%27smalltalk.addClass%28aString%2C%20aClass%2C%20aCollection%29%3B%0A%09%20%20%20%20return%20smalltalk%5BaString%5D%27%7D%0A')}),
-smalltalk.ClassBuilder);
-
-smalltalk.addMethod(
-'_setupClass_',
-smalltalk.method({
-selector: 'setupClass:',
-category: 'private',
-fn: function (aClass) {
-    var self = this;
-    (function () {smalltalk.init(aClass);}());
-    return self;
-},
-source: unescape('setupClass%3A%20aClass%0A%09%7B%27smalltalk.init%28aClass%29%3B%27%7D%0A')}),
-smalltalk.ClassBuilder);
-
-
-
-smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel');
-smalltalk.addMethod(
-'_initialize',
-smalltalk.method({
-selector: 'initialize',
-category: 'initialization',
-fn: function () {
-    var self = this;
-    self.klass.superclass.fn.prototype._initialize.apply(self, []);
-    self['@chunkParser'] = smalltalk.ChunkParser._new();
-    return self;
-},
-source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.%0A')}),
-smalltalk.ClassCategoryReader);
-
-smalltalk.addMethod(
-'_class_category_',
-smalltalk.method({
-selector: 'class:category:',
-category: 'accessing',
-fn: function (aClass, aString) {
-    var self = this;
-    self['@class'] = aClass;
-    self['@category'] = aString;
-    return self;
-},
-source: unescape('class%3A%20aClass%20category%3A%20aString%0A%09class%20%3A%3D%20aClass.%0A%09category%20%3A%3D%20aString%0A')}),
-smalltalk.ClassCategoryReader);
-
-smalltalk.addMethod(
-'_scanFrom_',
-smalltalk.method({
-selector: 'scanFrom:',
-category: 'fileIn',
-fn: function (aStream) {
-    var self = this;
-    var nextChunk = nil;
-    nextChunk = self['@chunkParser']._emptyChunk().__slash(self['@chunkParser']._chunk())._parse_(aStream);
-    nextChunk._isEmptyChunk()._ifFalse_(function () {self._compileMethod_(nextChunk._contents());return self._scanFrom_(aStream);});
-    return self;
-},
-source: unescape('scanFrom%3A%20aStream%0A%09%7C%20nextChunk%20%7C%0A%09nextChunk%20%3A%3D%20%28chunkParser%20emptyChunk%20/%20chunkParser%20chunk%29%20parse%3A%20aStream.%0A%09nextChunk%20isEmptyChunk%20ifFalse%3A%20%5B%0A%09%20%20%20%20self%20compileMethod%3A%20nextChunk%20contents.%0A%09%20%20%20%20self%20scanFrom%3A%20aStream%5D.%0A')}),
-smalltalk.ClassCategoryReader);
-
-smalltalk.addMethod(
-'_compileMethod_',
-smalltalk.method({
-selector: 'compileMethod:',
-category: 'private',
-fn: function (aString) {
-    var self = this;
-    var method = nil;
-    method = smalltalk.Compiler._new()._load_forClass_(aString, self['@class']);
-    method._category_(self['@category']);
-    self['@class']._addCompiledMethod_(method);
-    return self;
-},
-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%0A')}),
-smalltalk.ClassCategoryReader);
-
-
-
-smalltalk.addClass('Stream', smalltalk.Object, ['collection', 'position', 'streamSize'], 'Kernel');
-smalltalk.addMethod(
-'_collection',
-smalltalk.method({
-selector: 'collection',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@collection'];
-    return self;
-},
-source: unescape('collection%0A%09%5Ecollection%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_setCollection_',
-smalltalk.method({
-selector: 'setCollection:',
-category: 'accessing',
-fn: function (aCollection) {
-    var self = this;
-    self['@collection'] = aCollection;
-    return self;
-},
-source: unescape('setCollection%3A%20aCollection%0A%09collection%20%3A%3D%20aCollection%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_position',
-smalltalk.method({
-selector: 'position',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@position']._ifNil_(function () {return self['@position'] = 0;});
-    return self;
-},
-source: unescape('position%0A%09%5Eposition%20ifNil%3A%20%5Bposition%20%3A%3D%200%5D%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_position_',
-smalltalk.method({
-selector: 'position:',
-category: 'accessing',
-fn: function (anInteger) {
-    var self = this;
-    self['@position'] = anInteger;
-    return self;
-},
-source: unescape('position%3A%20anInteger%0A%09position%20%3A%3D%20anInteger%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_streamSize',
-smalltalk.method({
-selector: 'streamSize',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@streamSize'];
-    return self;
-},
-source: unescape('streamSize%0A%09%5EstreamSize%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_setStreamSize_',
-smalltalk.method({
-selector: 'setStreamSize:',
-category: 'accessing',
-fn: function (anInteger) {
-    var self = this;
-    self['@streamSize'] = anInteger;
-    return self;
-},
-source: unescape('setStreamSize%3A%20anInteger%0A%09streamSize%20%3A%3D%20anInteger%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_contents',
-smalltalk.method({
-selector: 'contents',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._collection()._copyFrom_to_(1, self._streamSize());
-    return self;
-},
-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%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_size',
-smalltalk.method({
-selector: 'size',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self._streamSize();
-    return self;
-},
-source: unescape('size%0A%09%5Eself%20streamSize%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_reset',
-smalltalk.method({
-selector: 'reset',
-category: 'actions',
-fn: function () {
-    var self = this;
-    self._position_(0);
-    return self;
-},
-source: unescape('reset%0A%09self%20position%3A%200%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_close',
-smalltalk.method({
-selector: 'close',
-category: 'actions',
-fn: function () {
-    var self = this;
-    return self;
-},
-source: unescape('close%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_flush',
-smalltalk.method({
-selector: 'flush',
-category: 'actions',
-fn: function () {
-    var self = this;
-    return self;
-},
-source: unescape('flush%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_resetContents',
-smalltalk.method({
-selector: 'resetContents',
-category: 'actions',
-fn: function () {
-    var self = this;
-    self._reset();
-    self._setStreamSize_(0);
-    return self;
-},
-source: unescape('resetContents%0A%09self%20reset.%0A%09self%20setStreamSize%3A%200%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_do_',
-smalltalk.method({
-selector: 'do:',
-category: 'enumerating',
-fn: function (aBlock) {
-    var self = this;
-    (function () {return self._atEnd();}._whileFalse_(function () {return aBlock._value_(self._next());}));
-    return self;
-},
-source: unescape('do%3A%20aBlock%0A%09%5Bself%20atEnd%5D%20whileFalse%3A%20%5BaBlock%20value%3A%20self%20next%5D%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_setToEnd',
-smalltalk.method({
-selector: 'setToEnd',
-category: 'positioning',
-fn: function () {
-    var self = this;
-    self._position_(self._size());
-    return self;
-},
-source: unescape('setToEnd%0A%09self%20position%3A%20self%20size%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_skip_',
-smalltalk.method({
-selector: 'skip:',
-category: 'positioning',
-fn: function (anInteger) {
-    var self = this;
-    self._position_(self._position().__plus(anInteger)._min_max_(self._size(), 0));
-    return self;
-},
-source: unescape('skip%3A%20anInteger%0A%09self%20position%3A%20%28%28self%20position%20+%20anInteger%29%20min%3A%20self%20size%20max%3A%200%29%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_next',
-smalltalk.method({
-selector: 'next',
-category: 'reading',
-fn: function () {
-    var self = this;
-    self._position_(self._position().__plus(1));
-    return self['@collection']._at_(self._position());
-    return self;
-},
-source: unescape('next%0A%09self%20position%3A%20self%20position%20+%201.%20%0A%09%5Ecollection%20at%3A%20self%20position%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_next_',
-smalltalk.method({
-selector: 'next:',
-category: 'reading',
-fn: function (anInteger) {
-    var self = this;
-    var tempCollection = nil;
-    tempCollection = self._collection()._class()._new();
-    anInteger._timesRepeat_(function () {return self._atEnd()._ifFalse_(function () {return tempCollection._add_(self._next());});});
-    return tempCollection;
-    return self;
-},
-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%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_nextPut_',
-smalltalk.method({
-selector: 'nextPut:',
-category: 'writing',
-fn: function (anObject) {
-    var self = this;
-    self._position_(self._position().__plus(1));
-    self._collection()._at_put_(self._position(), anObject);
-    self._setStreamSize_(self._streamSize()._max_(self._position()));
-    return self;
-},
-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%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_nextPutAll_',
-smalltalk.method({
-selector: 'nextPutAll:',
-category: 'writing',
-fn: function (aCollection) {
-    var self = this;
-    aCollection._do_(function (each) {return self._nextPut_(each);});
-    return self;
-},
-source: unescape('nextPutAll%3A%20aCollection%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20self%20nextPut%3A%20each%5D%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_peek',
-smalltalk.method({
-selector: 'peek',
-category: 'reading',
-fn: function () {
-    var self = this;
-    return self._atEnd()._ifFalse_(function () {return self._collection()._at_(self._position().__plus(1));});
-    return self;
-},
-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%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_atEnd',
-smalltalk.method({
-selector: 'atEnd',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return self._position().__eq(self._size());
-    return self;
-},
-source: unescape('atEnd%0A%09%5Eself%20position%20%3D%20self%20size%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_atStart',
-smalltalk.method({
-selector: 'atStart',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return self._position().__eq(0);
-    return self;
-},
-source: unescape('atStart%0A%09%5Eself%20position%20%3D%200%0A')}),
-smalltalk.Stream);
-
-smalltalk.addMethod(
-'_isEmpty',
-smalltalk.method({
-selector: 'isEmpty',
-category: 'testing',
-fn: function () {
-    var self = this;
-    return self._size().__eq(0);
-    return self;
-},
-source: unescape('isEmpty%0A%09%5Eself%20size%20%3D%200%0A')}),
-smalltalk.Stream);
-
-
-smalltalk.addMethod(
-'_on_',
-smalltalk.method({
-selector: 'on:',
-category: 'instance creation',
-fn: function (aCollection) {
-    var self = this;
-    return function ($rec) {$rec._setCollection_(aCollection);$rec._setStreamSize_(aCollection._size());return $rec._yourself();}(self._new());
-    return self;
-},
-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%0A')}),
-smalltalk.Stream.klass);
-
-
-smalltalk.addClass('StringStream', smalltalk.Stream, [], 'Kernel');
-smalltalk.addMethod(
-'_next_',
-smalltalk.method({
-selector: 'next:',
-category: 'reading',
-fn: function (anInteger) {
-    var self = this;
-    var tempCollection = nil;
-    tempCollection = self._collection()._class()._new();
-    anInteger._timesRepeat_(function () {return self._atEnd()._ifFalse_(function () {return tempCollection = tempCollection.__comma(self._next());});});
-    return tempCollection;
-    return self;
-},
-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%0A')}),
-smalltalk.StringStream);
-
-smalltalk.addMethod(
-'_nextPut_',
-smalltalk.method({
-selector: 'nextPut:',
-category: 'writing',
-fn: function (aString) {
-    var self = this;
-    self._nextPutAll_(aString);
-    return self;
-},
-source: unescape('nextPut%3A%20aString%0A%09self%20nextPutAll%3A%20aString%0A')}),
-smalltalk.StringStream);
-
-smalltalk.addMethod(
-'_nextPutAll_',
-smalltalk.method({
-selector: 'nextPutAll:',
-category: 'writing',
-fn: function (aString) {
-    var self = this;
-    self._setCollection_(self._collection()._copyFrom_to_(1, self._position()).__comma(aString).__comma(self._collection()._copyFrom_to_(self._position().__plus(1).__plus(aString._size()), self._collection()._size())));
-    self._position_(self._position().__plus(aString._size()));
-    self._setStreamSize_(self._streamSize()._max_(self._position()));
-    return self;
-},
-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%0A')}),
-smalltalk.StringStream);
-
-
-
-smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel');
-smalltalk.addMethod(
-'_class_',
-smalltalk.method({
-selector: 'class:',
-category: 'accessing',
-fn: function (aClass) {
-    var self = this;
-    self['@class'] = aClass;
-    return self;
-},
-source: unescape('class%3A%20aClass%0A%09class%20%3A%3D%20aClass%0A')}),
-smalltalk.ClassCommentReader);
-
-smalltalk.addMethod(
-'_scanFrom_',
-smalltalk.method({
-selector: 'scanFrom:',
-category: 'fileIn',
-fn: function (aStream) {
-    var self = this;
-    var nextChunk = nil;
-    nextChunk = self['@chunkParser']._emptyChunk().__slash(self['@chunkParser']._chunk())._parse_(aStream);
-    nextChunk._isEmptyChunk()._ifFalse_(function () {return self._setComment_(nextChunk._contents());});
-    return self;
-},
-source: unescape('scanFrom%3A%20aStream%0A%09%7C%20nextChunk%20%7C%0A%09nextChunk%20%3A%3D%20%28chunkParser%20emptyChunk%20/%20chunkParser%20chunk%29%20parse%3A%20aStream.%0A%09nextChunk%20isEmptyChunk%20ifFalse%3A%20%5B%0A%09%20%20%20%20self%20setComment%3A%20nextChunk%20contents%5D.%0A')}),
-smalltalk.ClassCommentReader);
-
-smalltalk.addMethod(
-'_initialize',
-smalltalk.method({
-selector: 'initialize',
-category: 'initialization',
-fn: function () {
-    var self = this;
-    self.klass.superclass.fn.prototype._initialize.apply(self, []);
-    self['@chunkParser'] = smalltalk.ChunkParser._new();
-    return self;
-},
-source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.%0A')}),
-smalltalk.ClassCommentReader);
-
-smalltalk.addMethod(
-'_setComment_',
-smalltalk.method({
-selector: 'setComment:',
-category: 'private',
-fn: function (aString) {
-    var self = this;
-    self['@class']._comment_(aString);
-    return self;
-},
-source: unescape('setComment%3A%20aString%0A%20%20%20%20class%20comment%3A%20aString%0A')}),
-smalltalk.ClassCommentReader);
-
-
-
-smalltalk.addClass('Random', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'_next',
-smalltalk.method({
-selector: 'next',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return function () {return Math.random();}();
-    return self;
-},
-source: unescape('next%0A%20%20%20%20%5E%7B%27return%20Math.random%28%29%27%7D%0A')}),
-smalltalk.Random);
-
-smalltalk.addMethod(
-'_next_',
-smalltalk.method({
-selector: 'next:',
-category: 'accessing',
-fn: function (anInteger) {
-    var self = this;
-    return (1)._to_collect_(anInteger, function (each) {return self._next();});
-    return self;
-},
-source: unescape('next%3A%20anInteger%0A%20%20%20%20%5E1%20to%3A%20anInteger%20collect%3A%20%5B%3Aeach%20%7C%20self%20next%5D%0A')}),
-smalltalk.Random);
-
-
-
-smalltalk.addClass('Point', smalltalk.Object, ['x', 'y'], 'Kernel');
-smalltalk.addMethod(
-'_x',
-smalltalk.method({
-selector: 'x',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@x'];
-    return self;
-},
-source: unescape('x%0A%09%5Ex')}),
-smalltalk.Point);
-
-smalltalk.addMethod(
-'_y',
-smalltalk.method({
-selector: 'y',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@y'];
-    return self;
-},
-source: unescape('y%0A%09%5Ey')}),
-smalltalk.Point);
-
-smalltalk.addMethod(
-'_y_',
-smalltalk.method({
-selector: 'y:',
-category: 'accessing',
-fn: function (aNumber) {
-    var self = this;
-    self['@y'] = aNumber;
-    return self;
-},
-source: unescape('y%3A%20aNumber%0A%09y%20%3A%3D%20aNumber')}),
-smalltalk.Point);
-
-smalltalk.addMethod(
-'_x_',
-smalltalk.method({
-selector: 'x:',
-category: 'accessing',
-fn: function (aNumber) {
-    var self = this;
-    self['@x'] = aNumber;
-    return self;
-},
-source: unescape('x%3A%20aNumber%0A%09x%20%3A%3D%20aNumber')}),
-smalltalk.Point);
-
-smalltalk.addMethod(
-'__star',
-smalltalk.method({
-selector: '*',
-category: 'arithmetic',
-fn: function (aPoint) {
-    var self = this;
-    return smalltalk.Point._x_y_(self._x().__star(aPoint._asPoint()._x()), self._y().__star(aPoint._asPoint()._y()));
-    return self;
-},
-source: unescape('*%20aPoint%0A%09%5EPoint%20x%3A%20self%20x%20*%20aPoint%20asPoint%20x%20y%3A%20self%20y%20*%20aPoint%20asPoint%20y')}),
-smalltalk.Point);
-
-smalltalk.addMethod(
-'__plus',
-smalltalk.method({
-selector: '+',
-category: 'arithmetic',
-fn: function (aPoint) {
-    var self = this;
-    return smalltalk.Point._x_y_(self._x().__plus(aPoint._asPoint()._x()), self._y().__plus(aPoint._asPoint()._y()));
-    return self;
-},
-source: unescape('+%20aPoint%0A%09%5EPoint%20x%3A%20self%20x%20+%20aPoint%20asPoint%20x%20y%3A%20self%20y%20+%20aPoint%20asPoint%20y')}),
-smalltalk.Point);
-
-smalltalk.addMethod(
-'__minus',
-smalltalk.method({
-selector: '-',
-category: 'arithmetic',
-fn: function (aPoint) {
-    var self = this;
-    return smalltalk.Point._x_y_(self._x().__minus(aPoint._asPoint()._x()), self._y().__minus(aPoint._asPoint()._y()));
-    return self;
-},
-source: unescape('-%20aPoint%0A%09%5EPoint%20x%3A%20self%20x%20-%20aPoint%20asPoint%20x%20y%3A%20self%20y%20-%20aPoint%20asPoint%20y')}),
-smalltalk.Point);
-
-smalltalk.addMethod(
-'__slash',
-smalltalk.method({
-selector: '/',
-category: 'arithmetic',
-fn: function (aPoint) {
-    var self = this;
-    return smalltalk.Point._x_y_(self._x().__slash(aPoint._asPoint()._x()), self._y().__slash(aPoint._asPoint()._y()));
-    return self;
-},
-source: unescape('/%20aPoint%0A%09%5EPoint%20x%3A%20self%20x%20/%20aPoint%20asPoint%20x%20y%3A%20self%20y%20/%20aPoint%20asPoint%20y')}),
-smalltalk.Point);
-
-smalltalk.addMethod(
-'_asPoint',
-smalltalk.method({
-selector: 'asPoint',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return self;
-    return self;
-},
-source: unescape('asPoint%0A%09%5Eself')}),
-smalltalk.Point);
-
-
-smalltalk.addMethod(
-'_x_y_',
-smalltalk.method({
-selector: 'x:y:',
-category: 'instance creation',
-fn: function (aNumber, anotherNumber) {
-    var self = this;
-    return function ($rec) {$rec._x_(aNumber);$rec._y_(anotherNumber);return $rec._yourself();}(self._new());
-    return self;
-},
-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')}),
-smalltalk.Point.klass);
-
-
-smalltalk.addClass('JQuery', smalltalk.Object, ['jquery'], 'JQuery');
-smalltalk.addMethod(
-'_removeAttribute_',
-smalltalk.method({
-selector: 'removeAttribute:',
-category: 'attributes',
-fn: function (aString){
-var self=this;
-return self._call_withArgument_("removeAttribute",aString);
-return self;},
-source: unescape('removeAttribute%3A%20aString%0A%20%20%20%20%22Remove%20an%20attribute%20from%20each%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27removeAttribute%27%20withArgument%3A%20aString%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_attr_',
-smalltalk.method({
-selector: 'attr:',
-category: 'attributes',
-fn: function (aString){
-var self=this;
-return self._call_withArgument_("attr",aString);
-return self;},
-source: unescape('attr%3A%20aString%0A%20%20%20%20%22Get%20the%20value%20of%20an%20attribute%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27attr%27%20withArgument%3A%20aString%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_val',
-smalltalk.method({
-selector: 'val',
-category: 'attributes',
-fn: function (){
-var self=this;
-return self._call_("val");
-return self;},
-source: unescape('val%0A%20%20%20%20%22Get%20the%20current%20value%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27val%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_val_',
-smalltalk.method({
-selector: 'val:',
-category: 'attributes',
-fn: function (aString){
-var self=this;
-self._call_withArgument_("val",aString);
-return self;},
-source: unescape('val%3A%20aString%0A%20%20%20%20self%20call%3A%20%27val%27%20withArgument%3A%20aString%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_cssAt_',
-smalltalk.method({
-selector: 'cssAt:',
-category: 'css',
-fn: function (aString){
-var self=this;
-return (function(){return self['@jquery'].css(aString)})();
-return self;},
-source: unescape('cssAt%3A%20aString%0A%20%20%20%20%5E%7B%27return%20self%5B%27%27@jquery%27%27%5D.css%28aString%29%27%7D%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_cssAt_put_',
-smalltalk.method({
-selector: 'cssAt:put:',
-category: 'css',
-fn: function (aString, anotherString){
-var self=this;
-(function(){self['@jquery'].css(aString, anotherString)})();
-return self;},
-source: unescape('cssAt%3A%20aString%20put%3A%20anotherString%0A%20%20%20%20%7B%27self%5B%27%27@jquery%27%27%5D.css%28aString%2C%20anotherString%29%27%7D%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_addClass_',
-smalltalk.method({
-selector: 'addClass:',
-category: 'css',
-fn: function (aString){
-var self=this;
-self._call_withArgument_("addClass",aString);
-return self;},
-source: unescape('addClass%3A%20aString%0A%20%20%20%20%22Adds%20the%20specified%20class%28es%29%20to%20each%20of%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20self%20call%3A%20%27addClass%27%20withArgument%3A%20aString%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_removeClass_',
-smalltalk.method({
-selector: 'removeClass:',
-category: 'css',
-fn: function (aString){
-var self=this;
-self._call_withArgument_("removeClass",aString);
-return self;},
-source: unescape('removeClass%3A%20aString%0A%20%20%20%20%22Remove%20a%20single%20class%2C%20multiple%20classes%2C%20or%20all%20classes%20from%20each%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20self%20call%3A%20%27removeClass%27%20withArgument%3A%20aString%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_toggleClass_',
-smalltalk.method({
-selector: 'toggleClass:',
-category: 'css',
-fn: function (aString){
-var self=this;
-self._call_withArgument_("toggleClass",aString);
-return self;},
-source: unescape('toggleClass%3A%20aString%0A%20%20%20%20%22Add%20or%20remove%20one%20or%20more%20classes%20from%20each%20element%20in%20the%20set%20of%20matched%20elements%2C%20depending%20on%20either%20the%20class%27s%20presence%20or%20the%20value%20of%20the%20switch%20argument.%22%0A%20%20%20%20self%20call%3A%20%27toggleClass%27%20withArgument%3A%20aString%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_height',
-smalltalk.method({
-selector: 'height',
-category: 'css',
-fn: function (){
-var self=this;
-return self._call_("height");
-return self;},
-source: unescape('height%20%0A%20%20%20%20%22Get%20the%20current%20computed%20height%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27height%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_height_',
-smalltalk.method({
-selector: 'height:',
-category: 'css',
-fn: function (anInteger){
-var self=this;
-self._call_withArgument_("height",anInteger);
-return self;},
-source: unescape('height%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27height%27%20withArgument%3A%20anInteger%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_width_',
-smalltalk.method({
-selector: 'width:',
-category: 'css',
-fn: function (anInteger){
-var self=this;
-self._call_withArgument_("width",anInteger);
-return self;},
-source: unescape('width%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27width%27%20withArgument%3A%20anInteger%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_width',
-smalltalk.method({
-selector: 'width',
-category: 'css',
-fn: function (){
-var self=this;
-return self._call_("width");
-return self;},
-source: unescape('width%0A%20%20%20%20%22Get%20the%20current%20computed%20width%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27width%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_innerHeight',
-smalltalk.method({
-selector: 'innerHeight',
-category: 'css',
-fn: function (){
-var self=this;
-return self._call_("innerHeight");
-return self;},
-source: unescape('innerHeight%0A%20%20%20%20%22Get%20the%20current%20computed%20height%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%20but%20not%20border.%22%0A%20%20%20%20%5Eself%20call%3A%20%27innerHeight%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_innerWidth',
-smalltalk.method({
-selector: 'innerWidth',
-category: 'css',
-fn: function (){
-var self=this;
-return self._call_("innerWidth");
-return self;},
-source: unescape('innerWidth%0A%20%20%20%20%22Get%20the%20current%20computed%20width%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%20but%20not%20border.%22%0A%20%20%20%20%5Eself%20call%3A%20%27innerWidth%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_outerHeight',
-smalltalk.method({
-selector: 'outerHeight',
-category: 'css',
-fn: function (){
-var self=this;
-return self._call_("outerHeight");
-return self;},
-source: unescape('outerHeight%0A%20%20%20%20%22Get%20the%20current%20computed%20height%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%2C%20border%2C%20and%20optionally%20margin.%22%0A%20%20%20%20%5Eself%20call%3A%20%27outerHeight%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_outerWidth',
-smalltalk.method({
-selector: 'outerWidth',
-category: 'css',
-fn: function (){
-var self=this;
-return self._call_("outerWidth");
-return self;},
-source: unescape('outerWidth%0A%20%20%20%20%22Get%20the%20current%20computed%20width%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%20and%20border.%22%0A%20%20%20%20%5Eself%20call%3A%20%27outerWidth%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_top',
-smalltalk.method({
-selector: 'top',
-category: 'css',
-fn: function (){
-var self=this;
-return self._call_("position")._basicAt_("top");
-return self;},
-source: unescape('top%0A%20%20%20%20%22Get%20the%20current%20y%20coordinate%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20offset%20parent.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27position%27%29%20basicAt%3A%20%27top%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_left',
-smalltalk.method({
-selector: 'left',
-category: 'css',
-fn: function (){
-var self=this;
-return self._call_("position")._basicAt_("left");
-return self;},
-source: unescape('left%0A%20%20%20%20%22Get%20the%20current%20x%20coordinate%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20offset%20parent.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27position%27%29%20basicAt%3A%20%27left%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_offsetLeft',
-smalltalk.method({
-selector: 'offsetLeft',
-category: 'css',
-fn: function (){
-var self=this;
-return self._call_("offset")._basicAt_("left");
-return self;},
-source: unescape('offsetLeft%0A%20%20%20%20%22Get%20the%20current%20coordinates%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20document.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27offset%27%29%20basicAt%3A%20%27left%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_offsetTop',
-smalltalk.method({
-selector: 'offsetTop',
-category: 'css',
-fn: function (){
-var self=this;
-return self._call_("offset")._basicAt_("top");
-return self;},
-source: unescape('offsetTop%0A%20%20%20%20%22Get%20the%20current%20coordinates%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20document.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27offset%27%29%20basicAt%3A%20%27top%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_scrollLeft',
-smalltalk.method({
-selector: 'scrollLeft',
-category: 'css',
-fn: function (){
-var self=this;
-return self._call_("scrollLeft");
-return self;},
-source: unescape('scrollLeft%0A%20%20%20%20%22Get%20the%20current%20horizontal%20position%20of%20the%20scroll%20bar%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27scrollLeft%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_scrollTop',
-smalltalk.method({
-selector: 'scrollTop',
-category: 'css',
-fn: function (){
-var self=this;
-return self._call_("scrollTop");
-return self;},
-source: unescape('scrollTop%0A%20%20%20%20%22Get%20the%20current%20vertical%20position%20of%20the%20scroll%20bar%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27scrollTop%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_scrollLeft_',
-smalltalk.method({
-selector: 'scrollLeft:',
-category: 'css',
-fn: function (anInteger){
-var self=this;
-self._call_withArgument_("scrollLeft",anInteger);
-return self;},
-source: unescape('scrollLeft%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27scrollLeft%27%20withArgument%3A%20anInteger%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_scrollTop_',
-smalltalk.method({
-selector: 'scrollTop:',
-category: 'css',
-fn: function (anInteger){
-var self=this;
-self._call_withArgument_("scrollTop",anInteger);
-return self;},
-source: unescape('scrollTop%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27scrollTop%27%20withArgument%3A%20anInteger%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_focus',
-smalltalk.method({
-selector: 'focus',
-category: 'events',
-fn: function (){
-var self=this;
-self._call_("focus");
-return self;},
-source: unescape('focus%0A%20%20%20%20self%20call%3A%20%27focus%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_show',
-smalltalk.method({
-selector: 'show',
-category: 'events',
-fn: function (){
-var self=this;
-self._call_("show");
-return self;},
-source: unescape('show%0A%20%20%20%20self%20call%3A%20%27show%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_hide',
-smalltalk.method({
-selector: 'hide',
-category: 'events',
-fn: function (){
-var self=this;
-self._call_("hide");
-return self;},
-source: unescape('hide%0A%20%20%20%20self%20call%3A%20%27hide%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_remove',
-smalltalk.method({
-selector: 'remove',
-category: 'events',
-fn: function (){
-var self=this;
-self._call_("remove");
-return self;},
-source: unescape('remove%0A%20%20%20%20self%20call%3A%20%27remove%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_on_do_',
-smalltalk.method({
-selector: 'on:do:',
-category: 'events',
-fn: function (anEventString, aBlock){
-var self=this;
-(function(){self['@jquery'].bind(anEventString, function(e){aBlock(self)})})();
-return self;},
-source: unescape('on%3A%20anEventString%20do%3A%20aBlock%0A%20%20%20%20%22Attach%20aBlock%20for%20anEventString%20on%20the%20element%22%0A%20%20%20%20%7B%27self%5B%27%27@jquery%27%27%5D.bind%28anEventString%2C%20function%28e%29%7BaBlock%28self%29%7D%29%27%7D%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_removeEvents_',
-smalltalk.method({
-selector: 'removeEvents:',
-category: 'events',
-fn: function (aString){
-var self=this;
-self._call_withArgument_("unbind",aString);
-return self;},
-source: unescape('removeEvents%3A%20aString%0A%20%20%20%20%22Unbind%20all%20handlers%20attached%20to%20the%20event%20aString%22%0A%20%20%20%20self%20call%3A%20%27unbind%27%20withArgument%3A%20aString%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_append_',
-smalltalk.method({
-selector: 'append:',
-category: 'DOM insertion',
-fn: function (anObject){
-var self=this;
-anObject._appendToJQuery_(self);
-return self;},
-source: unescape('append%3A%20anObject%0A%20%20%20%20%22Append%20anObject%20at%20the%20end%20of%20the%20element.%22%0A%20%20%20%20anObject%20appendToJQuery%3A%20self%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_appendElement_',
-smalltalk.method({
-selector: 'appendElement:',
-category: 'DOM insertion',
-fn: function (anElement){
-var self=this;
-self._call_withArgument_("append",anElement);
-return self;},
-source: unescape('appendElement%3A%20anElement%0A%20%20%20%20%22Append%20anElement%20at%20the%20end%20of%20the%20element.%0A%20%20%20%20%20Dont%27t%20call%20this%20method%20directly%2C%20use%20%23append%3A%20instead%22%0A%20%20%20%20self%20call%3A%20%27append%27%20withArgument%3A%20anElement%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_appendToJQuery_',
-smalltalk.method({
-selector: 'appendToJQuery:',
-category: 'DOM insertion',
-fn: function (aJQuery){
-var self=this;
-aJQuery._appendElement_(self['@jquery']);
-return self;},
-source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20aJQuery%20appendElement%3A%20jquery%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_contents_',
-smalltalk.method({
-selector: 'contents:',
-category: 'DOM insertion',
-fn: function (anObject){
-var self=this;
-self._empty();
-self._append_(anObject);
-return self;},
-source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20empty.%0A%20%20%20%20self%20append%3A%20anObject%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_empty',
-smalltalk.method({
-selector: 'empty',
-category: 'DOM insertion',
-fn: function (){
-var self=this;
-self._call_("empty");
-return self;},
-source: unescape('empty%0A%20%20%20%20self%20call%3A%20%27empty%27%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_initializeWithJQueryObject_',
-smalltalk.method({
-selector: 'initializeWithJQueryObject:',
-category: 'initialization',
-fn: function (anObject){
-var self=this;
-self['@jquery']=anObject;
-return self;},
-source: unescape('initializeWithJQueryObject%3A%20anObject%0A%20%20%20%20jquery%20%3A%3D%20anObject%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_call_',
-smalltalk.method({
-selector: 'call:',
-category: 'private',
-fn: function (aString){
-var self=this;
-return (function(){return self['@jquery'][aString]()})();
-return self;},
-source: unescape('call%3A%20aString%0A%20%20%20%20%5E%7B%27return%20self%5B%27%27@jquery%27%27%5D%5BaString%5D%28%29%27%7D%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_call_withArgument_',
-smalltalk.method({
-selector: 'call:withArgument:',
-category: 'private',
-fn: function (aString, anObject){
-var self=this;
-return (function(){return self['@jquery'][aString](anObject)})();
-return self;},
-source: unescape('call%3A%20aString%20withArgument%3A%20anObject%0A%20%20%20%20%5E%7B%27return%20self%5B%27%27@jquery%27%27%5D%5BaString%5D%28anObject%29%27%7D%0A')}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_hasClass_',
-smalltalk.method({
-selector: 'hasClass:',
-category: 'testing',
-fn: function (aString){
-var self=this;
-return self._call_withArgument_("hasClass",aString);
-return self;},
-source: unescape('hasClass%3A%20aString%0A%20%20%20%20%22Determine%20whether%20any%20of%20the%20matched%20elements%20are%20assigned%20the%20given%20class.%22%0A%20%20%20%20%5Eself%20call%3A%20%27hasClass%27%20withArgument%3A%20aString%0A')}),
-smalltalk.JQuery);
-
-
-smalltalk.addMethod(
-'_fromString_',
-smalltalk.method({
-selector: 'fromString:',
-category: 'instance creation',
-fn: function (aString){
-var self=this;
-var newJQuery=nil;
-(function(){newJQuery = jQuery(String(aString))})();
-return self._from_(newJQuery);
-return self;},
-source: unescape('fromString%3A%20aString%0A%20%20%20%20%7C%20newJQuery%20%7C%0A%20%20%20%20%7B%27newJQuery%20%3D%20jQuery%28String%28aString%29%29%27%7D.%0A%20%20%20%20%5Eself%20from%3A%20newJQuery%0A')}),
-smalltalk.JQuery.klass);
-
-smalltalk.addMethod(
-'_from_',
-smalltalk.method({
-selector: 'from:',
-category: 'instance creation',
-fn: function (anObject){
-var self=this;
-return (function($rec){$rec._initializeWithJQueryObject_(anObject);return $rec._yourself();})(self._new());
-return self;},
-source: unescape('from%3A%20anObject%0A%20%20%20%20%5Eself%20new%0A%09initializeWithJQueryObject%3A%20anObject%3B%0A%09yourself%0A')}),
-smalltalk.JQuery.klass);
-
-
-smalltalk.addClass('Ajax', smalltalk.Object, ['settings'], 'JQuery');
-smalltalk.Ajax.comment=unescape('instance%20variable%20names%3A%0A-%20settings%20%20A%20set%20of%20key/value%20pairs%20that%20configure%20the%20Ajax%20request.%20All%20settings%20are%20optional.%0A%0AFull%20list%20of%20settings%20options%20at%20http%3A//api.jquery.com/jQuery.ajax/%0A')
-smalltalk.addMethod(
-'_initialize',
-smalltalk.method({
-selector: 'initialize',
-category: 'initialization',
-fn: function (){
-var self=this;
-self.klass.superclass.fn.prototype['_initialize'].apply(self, []);
-self['@settings']=smalltalk.Dictionary._new();
-return self;},
-source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20settings%20%3A%3D%20Dictionary%20new%0A')}),
-smalltalk.Ajax);
-
-smalltalk.addMethod(
-'_at_',
-smalltalk.method({
-selector: 'at:',
-category: 'accessing',
-fn: function (aKey){
-var self=this;
-return self['@settings']._at_ifAbsent_(aKey,(function(){return nil;}));
-return self;},
-source: unescape('at%3A%20aKey%0A%20%20%20%20%5Esettings%20at%3A%20aKey%20ifAbsent%3A%20%5Bnil%5D%0A')}),
-smalltalk.Ajax);
-
-smalltalk.addMethod(
-'_at_put_',
-smalltalk.method({
-selector: 'at:put:',
-category: 'accessing',
-fn: function (aKey, aValue){
-var self=this;
-self['@settings']._at_put_(aKey,aValue);
-return self;},
-source: unescape('at%3A%20aKey%20put%3A%20aValue%0A%20%20%20%20settings%20at%3A%20aKey%20put%3A%20aValue%0A')}),
-smalltalk.Ajax);
-
-smalltalk.addMethod(
-'_url',
-smalltalk.method({
-selector: 'url',
-category: 'accessing',
-fn: function (){
-var self=this;
-return self._at_("url");
-return self;},
-source: unescape('url%0A%20%20%20%20%5Eself%20at%3A%20%27url%27%0A')}),
-smalltalk.Ajax);
-
-smalltalk.addMethod(
-'_url_',
-smalltalk.method({
-selector: 'url:',
-category: 'accessing',
-fn: function (aString){
-var self=this;
-self._at_put_("url",aString);
-return self;},
-source: unescape('url%3A%20aString%0A%20%20%20%20self%20at%3A%20%27url%27%20put%3A%20aString%0A')}),
-smalltalk.Ajax);
-
-smalltalk.addMethod(
-'_send',
-smalltalk.method({
-selector: 'send',
-category: 'actions',
-fn: function (){
-var self=this;
-(function(){jQuery.ajax(self['@settings'])})();
-return self;},
-source: unescape('send%0A%20%20%20%20%7B%27jQuery.ajax%28self%5B%27%27@settings%27%27%5D%29%27%7D%0A')}),
-smalltalk.Ajax);
-
-
-smalltalk.addMethod(
-'_url_',
-smalltalk.method({
-selector: 'url:',
-category: 'instance creation',
-fn: function (aString){
-var self=this;
-return (function($rec){$rec._url_(aString);return $rec._yourself();})(self._new());
-return self;},
-source: unescape('url%3A%20aString%0A%20%20%20%20%5Eself%20new%0A%09url%3A%20aString%3B%0A%09yourself%0A')}),
-smalltalk.Ajax.klass);
-
-
-
-smalltalk.addClass('CanvasRenderingContext', smalltalk.Object, [], 'Canvas');
-smalltalk.addMethod(
-'_fillStyle_',
-smalltalk.method({
-selector: 'fillStyle:',
-category: 'drawing paths',
-fn: function (aString) {
-    var self = this;
-    (function () {self.fillStyle = String(aString);}());
-    return self;
-},
-source: unescape('fillStyle%3A%20aString%0A%09%7B%27self.fillStyle%20%3D%20String%28aString%29%27%7D')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_beginPath',
-smalltalk.method({
-selector: 'beginPath',
-category: 'drawing paths',
-fn: function () {
-    var self = this;
-    (function () {self.beginPath();}());
-    return self;
-},
-source: unescape('beginPath%0A%09%7B%27self.beginPath%28%29%27%7D')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_closePath',
-smalltalk.method({
-selector: 'closePath',
-category: 'drawing paths',
-fn: function () {
-    var self = this;
-    (function () {self.closePath();}());
-    return self;
-},
-source: unescape('closePath%0A%09%7B%27self.closePath%28%29%27%7D')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_fill',
-smalltalk.method({
-selector: 'fill',
-category: 'drawing paths',
-fn: function () {
-    var self = this;
-    (function () {self.fill();}());
-    return self;
-},
-source: unescape('fill%0A%09%7B%27self.fill%28%29%27%7D')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_stroke',
-smalltalk.method({
-selector: 'stroke',
-category: 'drawing paths',
-fn: function () {
-    var self = this;
-    (function () {self.stroke();}());
-    return self;
-},
-source: unescape('stroke%0A%09%7B%27self.stroke%28%29%27%7D')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_moveTo_',
-smalltalk.method({
-selector: 'moveTo:',
-category: 'drawing paths',
-fn: function (aPoint) {
-    var self = this;
-    (function () {self.moveTo(aPoint._x(), aPoint._y());}());
-    return self;
-},
-source: unescape('moveTo%3A%20aPoint%0A%09%7B%27self.moveTo%28aPoint._x%28%29%2C%20aPoint._y%28%29%29%27%7D')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_lineTo_',
-smalltalk.method({
-selector: 'lineTo:',
-category: 'drawing paths',
-fn: function (aPoint) {
-    var self = this;
-    (function () {self.lineTo(aPoint._x(), aPoint._y());}());
-    return self;
-},
-source: unescape('lineTo%3A%20aPoint%0A%09%7B%27self.lineTo%28aPoint._x%28%29%2C%20aPoint._y%28%29%29%27%7D')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_arcTo_radius_startAngle_endAngle_anticlockwise_',
-smalltalk.method({
-selector: 'arcTo:radius:startAngle:endAngle:anticlockwise:',
-category: 'drawing arcs',
-fn: function (aPoint, aNumber, aNumber2, aNumber3, aBoolean) {
-    var self = this;
-    (function () {self.arc(aPoint._x(), aPoint._y(), aNumber, aNumber2, aNumber3, aBoolean);}());
-    return self;
-},
-source: unescape('arcTo%3A%20aPoint%20radius%3A%20aNumber%20startAngle%3A%20aNumber2%20endAngle%3A%20aNumber3%20anticlockwise%3A%20aBoolean%0A%09%7B%27self.arc%28aPoint._x%28%29%2C%20aPoint._y%28%29%2C%20aNumber%2C%20aNumber2%2C%20aNumber3%2C%20aBoolean%29%27%7D%20')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_arcTo_radius_',
-smalltalk.method({
-selector: 'arcTo:radius:',
-category: 'drawing arcs',
-fn: function (aPoint, aNumber) {
-    var self = this;
-    self._arcTo_radius_startAngle_endAngle_anticlockwise_(aPoint, aNumber, 0, smalltalk.Number._pi().__star(2), false);
-    return self;
-},
-source: unescape('arcTo%3A%20aPoint%20radius%3A%20aNumber%0A%09self%20arcTo%3A%20aPoint%20radius%3A%20aNumber%20startAngle%3A%200%20endAngle%3A%20Number%20pi%20*%202%20anticlockwise%3A%20false')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_fillRectFrom_to_',
-smalltalk.method({
-selector: 'fillRectFrom:to:',
-category: 'drawing rectangles',
-fn: function (aPoint, anotherPoint) {
-    var self = this;
-    (function () {self.fillRect(aPoint._x(), aPoint._y(), anotherPoint._x(), anotherPoint._y());}());
-    return self;
-},
-source: unescape('fillRectFrom%3A%20aPoint%20to%3A%20anotherPoint%0A%09%7B%27self.fillRect%28aPoint._x%28%29%2C%20aPoint._y%28%29%2C%20anotherPoint._x%28%29%2C%20anotherPoint._y%28%29%29%27%7D')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_strokeRectFrom_to_',
-smalltalk.method({
-selector: 'strokeRectFrom:to:',
-category: 'drawing rectangles',
-fn: function (aPoint, anotherPoint) {
-    var self = this;
-    (function () {self.strokeRect(aPoint._x(), aPoint._y(), anotherPoint._x(), anotherPoint._y());}());
-    return self;
-},
-source: unescape('strokeRectFrom%3A%20aPoint%20to%3A%20anotherPoint%0A%09%7B%27self.strokeRect%28aPoint._x%28%29%2C%20aPoint._y%28%29%2C%20anotherPoint._x%28%29%2C%20anotherPoint._y%28%29%29%27%7D')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_clearRectFrom_to_',
-smalltalk.method({
-selector: 'clearRectFrom:to:',
-category: 'drawing rectangles',
-fn: function (aPoint, anotherPoint) {
-    var self = this;
-    (function () {self.fillRect(aPoint._x(), aPoint._y(), anotherPoint._x(), anotherPoint._y());}());
-    return self;
-},
-source: unescape('clearRectFrom%3A%20aPoint%20to%3A%20anotherPoint%0A%09%7B%27self.fillRect%28aPoint._x%28%29%2C%20aPoint._y%28%29%2C%20anotherPoint._x%28%29%2C%20anotherPoint._y%28%29%29%27%7D')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_strokeStyle_',
-smalltalk.method({
-selector: 'strokeStyle:',
-category: 'drawing paths',
-fn: function (aString) {
-    var self = this;
-    (function () {self.strokeStyle = String(aString);}());
-    return self;
-},
-source: unescape('strokeStyle%3A%20aString%0A%09%7B%27self.strokeStyle%20%3D%20String%28aString%29%27%7D')}),
-smalltalk.CanvasRenderingContext);
-
-smalltalk.addMethod(
-'_lineWidth_',
-smalltalk.method({
-selector: 'lineWidth:',
-category: 'drawing paths',
-fn: function (aNumber) {
-    var self = this;
-    (function () {self.lineWidth = aNumber;}());
-    return self;
-},
-source: unescape('lineWidth%3A%20aNumber%0A%09%7B%27self.lineWidth%20%3D%20aNumber%27%7D')}),
-smalltalk.CanvasRenderingContext);
-
-
-smalltalk.addMethod(
-'_tagBrush_',
-smalltalk.method({
-selector: 'tagBrush:',
-category: 'instance creation',
-fn: function (aTagBrush) {
-    var self = this;
-    return function () {return aTagBrush._element().getContext("2d");}();
-    return self;
-},
-source: unescape('tagBrush%3A%20aTagBrush%0A%09%5E%7B%27return%20aTagBrush._element%28%29.getContext%28%27%272d%27%27%29%27%7D')}),
-smalltalk.CanvasRenderingContext.klass);
-
-
-smalltalk.addClass('HTMLCanvas', smalltalk.Object, ['root'], 'Canvas');
-smalltalk.addMethod(
-'_root_',
-smalltalk.method({
-selector: 'root:',
-category: 'accessing',
-fn: function (aTagBrush) {
-    var self = this;
-    self['@root'] = aTagBrush;
-    return self;
-},
-source: unescape('root%3A%20aTagBrush%0A%20%20%20%20root%20%3A%3D%20aTagBrush%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_root',
-smalltalk.method({
-selector: 'root',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@root'];
-    return self;
-},
-source: unescape('root%0A%20%20%20%20%5Eroot%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_initialize',
-smalltalk.method({
-selector: 'initialize',
-category: 'initialization',
-fn: function () {
-    var self = this;
-    self.klass.superclass.fn.prototype._initialize.apply(self, []);
-    self['@root'] = smalltalk.TagBrush._fromString_canvas_("div", self);
-    return self;
-},
-source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20root%20%3A%3D%20TagBrush%20fromString%3A%20%27div%27%20canvas%3A%20self%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_with_',
-smalltalk.method({
-selector: 'with:',
-category: 'adding',
-fn: function (anObject) {
-    var self = this;
-    return self._root()._with_(anObject);
-    return self;
-},
-source: unescape('with%3A%20anObject%0A%20%20%20%20%5Eself%20root%20with%3A%20anObject%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_newTag_',
-smalltalk.method({
-selector: 'newTag:',
-category: 'tags',
-fn: function (aString) {
-    var self = this;
-    return smalltalk.TagBrush._fromString_canvas_(aString, self);
-    return self;
-},
-source: unescape('newTag%3A%20aString%0A%20%20%20%20%5ETagBrush%20fromString%3A%20aString%20canvas%3A%20self%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_tag_',
-smalltalk.method({
-selector: 'tag:',
-category: 'tags',
-fn: function (aString) {
-    var self = this;
-    return self['@root']._addBrush_(self._newTag_(aString));
-    return self;
-},
-source: unescape('tag%3A%20aString%0A%20%20%20%20%5Eroot%20addBrush%3A%20%28self%20newTag%3A%20aString%29%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_h1',
-smalltalk.method({
-selector: 'h1',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("h1");
-    return self;
-},
-source: unescape('h1%0A%20%20%20%20%5Eself%20tag%3A%20%27h1%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_h2',
-smalltalk.method({
-selector: 'h2',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("h2");
-    return self;
-},
-source: unescape('h2%0A%20%20%20%20%5Eself%20tag%3A%20%27h2%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_h3',
-smalltalk.method({
-selector: 'h3',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("h3");
-    return self;
-},
-source: unescape('h3%0A%20%20%20%20%5Eself%20tag%3A%20%27h3%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_h4',
-smalltalk.method({
-selector: 'h4',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("h4");
-    return self;
-},
-source: unescape('h4%0A%20%20%20%20%5Eself%20tag%3A%20%27h4%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_h5',
-smalltalk.method({
-selector: 'h5',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("h5");
-    return self;
-},
-source: unescape('h5%0A%20%20%20%20%5Eself%20tag%3A%20%27h5%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_h6',
-smalltalk.method({
-selector: 'h6',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("h6");
-    return self;
-},
-source: unescape('h6%0A%20%20%20%20%5Eself%20tag%3A%20%27h6%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_p',
-smalltalk.method({
-selector: 'p',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("p");
-    return self;
-},
-source: unescape('p%0A%20%20%20%20%5Eself%20tag%3A%20%27p%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_div',
-smalltalk.method({
-selector: 'div',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("div");
-    return self;
-},
-source: unescape('div%0A%20%20%20%20%5Eself%20tag%3A%20%27div%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_span',
-smalltalk.method({
-selector: 'span',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("span");
-    return self;
-},
-source: unescape('span%0A%20%20%20%20%5Eself%20tag%3A%20%27span%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_img',
-smalltalk.method({
-selector: 'img',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("img");
-    return self;
-},
-source: unescape('img%0A%20%20%20%20%5Eself%20tag%3A%20%27img%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_ul',
-smalltalk.method({
-selector: 'ul',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("ul");
-    return self;
-},
-source: unescape('ul%0A%20%20%20%20%5Eself%20tag%3A%20%27ul%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_ol',
-smalltalk.method({
-selector: 'ol',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("ol");
-    return self;
-},
-source: unescape('ol%0A%20%20%20%20%5Eself%20tag%3A%20%27ol%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_li',
-smalltalk.method({
-selector: 'li',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("li");
-    return self;
-},
-source: unescape('li%0A%20%20%20%20%5Eself%20tag%3A%20%27li%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_table',
-smalltalk.method({
-selector: 'table',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("table");
-    return self;
-},
-source: unescape('table%0A%20%20%20%20%5Eself%20tag%3A%20%27table%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_tr',
-smalltalk.method({
-selector: 'tr',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("tr");
-    return self;
-},
-source: unescape('tr%0A%20%20%20%20%5Eself%20tag%3A%20%27tr%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_td',
-smalltalk.method({
-selector: 'td',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("td");
-    return self;
-},
-source: unescape('td%20%0A%20%20%20%20%5Eself%20tag%3A%20%27td%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_th',
-smalltalk.method({
-selector: 'th',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("th");
-    return self;
-},
-source: unescape('th%0A%20%20%20%20%5Eself%20tag%3A%20%27th%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_form',
-smalltalk.method({
-selector: 'form',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("form");
-    return self;
-},
-source: unescape('form%0A%20%20%20%20%5Eself%20tag%3A%20%27form%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_input',
-smalltalk.method({
-selector: 'input',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("input");
-    return self;
-},
-source: unescape('input%0A%20%20%20%20%5Eself%20tag%3A%20%27input%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_button',
-smalltalk.method({
-selector: 'button',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("button");
-    return self;
-},
-source: unescape('button%0A%20%20%20%20%5Eself%20tag%3A%20%27button%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_select',
-smalltalk.method({
-selector: 'select',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("select");
-    return self;
-},
-source: unescape('select%0A%20%20%20%20%5Eself%20tag%3A%20%27select%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_option',
-smalltalk.method({
-selector: 'option',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("option");
-    return self;
-},
-source: unescape('option%0A%20%20%20%20%5Eself%20tag%3A%20%27option%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_textarea',
-smalltalk.method({
-selector: 'textarea',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("textarea");
-    return self;
-},
-source: unescape('textarea%0A%20%20%20%20%5Eself%20tag%3A%20%27textarea%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_a',
-smalltalk.method({
-selector: 'a',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("a");
-    return self;
-},
-source: unescape('a%0A%20%20%20%20%5Eself%20tag%3A%20%27a%27%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_appendToJQuery_',
-smalltalk.method({
-selector: 'appendToJQuery:',
-category: '*JQuery',
-fn: function (aJQuery) {
-    var self = this;
-    aJQuery._appendElement_(self['@root']._element());
-    return self;
-},
-source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20aJQuery%20appendElement%3A%20root%20element%0A')}),
-smalltalk.HTMLCanvas);
-
-smalltalk.addMethod(
-'_canvas',
-smalltalk.method({
-selector: 'canvas',
-category: 'tags',
-fn: function () {
-    var self = this;
-    return self._tag_("canvas");
-    return self;
-},
-source: unescape('canvas%0A%09%5Eself%20tag%3A%20%27canvas%27%0A')}),
-smalltalk.HTMLCanvas);
-
-
-
-smalltalk.addClass('TagBrush', smalltalk.Object, ['canvas', 'element'], 'Canvas');
-smalltalk.addMethod(
-'_contents_',
-smalltalk.method({
-selector: 'contents:',
-category: 'adding',
-fn: function (anObject) {
-    var self = this;
-    self._asJQuery()._empty();
-    self._append_(anObject);
-    return self;
-},
-source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20asJQuery%20empty.%0A%20%20%20%20self%20append%3A%20anObject%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_addBrush_',
-smalltalk.method({
-selector: 'addBrush:',
-category: 'adding',
-fn: function (aTagBrush) {
-    var self = this;
-    self._appendChild_(aTagBrush._element());
-    return aTagBrush;
-    return self;
-},
-source: unescape('addBrush%3A%20aTagBrush%0A%20%20%20%20self%20appendChild%3A%20aTagBrush%20element.%0A%20%20%20%20%5EaTagBrush%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_with_',
-smalltalk.method({
-selector: 'with:',
-category: 'adding',
-fn: function (anObject) {
-    var self = this;
-    self._append_(anObject);
-    return self;
-},
-source: unescape('with%3A%20anObject%0A%20%20%20%20self%20append%3A%20anObject%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_append_',
-smalltalk.method({
-selector: 'append:',
-category: 'adding',
-fn: function (anObject) {
-    var self = this;
-    anObject._appendToBrush_(self);
-    return self;
-},
-source: unescape('append%3A%20anObject%0A%20%20%20%20anObject%20appendToBrush%3A%20self%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_appendToBrush_',
-smalltalk.method({
-selector: 'appendToBrush:',
-category: 'adding',
-fn: function (aTagBrush) {
-    var self = this;
-    aTagBrush._addBrush_(self);
-    return self;
-},
-source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20addBrush%3A%20self%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_appendBlock_',
-smalltalk.method({
-selector: 'appendBlock:',
-category: 'adding',
-fn: function (aBlock) {
-    var self = this;
-    var root = nil;
-    root = canvas._root();
-    canvas._root_(self);
-    aBlock._value_(canvas);
-    canvas._root_(root);
-    return self;
-},
-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%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_appendChild_',
-smalltalk.method({
-selector: 'appendChild:',
-category: 'adding',
-fn: function (anElement) {
-    var self = this;
-    (function () {self['@element'].appendChild(anElement);}());
-    return self;
-},
-source: unescape('appendChild%3A%20anElement%0A%20%20%20%20%7B%27self%5B%27%27@element%27%27%5D.appendChild%28anElement%29%27%7D%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_appendString_',
-smalltalk.method({
-selector: 'appendString:',
-category: 'adding',
-fn: function (aString) {
-    var self = this;
-    self._appendChild_(self._createTextNodeFor_(aString));
-    return self;
-},
-source: unescape('appendString%3A%20aString%0A%20%20%20%20self%20appendChild%3A%20%28self%20createTextNodeFor%3A%20aString%29%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_at_put_',
-smalltalk.method({
-selector: 'at:put:',
-category: 'attributes',
-fn: function (aString, aValue) {
-    var self = this;
-    (function () {self['@element'].setAttribute(aString, aValue);}());
-    return self;
-},
-source: unescape('at%3A%20aString%20put%3A%20aValue%0A%20%20%20%20%7B%27self%5B%27%27@element%27%27%5D.setAttribute%28aString%2C%20aValue%29%27%7D%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_removeAt_',
-smalltalk.method({
-selector: 'removeAt:',
-category: 'attributes',
-fn: function (aString) {
-    var self = this;
-    (function () {self['@element'].removeAttribute(aString);}());
-    return self;
-},
-source: unescape('removeAt%3A%20aString%0A%20%20%20%20%7B%27self%5B%27%27@element%27%27%5D.removeAttribute%28aString%29%27%7D%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_class_',
-smalltalk.method({
-selector: 'class:',
-category: 'attributes',
-fn: function (aString) {
-    var self = this;
-    self._at_put_("class", aString);
-    return self;
-},
-source: unescape('class%3A%20aString%0A%20%20%20%20self%20at%3A%20%27class%27%20put%3A%20aString%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_id_',
-smalltalk.method({
-selector: 'id:',
-category: 'attributes',
-fn: function (aString) {
-    var self = this;
-    self._at_put_("id", aString);
-    return self;
-},
-source: unescape('id%3A%20aString%0A%20%20%20%20self%20at%3A%20%27id%27%20put%3A%20aString%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_src_',
-smalltalk.method({
-selector: 'src:',
-category: 'attributes',
-fn: function (aString) {
-    var self = this;
-    self._at_put_("src", aString);
-    return self;
-},
-source: unescape('src%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27src%27%20put%3A%20aString%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_href_',
-smalltalk.method({
-selector: 'href:',
-category: 'attributes',
-fn: function (aString) {
-    var self = this;
-    self._at_put_("href", aString);
-    return self;
-},
-source: unescape('href%3A%20aString%0A%20%20%20%20self%20at%3A%20%27href%27%20put%3A%20aString%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_title_',
-smalltalk.method({
-selector: 'title:',
-category: 'attributes',
-fn: function (aString) {
-    var self = this;
-    self._at_put_("title", aString);
-    return self;
-},
-source: unescape('title%3A%20aString%0A%20%20%20%20self%20at%3A%20%27title%27%20put%3A%20aString%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_style_',
-smalltalk.method({
-selector: 'style:',
-category: 'attributes',
-fn: function (aString) {
-    var self = this;
-    self._at_put_("style", aString);
-    return self;
-},
-source: unescape('style%3A%20aString%0A%20%20%20%20self%20at%3A%20%27style%27%20put%3A%20aString%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_initializeFromString_canvas_',
-smalltalk.method({
-selector: 'initializeFromString:canvas:',
-category: 'initialization',
-fn: function (aString, aCanvas) {
-    var self = this;
-    self['@element'] = self._createElementFor_(aString);
-    canvas = aCanvas;
-    return self;
-},
-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%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_element',
-smalltalk.method({
-selector: 'element',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@element'];
-    return self;
-},
-source: unescape('element%0A%20%20%20%20%5Eelement%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_asJQuery',
-smalltalk.method({
-selector: 'asJQuery',
-category: 'converting',
-fn: function () {
-    var self = this;
-    return function () {return smalltalk.JQuery._from_(jQuery(self['@element']));}();
-    return self;
-},
-source: unescape('asJQuery%0A%20%20%20%20%5E%7B%27return%20smalltalk.JQuery._from_%28jQuery%28self%5B%27%27@element%27%27%5D%29%29%27%7D%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_asJQueryDo_',
-smalltalk.method({
-selector: 'asJQueryDo:',
-category: 'converting',
-fn: function (aBlock) {
-    var self = this;
-    aBlock._value_(self._asJQuery());
-    return self;
-},
-source: unescape('asJQueryDo%3A%20aBlock%0A%20%20%20%20aBlock%20value%3A%20self%20asJQuery%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_onKeyDown_',
-smalltalk.method({
-selector: 'onKeyDown:',
-category: 'events',
-fn: function (aBlock) {
-    var self = this;
-    self._asJQuery()._on_do_("keydown", aBlock);
-    return self;
-},
-source: unescape('onKeyDown%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27keydown%27%20do%3A%20aBlock%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_onKeyPress_',
-smalltalk.method({
-selector: 'onKeyPress:',
-category: 'events',
-fn: function (aBlock) {
-    var self = this;
-    self._asJQuery()._on_do_("keypress", aBlock);
-    return self;
-},
-source: unescape('onKeyPress%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27keypress%27%20do%3A%20aBlock%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_onKeyUp_',
-smalltalk.method({
-selector: 'onKeyUp:',
-category: 'events',
-fn: function (aBlock) {
-    var self = this;
-    self._asJQuery()._on_do_("keyup", aBlock);
-    return self;
-},
-source: unescape('onKeyUp%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27keyup%27%20do%3A%20aBlock%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_onFocus_',
-smalltalk.method({
-selector: 'onFocus:',
-category: 'events',
-fn: function (aBlock) {
-    var self = this;
-    self._asJQuery()._on_do_("focus", aBlock);
-    return self;
-},
-source: unescape('onFocus%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27focus%27%20do%3A%20aBlock%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_onBlur_',
-smalltalk.method({
-selector: 'onBlur:',
-category: 'events',
-fn: function (aBlock) {
-    var self = this;
-    self._asJQuery()._on_do_("blur", aBlock);
-    return self;
-},
-source: unescape('onBlur%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27blur%27%20do%3A%20aBlock%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_onChange_',
-smalltalk.method({
-selector: 'onChange:',
-category: 'events',
-fn: function (aBlock) {
-    var self = this;
-    self._asJQuery()._on_do_("change", aBlock);
-    return self;
-},
-source: unescape('onChange%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27change%27%20do%3A%20aBlock%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_onClick_',
-smalltalk.method({
-selector: 'onClick:',
-category: 'events',
-fn: function (aBlock) {
-    var self = this;
-    self._asJQuery()._on_do_("click", aBlock);
-    return self;
-},
-source: unescape('onClick%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27click%27%20do%3A%20aBlock%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_createElementFor_',
-smalltalk.method({
-selector: 'createElementFor:',
-category: 'private',
-fn: function (aString) {
-    var self = this;
-    return function () {return document.createElement(String(aString));}();
-    return self;
-},
-source: unescape('createElementFor%3A%20aString%0A%20%20%20%20%5E%7B%27return%20document.createElement%28String%28aString%29%29%27%7D%0A')}),
-smalltalk.TagBrush);
-
-smalltalk.addMethod(
-'_createTextNodeFor_',
-smalltalk.method({
-selector: 'createTextNodeFor:',
-category: 'private',
-fn: function (aString) {
-    var self = this;
-    return function () {return document.createTextNode(String(aString));}();
-    return self;
-},
-source: unescape('createTextNodeFor%3A%20aString%0A%20%20%20%20%5E%7B%27return%20document.createTextNode%28String%28aString%29%29%27%7D%0A')}),
-smalltalk.TagBrush);
-
-
-smalltalk.addMethod(
-'_fromString_canvas_',
-smalltalk.method({
-selector: 'fromString:canvas:',
-category: 'instance creation',
-fn: function (aString, aCanvas) {
-    var self = this;
-    return function ($rec) {$rec._initializeFromString_canvas_(aString, aCanvas);return $rec._yourself();}(self._new());
-    return self;
-},
-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%0A')}),
-smalltalk.TagBrush.klass);
-
-
-smalltalk.addClass('Widget', smalltalk.Object, ['root'], 'Canvas');
-smalltalk.addMethod(
-'_root',
-smalltalk.method({
-selector: 'root',
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@root'];
-    return self;
-},
-source: unescape('root%0A%20%20%20%20%5Eroot%0A')}),
-smalltalk.Widget);
-
-smalltalk.addMethod(
-'_appendToBrush_',
-smalltalk.method({
-selector: 'appendToBrush:',
-category: 'adding',
-fn: function (aTagBrush) {
-    var self = this;
-    self._appendToJQuery_(aTagBrush._asJQuery());
-    return self;
-},
-source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20self%20appendToJQuery%3A%20aTagBrush%20asJQuery%0A')}),
-smalltalk.Widget);
-
-smalltalk.addMethod(
-'_appendToJQuery_',
-smalltalk.method({
-selector: 'appendToJQuery:',
-category: 'adding',
-fn: function (aJQuery) {
-    var self = this;
-    self._render();
-    aJQuery._append_(self._root()._asJQuery());
-    return self;
-},
-source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20self%20render.%0A%20%20%20%20aJQuery%20append%3A%20self%20root%20asJQuery%0A')}),
-smalltalk.Widget);
-
-smalltalk.addMethod(
-'_alert_',
-smalltalk.method({
-selector: 'alert:',
-category: 'actions',
-fn: function (aString) {
-    var self = this;
-    (function () {alert(aString);}());
-    return self;
-},
-source: unescape('alert%3A%20aString%0A%20%20%20%20%7B%27alert%28aString%29%27%7D%0A')}),
-smalltalk.Widget);
-
-smalltalk.addMethod(
-'_confirm_',
-smalltalk.method({
-selector: 'confirm:',
-category: 'actions',
-fn: function (aString) {
-    var self = this;
-    return function () {return window.confirm(aString);}();
-    return self;
-},
-source: unescape('confirm%3A%20aString%0A%20%20%20%20%5E%7B%27return%20window.confirm%28aString%29%27%7D%0A')}),
-smalltalk.Widget);
-
-smalltalk.addMethod(
-'_prompt_',
-smalltalk.method({
-selector: 'prompt:',
-category: 'actions',
-fn: function (aString) {
-    var self = this;
-    return self._prompt_default_(aString, "");
-    return self;
-},
-source: unescape('prompt%3A%20aString%0A%20%20%20%20%5Eself%20prompt%3A%20aString%20default%3A%20%27%27%0A')}),
-smalltalk.Widget);
-
-smalltalk.addMethod(
-'_prompt_default_',
-smalltalk.method({
-selector: 'prompt:default:',
-category: 'actions',
-fn: function (aString, anotherString) {
-    var self = this;
-    return function () {return window.prompt(aString, anotherString);}();
-    return self;
-},
-source: unescape('prompt%3A%20aString%20default%3A%20anotherString%0A%20%20%20%20%5E%7B%27return%20window.prompt%28aString%2C%20anotherString%29%27%7D%0A')}),
-smalltalk.Widget);
-
-smalltalk.addMethod(
-'_update',
-smalltalk.method({
-selector: 'update',
-category: 'actions',
-fn: function () {
-    var self = this;
-    var canvas = nil;
-    canvas = smalltalk.HTMLCanvas._new();
-    canvas._root_(self._root());
-    self._root()._asJQuery()._empty();
-    self._renderOn_(canvas);
-    return self;
-},
-source: unescape('update%0A%20%20%20%20%7C%20canvas%20%7C%0A%20%20%20%20canvas%20%3A%3D%20HTMLCanvas%20new.%0A%20%20%20%20canvas%20root%3A%20self%20root.%0A%20%20%20%20self%20root%20asJQuery%20empty.%0A%20%20%20%20self%20renderOn%3A%20canvas%0A')}),
-smalltalk.Widget);
-
-smalltalk.addMethod(
-'_render',
-smalltalk.method({
-selector: 'render',
-category: 'rendering',
-fn: function () {
-    var self = this;
-    var canvas = nil;
-    canvas = smalltalk.HTMLCanvas._new();
-    self['@root'] = canvas._root();
-    self._renderOn_(canvas);
-    return self;
-},
-source: unescape('render%0A%20%20%20%20%7C%20canvas%20%7C%0A%20%20%20%20canvas%20%3A%3D%20HTMLCanvas%20new.%0A%20%20%20%20root%20%3A%3D%20canvas%20root.%0A%20%20%20%20self%20renderOn%3A%20canvas%0A')}),
-smalltalk.Widget);
-
-smalltalk.addMethod(
-'_renderOn_',
-smalltalk.method({
-selector: 'renderOn:',
-category: 'rendering',
-fn: function (html) {
-    var self = this;
-    return self;
-},
-source: unescape('renderOn%3A%20html%0A%20%20%20%20self%0A')}),
-smalltalk.Widget);
-
-
-
-smalltalk.addClass('CanvasBrush', smalltalk.TagBrush, [], 'Canvas');
-smalltalk.addMethod(
-'_createElement',
-smalltalk.method({
-selector: 'createElement',
-category: 'private',
-fn: function () {
-    var self = this;
-    return function () {return document.createElement("canvas");}();
-    return self;
-},
-source: unescape('createElement%0A%20%20%20%20%5E%7B%27return%20document.createElement%28%27%27canvas%27%27%29%27%7D%0A')}),
-smalltalk.CanvasBrush);
-
-smalltalk.addMethod(
-'_initializeWithCanvas_',
-smalltalk.method({
-selector: 'initializeWithCanvas:',
-category: 'initialization',
-fn: function (aCanvas) {
-    var self = this;
-    canvas = aCanvas;
-    return self;
-},
-source: unescape('initializeWithCanvas%3A%20aCanvas%0A%09canvas%20%3A%3D%20aCanvas')}),
-smalltalk.CanvasBrush);
-
-
-smalltalk.addMethod(
-'_canvas_',
-smalltalk.method({
-selector: 'canvas:',
-category: 'instance creation',
-fn: function (aCanvas) {
-    var self = this;
-    return function ($rec) {$rec._initializeWithCanvas_(aCanvas);return $rec._yourself();}(self._new());
-    return self;
-},
-source: unescape('canvas%3A%20aCanvas%0A%09%5Eself%20new%0A%09%09initializeWithCanvas%3A%20aCanvas%3B%0A%09%09yourself')}),
-smalltalk.CanvasBrush.klass);
-
-
-smalltalk.init(smalltalk.Object);

ファイルの差分が大きいため隠しています
+ 0 - 6484
js/jtalk.js


+ 4 - 19
nodejs/nodecompile.js

@@ -4,23 +4,8 @@
 // as aCategoryName.js.
 var sys = require('sys'), fs = require('fs');
 
-// Only care about our arguments, strip away node, all.js and debug flag.
-var arguments = process.argv.splice(4);
-
-// First argument is debugMode: "true" or "false"
-if (process.argv[2] == "true") {
-  smalltalk.debugMode = true;
-} else {
-  smalltalk.debugMode = false;
-}
-
-// Second argument is prefix: "no-silly-prefix" means none
-prefix = process.argv[3];
-if (prefix == "no-silly-prefix") {
-  prefix = "";
-}
-
-console.log("Compiling in debugMode: " + smalltalk.debugMode);
+// Only care about our arguments, strip away node and all.js
+var arguments = process.argv.splice(2);
 
 // If it ends with .st, import it, otherwise export category as .js
 arguments.forEach(function(val, index, array) {
@@ -29,7 +14,7 @@ arguments.forEach(function(val, index, array) {
     code = fs.readFileSync(val, "utf8");
     smalltalk.Importer._new()._import_(code._stream());
   } else {
-    sys.puts("Exporting category " + val + " as " + prefix + val + ".js");
-    fs.writeFileSync(prefix + val + ".js", smalltalk.Exporter._new()._exportCategory_(val));
+    sys.puts("Exporting category " + val);
+    fs.writeFileSync(val + ".js", smalltalk.Exporter._new()._exportCategory_(val));
   }
 });

+ 1 - 0
st/Benchfib.st

@@ -11,6 +11,7 @@ main
 	console log: '0 tinyBenchmarks => ' + result
 ! !
 
+smalltalk.setup(smalltalk.Benchfib);
 !Number methodsFor: '*Benchfib'!
 
 benchFib

+ 5 - 0
st/Canvas.st

@@ -70,6 +70,7 @@ tagBrush: aTagBrush
 	<return aTagBrush._element().getContext('2d')>
 ! !
 
+smalltalk.setup(smalltalk.CanvasRenderingContext);
 Object subclass: #HTMLCanvas
 	instanceVariableNames: 'root'
 	category: 'Canvas'!
@@ -232,6 +233,7 @@ onJQuery: aJQuery
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.HTMLCanvas);
 Object subclass: #TagBrush
 	instanceVariableNames: 'canvas element'
 	category: 'Canvas'!
@@ -392,6 +394,7 @@ fromJQuery: aJQuery canvas: aCanvas
 	yourself
 ! !
 
+smalltalk.setup(smalltalk.TagBrush);
 Object subclass: #Widget
 	instanceVariableNames: ''
 	category: 'Canvas'!
@@ -430,6 +433,7 @@ renderOn: html
     self
 ! !
 
+smalltalk.setup(smalltalk.Widget);
 TagBrush subclass: #CanvasBrush
 	instanceVariableNames: ''
 	category: 'Canvas'!
@@ -454,6 +458,7 @@ canvas: aCanvas
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.CanvasBrush);
 !Object methodsFor: '*Canvas'!
 
 appendToBrush: aTagBrush

+ 26 - 12
st/Compiler.st

@@ -24,6 +24,7 @@ accept: aVisitor
 	aVisitor visitNode: self
 ! !
 
+smalltalk.setup(smalltalk.Node);
 Node subclass: #MethodNode
 	instanceVariableNames: 'selector arguments source'
 	category: 'Compiler'!
@@ -60,6 +61,7 @@ accept: aVisitor
 	aVisitor visitMethodNode: self
 ! !
 
+smalltalk.setup(smalltalk.MethodNode);
 Node subclass: #SendNode
 	instanceVariableNames: 'selector arguments receiver'
 	category: 'Compiler'!
@@ -118,6 +120,7 @@ accept: aVisitor
 	aVisitor visitSendNode: self
 ! !
 
+smalltalk.setup(smalltalk.SendNode);
 Node subclass: #CascadeNode
 	instanceVariableNames: 'receiver'
 	category: 'Compiler'!
@@ -138,6 +141,7 @@ accept: aVisitor
 	aVisitor visitCascadeNode: self
 ! !
 
+smalltalk.setup(smalltalk.CascadeNode);
 Node subclass: #AssignmentNode
 	instanceVariableNames: 'left right'
 	category: 'Compiler'!
@@ -166,6 +170,7 @@ accept: aVisitor
 	aVisitor visitAssignmentNode: self
 ! !
 
+smalltalk.setup(smalltalk.AssignmentNode);
 Node subclass: #BlockNode
 	instanceVariableNames: 'parameters'
 	category: 'Compiler'!
@@ -186,6 +191,7 @@ accept: aVisitor
 	aVisitor visitBlockNode: self
 ! !
 
+smalltalk.setup(smalltalk.BlockNode);
 Node subclass: #SequenceNode
 	instanceVariableNames: 'temps'
 	category: 'Compiler'!
@@ -215,6 +221,7 @@ accept: aVisitor
 	aVisitor visitSequenceNode: self
 ! !
 
+smalltalk.setup(smalltalk.SequenceNode);
 SequenceNode subclass: #BlockSequenceNode
 	instanceVariableNames: ''
 	category: 'Compiler'!
@@ -225,6 +232,7 @@ accept: aVisitor
 	aVisitor visitBlockSequenceNode: self
 ! !
 
+smalltalk.setup(smalltalk.BlockSequenceNode);
 Node subclass: #ReturnNode
 	instanceVariableNames: ''
 	category: 'Compiler'!
@@ -235,6 +243,7 @@ accept: aVisitor
 	aVisitor visitReturnNode: self
 ! !
 
+smalltalk.setup(smalltalk.ReturnNode);
 Node subclass: #ValueNode
 	instanceVariableNames: 'value'
 	category: 'Compiler'!
@@ -255,6 +264,7 @@ accept: aVisitor
 	aVisitor visitValueNode: self
 ! !
 
+smalltalk.setup(smalltalk.ValueNode);
 ValueNode subclass: #VariableNode
 	instanceVariableNames: ''
 	category: 'Compiler'!
@@ -265,6 +275,7 @@ accept: aVisitor
 	aVisitor visitVariableNode: self
 ! !
 
+smalltalk.setup(smalltalk.VariableNode);
 VariableNode subclass: #ClassReferenceNode
 	instanceVariableNames: ''
 	category: 'Compiler'!
@@ -275,6 +286,7 @@ accept: aVisitor
 	aVisitor visitClassReferenceNode: self
 ! !
 
+smalltalk.setup(smalltalk.ClassReferenceNode);
 Node subclass: #JSStatementNode
 	instanceVariableNames: 'source'
 	category: 'Compiler'!
@@ -295,6 +307,7 @@ accept: aVisitor
 	aVisitor visitJSStatementNode: self
 ! !
 
+smalltalk.setup(smalltalk.JSStatementNode);
 Object subclass: #NodeVisitor
 	instanceVariableNames: ''
 	category: 'Compiler'!
@@ -360,6 +373,7 @@ visitJSStatementNode: aNode
 	    nextPutAll: '})()'
 ! !
 
+smalltalk.setup(smalltalk.NodeVisitor);
 NodeVisitor subclass: #Compiler
 	instanceVariableNames: 'stream nestedBlocks earlyReturn currentClass currentSelector unknownVariables tempVariables messageSends referencedClasses'
 	category: 'Compiler'!
@@ -498,8 +512,7 @@ visitMethodNode: aNode
 	stream 
 	    nextPutAll: 'smalltalk.method({'; lf;
 	    nextPutAll: 'selector: "', aNode selector, '",'; lf.
-	Smalltalk current debugMode ifTrue: [
-	    stream nextPutAll: 'source: unescape("', aNode source escaped, '"),';lf].
+	stream nextPutAll: 'source: unescape("', aNode source escaped, '"),';lf.
 	stream nextPutAll: 'fn: function('.
 	aNode arguments 
 	    do: [:each | 
@@ -523,15 +536,14 @@ visitMethodNode: aNode
 	earlyReturn ifTrue: [
 	    stream lf; nextPutAll: '} catch(e) {if(e.name === ''stReturn'' && e.selector === ', currentSelector printString, '){return e.fn()} throw(e)}'].
 	stream nextPutAll: '}'.
-	Smalltalk current debugMode ifTrue: [
-		stream 
-			nextPutAll: ',', String lf, 'messageSends: ';
-			nextPutAll: messageSends asJavascript, ','; lf;
-			nextPutAll: 'referencedClasses: ['.
-		referencedClasses 
-			do: [:each | stream nextPutAll: each]
-			separatedBy: [stream nextPutAll: ','].
-		stream nextPutAll: ']'].
+	stream 
+		nextPutAll: ',', String lf, 'messageSends: ';
+		nextPutAll: messageSends asJavascript, ','; lf;
+		nextPutAll: 'referencedClasses: ['.
+	referencedClasses 
+		do: [:each | stream nextPutAll: each]
+		separatedBy: [stream nextPutAll: ','].
+	stream nextPutAll: ']'.
 	stream nextPutAll: '})'
 !
 
@@ -685,12 +697,14 @@ recompileAll
 		self recompile: each]
 ! !
 
+smalltalk.setup(smalltalk.Compiler);
 Object subclass: #DoIt
 	instanceVariableNames: ''
 	category: 'Compiler'!
 
 !DoIt methodsFor: ''!
 
-doIt ^[ESUG2011Presentation new] value
+doIt ^[StrippedExporter new exportCategory: 'IDE'] value
 ! !
 
+smalltalk.setup(smalltalk.DoIt);

+ 8 - 0
st/Examples.st

@@ -35,6 +35,7 @@ renderOn: html
 	onClick: [self decrease]
 ! !
 
+smalltalk.setup(smalltalk.Counter);
 Widget subclass: #Tetris
 	instanceVariableNames: 'renderingContext timer speed score rows movingPiece'
 	category: 'Examples'!
@@ -190,6 +191,7 @@ squares
 	^10@15
 ! !
 
+smalltalk.setup(smalltalk.Tetris);
 Widget subclass: #TetrisPiece
 	instanceVariableNames: 'rotation position'
 	category: 'Examples'!
@@ -252,6 +254,7 @@ atRandom
 	^(self subclasses at: self subclasses size atRandom) new
 ! !
 
+smalltalk.setup(smalltalk.TetrisPiece);
 TetrisPiece subclass: #TetrisPieceO
 	instanceVariableNames: ''
 	category: 'Examples'!
@@ -267,6 +270,7 @@ bounds
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.TetrisPieceO);
 TetrisPiece subclass: #TetrisPieceL
 	instanceVariableNames: ''
 	category: 'Examples'!
@@ -290,6 +294,7 @@ height
 	^3
 ! !
 
+smalltalk.setup(smalltalk.TetrisPieceL);
 TetrisPiece subclass: #TetrisPieceJ
 	instanceVariableNames: ''
 	category: 'Examples'!
@@ -313,6 +318,7 @@ height
 	^3
 ! !
 
+smalltalk.setup(smalltalk.TetrisPieceJ);
 TetrisPiece subclass: #TetrisPieceI
 	instanceVariableNames: ''
 	category: 'Examples'!
@@ -336,6 +342,7 @@ height
 	^4
 ! !
 
+smalltalk.setup(smalltalk.TetrisPieceI);
 TetrisPiece subclass: #TetrisPieceT
 	instanceVariableNames: ''
 	category: 'Examples'!
@@ -355,3 +362,4 @@ color
 	^'#aaf'
 ! !
 
+smalltalk.setup(smalltalk.TetrisPieceT);

+ 17 - 0
st/IDE.st

@@ -167,6 +167,7 @@ new
     self shouldNotImplement
 ! !
 
+smalltalk.setup(smalltalk.TabManager);
 Widget subclass: #TabWidget
 	instanceVariableNames: 'div'
 	category: 'IDE'!
@@ -237,6 +238,7 @@ open
     ^self new open
 ! !
 
+smalltalk.setup(smalltalk.TabWidget);
 TabWidget subclass: #Workspace
 	instanceVariableNames: 'sourceArea'
 	category: 'IDE'!
@@ -290,6 +292,7 @@ renderButtonsOn: html
 	onClick: [self clearWorkspace]
 ! !
 
+smalltalk.setup(smalltalk.Workspace);
 TabWidget subclass: #Transcript
 	instanceVariableNames: 'textarea'
 	category: 'IDE'!
@@ -360,6 +363,7 @@ clear
     self current clear
 ! !
 
+smalltalk.setup(smalltalk.Transcript);
 TabWidget subclass: #Browser
 	instanceVariableNames: 'selectedCategory selectedClass selectedProtocol selectedMethod commitButton categoriesList classesList protocolsList methodsList sourceArea tabsList selectedTab saveButton classButtons methodButtons unsavedChanges input'
 	category: 'IDE'!
@@ -572,6 +576,11 @@ commitCategory
 	    at: 'data' put: (Exporter new exportCategory: selectedCategory);
 	    at: 'error' put: [self alert: 'Commit failed!!'];
 	    send.
+	(Ajax url: self class commitPathJs, '/', selectedCategory, '.deploy.js')
+	    at: 'type' put: 'PUT';
+	    at: 'data' put: (Exporter new exportCategory: selectedCategory);
+	    at: 'error' put: [self alert: 'Commit failed!!'];
+	    send.
 	(Ajax url: self class commitPathSt, '/', selectedCategory, '.st')
 	    at: 'type' put: 'PUT';
 	    at: 'data' put: (ChunkExporter new exportCategory: selectedCategory);
@@ -957,6 +966,7 @@ open
     self new open
 ! !
 
+smalltalk.setup(smalltalk.Browser);
 TabWidget subclass: #Inspector
 	instanceVariableNames: 'label variables object selectedVariable variablesList valueTextarea workspaceTextarea diveButton'
 	category: 'IDE'!
@@ -1093,6 +1103,7 @@ on: anObject
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.Inspector);
 TabWidget subclass: #ReferencesBrowser
 	instanceVariableNames: 'implementors senders implementorsList input timer selector sendersList referencedClasses referencedClassesList'
 	category: 'IDE'!
@@ -1270,6 +1281,7 @@ search: aString
 		open
 ! !
 
+smalltalk.setup(smalltalk.ReferencesBrowser);
 Widget subclass: #SourceArea
 	instanceVariableNames: 'textarea'
 	category: 'IDE'!
@@ -1395,6 +1407,7 @@ renderOn: html
 	at: 'spellcheck' put: 'false'
 ! !
 
+smalltalk.setup(smalltalk.SourceArea);
 Widget subclass: #ClassesList
 	instanceVariableNames: 'browser ul nodes'
 	category: 'IDE'!
@@ -1458,6 +1471,7 @@ on: aBrowser
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.ClassesList);
 Widget subclass: #ClassesListNode
 	instanceVariableNames: 'browser theClass level nodes'
 	category: 'IDE'!
@@ -1537,6 +1551,7 @@ on: aClass browser: aBrowser classes: aCollection level: anInteger
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.ClassesListNode);
 TabWidget subclass: #Debugger
 	instanceVariableNames: 'error selectedContext sourceArea ul'
 	category: 'IDE'!
@@ -1621,6 +1636,7 @@ updateSourceArea
 	 sourceArea val: (selectedContext receiver class methodAt: selectedContext selector) source
 ! !
 
+smalltalk.setup(smalltalk.Debugger);
 ErrorHandler subclass: #DebugErrorHandler
 	instanceVariableNames: ''
 	category: 'IDE'!
@@ -1640,6 +1656,7 @@ initialize
 	self register
 ! !
 
+smalltalk.setup(smalltalk.DebugErrorHandler);
 !Object methodsFor: '*IDE'!
 
 inspect

+ 2 - 0
st/JQuery.st

@@ -243,6 +243,7 @@ documentReady: aBlock
 	<jQuery(document).ready(aBlock)>
 ! !
 
+smalltalk.setup(smalltalk.JQuery);
 Object subclass: #Ajax
 	instanceVariableNames: 'settings'
 	category: 'JQuery'!
@@ -291,6 +292,7 @@ url: aString
 	yourself
 ! !
 
+smalltalk.setup(smalltalk.Ajax);
 !BlockClosure methodsFor: '*JQuery'!
 
 appendToJQuery: aJQuery

+ 30 - 8
st/Kernel.st

@@ -229,6 +229,7 @@ initialize
 	"no op"
 ! !
 
+smalltalk.setup(smalltalk.Object);
 Object subclass: #Smalltalk
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -239,14 +240,6 @@ classes
 	<return self.classes()>
 !
 
-debugMode
-	<return self.debugMode>
-!
-
-debugMode: aBoolean
-	<self.debugMode = aBoolean>
-!
-
 readJSON: anObject
 	<return self.readJSObject(anObject)>
 !
@@ -272,6 +265,7 @@ current
 	<return smalltalk>
 ! !
 
+smalltalk.setup(smalltalk.Smalltalk);
 Object subclass: #Behavior
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -399,6 +393,7 @@ inheritsFrom: aClass
 	^aClass allSubclasses includes: self
 ! !
 
+smalltalk.setup(smalltalk.Behavior);
 Behavior subclass: #Class
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -444,6 +439,7 @@ isClass
 	^true
 ! !
 
+smalltalk.setup(smalltalk.Class);
 Behavior subclass: #Metaclass
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -471,6 +467,7 @@ isMetaclass
 	^true
 ! !
 
+smalltalk.setup(smalltalk.Metaclass);
 Object subclass: #CompiledMethod
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -521,6 +518,7 @@ referencedClasses
 	^self basicAt: 'referencedClasses'
 ! !
 
+smalltalk.setup(smalltalk.CompiledMethod);
 Object subclass: #Number
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -664,6 +662,7 @@ pi
 	<return Math.PI>
 ! !
 
+smalltalk.setup(smalltalk.Number);
 Object subclass: #BlockClosure
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -725,6 +724,7 @@ valueWithInterval: aNumber
 	<return setInterval(self, aNumber)>
 ! !
 
+smalltalk.setup(smalltalk.BlockClosure);
 Object subclass: #Boolean
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -795,6 +795,7 @@ printString
 	<return self.toString()>
 ! !
 
+smalltalk.setup(smalltalk.Boolean);
 Object subclass: #Date
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -981,6 +982,7 @@ millisecondsToRun: aBlock
 	^Date now - t
 ! !
 
+smalltalk.setup(smalltalk.Date);
 Object subclass: #UndefinedObject
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -1044,6 +1046,7 @@ new
 	    self error: 'You cannot create new instances of UndefinedObject. Use nil'
 ! !
 
+smalltalk.setup(smalltalk.UndefinedObject);
 Object subclass: #Collection
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -1233,6 +1236,7 @@ withAll: aCollection
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.Collection);
 Collection subclass: #SequenceableCollection
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -1315,6 +1319,7 @@ withIndexDo: aBlock
 	<for(var i=0;i<self.length;i++){aBlock(self[i], i+1);}>
 ! !
 
+smalltalk.setup(smalltalk.SequenceableCollection);
 SequenceableCollection subclass: #String
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -1555,6 +1560,7 @@ fromString: aString
 	    <return new self.fn(aString)>
 ! !
 
+smalltalk.setup(smalltalk.String);
 SequenceableCollection subclass: #Array
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -1672,6 +1678,7 @@ printString
 	^str contents
 ! !
 
+smalltalk.setup(smalltalk.Array);
 Object subclass: #RegularExpression
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -1700,6 +1707,7 @@ fromString: aString
 	    ^self fromString: aString flag: ''
 ! !
 
+smalltalk.setup(smalltalk.RegularExpression);
 Object subclass: #Error
 	instanceVariableNames: 'messageText'
 	category: 'Kernel'!
@@ -1732,6 +1740,7 @@ signal: aString
 		signal
 ! !
 
+smalltalk.setup(smalltalk.Error);
 Object subclass: #MethodContext
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -1762,6 +1771,7 @@ asString
 	^self receiver class printString, ' >> ', self selector
 ! !
 
+smalltalk.setup(smalltalk.MethodContext);
 Object subclass: #Association
 	instanceVariableNames: 'key value'
 	category: 'Kernel'!
@@ -1801,6 +1811,7 @@ key: aKey value: aValue
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.Association);
 Collection subclass: #Dictionary
 	instanceVariableNames: 'keys'
 	category: 'Kernel'!
@@ -1960,6 +1971,7 @@ initialize
     	keys := #()
 ! !
 
+smalltalk.setup(smalltalk.Dictionary);
 Object subclass: #ClassBuilder
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -1998,6 +2010,7 @@ setupClass: aClass
 	<smalltalk.init(aClass);>
 ! !
 
+smalltalk.setup(smalltalk.ClassBuilder);
 Object subclass: #ClassCategoryReader
 	instanceVariableNames: 'class category chunkParser'
 	category: 'Kernel'!
@@ -2035,6 +2048,7 @@ compileMethod: aString
 	class addCompiledMethod: method
 ! !
 
+smalltalk.setup(smalltalk.ClassCategoryReader);
 Object subclass: #Stream
 	instanceVariableNames: 'collection position streamSize'
 	category: 'Kernel'!
@@ -2165,6 +2179,7 @@ on: aCollection
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.Stream);
 Stream subclass: #StringStream
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -2207,6 +2222,7 @@ lf
 	^self nextPutAll: String lf
 ! !
 
+smalltalk.setup(smalltalk.StringStream);
 Object subclass: #ClassCommentReader
 	instanceVariableNames: 'class chunkParser'
 	category: 'Kernel'!
@@ -2239,6 +2255,7 @@ setComment: aString
     class comment: aString
 ! !
 
+smalltalk.setup(smalltalk.ClassCommentReader);
 Object subclass: #Random
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -2253,6 +2270,7 @@ next: anInteger
     ^1 to: anInteger collect: [:each | self next]
 ! !
 
+smalltalk.setup(smalltalk.Random);
 Object subclass: #Point
 	instanceVariableNames: 'x y'
 	category: 'Kernel'!
@@ -2308,6 +2326,7 @@ x: aNumber y: anotherNumber
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.Point);
 Object subclass: #Message
 	instanceVariableNames: 'selector arguments'
 	category: 'Kernel'!
@@ -2339,6 +2358,7 @@ selector: aString arguments: anArray
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.Message);
 Error subclass: #MessageNotUnderstood
 	instanceVariableNames: 'message receiver'
 	category: 'Kernel'!
@@ -2365,6 +2385,7 @@ messageText
 	^self receiver asString, ' does not understand #', self message selector
 ! !
 
+smalltalk.setup(smalltalk.MessageNotUnderstood);
 Object subclass: #ErrorHandler
 	instanceVariableNames: ''
 	category: 'Kernel'!
@@ -2420,3 +2441,4 @@ register
 	ErrorHandler setCurrent: self new
 ! !
 
+smalltalk.setup(smalltalk.ErrorHandler);

+ 34 - 1
st/Parser.st

@@ -80,6 +80,7 @@ parseAll: aStream
 	    ifFalse: [result first]
 ! !
 
+smalltalk.setup(smalltalk.PPParser);
 PPParser subclass: #PPEOFParser
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -93,6 +94,7 @@ parse: aStream
 	    ifTrue: [nil]
 ! !
 
+smalltalk.setup(smalltalk.PPEOFParser);
 PPParser subclass: #PPAnyParser
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -106,6 +108,7 @@ parse: aStream
 	    ifFalse: [aStream next]
 ! !
 
+smalltalk.setup(smalltalk.PPAnyParser);
 PPParser subclass: #PPEpsilonParser
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -116,6 +119,7 @@ parse: aStream
 	^nil
 ! !
 
+smalltalk.setup(smalltalk.PPEpsilonParser);
 PPParser subclass: #PPStringParser
 	instanceVariableNames: 'string'
 	category: 'Parser'!
@@ -143,6 +147,7 @@ parse: aStream
 		PPFailure new reason: 'Expected ', self string, ' but got ', (result at: position) printString; yourself]
 ! !
 
+smalltalk.setup(smalltalk.PPStringParser);
 PPParser subclass: #PPCharacterParser
 	instanceVariableNames: 'regexp'
 	category: 'Parser'!
@@ -167,6 +172,7 @@ match: aString
 	^aString match: regexp
 ! !
 
+smalltalk.setup(smalltalk.PPCharacterParser);
 PPParser subclass: #PPListParser
 	instanceVariableNames: 'parsers'
 	category: 'Parser'!
@@ -199,6 +205,7 @@ with: aParser with: anotherParser
 	    ^self withAll: (Array with: aParser with: anotherParser)
 ! !
 
+smalltalk.setup(smalltalk.PPListParser);
 PPListParser subclass: #PPSequenceParser
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -226,6 +233,7 @@ parse: aStream
 	    ifTrue: [aStream position: start. element]
 ! !
 
+smalltalk.setup(smalltalk.PPSequenceParser);
 PPListParser subclass: #PPChoiceParser
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -248,6 +256,7 @@ parse: aStream
 	^result
 ! !
 
+smalltalk.setup(smalltalk.PPChoiceParser);
 PPParser subclass: #PPDelegateParser
 	instanceVariableNames: 'parser'
 	category: 'Parser'!
@@ -276,6 +285,7 @@ on: aParser
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.PPDelegateParser);
 PPDelegateParser subclass: #PPAndParser
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -294,6 +304,7 @@ basicParse: aStream
 	^element
 ! !
 
+smalltalk.setup(smalltalk.PPAndParser);
 PPAndParser subclass: #PPNotParser
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -308,6 +319,7 @@ parse: aStream
 	    ifFalse: [PPFailure reason: element at: aStream position]
 ! !
 
+smalltalk.setup(smalltalk.PPNotParser);
 PPDelegateParser subclass: #PPActionParser
 	instanceVariableNames: 'block'
 	category: 'Parser'!
@@ -341,6 +353,7 @@ on: aParser block: aBlock
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.PPActionParser);
 PPDelegateParser subclass: #PPFlattenParser
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -358,6 +371,7 @@ parse: aStream
 		to: aStream position]
 ! !
 
+smalltalk.setup(smalltalk.PPFlattenParser);
 PPDelegateParser subclass: #PPSourceParser
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -374,6 +388,7 @@ parse: aStream
 			Array with: element with: result].
 ! !
 
+smalltalk.setup(smalltalk.PPSourceParser);
 PPDelegateParser subclass: #PPRepeatingParser
 	instanceVariableNames: 'min'
 	category: 'Parser'!
@@ -419,6 +434,7 @@ on: aParser min: aNumber
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.PPRepeatingParser);
 Object subclass: #PPFailure
 	instanceVariableNames: 'position reason'
 	category: 'Parser'!
@@ -469,6 +485,7 @@ reason: aString at: anInteger
 		yourself
 ! !
 
+smalltalk.setup(smalltalk.PPFailure);
 Object subclass: #SmalltalkParser
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -653,6 +670,7 @@ parse: aStream
 		parse: aStream
 ! !
 
+smalltalk.setup(smalltalk.SmalltalkParser);
 Object subclass: #Chunk
 	instanceVariableNames: 'contents'
 	category: 'Parser'!
@@ -677,6 +695,7 @@ isInstructionChunk
 	^false
 ! !
 
+smalltalk.setup(smalltalk.Chunk);
 Chunk subclass: #InstructionChunk
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -687,6 +706,7 @@ isInstructionChunk
 	^true
 ! !
 
+smalltalk.setup(smalltalk.InstructionChunk);
 Chunk subclass: #EmptyChunk
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -697,6 +717,7 @@ isEmptyChunk
 	^true
 ! !
 
+smalltalk.setup(smalltalk.EmptyChunk);
 Object subclass: #ChunkParser
 	instanceVariableNames: 'parser separator eof ws chunk emptyChunk instructionChunk'
 	category: 'Parser'!
@@ -737,6 +758,7 @@ emptyChunk
 	^emptyChunk ifNil: [emptyChunk := self separator plus, '!!' asParser, self ws ==> [:node | EmptyChunk new]]
 ! !
 
+smalltalk.setup(smalltalk.ChunkParser);
 Object subclass: #Importer
 	instanceVariableNames: 'chunkParser'
 	category: 'Parser'!
@@ -761,6 +783,7 @@ import: aStream
 		self import: aStream]]
 ! !
 
+smalltalk.setup(smalltalk.Importer);
 Object subclass: #Exporter
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -784,6 +807,7 @@ export: aClass
 	self exportMethodsOf: aClass on: stream.
 	self exportMetaDefinitionOf: aClass on: stream.
 	self exportMethodsOf: aClass class on: stream.
+	self exportSetupOf: aClass on: stream.
 	^stream contents
 ! !
 
@@ -865,8 +889,16 @@ exportCategoryExtensions: aString on: aStream
 		each methodDictionary values do: [:method |
 			method category = ('*', aString) ifTrue: [
 				self exportMethod: method of: each on: aStream]]]
+!
+
+exportSetupOf: aClass on: aStream
+	aStream
+	    nextPutAll: 'smalltalk.setup(smalltalk.', (self classNameFor: aClass);
+	    nextPutAll: ');'.
+	aStream lf
 ! !
 
+smalltalk.setup(smalltalk.Exporter);
 Exporter subclass: #ChunkExporter
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -959,6 +991,7 @@ exportMethods: methods category: category of: aClass on: aStream
 	aStream nextPutAll: ' !!'; lf; lf
 ! !
 
+smalltalk.setup(smalltalk.ChunkExporter);
 Exporter subclass: #StrippedExporter
 	instanceVariableNames: ''
 	category: 'Parser'!
@@ -987,7 +1020,6 @@ exportMethod: aMethod of: aClass on: aStream
 		nextPutAll: '''', aMethod selector asSelector, ''',';lf;
 		nextPutAll: 'smalltalk.method({';lf;
 		nextPutAll: 'selector: ''', aMethod selector, ''',';lf;
-		nextPutAll: 'category: ''', aMethod category, ''',';lf;
 		nextPutAll: 'fn: ', aMethod fn compiledSource, ',';lf;
 		nextPutAll: ']';lf;
 		nextPutAll: '}),';lf;
@@ -995,3 +1027,4 @@ exportMethod: aMethod of: aClass on: aStream
 		nextPutAll: ');';lf;lf
 ! !
 
+smalltalk.setup(smalltalk.StrippedExporter);

+ 8 - 0
st/SUnit.st

@@ -68,6 +68,7 @@ deny: aBoolean
 	self assert: aBoolean not
 ! !
 
+smalltalk.setup(smalltalk.TestCase);
 TestCase subclass: #ExampleTest
 	instanceVariableNames: 'test'
 	category: 'SUnit'!
@@ -86,6 +87,7 @@ testError
 	self assert: 1 foo
 ! !
 
+smalltalk.setup(smalltalk.ExampleTest);
 TabWidget subclass: #ProgressBar
 	instanceVariableNames: 'percent progressDiv div'
 	category: 'SUnit'!
@@ -123,10 +125,12 @@ updatePercent: aNumber
 	self renderProgressBar
 ! !
 
+smalltalk.setup(smalltalk.ProgressBar);
 Error subclass: #TestFailure
 	instanceVariableNames: ''
 	category: 'SUnit'!
 
+smalltalk.setup(smalltalk.TestFailure);
 TabWidget subclass: #TestRunner
 	instanceVariableNames: 'selectedCategories categoriesList selectedClasses classesList selectedMethods progressBar methodsList result statusDiv'
 	category: 'SUnit'!
@@ -370,6 +374,7 @@ updateStatusDiv
 		html span with: self statusInfo]
 ! !
 
+smalltalk.setup(smalltalk.TestRunner);
 Object subclass: #TestResult
 	instanceVariableNames: 'timestamp runs errors failures total'
 	category: 'SUnit'!
@@ -432,6 +437,7 @@ initialize
 	total := 0
 ! !
 
+smalltalk.setup(smalltalk.TestResult);
 TestCase subclass: #ExampleTest2
 	instanceVariableNames: ''
 	category: 'SUnit'!
@@ -442,6 +448,7 @@ testPasses
 	100000 timesRepeat: [self assert: 1 + 1 = 2]
 ! !
 
+smalltalk.setup(smalltalk.ExampleTest2);
 TestCase subclass: #ExampleTest3
 	instanceVariableNames: ''
 	category: 'SUnit'!
@@ -452,3 +459,4 @@ testPasses
 	100000 timesRepeat: [self assert: 1 + 1 = 2]
 ! !
 
+smalltalk.setup(smalltalk.ExampleTest3);

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません