Browse Source

Synced with master

Nicolas Petton 13 years ago
parent
commit
bc9153788c
11 changed files with 2207 additions and 765 deletions
  1. 3 1
      _layouts/default.html
  2. 39 0
      css/jtalk.css
  3. 333 96
      js/Canvas.js
  4. 296 76
      js/Compiler.js
  5. 206 56
      js/Examples.js
  6. 332 86
      js/IDE.js
  7. 306 51
      js/JQuery.js
  8. 410 315
      js/Kernel.js
  9. 228 69
      js/Parser.js
  10. 53 15
      js/boot.js
  11. 1 0
      js/init.js

+ 3 - 1
_layouts/default.html

@@ -11,15 +11,17 @@
     <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/JQuery.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/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">
 

+ 39 - 0
css/jtalk.css

@@ -64,6 +64,7 @@ body.jtalkBody {
        left: 0;
        right: 0;
        height: 300px;
+       z-index: 1000;
 }
 
 #jtalk .ui-resizable-handle {
@@ -256,3 +257,41 @@ body.jtalkBody {
     width: 100%;
     height: 100%;
 }
+
+/***** IDE - ReferencesBrowser ******/
+
+.jtalkTool .jt_box .implementors {
+	width: 100%
+}
+
+.jtalkTool .jt_box .jt_column.implementors,
+.jtalkTool .jt_box .jt_column.senders,
+.jtalkTool .jt_box .jt_column.referenced_classes {
+	top: 30px;
+	height: 100%;
+	bottom: 0px;
+	width: 33%;
+}
+
+.jtalkTool .jt_box .jt_column.senders {
+	left: 33.6%
+}
+
+.jtalkTool .jt_box .jt_column.referenced_classes {
+        left: 67.3%
+}
+
+.jtalkTool .jt_box .jt_column.implementors .column_label, 
+.jtalkTool .jt_box .jt_column.senders .column_label,
+.jtalkTool .jt_box .jt_column.referenced_classes .column_label {
+	background: #dbdbdb
+}
+
+.jtalkTool .jt_box .jt_column.implementors .column_label:hover,
+.jtalkTool .jt_box .jt_column.senders .column_label:hover,
+.jtalkTool .jt_box .jt_column.referenced_classes .column_label:hover {
+	font-weight: bold;
+	color: #000;
+	cursor: default
+}
+

File diff suppressed because it is too large
+ 333 - 96
js/Canvas.js


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


+ 206 - 56
js/Examples.js

@@ -1,4 +1,4 @@
-smalltalk.addClass('Counter', smalltalk.Widget, ['count'], 'Examples');
+smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples');
 smalltalk.addMethod(
 '_initialize',
 smalltalk.method({
@@ -6,10 +6,13 @@ selector: 'initialize',
 category: 'initialization',
 fn: function (){
 var self=this;
-self.klass.superclass.fn.prototype['_initialize'].apply(self, []);
+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%0A')}),
+source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20count%20%3A%3D%200%0A'),
+messageSends: ["initialize"],
+referencedClasses: []
+}),
 smalltalk.Counter);
 
 smalltalk.addMethod(
@@ -19,11 +22,14 @@ selector: 'renderOn:',
 category: 'rendering',
 fn: function (html){
 var self=this;
-smalltalk.send(smalltalk.send(html, "_h1", []), "_with_", [smalltalk.send(self['@count'], "_asString", [])]);
+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%20html%20h1%20with%3A%20count%20asString.%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%0A')}),
+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%0A'),
+messageSends: ["with:", "asString", "yourself", "h1", "onClick:", "increase", "button", "decrease"],
+referencedClasses: []
+}),
 smalltalk.Counter);
 
 smalltalk.addMethod(
@@ -34,9 +40,12 @@ category: 'actions',
 fn: function (){
 var self=this;
 self['@count']=smalltalk.send(self['@count'], "__plus", [(1)]);
-smalltalk.send(self, "_update", []);
+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%20self%20update%0A')}),
+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(
@@ -47,9 +56,12 @@ category: 'actions',
 fn: function (){
 var self=this;
 self['@count']=smalltalk.send(self['@count'], "__minus", [(1)]);
-smalltalk.send(self, "_update", []);
+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%20self%20update%0A')}),
+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);
 
 
@@ -64,7 +76,10 @@ 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')}),
+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(
@@ -81,7 +96,10 @@ smalltalk.send(canvas, "_at_put_", ["height", smalltalk.send(smalltalk.send(self
 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')}),
+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(
@@ -93,7 +111,10 @@ 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')}),
+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(
@@ -103,10 +124,13 @@ selector: 'initialize',
 category: 'initialization',
 fn: function (){
 var self=this;
-self.klass.superclass.fn.prototype['_initialize'].apply(self, []);
+smalltalk.send(self, "_initialize", [], smalltalk.Widget);
 smalltalk.send(self, "_newGame", []);
 return self;},
-source: unescape('initialize%0A%09super%20initialize.%0A%09self%20newGame')}),
+source: unescape('initialize%0A%09super%20initialize.%0A%09self%20newGame'),
+messageSends: ["initialize", "newGame"],
+referencedClasses: []
+}),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
@@ -120,7 +144,10 @@ 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')}),
+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(
@@ -132,7 +159,10 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_class", []), "_width", []);
 return self;},
-source: unescape('width%0A%09%5Eself%20class%20width')}),
+source: unescape('width%0A%09%5Eself%20class%20width'),
+messageSends: ["width", "class"],
+referencedClasses: []
+}),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
@@ -144,7 +174,10 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_class", []), "_height", []);
 return self;},
-source: unescape('height%0A%09%5Eself%20class%20height')}),
+source: unescape('height%0A%09%5Eself%20class%20height'),
+messageSends: ["height", "class"],
+referencedClasses: []
+}),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
@@ -158,7 +191,10 @@ smalltalk.send(self['@movingPiece'], "_ifNil_", [(function(){return smalltalk.se
 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%0A%09')}),
+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%0A%09'),
+messageSends: ["ifNil:", "newPiece", "ifTrue:ifFalse:", "canMoveIn:", "position:", unescape("+"), "position", unescape("@"), "redraw"],
+referencedClasses: []
+}),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
@@ -171,7 +207,10 @@ 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')}),
+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(
@@ -188,7 +227,10 @@ x=smalltalk.send(each, "__star", [smalltalk.send(smalltalk.send(self, "_class",
 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.')}),
+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(
@@ -200,7 +242,10 @@ 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')}),
+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(
@@ -215,7 +260,10 @@ 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')}),
+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(
@@ -227,7 +275,10 @@ fn: function (){
 var self=this;
 self['@movingPiece']=smalltalk.send(smalltalk.TetrisPiece, "_atRandom", []);
 return self;},
-source: unescape('newPiece%0A%09movingPiece%20%3A%3D%20TetrisPiece%20atRandom')}),
+source: unescape('newPiece%0A%09movingPiece%20%3A%3D%20TetrisPiece%20atRandom'),
+messageSends: ["atRandom"],
+referencedClasses: [smalltalk.TetrisPiece]
+}),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
@@ -239,7 +290,10 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_class", []), "_squares", []);
 return self;},
-source: unescape('squares%0A%09%5Eself%20class%20squares')}),
+source: unescape('squares%0A%09%5Eself%20class%20squares'),
+messageSends: ["squares", "class"],
+referencedClasses: []
+}),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
@@ -251,7 +305,10 @@ fn: function (aPiece){
 var self=this;
 smalltalk.send(aPiece, "_glueOn_", [self]);
 return self;},
-source: unescape('gluePiece%3A%20aPiece%0A%09aPiece%20glueOn%3A%20self%0A%09')}),
+source: unescape('gluePiece%3A%20aPiece%0A%09aPiece%20glueOn%3A%20self%0A%09'),
+messageSends: ["glueOn:"],
+referencedClasses: []
+}),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
@@ -264,7 +321,10 @@ 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')}),
+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(
@@ -276,7 +336,10 @@ 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')}),
+source: unescape('drawPiece%0A%09movingPiece%20ifNotNil%3A%20%5B%0A%09%09movingPiece%20drawOn%3A%20renderingContext%5D'),
+messageSends: ["ifNotNil:", "drawOn:"],
+referencedClasses: []
+}),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
@@ -288,7 +351,10 @@ 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')}),
+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(
@@ -300,7 +366,10 @@ 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')}),
+source: unescape('addRow%3A%20aCollection%0A%09self%20rows%20add%3A%20aCollection'),
+messageSends: ["add:", "rows"],
+referencedClasses: []
+}),
 smalltalk.Tetris);
 
 
@@ -313,7 +382,10 @@ fn: function (){
 var self=this;
 return (22);
 return self;},
-source: unescape('squareSize%0A%09%5E22')}),
+source: unescape('squareSize%0A%09%5E22'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.Tetris.klass);
 
 smalltalk.addMethod(
@@ -325,7 +397,10 @@ 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')}),
+source: unescape('width%0A%09%5Eself%20squareSize%20*%20%28self%20squares%20x%29'),
+messageSends: [unescape("*"), "squareSize", "x", "squares"],
+referencedClasses: []
+}),
 smalltalk.Tetris.klass);
 
 smalltalk.addMethod(
@@ -337,7 +412,10 @@ 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')}),
+source: unescape('height%0A%09%5Eself%20squareSize%20*%20%28self%20squares%20y%29'),
+messageSends: [unescape("*"), "squareSize", "y", "squares"],
+referencedClasses: []
+}),
 smalltalk.Tetris.klass);
 
 smalltalk.addMethod(
@@ -349,7 +427,10 @@ fn: function (){
 var self=this;
 return smalltalk.send((10), "__at", [(15)]);
 return self;},
-source: unescape('squares%0A%09%5E10@15')}),
+source: unescape('squares%0A%09%5E10@15'),
+messageSends: [unescape("@")],
+referencedClasses: []
+}),
 smalltalk.Tetris.klass);
 
 
@@ -364,7 +445,10 @@ 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')}),
+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(
@@ -376,7 +460,10 @@ 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')}),
+source: unescape('rotation%0A%09%5Erotation%20ifNil%3A%20%5Brotation%20%3A%3D%201%5D'),
+messageSends: ["ifNil:"],
+referencedClasses: []
+}),
 smalltalk.TetrisPiece);
 
 smalltalk.addMethod(
@@ -388,7 +475,10 @@ fn: function (aNumber){
 var self=this;
 self['@rotation']=aNumber;
 return self;},
-source: unescape('rotation%3A%20aNumber%0A%09rotation%20%3A%3D%20aNumber')}),
+source: unescape('rotation%3A%20aNumber%0A%09rotation%20%3A%3D%20aNumber'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.TetrisPiece);
 
 smalltalk.addMethod(
@@ -400,7 +490,10 @@ 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')}),
+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(
@@ -412,7 +505,10 @@ fn: function (aPoint){
 var self=this;
 return self['@position']=aPoint;
 return self;},
-source: unescape('position%3A%20aPoint%0A%09%5Eposition%20%3A%3D%20aPoint')}),
+source: unescape('position%3A%20aPoint%0A%09%5Eposition%20%3A%3D%20aPoint'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.TetrisPiece);
 
 smalltalk.addMethod(
@@ -424,7 +520,10 @@ fn: function (){
 var self=this;
 smalltalk.send(self, "_subclassResponsibility", []);
 return self;},
-source: unescape('bounds%0A%09self%20subclassResponsibility')}),
+source: unescape('bounds%0A%09self%20subclassResponsibility'),
+messageSends: ["subclassResponsibility"],
+referencedClasses: []
+}),
 smalltalk.TetrisPiece);
 
 smalltalk.addMethod(
@@ -436,7 +535,10 @@ fn: function (){
 var self=this;
 return unescape("%23afa");
 return self;},
-source: unescape('color%0A%09%5E%27%23afa%27')}),
+source: unescape('color%0A%09%5E%27%23afa%27'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.TetrisPiece);
 
 smalltalk.addMethod(
@@ -448,7 +550,10 @@ 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')}),
+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(
@@ -460,7 +565,10 @@ fn: function (){
 var self=this;
 return (2);
 return self;},
-source: unescape('height%0A%09%5E2')}),
+source: unescape('height%0A%09%5E2'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.TetrisPiece);
 
 smalltalk.addMethod(
@@ -472,7 +580,10 @@ 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')}),
+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);
 
 
@@ -485,7 +596,10 @@ 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')}),
+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);
 
 
@@ -499,7 +613,10 @@ 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')}),
+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);
 
 
@@ -514,7 +631,10 @@ 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')}),
+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(
@@ -526,7 +646,10 @@ fn: function (){
 var self=this;
 return unescape("%23ffa");
 return self;},
-source: unescape('color%0A%09%5E%27%23ffa%27')}),
+source: unescape('color%0A%09%5E%27%23ffa%27'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.TetrisPieceL);
 
 smalltalk.addMethod(
@@ -538,7 +661,10 @@ fn: function (){
 var self=this;
 return (3);
 return self;},
-source: unescape('height%0A%09%5E3')}),
+source: unescape('height%0A%09%5E3'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.TetrisPieceL);
 
 
@@ -553,7 +679,10 @@ fn: function (){
 var self=this;
 return unescape("%23aaf");
 return self;},
-source: unescape('color%0A%09%5E%27%23aaf%27')}),
+source: unescape('color%0A%09%5E%27%23aaf%27'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.TetrisPieceJ);
 
 smalltalk.addMethod(
@@ -565,7 +694,10 @@ 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')}),
+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(
@@ -577,7 +709,10 @@ fn: function (){
 var self=this;
 return (3);
 return self;},
-source: unescape('height%0A%09%5E3')}),
+source: unescape('height%0A%09%5E3'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.TetrisPieceJ);
 
 
@@ -592,7 +727,10 @@ fn: function (){
 var self=this;
 return unescape("%23faa");
 return self;},
-source: unescape('color%0A%09%5E%27%23faa%27')}),
+source: unescape('color%0A%09%5E%27%23faa%27'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.TetrisPieceI);
 
 smalltalk.addMethod(
@@ -604,7 +742,10 @@ 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')}),
+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(
@@ -616,7 +757,10 @@ fn: function (){
 var self=this;
 return (4);
 return self;},
-source: unescape('height%0A%09%5E4')}),
+source: unescape('height%0A%09%5E4'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.TetrisPieceI);
 
 
@@ -631,7 +775,10 @@ 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')}),
+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(
@@ -643,7 +790,10 @@ fn: function (){
 var self=this;
 return unescape("%23aaf");
 return self;},
-source: unescape('color%0A%09%5E%27%23aaf%27')}),
+source: unescape('color%0A%09%5E%27%23aaf%27'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.TetrisPieceT);
 
 

File diff suppressed because it is too large
+ 332 - 86
js/IDE.js


+ 306 - 51
js/JQuery.js

@@ -8,7 +8,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -20,7 +23,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -32,7 +38,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -44,7 +53,10 @@ 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%0A')}),
+source: unescape('val%3A%20aString%0A%20%20%20%20self%20call%3A%20%27val%27%20withArgument%3A%20aString%0A'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -56,7 +68,10 @@ fn: function (aString){
 var self=this;
 return self['@jquery'].css(aString);
 return self;},
-source: unescape('cssAt%3A%20aString%0A%09%7B%27return%20self%5B%27%27@jquery%27%27%5D.css%28aString%29%27%7D')}),
+source: unescape('cssAt%3A%20aString%0A%09%7B%27return%20self%5B%27%27@jquery%27%27%5D.css%28aString%29%27%7D'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -68,7 +83,10 @@ 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%7B%27self%5B%27%27@jquery%27%27%5D.css%28aString%2C%20anotherString%29%27%7D%0A')}),
+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'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -80,7 +98,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -92,7 +113,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -104,7 +128,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -116,7 +143,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -128,7 +158,10 @@ 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%0A')}),
+source: unescape('height%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27height%27%20withArgument%3A%20anInteger%0A'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -140,7 +173,10 @@ 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%0A')}),
+source: unescape('width%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27width%27%20withArgument%3A%20anInteger%0A'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -152,7 +188,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -164,7 +203,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -176,7 +218,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -188,7 +233,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -200,7 +248,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -212,7 +263,10 @@ 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%0A')}),
+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'),
+messageSends: ["basicAt:", "call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -224,7 +278,10 @@ 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%0A')}),
+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'),
+messageSends: ["basicAt:", "call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -236,7 +293,10 @@ 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%0A')}),
+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'),
+messageSends: ["basicAt:", "call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -248,7 +308,10 @@ 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%0A')}),
+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'),
+messageSends: ["basicAt:", "call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -260,7 +323,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -272,7 +338,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -284,7 +353,10 @@ 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%0A')}),
+source: unescape('scrollLeft%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27scrollLeft%27%20withArgument%3A%20anInteger%0A'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -296,7 +368,10 @@ 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%0A')}),
+source: unescape('scrollTop%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27scrollTop%27%20withArgument%3A%20anInteger%0A'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -308,7 +383,10 @@ 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%0A')}),
+source: unescape('focus%0A%20%20%20%20self%20call%3A%20%27focus%27%0A'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -320,7 +398,10 @@ 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%0A')}),
+source: unescape('show%0A%20%20%20%20self%20call%3A%20%27show%27%0A'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -332,7 +413,10 @@ 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%0A')}),
+source: unescape('hide%0A%20%20%20%20self%20call%3A%20%27hide%27%0A'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -344,7 +428,10 @@ 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%0A')}),
+source: unescape('remove%0A%20%20%20%20self%20call%3A%20%27remove%27%0A'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -356,7 +443,10 @@ 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%7B%27self%5B%27%27@jquery%27%27%5D.bind%28anEventString%2C%20function%28e%29%7BaBlock%28e%2C%20self%29%7D%29%27%7D%0A')}),
+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%28e%2C%20self%29%7D%29%27%7D%0A'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -368,7 +458,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -380,7 +473,10 @@ 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%0A')}),
+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'),
+messageSends: ["appendToJQuery:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -392,7 +488,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -404,7 +503,10 @@ 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%0A')}),
+source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20aJQuery%20appendElement%3A%20jquery%0A'),
+messageSends: ["appendElement:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -417,7 +519,10 @@ 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%0A')}),
+source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20empty.%0A%20%20%20%20self%20append%3A%20anObject%0A'),
+messageSends: ["empty", "append:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -427,9 +532,12 @@ selector: 'empty',
 category: 'DOM insertion',
 fn: function (){
 var self=this;
-smalltalk.send(self, "_call_", ["empty"]);
+return smalltalk.send(self, "_call_", ["empty"]);
 return self;},
-source: unescape('empty%0A%20%20%20%20self%20call%3A%20%27empty%27%0A')}),
+source: unescape('empty%0A%20%20%20%20%5Eself%20call%3A%20%27empty%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -441,7 +549,10 @@ 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')}),
+source: unescape('initializeWithJQueryObject%3A%20anObject%0A%20%20%20%20jquery%20%3A%3D%20anObject%0A'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -453,7 +564,10 @@ fn: function (aString){
 var self=this;
 return self['@jquery'][aString]();
 return self;},
-source: unescape('call%3A%20aString%0A%09%7B%27return%20self%5B%27%27@jquery%27%27%5D%5BaString%5D%28%29%27%7D')}),
+source: unescape('call%3A%20aString%0A%09%7B%27return%20self%5B%27%27@jquery%27%27%5D%5BaString%5D%28%29%27%7D'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -465,7 +579,10 @@ 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%7B%27return%20self%5B%27%27@jquery%27%27%5D%5BaString%5D%28anObject%29%27%7D')}),
+source: unescape('call%3A%20aString%20withArgument%3A%20anObject%0A%20%20%20%20%7B%27return%20self%5B%27%27@jquery%27%27%5D%5BaString%5D%28anObject%29%27%7D'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 smalltalk.addMethod(
@@ -477,7 +594,10 @@ 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%0A')}),
+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'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
 smalltalk.JQuery);
 
 
@@ -492,7 +612,10 @@ 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%7B%27newJQuery%20%3D%20jQuery%28String%28aString%29%29%27%7D.%0A%20%20%20%20%5Eself%20from%3A%20newJQuery%0A')}),
+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'),
+messageSends: ["from:"],
+referencedClasses: []
+}),
 smalltalk.JQuery.klass);
 
 smalltalk.addMethod(
@@ -504,7 +627,55 @@ 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%0A')}),
+source: unescape('from%3A%20anObject%0A%20%20%20%20%5Eself%20new%0A%09initializeWithJQueryObject%3A%20anObject%3B%0A%09yourself%0A'),
+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%7B%27return%20self._from_%28jQuery%28window%29%29%27%7D'),
+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%7B%27return%20self._from_%28jQuery%28body%29%29%27%7D'),
+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%7B%27return%20self._from_%28jQuery%28document%29%29%27%7D'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.JQuery.klass);
 
 
@@ -517,10 +688,13 @@ selector: 'initialize',
 category: 'initialization',
 fn: function (){
 var self=this;
-self.klass.superclass.fn.prototype['_initialize'].apply(self, []);
+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%0A')}),
+source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20settings%20%3A%3D%20Dictionary%20new%0A'),
+messageSends: ["initialize", "new"],
+referencedClasses: [smalltalk.Dictionary]
+}),
 smalltalk.Ajax);
 
 smalltalk.addMethod(
@@ -532,7 +706,10 @@ 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%0A')}),
+source: unescape('at%3A%20aKey%0A%20%20%20%20%5Esettings%20at%3A%20aKey%20ifAbsent%3A%20%5Bnil%5D%0A'),
+messageSends: ["at:ifAbsent:"],
+referencedClasses: []
+}),
 smalltalk.Ajax);
 
 smalltalk.addMethod(
@@ -544,7 +721,10 @@ 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%0A')}),
+source: unescape('at%3A%20aKey%20put%3A%20aValue%0A%20%20%20%20settings%20at%3A%20aKey%20put%3A%20aValue%0A'),
+messageSends: ["at:put:"],
+referencedClasses: []
+}),
 smalltalk.Ajax);
 
 smalltalk.addMethod(
@@ -556,7 +736,10 @@ 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%0A')}),
+source: unescape('url%0A%20%20%20%20%5Eself%20at%3A%20%27url%27%0A'),
+messageSends: ["at:"],
+referencedClasses: []
+}),
 smalltalk.Ajax);
 
 smalltalk.addMethod(
@@ -568,7 +751,10 @@ 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%0A')}),
+source: unescape('url%3A%20aString%0A%20%20%20%20self%20at%3A%20%27url%27%20put%3A%20aString%0A'),
+messageSends: ["at:put:"],
+referencedClasses: []
+}),
 smalltalk.Ajax);
 
 smalltalk.addMethod(
@@ -580,7 +766,10 @@ fn: function (){
 var self=this;
 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')}),
+source: unescape('send%0A%20%20%20%20%7B%27jQuery.ajax%28self%5B%27%27@settings%27%27%5D%29%27%7D%0A'),
+messageSends: [],
+referencedClasses: []
+}),
 smalltalk.Ajax);
 
 
@@ -593,7 +782,73 @@ 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%0A')}),
+source: unescape('url%3A%20aString%0A%20%20%20%20%5Eself%20new%0A%09url%3A%20aString%3B%0A%09yourself%0A'),
+messageSends: ["url:", "yourself", "new"],
+referencedClasses: []
+}),
 smalltalk.Ajax.klass);
 
 
+smalltalk.addMethod(
+'_appendToJQuery_',
+smalltalk.method({
+selector: 'appendToJQuery:',
+category: '*JQuery',
+fn: function (aJQuery){
+var self=this;
+var canvas=nil;
+canvas=smalltalk.send(smalltalk.HTMLCanvas, "_new", []);
+smalltalk.send(self, "_value_", [canvas]);
+smalltalk.send(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'),
+messageSends: ["new", "value:", "append:"],
+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%0A'),
+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%7B%27aJQuery._appendElement_%28String%28self%29%29%27%7D%0A'),
+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%0A'),
+messageSends: ["appendElement:", "element"],
+referencedClasses: []
+}),
+smalltalk.HTMLCanvas);
+

File diff suppressed because it is too large
+ 410 - 315
js/Kernel.js


File diff suppressed because it is too large
+ 228 - 69
js/Parser.js


+ 53 - 15
js/boot.js

@@ -48,19 +48,20 @@ 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) 
        should be added to the smalltalk object, see smalltalk.addClass().
        Superclass linking is *not* handled here, see smalltalk.init()  */
 
-    st.klass = function(spec) {
+    klass = function(spec) {
 	var spec = spec || {};
 	var that;
 	if(spec.meta) {
 	    that = new SmalltalkMetaclass();
 	} else {
-	    that = new (st.klass({meta: true})).fn;
+	    that = new (klass({meta: true})).fn;
 	    that.klass.instanceClass = that;
 	    that.className = spec.className;
 	    that.klass.className = that.className + ' class';
@@ -84,10 +85,12 @@ function Smalltalk(){
 
     st.method = function(spec) {
 	var that = new SmalltalkMethod();
-	that.selector = spec.selector;
-	that.category = spec.category;
-	that.source   = spec.source;
-	that.fn       = spec.fn;
+	that.selector          = spec.selector;
+	that.category          = spec.category;
+	that.source            = spec.source;
+	that.messageSends      = spec.messageSends || [];
+	that.referencedClasses = spec.referencedClasses || [];
+	that.fn                = spec.fn;
 	return that
     };
 
@@ -153,7 +156,7 @@ function Smalltalk(){
        global smalltalk object. */
 
     st.mapClassName = function(className, category, fn, superclass) {
-	st[className] = st.klass({
+	st[className] = klass({
 	    className:  className, 
 	    category:   category, 
 	    superclass: superclass,
@@ -169,7 +172,7 @@ function Smalltalk(){
 	    st[className].iVarNames = iVarNames;
 	    st[className].category = category || st[className].category;
 	} else {
-	    st[className] = smalltalk.klass({
+	    st[className] = klass({
 		className: className, 
 		iVarNames: iVarNames,
 		superclass: superclass
@@ -183,23 +186,24 @@ function Smalltalk(){
     st.addMethod = function(jsSelector, method, klass) {
 	klass.fn.prototype[jsSelector] = method.fn;
 	klass.fn.prototype.methods[method.selector] = method;
+	method.methodClass = klass;
     };
 
     /* Handles Smalltalk message send. Automatically converts undefined to the nil object.
        If the receiver does not understand the selector, call its #doesNotUnderstand: method */
 
-    st.send = function(receiver, selector, args) {
+    st.send = function(receiver, selector, args, klass) {
 	if(typeof receiver === "undefined") {
 	    receiver = nil;
 	}
-	if(receiver[selector]) {
-	    return receiver[selector].apply(receiver, args);
-	} else {
+	var klass = klass || receiver.klass;
+	var method = klass.fn.prototype[selector];
+	if(!method) {
 	    return messageNotUnderstood(receiver, selector, args);
 	}
+	return method.apply(receiver, args);
     };
 
-
     /* handle #dnu:. 
        Assume that the receiver understands #doesNotUnderstand: */
 
@@ -240,13 +244,45 @@ function Smalltalk(){
 	    .replace(/_comma/, ',')
 	    .replace(/_at/, '@')
     };
+
+    /* Converts a JavaScript object to valid Smalltalk Object */
+    st.readJSObject = function(js) {
+	var object = js;
+	var readObject = (js.constructor === Object);
+	var readArray = (js.constructor === Array);
+	
+	if(readObject) {
+	    object = smalltalk.Dictionary._new();
+	}
+	for(var i in js) {
+	    if(readObject) {
+		object._at_put_(i, st.readJSObject(js[i]));
+	    } 
+	    if(readArray) {
+		object[i] = st.readJSObject(js[i]);
+	    }
+	}
+	return object;
+    };
 }
 
-/* Global Smalltalk objects. nil shouldn't be a global. */
+function SmalltalkMethodContext() {
+    this.stack = [];
+
+    this.push = function(context) {
+	stack.push(context);
+    };
+    
+    this.pop = function() {
+	stack.pop();
+    };
+}
+
+/* Global Smalltalk objects. nil and thisContext shouldn't be globals. */
 
 var nil = new SmalltalkNil();
 var smalltalk = new Smalltalk();
-
+var thisContext = nil;
 
 /****************************************************************************************/
 
@@ -275,6 +311,8 @@ smalltalk.mapClassName("String", "Kernel", String, smalltalk.SequenceableCollect
 smalltalk.mapClassName("Array", "Kernel", Array, smalltalk.SequenceableCollection);
 smalltalk.mapClassName("RegularExpression", "Kernel", RegExp, smalltalk.String);
 
+smalltalk.mapClassName("Error", "Kernel", Error, smalltalk.Object);
+
 if(CanvasRenderingContext2D) {
     smalltalk.mapClassName("CanvasRenderingContext", "Canvas", CanvasRenderingContext2D, smalltalk.Object);
 }

+ 1 - 0
js/init.js

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

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