Browse Source

merge upstream/master

Laurent Laffont 13 years ago
parent
commit
f079650f5a
22 changed files with 1322 additions and 871 deletions
  1. 209 162
      css/jtalk.css
  2. BIN
      images/off.png
  3. BIN
      images/offHover.png
  4. BIN
      images/sprite.png
  5. BIN
      images/tinylogo.png
  6. 11 11
      js/Canvas.deploy.js
  7. 19 19
      js/Canvas.js
  8. 0 11
      js/Compiler.deploy.js
  9. 2 18
      js/Compiler.js
  10. 2 2
      js/Examples.js
  11. 76 50
      js/IDE.deploy.js
  12. 133 97
      js/IDE.js
  13. 80 80
      js/JQuery.deploy.js
  14. 128 128
      js/JQuery.js
  15. 142 44
      js/Kernel.deploy.js
  16. 216 78
      js/Kernel.js
  17. 33 33
      js/SUnit.deploy.js
  18. 51 51
      js/SUnit.js
  19. 57 12
      js/boot.js
  20. 0 0
      st/Compiler.st
  21. 89 49
      st/IDE.st
  22. 74 26
      st/Kernel.st

+ 209 - 162
css/jtalk.css

@@ -2,80 +2,132 @@ body.jtalkBody {
     margin-bottom: 350px;
     margin-bottom: 350px;
 }
 }
 
 
-#jtalkTabs {
-    position: fixed;
-    font-family: helvetica,arial,sans;
-    font-size: 12px;
-    line-height: 1;
-    z-index: 1001;
-    bottom: 0;
-    left: 0;
-    right: 0;
+#jtalkTabs, #jtalk .jt_tabs {
     margin: 0;
     margin: 0;
-    padding: 0 0 3px 0;
-    height: 20px;
-    background: transparent;
-}
-#jtalkTabs li {
-    list-style-type: none;
-    display: inline;
-    background: #c8c8c8;
+    padding: 0;
+    background: url("../images/sprite.png") #DBD9C9 0 -27px;
+    height: 22px;
+    width: 100%;
+    list-style: none;
     font-weight: bold;
     font-weight: bold;
-    color: #414141;
-    padding: 4px;
-    border: 1px solid #acacac;
+}
+
+#jtalkTabs li, #jtalk .jt_tabs li {
+    padding: 0 1px;
     cursor: pointer;
     cursor: pointer;
-    line-height: 14px;
-    margin: 0;
+    color: #565656;
 }
 }
 
 
-#jtalkTabs li.selected {
-    background: #dbdbdb;
-    border-top: 0 none;
-    padding: 5px 4px;
-    color: #222;
+#jtalk .ltab, #jtalk .rtab, #jtalk .mtab {
+    height: 22px;
+    float: left;
 }
 }
 
 
-#jtalkTabs li span.close {
-    margin-left: 3px;
-    margin-right: 5px;
+#jtalk .ltab, #jtalk .rtab {
+    width: 8px;
 }
 }
 
 
-#jtalkTabs li span.close:hover {
-    color: #e72a2a;
+#jtalk .rtab {
+    margin-right: 1px;
 }
 }
 
 
-#jtalkTabs li.closeAll {
-    -moz-border-radius: 10px;
-    -webkit-border-radius: 10px;
-    border-radius: 10px;
-    background: #ef3b3b;
-    color: #e3e3e3;
-    font-weight: bold;
-    border: 1px solid #ac1616;
-    margin: 4px;
-    padding: 2px 6px;
-    font-size: 10px;
+#jtalk .mtab {
+    line-height: 20px;
+}
+
+#jtalkTabs li:hover .ltab,
+#jtalk .jt_tabs li:hover .ltab {
+    background: url("../images/sprite.png") -16px -96px;
 }
 }
 
 
-#jtalkTabs li.closeAll:hover {		
-    background: #e72a2a;
+#jtalkTabs li:hover .mtab,
+#jtalk .jt_tabs li:hover .mtab {
+    background: url("../images/sprite.png") 0 -73px;
+}
+
+#jtalkTabs li:hover .rtab,
+#jtalk .jt_tabs li:hover .rtab {
+    background: url("../images/sprite.png") -24px -96px;
+}
+
+#jtalkTabs li.selected,
+#jtalk .jt_tabs li.selected {
+    color: #111;
+}
+
+#jtalkTabs li.selected .ltab,
+#jtalk .jt_tabs li.selected .ltab {
+    background: url("../images/sprite.png") 0px -96px;
+}
+
+#jtalkTabs li.selected .mtab,
+#jtalk .jt_tabs li.selected .mtab {
+    background: url("../images/sprite.png") 0 -50px;
+}
+
+#jtalkTabs li.selected .rtab,
+#jtalk .jt_tabs li.selected .rtab {
+    background: url("../images/sprite.png") -8px -96px;
+}
+
+#jtalkTabs li .close {
+    margin-right: 5px;
+    color: #aaa;
 }
 }
 
 
 #jtalk {
 #jtalk {
        position: fixed;
        position: fixed;
-       bottom: 27px;
+       bottom: 0;
        left: 0;
        left: 0;
        right: 0;
        right: 0;
        height: 330px;
        height: 330px;
        z-index: 1000;
        z-index: 1000;
 }
 }
 
 
+#jtalk, #jtalk button, #jtalk input, #jtalk select {
+       font-family: Lucida Grande, Tahoma, sans-serif;
+       font-size: 11px;
+}
+
+#jtalk #logo {
+    position: absolute;
+    top: 3px;
+    left: 8px;
+    width: 22px;
+    height: 20px;
+    background: url("../images/tinylogo.png") top left no-repeat;
+}
+
+#jtalk #jt_toolbar {
+    height: 27px;
+    background: url("../images/sprite.png") 0 0;
+}
+
+#jtalk #jt_toolbar input {
+    margin-left: 50px;
+    width: 250px;
+}
+
+#jtalk #jt_toolbar #jt_close {
+    position: absolute;
+    right: 4px;
+    top: 6px;
+    width: 16px;
+    height: 16px;
+    background: url('../images/off.png');
+    cursor: pointer;
+}
+
+#jtalk #jt_toolbar #jt_close:hover {
+    background: url('../images/offHover.png');
+}
+
+
 #jtalk .ui-resizable-handle {
 #jtalk .ui-resizable-handle {
-    background-color: #a8a8a8;
+    background-color: transparent;
     top: 0;
     top: 0;
     cursor: row-resize;
     cursor: row-resize;
-    height: 4px;
+    height: 5px;
     left: 0;
     left: 0;
     position: absolute;
     position: absolute;
     right: 0;
     right: 0;
@@ -83,35 +135,35 @@ body.jtalkBody {
 }
 }
 
 
 .jtalkTool {
 .jtalkTool {
-    width: 98%;
-    background: #dbdbdb;
-    border-style: solid;
-    border-width: 1px;
-    border-color: #a8a8a8;
-    color: @dark;
-    font-family: Arial, Helvetica, sans;
-    font-size: 12px;
-    line-height: 1.5em;
-    padding: 15px 1%;
+    width: 100%;
+    color: #333;
+    line-height: 1.3em;
+    padding: 0;
+    margin: 0;
     position: absolute;
     position: absolute;
     bottom: 0;
     bottom: 0;
     left: 0;
     left: 0;
-    top: 4px;
+    top: 49px;
     z-index: 1000;
     z-index: 1000;
+    background: white;
 }
 }
 
 
 .jtalkTool .jt_box {
 .jtalkTool .jt_box {
-    width: 98%;
+    width: 100%;
     margin: 0;
     margin: 0;
     position: absolute;
     position: absolute;
-    top: 15px;
-    bottom: 45px;
+    top: 0;
+    bottom: 27px;
 }
 }
 
 
 .jtalkTool .jt_buttons {
 .jtalkTool .jt_buttons {
     position: absolute;
     position: absolute;
-    width: 98%;
-    bottom: 15px;    
+    bottom: 0;
+    left: 0;
+    right: 0;
+    height: 27px;
+    line-height: 27px;
+    background: url("../images/sprite.png") 0 0 repeat;
 }
 }
 
 
 .jtalkTool .jt_buttons .right {
 .jtalkTool .jt_buttons .right {
@@ -122,36 +174,65 @@ body.jtalkBody {
     font-weight: bold;
     font-weight: bold;
 }
 }
 
 
+
+.jtalkTool button {
+    border: 1px solid transparent;
+    background: transparent;
+    padding: 2px 4px;
+    margin-left: 4px;
+    cursor: pointer;
+}
+
+.jtalkTool button:hover {
+    border-top: 1px solid #fff;
+    border-left: 1px solid #fff;
+    border-right: 1px solid #bbb;
+    border-bottom: 1px solid #bbb;
+}
+
+.jtalkTool  button:active {
+    border-top: 1px solid #bbb;
+    border-left: 1px solid #bbb;
+    border-right: 1px solid #fff;
+    border-bottom: 1px solid #fff;
+    background: #ddd;
+}
+
+.jtalkTool select, #jtalk input {
+    border-top: 1px solid #bbb;
+    border-left: 1px solid #bbb;
+    border-right: 1px solid #fff;
+    border-bottom: 1px solid #fff;
+    background: #fff;
+    margin-top: 0;
+    margin-bottom: 0;
+    padding-top: 0;
+    padding-bottom: 0;
+}
+
 .jtalkTool li {
 .jtalkTool li {
     margin: 0;
     margin: 0;
     padding: 0;
     padding: 0;
 }
 }
     
     
-.jtalkTool .jt_buttons button,
-.jtalkTool .jt_buttons select {
-    font-size: 12px;
-}
-
 .jtalkTool .source {
 .jtalkTool .source {
     height: 100%;
     height: 100%;
 }
 }
 
 
 .jtalkTool textarea,
 .jtalkTool textarea,
 .jtalkTool input {
 .jtalkTool input {
-    border: 1px solid;
-    border-color: #a8a8a8;
+    border: 0 none;
     font-family: Arial, Helvetica, sans;
     font-family: Arial, Helvetica, sans;
-    line-height: 1.2em;
-    font-size: 13px;
+    line-height: 1.3em;
+    font-size: 12px;
     position: relative;
     position: relative;
     padding: 0;
     padding: 0;
 }
 }
 
 
 .jtalkTool .CodeMirror {
 .jtalkTool .CodeMirror {
-    border: 1px solid;
-    border-color: #a8a8a8;
+    border: 0 none;
     font-family: Arial, Helvetica, sans;
     font-family: Arial, Helvetica, sans;
-    font-size: 13px;
+    font-size: 12px;
     line-height: 1.3em;
     line-height: 1.3em;
     height: 100%;
     height: 100%;
     background: white;
     background: white;
@@ -177,42 +258,28 @@ body.jtalkBody {
 
 
 .jtalkTool .jt_commit {
 .jtalkTool .jt_commit {
     position: absolute;
     position: absolute;
-    top: 140px;
+    top: 129px;
     left: 0;
     left: 0;
-    font-size: 12px;
+    z-index: 1;
 }
 }
 
 
 .jtalkTool .jt_column {
 .jtalkTool .jt_column {
-    width: 24%;
+    width: 25%;
     padding: 0;
     padding: 0;
     margin: 0;
     margin: 0;
     float: left;
     float: left;
-    border: 1px solid;
-    border-color: #a8a8a8;
+    outline: 1px solid #aaa;
+    border: 0 none;
     height: 130px;
     height: 130px;
-    overflow-y: scroll;
+    overflow-y: auto;
     background: #fff;
     background: #fff;
+    color: #111;
     position: absolute;
     position: absolute;
     top: 0;
     top: 0;
 }
 }
 
 
-.jtalkTool .jt_column.value {
-    left: 25.2%;
-    width: 74.8%;
-}
-
-.jtalkTool .jt_column.browser {
-    top: 30px;
-}
-
-.jtalkTool .jt_column.categories {
-    left: 0%;
-    height: 105px;
-}
-
 .jtalkTool .jt_column.classes {
 .jtalkTool .jt_column.classes {
-    height: 105px;
-    left: 25.2%
+    left: 25%
 }
 }
 
 
 .jtalkTool .jt_column.classes ul {
 .jtalkTool .jt_column.classes ul {
@@ -225,18 +292,18 @@ body.jtalkBody {
 }
 }
 
 
 .jtalkTool .jt_column.protocols {
 .jtalkTool .jt_column.protocols {
-    left: 50.4%
+    left: 50%
 }
 }
 
 
 .jtalkTool .jt_column.methods {
 .jtalkTool .jt_column.methods {
-    left: 75.6%
+    left: 75%
 }
 }
 
 
 .jtalkTool .jt_column li {
 .jtalkTool .jt_column li {
     list-style-type: none;
     list-style-type: none;
     padding-left: 5px;
     padding-left: 5px;
     cursor: pointer;
     cursor: pointer;
-    color: #333;
+    color: #111;
     font-weight: bold;
     font-weight: bold;
 }
 }
 
 
@@ -250,46 +317,18 @@ body.jtalkBody {
     color: white;
     color: white;
 }
 }
 
 
-.jtalkTool .jt_tabs {
-    top: 136px;
+#jtalk .jtalkTool .jt_tabs {
+    top: 130px;
     position: absolute;
     position: absolute;
-    left: 25.2%;
-    padding: 0;
-    margin: 0;
-}
-
-.jtalkTool .jt_tabs li {
-    color: #666;
-    font-weight: bold;
-    cursor: pointer;
-    list-style-type: none;
-    float: left;
-    padding: 2px 4px;
-    margin-right: 2px;
-    background: #ccc;
-    border: 1px solid #a8a8a8;
-    -moz-border-radius-bottomleft: 8px;
-    -moz-border-radius-bottomright: 8px;
-    -webkit-border-bottom-left-radius: 8px;
-    -webkit-border-bottom-right-radius: 8px;
-    border-bottom-left-radius: 8px;
-    border-bottom-right-radius: 8px;
-    height: 20px;
-    line-height: 18px;
 }
 }
 
 
-.jtalkTool .jt_tabs li.selected,
-.jtalkTool .jt_tabs li.selected:hover {
-    background: white;
-    border: 1px solid #b3b3b3;
-    border-top: 1px solid white;
-    color: #222;
+#jtalk .jtalkTool .jt_tabs.jt_browser {
+    padding-left: 25%;
 }
 }
 
 
-
 .jtalkTool .jt_sourceCode {
 .jtalkTool .jt_sourceCode {
     position: absolute;
     position: absolute;
-    top: 175px;
+    top: 152px;
     bottom: 0;
     bottom: 0;
     left: 0;
     left: 0;
     right: 0;
     right: 0;
@@ -303,39 +342,42 @@ body.jtalkBody {
 /* Debugger & inspector */
 /* Debugger & inspector */
 
 
 .jtalkTool .jt_box .label {
 .jtalkTool .jt_box .label {
-	width: 98%;
+	width: 100%;
 	font-weight: bold;
 	font-weight: bold;
 	text-align: center;
 	text-align: center;
 	position: absolute;
 	position: absolute;
-	line-height: 1.2em;
+	line-height: 1.5em;
 	font-size: 16px;
 	font-size: 16px;
 	color: red;
 	color: red;
+	background: url("../images/sprite.png") top left repeat;
+	height: 27px;
 }
 }
 
 
 .jtalkTool .jt_box .jt_column.debugger {
 .jtalkTool .jt_box .jt_column.debugger {
-    top: 175px;
+    top: 158px;
 }
 }
 
 
 .jtalkTool .jt_box .jt_column.debugger.contexts {
 .jtalkTool .jt_box .jt_column.debugger.contexts {
-    top: 30px;
+    top: 27px;
     width: 100%;
     width: 100%;
 }
 }
 
 
 .jtalkTool .jt_sourceCode.debugger {
 .jtalkTool .jt_sourceCode.debugger {
     width: 60%;
     width: 60%;
+    top: 158px;
 }
 }
 
 
 .jtalkTool .jt_box .jt_column.debugger.variables {
 .jtalkTool .jt_box .jt_column.debugger.variables {
     width: 10%;
     width: 10%;
-    left: 61%;
+    left: 60%;
     bottom: 0;
     bottom: 0;
     position: absolute;
     position: absolute;
     height: auto;
     height: auto;
 }
 }
 
 
 .jtalkTool .jt_box .jt_column.debugger.inspector {
 .jtalkTool .jt_box .jt_column.debugger.inspector {
-    width: 28%;
-    left: 72%;
+    width: 30%;
+    left: 70%;
     bottom: 0;
     bottom: 0;
     position: absolute;
     position: absolute;
     height: auto;
     height: auto;
@@ -343,12 +385,17 @@ body.jtalkBody {
 
 
 .jtalkTool .jt_button.debugger.inspect {
 .jtalkTool .jt_button.debugger.inspect {
     position: absolute;
     position: absolute;
-    left: 61%;
+    left: 60%;
+}
+
+.jtalkTool .jt_column.value {
+    left: 25%;
+    width: 75%;
 }
 }
 
 
 .jtalkTool .jt_buttons.inspector {
 .jtalkTool .jt_buttons.inspector {
     position: absolute;
     position: absolute;
-    top: 140px;
+    top: 130px;
 }
 }
 
 
 
 
@@ -361,18 +408,18 @@ body.jtalkBody {
 .jtalkTool .jt_box .jt_column.implementors,
 .jtalkTool .jt_box .jt_column.implementors,
 .jtalkTool .jt_box .jt_column.senders,
 .jtalkTool .jt_box .jt_column.senders,
 .jtalkTool .jt_box .jt_column.referenced_classes {
 .jtalkTool .jt_box .jt_column.referenced_classes {
-	top: 30px;
-	height: 100%;
-	bottom: 0px;
-	width: 33%;
+	top: 20px;
+	height: auto;
+	bottom: 0;
+	width: 33.333%;
 }
 }
 
 
 .jtalkTool .jt_box .jt_column.senders {
 .jtalkTool .jt_box .jt_column.senders {
-	left: 33.6%
+	left: 33.333%
 }
 }
 
 
 .jtalkTool .jt_box .jt_column.referenced_classes {
 .jtalkTool .jt_box .jt_column.referenced_classes {
-        left: 67.3%
+        left: 66.67%
 }
 }
 
 
 .jtalkTool .jt_box .jt_column.implementors .column_label, 
 .jtalkTool .jt_box .jt_column.implementors .column_label, 
@@ -416,10 +463,10 @@ body.jtalkBody {
 
 
 .jtalkTool .sunit.status {
 .jtalkTool .sunit.status {
 	position: absolute;
 	position: absolute;
-	left: 50.4%;
-	width: 49%;
+	left: 50%;
+	width: 50%;
+	outline: 1px solid #aaa;
 	background: white;
 	background: white;
-	border: 1px solid #a8a8a8;
 	height: 40px
 	height: 40px
 }
 }
 
 
@@ -440,11 +487,11 @@ body.jtalkBody {
 
 
 .jtalkTool .progress_bar {
 .jtalkTool .progress_bar {
 	position: absolute;
 	position: absolute;
-	left: 50.4%;
-	width: 49%;
-	top: 50px;
-	border: 1px solid #a8a8a8;
+	left: 50%;
+	width: 50%;
+	top: 40px;
 	background: white;
 	background: white;
+	outline: 1px solid #aaa;
 	min-height: 20px
 	min-height: 20px
 }
 }
 
 
@@ -453,17 +500,17 @@ body.jtalkBody {
 	min-height: 20px;
 	min-height: 20px;
 }
 }
 
 
-.jtalkTool .jt_column.sunit.methods {
-	left: 50.4%;
+.jtalkTool .jt_column.results.sunit {
+	left: 50%;
 	height: auto;
 	height: auto;
-        width: 49%;
-        top: 80px;
+        width: 50%;
+        top: 62px;
         bottom: 0;
         bottom: 0;
 }
 }
 
 
-.jtalkTool .jt_column.sunit.methods .errors {
+.jtalkTool .jt_column.sunit.results .errors {
     color: red;
     color: red;
 }
 }
 
 
-.jtalkTool .jt_column.sunit.methods ul {padding: 0; margin: 0}
+/*.jtalkTool .jt_column.sunit.results ul {padding: 0; margin: 0}*/
 
 

BIN
images/off.png


BIN
images/offHover.png


BIN
images/sprite.png


BIN
images/tinylogo.png


+ 11 - 11
js/Canvas.deploy.js

@@ -541,6 +541,17 @@ return self;}
 }),
 }),
 smalltalk.TagBrush);
 smalltalk.TagBrush);
 
 
+smalltalk.addMethod(
+'_empty',
+smalltalk.method({
+selector: 'empty',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []);
+return self;}
+}),
+smalltalk.TagBrush);
+
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_at_put_',
 '_at_put_',
 smalltalk.method({
 smalltalk.method({
@@ -807,17 +818,6 @@ return self;}
 }),
 }),
 smalltalk.TagBrush);
 smalltalk.TagBrush);
 
 
-smalltalk.addMethod(
-'_empty',
-smalltalk.method({
-selector: 'empty',
-fn: function (){
-var self=this;
-smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []);
-return self;}
-}),
-smalltalk.TagBrush);
-
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_fromString_canvas_',
 '_fromString_canvas_',

+ 19 - 19
js/Canvas.js

@@ -60,7 +60,7 @@ return self;},
 args: [],
 args: [],
 source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20root%20ifNil%3A%20%5Broot%20%3A%3D%20TagBrush%20fromString%3A%20%27div%27%20canvas%3A%20self%5D'),
 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:"],
 messageSends: ["initialize", "ifNil:", "fromString:canvas:"],
-referencedClasses: [smalltalk.nil]
+referencedClasses: []
 }),
 }),
 smalltalk.HTMLCanvas);
 smalltalk.HTMLCanvas);
 
 
@@ -76,7 +76,7 @@ return self;},
 args: ["aJQuery"],
 args: ["aJQuery"],
 source: unescape('initializeFromJQuery%3A%20aJQuery%0A%20%20%20%20root%20%3A%3D%20TagBrush%20fromJQuery%3A%20aJQuery%20canvas%3A%20self'),
 source: unescape('initializeFromJQuery%3A%20aJQuery%0A%20%20%20%20root%20%3A%3D%20TagBrush%20fromJQuery%3A%20aJQuery%20canvas%3A%20self'),
 messageSends: ["fromJQuery:canvas:"],
 messageSends: ["fromJQuery:canvas:"],
-referencedClasses: [smalltalk.nil]
+referencedClasses: []
 }),
 }),
 smalltalk.HTMLCanvas);
 smalltalk.HTMLCanvas);
 
 
@@ -92,7 +92,7 @@ return self;},
 args: ["aString"],
 args: ["aString"],
 source: unescape('newTag%3A%20aString%0A%20%20%20%20%5ETagBrush%20fromString%3A%20aString%20canvas%3A%20self'),
 source: unescape('newTag%3A%20aString%0A%20%20%20%20%5ETagBrush%20fromString%3A%20aString%20canvas%3A%20self'),
 messageSends: ["fromString:canvas:"],
 messageSends: ["fromString:canvas:"],
-referencedClasses: [smalltalk.nil]
+referencedClasses: []
 }),
 }),
 smalltalk.HTMLCanvas);
 smalltalk.HTMLCanvas);
 
 
@@ -781,6 +781,22 @@ referencedClasses: []
 }),
 }),
 smalltalk.TagBrush);
 smalltalk.TagBrush);
 
 
+smalltalk.addMethod(
+'_empty',
+smalltalk.method({
+selector: 'empty',
+category: 'adding',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []);
+return self;},
+args: [],
+source: unescape('empty%0A%09self%20asJQuery%20empty'),
+messageSends: ["empty", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_at_put_',
 '_at_put_',
 smalltalk.method({
 smalltalk.method({
@@ -1167,22 +1183,6 @@ referencedClasses: []
 }),
 }),
 smalltalk.TagBrush);
 smalltalk.TagBrush);
 
 
-smalltalk.addMethod(
-'_empty',
-smalltalk.method({
-selector: 'empty',
-category: 'adding',
-fn: function (){
-var self=this;
-smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []);
-return self;},
-args: [],
-source: unescape('empty%0A%09self%20asJQuery%20empty'),
-messageSends: ["empty", "asJQuery"],
-referencedClasses: []
-}),
-smalltalk.TagBrush);
-
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_fromString_canvas_',
 '_fromString_canvas_',

+ 0 - 11
js/Compiler.deploy.js

@@ -1796,17 +1796,6 @@ smalltalk.Compiler.klass);
 
 
 
 
 smalltalk.addClass('DoIt', smalltalk.Object, [], 'Compiler');
 smalltalk.addClass('DoIt', smalltalk.Object, [], 'Compiler');
-smalltalk.addMethod(
-'_doIt',
-smalltalk.method({
-selector: 'doIt',
-fn: function (){
-var self=this;
-return smalltalk.send((function(){return smalltalk.send((1), "_fdsfds", []);}), "_value", []);
-return self;}
-}),
-smalltalk.DoIt);
-
 
 
 
 
 smalltalk.addClass('DynamicArrayNode', smalltalk.Node, [], 'Compiler');
 smalltalk.addClass('DynamicArrayNode', smalltalk.Node, [], 'Compiler');

+ 2 - 18
js/Compiler.js

@@ -2059,7 +2059,7 @@ var self=this;
 return smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_parse_", [aString]);
 return smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk), "_current", []), "_parse_", [aString]);
 return self;},
 return self;},
 args: ["aString"],
 args: ["aString"],
-source: unescape('parse%3A%20aString%0A%20%20%20%20%5ESmalltalk%20current%20parse%3A%20aString%20'),
+source: unescape('parse%3A%20aString%0A%20%20%20%20%5ESmalltalk%20current%20parse%3A%20aString'),
 messageSends: ["parse:", "current"],
 messageSends: ["parse:", "current"],
 referencedClasses: [smalltalk.Smalltalk]
 referencedClasses: [smalltalk.Smalltalk]
 }),
 }),
@@ -2175,7 +2175,7 @@ return self;},
 args: [],
 args: [],
 source: unescape('recompileAll%0A%09Smalltalk%20current%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09Transcript%20show%3A%20each%3B%20cr.%0A%09%09%5Bself%20recompile%3A%20each%5D%20valueWithTimeout%3A%20100%5D'),
 source: unescape('recompileAll%0A%09Smalltalk%20current%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%09Transcript%20show%3A%20each%3B%20cr.%0A%09%09%5Bself%20recompile%3A%20each%5D%20valueWithTimeout%3A%20100%5D'),
 messageSends: ["do:", "classes", "current", "show:", "cr", "valueWithTimeout:", "recompile:"],
 messageSends: ["do:", "classes", "current", "show:", "cr", "valueWithTimeout:", "recompile:"],
-referencedClasses: [smalltalk.Smalltalk,smalltalk.Transcript]
+referencedClasses: [smalltalk.Smalltalk]
 }),
 }),
 smalltalk.Compiler);
 smalltalk.Compiler);
 
 
@@ -2511,22 +2511,6 @@ smalltalk.Compiler.klass);
 
 
 
 
 smalltalk.addClass('DoIt', smalltalk.Object, [], 'Compiler');
 smalltalk.addClass('DoIt', smalltalk.Object, [], 'Compiler');
-smalltalk.addMethod(
-'_doIt',
-smalltalk.method({
-selector: 'doIt',
-category: '',
-fn: function (){
-var self=this;
-return smalltalk.send((function(){return smalltalk.send((1), "_fdsfds", []);}), "_value", []);
-return self;},
-args: [],
-source: unescape('doIt%20%5E%5B1%20fdsfds%5D%20value'),
-messageSends: ["value", "fdsfds"],
-referencedClasses: []
-}),
-smalltalk.DoIt);
-
 
 
 
 
 smalltalk.addClass('DynamicArrayNode', smalltalk.Node, [], 'Compiler');
 smalltalk.addClass('DynamicArrayNode', smalltalk.Node, [], 'Compiler');

+ 2 - 2
js/Examples.js

@@ -288,7 +288,7 @@ return self;},
 args: [],
 args: [],
 source: unescape('newPiece%0A%09movingPiece%20%3A%3D%20TetrisPiece%20atRandom'),
 source: unescape('newPiece%0A%09movingPiece%20%3A%3D%20TetrisPiece%20atRandom'),
 messageSends: ["atRandom"],
 messageSends: ["atRandom"],
-referencedClasses: [smalltalk.TetrisPiece]
+referencedClasses: []
 }),
 }),
 smalltalk.Tetris);
 smalltalk.Tetris);
 
 
@@ -375,7 +375,7 @@ return self;},
 args: ["html"],
 args: ["html"],
 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"],
 messageSends: ["canvas", "at:put:", "asString", "width", "height", "tagBrush:", "redraw"],
-referencedClasses: [smalltalk.CanvasRenderingContext]
+referencedClasses: []
 }),
 }),
 smalltalk.Tetris);
 smalltalk.Tetris);
 
 

File diff suppressed because it is too large
+ 76 - 50
js/IDE.deploy.js


File diff suppressed because it is too large
+ 133 - 97
js/IDE.js


+ 80 - 80
js/JQuery.deploy.js

@@ -353,232 +353,232 @@ return self;}
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_do_',
+'_fadeIn',
 smalltalk.method({
 smalltalk.method({
-selector: 'do:',
-fn: function (aBlock){
+selector: 'fadeIn',
+fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(self, "_elementsDo_", [(function(anElement){return smalltalk.send(aBlock, "_value_", [smalltalk.send((smalltalk.JQuery || JQuery), "_fromElement_", [anElement])]);})]);
+smalltalk.send(self, "_call_", ["fadeIn"]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_focus',
+'_slideDown',
 smalltalk.method({
 smalltalk.method({
-selector: 'focus',
+selector: 'slideDown',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(self, "_call_", ["focus"]);
+smalltalk.send(self, "_call_", ["slideDown"]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_show',
+'_fadeInSlow',
 smalltalk.method({
 smalltalk.method({
-selector: 'show',
+selector: 'fadeInSlow',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(self, "_call_", ["show"]);
+smalltalk.send(self, "_call_withArgument_", ["fadeIn", "slow"]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_hide',
+'_fadeOut',
 smalltalk.method({
 smalltalk.method({
-selector: 'hide',
+selector: 'fadeOut',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(self, "_call_", ["hide"]);
+smalltalk.send(self, "_call_", ["fadeOut"]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_remove',
+'_fadeOutSlow',
 smalltalk.method({
 smalltalk.method({
-selector: 'remove',
+selector: 'fadeOutSlow',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(self, "_call_", ["remove"]);
+smalltalk.send(self, "_call_withArgument_", ["fadeOut", "slow"]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_on_do_',
+'_slideUp',
 smalltalk.method({
 smalltalk.method({
-selector: 'on:do:',
-fn: function (anEventString, aBlock){
+selector: 'slideUp',
+fn: function (){
 var self=this;
 var self=this;
-self['@jquery'].bind(anEventString, function(e){aBlock(e, self)});
+smalltalk.send(self, "_call_", ["slideUp"]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_removeEvents_',
+'_fadeOut_do_',
 smalltalk.method({
 smalltalk.method({
-selector: 'removeEvents:',
-fn: function (aString){
+selector: 'fadeOut:do:',
+fn: function (aString, aBlock){
 var self=this;
 var self=this;
-smalltalk.send(self, "_call_withArgument_", ["unbind", aString]);
+self['@jquery'].fadeOut(aString, aBlock);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_initializeWithJQueryObject_',
+'_do_',
 smalltalk.method({
 smalltalk.method({
-selector: 'initializeWithJQueryObject:',
-fn: function (anObject){
+selector: 'do:',
+fn: function (aBlock){
 var self=this;
 var self=this;
-self['@jquery']=anObject;
+smalltalk.send(self, "_elementsDo_", [(function(anElement){return smalltalk.send(aBlock, "_value_", [smalltalk.send((smalltalk.JQuery || JQuery), "_fromElement_", [anElement])]);})]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_call_',
+'_focus',
 smalltalk.method({
 smalltalk.method({
-selector: 'call:',
-fn: function (aString){
+selector: 'focus',
+fn: function (){
 var self=this;
 var self=this;
-return self['@jquery'][aString]();
+smalltalk.send(self, "_call_", ["focus"]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_call_withArgument_',
+'_show',
 smalltalk.method({
 smalltalk.method({
-selector: 'call:withArgument:',
-fn: function (aString, anObject){
+selector: 'show',
+fn: function (){
 var self=this;
 var self=this;
-return self['@jquery'][aString](anObject);
+smalltalk.send(self, "_call_", ["show"]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_elementsDo_',
+'_hide',
 smalltalk.method({
 smalltalk.method({
-selector: 'elementsDo:',
-fn: function (aBlock){
+selector: 'hide',
+fn: function (){
 var self=this;
 var self=this;
-self['@jquery'].each(function(index, element){aBlock(element, self)});
+smalltalk.send(self, "_call_", ["hide"]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_hasClass_',
+'_remove',
 smalltalk.method({
 smalltalk.method({
-selector: 'hasClass:',
-fn: function (aString){
+selector: 'remove',
+fn: function (){
 var self=this;
 var self=this;
-return smalltalk.send(self, "_call_withArgument_", ["hasClass", aString]);
+smalltalk.send(self, "_call_", ["remove"]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_find_',
+'_on_do_',
 smalltalk.method({
 smalltalk.method({
-selector: 'find:',
-fn: function (aSelector){
+selector: 'on:do:',
+fn: function (anEventString, aBlock){
 var self=this;
 var self=this;
-return smalltalk.send(self, "_call_withArgument_", ["find", aSelector]);
+self['@jquery'].bind(anEventString, function(e){aBlock(e, self)});
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_onLoadDo_',
+'_removeEvents_',
 smalltalk.method({
 smalltalk.method({
-selector: 'onLoadDo:',
-fn: function (aBlock){
+selector: 'removeEvents:',
+fn: function (aString){
 var self=this;
 var self=this;
-smalltalk.send(self, "_call_withArgument_", ["load", aBlock]);
+smalltalk.send(self, "_call_withArgument_", ["unbind", aString]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_fadeIn',
+'_onLoadDo_',
 smalltalk.method({
 smalltalk.method({
-selector: 'fadeIn',
-fn: function (){
+selector: 'onLoadDo:',
+fn: function (aBlock){
 var self=this;
 var self=this;
-smalltalk.send(self, "_call_", ["fadeIn"]);
+smalltalk.send(self, "_call_withArgument_", ["load", aBlock]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_slideDown',
+'_initializeWithJQueryObject_',
 smalltalk.method({
 smalltalk.method({
-selector: 'slideDown',
-fn: function (){
+selector: 'initializeWithJQueryObject:',
+fn: function (anObject){
 var self=this;
 var self=this;
-smalltalk.send(self, "_call_", ["slideDown"]);
+self['@jquery']=anObject;
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_fadeInSlow',
+'_call_',
 smalltalk.method({
 smalltalk.method({
-selector: 'fadeInSlow',
-fn: function (){
+selector: 'call:',
+fn: function (aString){
 var self=this;
 var self=this;
-smalltalk.send(self, "_call_withArgument_", ["fadeIn", "slow"]);
+return self['@jquery'][aString]();
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_fadeOut',
+'_call_withArgument_',
 smalltalk.method({
 smalltalk.method({
-selector: 'fadeOut',
-fn: function (){
+selector: 'call:withArgument:',
+fn: function (aString, anObject){
 var self=this;
 var self=this;
-smalltalk.send(self, "_call_", ["fadeOut"]);
+return self['@jquery'][aString](anObject);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_fadeOutSlow',
+'_elementsDo_',
 smalltalk.method({
 smalltalk.method({
-selector: 'fadeOutSlow',
-fn: function (){
+selector: 'elementsDo:',
+fn: function (aBlock){
 var self=this;
 var self=this;
-smalltalk.send(self, "_call_withArgument_", ["fadeOut", "slow"]);
+self['@jquery'].each(function(index, element){aBlock(element, self)});
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_slideUp',
+'_hasClass_',
 smalltalk.method({
 smalltalk.method({
-selector: 'slideUp',
-fn: function (){
+selector: 'hasClass:',
+fn: function (aString){
 var self=this;
 var self=this;
-smalltalk.send(self, "_call_", ["slideUp"]);
+return smalltalk.send(self, "_call_withArgument_", ["hasClass", aString]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_fadeOut_do_',
+'_find_',
 smalltalk.method({
 smalltalk.method({
-selector: 'fadeOut:do:',
-fn: function (aString, aBlock){
+selector: 'find:',
+fn: function (aSelector){
 var self=this;
 var self=this;
-self['@jquery'].fadeOut(aString, aBlock);
+return smalltalk.send(self, "_call_withArgument_", ["find", aSelector]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);

+ 128 - 128
js/JQuery.js

@@ -512,6 +512,118 @@ referencedClasses: []
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
+smalltalk.addMethod(
+'_fadeIn',
+smalltalk.method({
+selector: 'fadeIn',
+category: 'effects',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_call_", ["fadeIn"]);
+return self;},
+args: [],
+source: unescape('fadeIn%0A%20%09self%20call%3A%20%27fadeIn%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_slideDown',
+smalltalk.method({
+selector: 'slideDown',
+category: 'effects',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_call_", ["slideDown"]);
+return self;},
+args: [],
+source: unescape('slideDown%0A%20%09self%20call%3A%20%27slideDown%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_fadeInSlow',
+smalltalk.method({
+selector: 'fadeInSlow',
+category: 'effects',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["fadeIn", "slow"]);
+return self;},
+args: [],
+source: unescape('fadeInSlow%0A%20%09self%20call%3A%20%27fadeIn%27%20withArgument%3A%20%27slow%27'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_fadeOut',
+smalltalk.method({
+selector: 'fadeOut',
+category: 'effects',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_call_", ["fadeOut"]);
+return self;},
+args: [],
+source: unescape('fadeOut%0A%20%09self%20call%3A%20%27fadeOut%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_fadeOutSlow',
+smalltalk.method({
+selector: 'fadeOutSlow',
+category: 'effects',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["fadeOut", "slow"]);
+return self;},
+args: [],
+source: unescape('fadeOutSlow%0A%20%09self%20call%3A%20%27fadeOut%27%20withArgument%3A%20%27slow%27'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_slideUp',
+smalltalk.method({
+selector: 'slideUp',
+category: 'effects',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_call_", ["slideUp"]);
+return self;},
+args: [],
+source: unescape('slideUp%0A%20%09self%20call%3A%20%27slideUp%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_fadeOut_do_',
+smalltalk.method({
+selector: 'fadeOut:do:',
+category: 'effects',
+fn: function (aString, aBlock){
+var self=this;
+self['@jquery'].fadeOut(aString, aBlock);
+return self;},
+args: ["aString", "aBlock"],
+source: unescape('fadeOut%3A%20aString%20do%3A%20aBlock%0A%20%20%20%20%3Cself%5B%27@jquery%27%5D.fadeOut%28aString%2C%20aBlock%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_do_',
 '_do_',
 smalltalk.method({
 smalltalk.method({
@@ -624,6 +736,22 @@ referencedClasses: []
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
+smalltalk.addMethod(
+'_onLoadDo_',
+smalltalk.method({
+selector: 'onLoadDo:',
+category: 'events',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["load", aBlock]);
+return self;},
+args: ["aBlock"],
+source: unescape('onLoadDo%3A%20aBlock%0A%09%22Bind%20an%20event%20handler%20to%20the%20%27load%27%20JavaScript%20event.%22%0A%09self%20call%3A%20%27load%27%20withArgument%3A%20aBlock'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_initializeWithJQueryObject_',
 '_initializeWithJQueryObject_',
 smalltalk.method({
 smalltalk.method({
@@ -720,134 +848,6 @@ referencedClasses: []
 }),
 }),
 smalltalk.JQuery);
 smalltalk.JQuery);
 
 
-smalltalk.addMethod(
-'_onLoadDo_',
-smalltalk.method({
-selector: 'onLoadDo:',
-category: 'events',
-fn: function (aBlock){
-var self=this;
-smalltalk.send(self, "_call_withArgument_", ["load", aBlock]);
-return self;},
-args: ["aBlock"],
-source: unescape('onLoadDo%3A%20aBlock%0A%09%22Bind%20an%20event%20handler%20to%20the%20%27load%27%20JavaScript%20event.%22%0A%09self%20call%3A%20%27load%27%20withArgument%3A%20aBlock'),
-messageSends: ["call:withArgument:"],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_fadeIn',
-smalltalk.method({
-selector: 'fadeIn',
-category: 'effects',
-fn: function (){
-var self=this;
-smalltalk.send(self, "_call_", ["fadeIn"]);
-return self;},
-args: [],
-source: unescape('fadeIn%0A%20%09self%20call%3A%20%27fadeIn%27'),
-messageSends: ["call:"],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_slideDown',
-smalltalk.method({
-selector: 'slideDown',
-category: 'effects',
-fn: function (){
-var self=this;
-smalltalk.send(self, "_call_", ["slideDown"]);
-return self;},
-args: [],
-source: unescape('slideDown%0A%20%09self%20call%3A%20%27slideDown%27'),
-messageSends: ["call:"],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_fadeInSlow',
-smalltalk.method({
-selector: 'fadeInSlow',
-category: 'effects',
-fn: function (){
-var self=this;
-smalltalk.send(self, "_call_withArgument_", ["fadeIn", "slow"]);
-return self;},
-args: [],
-source: unescape('fadeInSlow%0A%20%09self%20call%3A%20%27fadeIn%27%20withArgument%3A%20%27slow%27'),
-messageSends: ["call:withArgument:"],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_fadeOut',
-smalltalk.method({
-selector: 'fadeOut',
-category: 'effects',
-fn: function (){
-var self=this;
-smalltalk.send(self, "_call_", ["fadeOut"]);
-return self;},
-args: [],
-source: unescape('fadeOut%0A%20%09self%20call%3A%20%27fadeOut%27'),
-messageSends: ["call:"],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_fadeOutSlow',
-smalltalk.method({
-selector: 'fadeOutSlow',
-category: 'effects',
-fn: function (){
-var self=this;
-smalltalk.send(self, "_call_withArgument_", ["fadeOut", "slow"]);
-return self;},
-args: [],
-source: unescape('fadeOutSlow%0A%20%09self%20call%3A%20%27fadeOut%27%20withArgument%3A%20%27slow%27'),
-messageSends: ["call:withArgument:"],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_slideUp',
-smalltalk.method({
-selector: 'slideUp',
-category: 'effects',
-fn: function (){
-var self=this;
-smalltalk.send(self, "_call_", ["slideUp"]);
-return self;},
-args: [],
-source: unescape('slideUp%0A%20%09self%20call%3A%20%27slideUp%27'),
-messageSends: ["call:"],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_fadeOut_do_',
-smalltalk.method({
-selector: 'fadeOut:do:',
-category: 'effects',
-fn: function (aString, aBlock){
-var self=this;
-self['@jquery'].fadeOut(aString, aBlock);
-return self;},
-args: ["aString", "aBlock"],
-source: unescape('fadeOut%3A%20aString%20do%3A%20aBlock%0A%20%20%20%20%3Cself%5B%27@jquery%27%5D.fadeOut%28aString%2C%20aBlock%29%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_fromString_',
 '_fromString_',

+ 142 - 44
js/Kernel.deploy.js

@@ -636,6 +636,17 @@ return self;}
 }),
 }),
 smalltalk.Smalltalk);
 smalltalk.Smalltalk);
 
 
+smalltalk.addMethod(
+'_modules',
+smalltalk.method({
+selector: 'modules',
+fn: function (){
+var self=this;
+return self.modules.all();
+return self;}
+}),
+smalltalk.Smalltalk);
+
 
 
 smalltalk.Smalltalk.klass.iVarNames = ['current'];
 smalltalk.Smalltalk.klass.iVarNames = ['current'];
 smalltalk.addMethod(
 smalltalk.addMethod(
@@ -650,6 +661,42 @@ return self;}
 smalltalk.Smalltalk.klass);
 smalltalk.Smalltalk.klass);
 
 
 
 
+smalltalk.addClass('Module', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_name',
+smalltalk.method({
+selector: 'name',
+fn: function (){
+var self=this;
+return self.moduleName || nil;
+return self;}
+}),
+smalltalk.Module);
+
+smalltalk.addMethod(
+'_requires',
+smalltalk.method({
+selector: 'requires',
+fn: function (){
+var self=this;
+return self.requires || nil;
+return self;}
+}),
+smalltalk.Module);
+
+smalltalk.addMethod(
+'_name_',
+smalltalk.method({
+selector: 'name:',
+fn: function (aString){
+var self=this;
+return self.moduleName = aString;
+return self;}
+}),
+smalltalk.Module);
+
+
+
 smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel');
 smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_new',
 '_new',
@@ -959,18 +1006,7 @@ smalltalk.method({
 selector: 'category',
 selector: 'category',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self.category;
-return self;}
-}),
-smalltalk.Class);
-
-smalltalk.addMethod(
-'_category_',
-smalltalk.method({
-selector: 'category:',
-fn: function (aString){
-var self=this;
-self.category = aString;
+return (($receiver = smalltalk.send(self, "_module", [])) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : (function(){return smalltalk.send(smalltalk.send(self, "_module", []), "_name", []);})();
 return self;}
 return self;}
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
@@ -981,7 +1017,7 @@ smalltalk.method({
 selector: 'subclass:instanceVariableNames:',
 selector: 'subclass:instanceVariableNames:',
 fn: function (aString, anotherString){
 fn: function (aString, anotherString){
 var self=this;
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_category_", [aString, anotherString, nil]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_module_", [aString, anotherString, nil]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
@@ -992,7 +1028,7 @@ smalltalk.method({
 selector: 'subclass:instanceVariableNames:category:',
 selector: 'subclass:instanceVariableNames:category:',
 fn: function (aString, aString2, aString3){
 fn: function (aString, aString2, aString3){
 var self=this;
 var self=this;
-return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_category_", [self, aString, aString2, aString3]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_module_", [aString, aString2, aString3]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
@@ -1040,7 +1076,40 @@ smalltalk.method({
 selector: 'subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:',
 selector: 'subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:',
 fn: function (aString, aString2, classVars, pools, aString3){
 fn: function (aString, aString2, classVars, pools, aString3){
 var self=this;
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_category_", [aString, aString2, aString3]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_module_", [aString, aString2, aString3]);
+return self;}
+}),
+smalltalk.Class);
+
+smalltalk.addMethod(
+'_module',
+smalltalk.method({
+selector: 'module',
+fn: function (){
+var self=this;
+return self.module;
+return self;}
+}),
+smalltalk.Class);
+
+smalltalk.addMethod(
+'_module_',
+smalltalk.method({
+selector: 'module:',
+fn: function (aModule){
+var self=this;
+self.module = aModule;
+return self;}
+}),
+smalltalk.Class);
+
+smalltalk.addMethod(
+'_subclass_instanceVariableNames_module_',
+smalltalk.method({
+selector: 'subclass:instanceVariableNames:module:',
+fn: function (aString, aString2, aString3){
+var self=this;
+return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_module_", [self, aString, aString2, aString3]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
@@ -2416,7 +2485,7 @@ smalltalk.method({
 selector: 'subclass:instanceVariableNames:',
 selector: 'subclass:instanceVariableNames:',
 fn: function (aString, anotherString){
 fn: function (aString, anotherString){
 var self=this;
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_category_", [aString, anotherString, nil]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_module_", [aString, anotherString, nil]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.UndefinedObject);
 smalltalk.UndefinedObject);
@@ -2427,7 +2496,7 @@ smalltalk.method({
 selector: 'subclass:instanceVariableNames:category:',
 selector: 'subclass:instanceVariableNames:category:',
 fn: function (aString, aString2, aString3){
 fn: function (aString, aString2, aString3){
 var self=this;
 var self=this;
-return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_category_", [self, aString, aString2, aString3]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_module_", [aString, aString2, aString3]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.UndefinedObject);
 smalltalk.UndefinedObject);
@@ -2531,6 +2600,17 @@ return self;}
 }),
 }),
 smalltalk.UndefinedObject);
 smalltalk.UndefinedObject);
 
 
+smalltalk.addMethod(
+'_subclass_instanceVariableNames_module_',
+smalltalk.method({
+selector: 'subclass:instanceVariableNames:module:',
+fn: function (aString, aString2, aString3){
+var self=this;
+return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_module_", [self, aString, aString2, aString3]);
+return self;}
+}),
+smalltalk.UndefinedObject);
+
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_new',
 '_new',
@@ -4637,21 +4717,7 @@ smalltalk.method({
 selector: 'superclass:subclass:',
 selector: 'superclass:subclass:',
 fn: function (aClass, aString){
 fn: function (aClass, aString){
 var self=this;
 var self=this;
-smalltalk.send(self, "_superclass_subclass_instanceVariableNames_category_", [aClass, aString, "", nil]);
-return self;}
-}),
-smalltalk.ClassBuilder);
-
-smalltalk.addMethod(
-'_superclass_subclass_instanceVariableNames_category_',
-smalltalk.method({
-selector: 'superclass:subclass:instanceVariableNames:category:',
-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_", [(($receiver = aString3) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : $receiver]);
+return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_module_", [aClass, aString, "", nil]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.ClassBuilder);
 smalltalk.ClassBuilder);
@@ -4703,6 +4769,31 @@ return self;}
 }),
 }),
 smalltalk.ClassBuilder);
 smalltalk.ClassBuilder);
 
 
+smalltalk.addMethod(
+'_superclass_subclass_instanceVariableNames_module_',
+smalltalk.method({
+selector: 'superclass:subclass:instanceVariableNames:module:',
+fn: function (aClass, aString, aString2, aString3){
+var self=this;
+var newClass=nil;
+newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_module_", [aClass, aString, smalltalk.send(self, "_instanceVariableNamesFor_", [aString2]), (($receiver = aString3) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : $receiver]);
+smalltalk.send(self, "_setupClass_", [newClass]);
+return self;}
+}),
+smalltalk.ClassBuilder);
+
+smalltalk.addMethod(
+'_addSubclassOf_named_instanceVariableNames_module_',
+smalltalk.method({
+selector: 'addSubclassOf:named:instanceVariableNames:module:',
+fn: function (aClass, aString, aCollection, moduleName){
+var self=this;
+smalltalk.addClass(aString, aClass, aCollection, moduleName);
+	    return smalltalk[aString];
+return self;}
+}),
+smalltalk.ClassBuilder);
+
 
 
 
 
 smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel');
 smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel');
@@ -5487,18 +5578,7 @@ smalltalk.method({
 selector: 'current',
 selector: 'current',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self['@current'];
-return self;}
-}),
-smalltalk.ErrorHandler.klass);
-
-smalltalk.addMethod(
-'_initialize',
-smalltalk.method({
-selector: 'initialize',
-fn: function (){
-var self=this;
-smalltalk.send(self, "_register", []);
+return (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return self['@current']=smalltalk.send(self, "_new", []);})() : $receiver;
 return self;}
 return self;}
 }),
 }),
 smalltalk.ErrorHandler.klass);
 smalltalk.ErrorHandler.klass);
@@ -5578,6 +5658,24 @@ return self;}
 }),
 }),
 smalltalk.JSObjectProxy);
 smalltalk.JSObjectProxy);
 
 
+smalltalk.addMethod(
+'_doesNotUnderstand_',
+smalltalk.method({
+selector: 'doesNotUnderstand:',
+fn: function (aMessage){
+var self=this;
+var obj=nil;
+var selector=nil;
+var arguments=nil;
+obj=smalltalk.send(self, "_jsObject", []);
+selector=smalltalk.send(aMessage, "_selector", []);
+arguments=smalltalk.send(aMessage, "_arguments", []);
+if(obj[selector]) {return smalltalk.send(obj, selector, arguments)};
+smalltalk.send(self, "_doesNotUnderstand_", [aMessage], smalltalk.Object);
+return self;}
+}),
+smalltalk.JSObjectProxy);
+
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_on_',
 '_on_',

+ 216 - 78
js/Kernel.js

@@ -900,12 +900,28 @@ code=smalltalk.send((smalltalk.String || String), "_streamContents_", [(function
 return smalltalk.send(smalltalk.send((smalltalk.Error || Error), "_new", []), "_messageText_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("Parse error on line ", "__comma", [row]), "__comma", [" column "]), "__comma", [col]), "__comma", [" : "]), "__comma", [message]), "__comma", [unescape("%20Below%20is%20code%20with%20line%20numbers%20and%20%3D%3D%3D%3E%20marker%20inserted%3A")]), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", [code])]);
 return smalltalk.send(smalltalk.send((smalltalk.Error || Error), "_new", []), "_messageText_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send("Parse error on line ", "__comma", [row]), "__comma", [" column "]), "__comma", [col]), "__comma", [" : "]), "__comma", [message]), "__comma", [unescape("%20Below%20is%20code%20with%20line%20numbers%20and%20%3D%3D%3D%3E%20marker%20inserted%3A")]), "__comma", [smalltalk.send((smalltalk.String || String), "_lf", [])]), "__comma", [code])]);
 return self;},
 return self;},
 args: ["anException", "aString"],
 args: ["anException", "aString"],
-source: unescape('parseError%3A%20anException%20parsing%3A%20aString%0A%09%7C%20row%20col%20message%20lines%20badLine%20code%20%7C%0A%09%3Crow%20%3D%20anException.line%3B%0A%09col%20%3D%20anException.column%3B%0A%09message%20%3D%20anException.message%3B%3E.%0A%09lines%20%3A%3D%20aString%20lines.%0A%09badLine%20%3A%3D%20lines%20at%3A%20row.%0A%09badLine%20%3A%3D%20%28badLine%20copyFrom%3A%201%20to%3A%20col%20-%201%29%2C%20%27%20%3D%3D%3D%3E%27%2C%20%28badLine%20copyFrom%3A%20%20col%20to%3A%20badLine%20size%29.%0A%09lines%20at%3A%20row%20put%3A%20badLine.%0A%09code%20%3A%3D%20String%20streamContents%3A%20%5B%3As%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lines%20withIndexDo%3A%20%5B%3Al%20%3Ai%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20s%20nextPutAll%3A%20i%20asString%2C%20%27%3A%20%27%2C%20l%2C%20String%20lf%5D%5D.%0A%09%5E%20Error%20new%20messageText%3A%20%28%27Parse%20error%20on%20line%20%27%20%2C%20row%20%2C%20%27%20column%20%27%20%2C%20col%20%2C%20%27%20%3A%20%27%20%2C%20message%20%2C%20%27%20Below%20is%20code%20with%20line%20numbers%20and%20%3D%3D%3D%3E%20marker%20inserted%3A%27%20%2C%20String%20lf%2C%20code%29'),
+source: unescape('parseError%3A%20anException%20parsing%3A%20aString%0A%09%7C%20row%20col%20message%20lines%20badLine%20code%20%7C%0A%09%3Crow%20%3D%20anException.line%3B%0A%09col%20%3D%20anException.column%3B%0A%09message%20%3D%20anException.message%3B%3E.%0A%09lines%20%3A%3D%20aString%20lines.%0A%09badLine%20%3A%3D%20lines%20at%3A%20row.%0A%09badLine%20%3A%3D%20%28badLine%20copyFrom%3A%201%20to%3A%20col%20-%201%29%2C%20%27%20%3D%3D%3D%3E%27%2C%20%28badLine%20copyFrom%3A%20%20col%20to%3A%20badLine%20size%29.%0A%09lines%20at%3A%20row%20put%3A%20badLine.%0A%09code%20%3A%3D%20String%20streamContents%3A%20%5B%3As%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lines%20withIndexDo%3A%20%5B%3Al%20%3Ai%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20s%20nextPutAll%3A%20i%20asString%2C%20%27%3A%20%27%2C%20l%2C%20String%20lf%5D%5D.%0A%09%5E%20Error%20new%20messageText%3A%20%28%27Parse%20error%20on%20line%20%27%20%2C%20row%20%2C%20%27%20column%20%27%20%2C%20col%20%2C%20%27%20%3A%20%27%20%2C%20message%20%2C%20%27%20Below%20is%20code%20with%20line%20numbers%20and%20%3D%3D%3D%3E%20marker%20inserted%3A%27%20%2C%20String%20lf%2C%20code%29'),
 messageSends: ["lines", "at:", unescape("%2C"), "copyFrom:to:", unescape("-"), "size", "at:put:", "streamContents:", "withIndexDo:", "nextPutAll:", "asString", "lf", "messageText:", "new"],
 messageSends: ["lines", "at:", unescape("%2C"), "copyFrom:to:", unescape("-"), "size", "at:put:", "streamContents:", "withIndexDo:", "nextPutAll:", "asString", "lf", "messageText:", "new"],
 referencedClasses: [smalltalk.String,smalltalk.Error]
 referencedClasses: [smalltalk.String,smalltalk.Error]
 }),
 }),
 smalltalk.Smalltalk);
 smalltalk.Smalltalk);
 
 
+smalltalk.addMethod(
+'_modules',
+smalltalk.method({
+selector: 'modules',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.modules.all();
+return self;},
+args: [],
+source: unescape('modules%0A%09%3Creturn%20self.modules.all%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Smalltalk);
+
 
 
 smalltalk.Smalltalk.klass.iVarNames = ['current'];
 smalltalk.Smalltalk.klass.iVarNames = ['current'];
 smalltalk.addMethod(
 smalltalk.addMethod(
@@ -925,6 +941,57 @@ referencedClasses: []
 smalltalk.Smalltalk.klass);
 smalltalk.Smalltalk.klass);
 
 
 
 
+smalltalk.addClass('Module', smalltalk.Object, [], 'Kernel');
+smalltalk.addMethod(
+'_name',
+smalltalk.method({
+selector: 'name',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.moduleName || nil;
+return self;},
+args: [],
+source: unescape('name%0A%09%3Creturn%20self.moduleName%20%7C%7C%20nil%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Module);
+
+smalltalk.addMethod(
+'_requires',
+smalltalk.method({
+selector: 'requires',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.requires || nil;
+return self;},
+args: [],
+source: unescape('requires%0A%09%3Creturn%20self.requires%20%7C%7C%20nil%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Module);
+
+smalltalk.addMethod(
+'_name_',
+smalltalk.method({
+selector: 'name:',
+category: 'accessing',
+fn: function (aString){
+var self=this;
+return self.moduleName = aString;
+return self;},
+args: ["aString"],
+source: unescape('name%3A%20aString%0A%09%3Creturn%20self.moduleName%20%3D%20aString%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Module);
+
+
+
 smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel');
 smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel');
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_new',
 '_new',
@@ -1360,27 +1427,11 @@ selector: 'category',
 category: 'accessing',
 category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self.category;
+return (($receiver = smalltalk.send(self, "_module", [])) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : (function(){return smalltalk.send(smalltalk.send(self, "_module", []), "_name", []);})();
 return self;},
 return self;},
 args: [],
 args: [],
-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;},
-args: ["aString"],
-source: unescape('category%3A%20aString%0A%09%3Cself.category%20%3D%20aString%3E'),
-messageSends: [],
+source: unescape('category%0A%09%5Eself%20module%20ifNil%3A%20%5B%27unclassified%27%5D%20ifNotNil%3A%20%5Bself%20module%20name%5D'),
+messageSends: ["ifNil:ifNotNil:", "module", "name"],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
@@ -1392,11 +1443,11 @@ selector: 'subclass:instanceVariableNames:',
 category: 'class creation',
 category: 'class creation',
 fn: function (aString, anotherString){
 fn: function (aString, anotherString){
 var self=this;
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_category_", [aString, anotherString, nil]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_module_", [aString, anotherString, nil]);
 return self;},
 return self;},
 args: ["aString", "anotherString"],
 args: ["aString", "anotherString"],
-source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20category%3A%20nil'),
-messageSends: ["subclass:instanceVariableNames:category:"],
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%22Kept%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20module%3A%20nil'),
+messageSends: ["subclass:instanceVariableNames:module:"],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
@@ -1408,12 +1459,12 @@ selector: 'subclass:instanceVariableNames:category:',
 category: 'class creation',
 category: 'class creation',
 fn: function (aString, aString2, aString3){
 fn: function (aString, aString2, aString3){
 var self=this;
 var self=this;
-return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_category_", [self, aString, aString2, aString3]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_module_", [aString, aString2, aString3]);
 return self;},
 return self;},
 args: ["aString", "aString2", "aString3"],
 args: ["aString", "aString2", "aString3"],
-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.ClassBuilder]
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%22Kept%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20module%3A%20aString3'),
+messageSends: ["subclass:instanceVariableNames:module:"],
+referencedClasses: []
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
 
 
@@ -1476,15 +1527,63 @@ selector: 'subclass:instanceVariableNames:classVariableNames:poolDictionaries:ca
 category: 'class creation',
 category: 'class creation',
 fn: function (aString, aString2, classVars, pools, aString3){
 fn: function (aString, aString2, classVars, pools, aString3){
 var self=this;
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_category_", [aString, aString2, aString3]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_module_", [aString, aString2, aString3]);
 return self;},
 return self;},
 args: ["aString", "aString2", "classVars", "pools", "aString3"],
 args: ["aString", "aString2", "classVars", "pools", "aString3"],
-source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20classVariableNames%3A%20classVars%20poolDictionaries%3A%20pools%20category%3A%20aString3%0A%09%22Just%20ignore%20class%20variables%20and%20pools.%20Added%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3'),
-messageSends: ["subclass:instanceVariableNames:category:"],
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20classVariableNames%3A%20classVars%20poolDictionaries%3A%20pools%20category%3A%20aString3%0A%09%22Just%20ignore%20class%20variables%20and%20pools.%20Added%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20module%3A%20aString3'),
+messageSends: ["subclass:instanceVariableNames:module:"],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
 
 
+smalltalk.addMethod(
+'_module',
+smalltalk.method({
+selector: 'module',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.module;
+return self;},
+args: [],
+source: unescape('module%0A%09%3Creturn%20self.module%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Class);
+
+smalltalk.addMethod(
+'_module_',
+smalltalk.method({
+selector: 'module:',
+category: 'accessing',
+fn: function (aModule){
+var self=this;
+self.module = aModule;
+return self;},
+args: ["aModule"],
+source: unescape('module%3A%20aModule%0A%09%3Cself.module%20%3D%20aModule%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Class);
+
+smalltalk.addMethod(
+'_subclass_instanceVariableNames_module_',
+smalltalk.method({
+selector: 'subclass:instanceVariableNames:module:',
+category: 'class creation',
+fn: function (aString, aString2, aString3){
+var self=this;
+return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_module_", [self, aString, aString2, aString3]);
+return self;},
+args: ["aString", "aString2", "aString3"],
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20module%3A%20aString3%0A%09%5EClassBuilder%20new%0A%09%20%20%20%20superclass%3A%20self%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20module%3A%20aString3'),
+messageSends: ["superclass:subclass:instanceVariableNames:module:", "new"],
+referencedClasses: [smalltalk.ClassBuilder]
+}),
+smalltalk.Class);
+
 
 
 
 
 smalltalk.addClass('Metaclass', smalltalk.Behavior, [], 'Kernel');
 smalltalk.addClass('Metaclass', smalltalk.Behavior, [], 'Kernel');
@@ -3453,11 +3552,11 @@ selector: 'subclass:instanceVariableNames:',
 category: 'class creation',
 category: 'class creation',
 fn: function (aString, anotherString){
 fn: function (aString, anotherString){
 var self=this;
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_category_", [aString, anotherString, nil]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_module_", [aString, anotherString, nil]);
 return self;},
 return self;},
 args: ["aString", "anotherString"],
 args: ["aString", "anotherString"],
-source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20category%3A%20nil'),
-messageSends: ["subclass:instanceVariableNames:category:"],
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20module%3A%20nil'),
+messageSends: ["subclass:instanceVariableNames:module:"],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.UndefinedObject);
 smalltalk.UndefinedObject);
@@ -3469,12 +3568,12 @@ selector: 'subclass:instanceVariableNames:category:',
 category: 'class creation',
 category: 'class creation',
 fn: function (aString, aString2, aString3){
 fn: function (aString, aString2, aString3){
 var self=this;
 var self=this;
-return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_category_", [self, aString, aString2, aString3]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_module_", [aString, aString2, aString3]);
 return self;},
 return self;},
 args: ["aString", "aString2", "aString3"],
 args: ["aString", "aString2", "aString3"],
-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.ClassBuilder]
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%22Kept%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20module%3A%20aString3'),
+messageSends: ["subclass:instanceVariableNames:module:"],
+referencedClasses: []
 }),
 }),
 smalltalk.UndefinedObject);
 smalltalk.UndefinedObject);
 
 
@@ -3622,6 +3721,22 @@ referencedClasses: []
 }),
 }),
 smalltalk.UndefinedObject);
 smalltalk.UndefinedObject);
 
 
+smalltalk.addMethod(
+'_subclass_instanceVariableNames_module_',
+smalltalk.method({
+selector: 'subclass:instanceVariableNames:module:',
+category: 'class creation',
+fn: function (aString, aString2, aString3){
+var self=this;
+return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_module_", [self, aString, aString2, aString3]);
+return self;},
+args: ["aString", "aString2", "aString3"],
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20module%3A%20aString3%0A%09%5EClassBuilder%20new%0A%09%20%20%20%20superclass%3A%20self%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20module%3A%20aString3'),
+messageSends: ["superclass:subclass:instanceVariableNames:module:", "new"],
+referencedClasses: [smalltalk.ClassBuilder]
+}),
+smalltalk.UndefinedObject);
+
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_new',
 '_new',
@@ -6609,30 +6724,11 @@ selector: 'superclass:subclass:',
 category: 'class creation',
 category: 'class creation',
 fn: function (aClass, aString){
 fn: function (aClass, aString){
 var self=this;
 var self=this;
-smalltalk.send(self, "_superclass_subclass_instanceVariableNames_category_", [aClass, aString, "", nil]);
+return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_module_", [aClass, aString, "", nil]);
 return self;},
 return self;},
 args: ["aClass", "aString"],
 args: ["aClass", "aString"],
-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_", [(($receiver = aString3) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : $receiver]);
-return self;},
-args: ["aClass", "aString", "aString2", "aString3"],
-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:"],
+source: unescape('superclass%3A%20aClass%20subclass%3A%20aString%0A%09%5Eself%20superclass%3A%20aClass%20subclass%3A%20aString%20instanceVariableNames%3A%20%27%27%20module%3A%20nil'),
+messageSends: ["superclass:subclass:instanceVariableNames:module:"],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.ClassBuilder);
 smalltalk.ClassBuilder);
@@ -6704,6 +6800,41 @@ referencedClasses: []
 }),
 }),
 smalltalk.ClassBuilder);
 smalltalk.ClassBuilder);
 
 
+smalltalk.addMethod(
+'_superclass_subclass_instanceVariableNames_module_',
+smalltalk.method({
+selector: 'superclass:subclass:instanceVariableNames:module:',
+category: 'class creation',
+fn: function (aClass, aString, aString2, aString3){
+var self=this;
+var newClass=nil;
+newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_module_", [aClass, aString, smalltalk.send(self, "_instanceVariableNamesFor_", [aString2]), (($receiver = aString3) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : $receiver]);
+smalltalk.send(self, "_setupClass_", [newClass]);
+return self;},
+args: ["aClass", "aString", "aString2", "aString3"],
+source: unescape('superclass%3A%20aClass%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20module%3A%20aString3%0A%09%7C%20newClass%20%7C%0A%09newClass%20%3A%3D%20self%20addSubclassOf%3A%20aClass%0A%09%09%09%09named%3A%20aString%20instanceVariableNames%3A%20%28self%20instanceVariableNamesFor%3A%20aString2%29%0A%09%09%09%09module%3A%20%28aString3%20ifNil%3A%20%5B%27unclassified%27%5D%29.%0A%09self%20setupClass%3A%20newClass'),
+messageSends: ["addSubclassOf:named:instanceVariableNames:module:", "instanceVariableNamesFor:", "ifNil:", "setupClass:"],
+referencedClasses: []
+}),
+smalltalk.ClassBuilder);
+
+smalltalk.addMethod(
+'_addSubclassOf_named_instanceVariableNames_module_',
+smalltalk.method({
+selector: 'addSubclassOf:named:instanceVariableNames:module:',
+category: 'private',
+fn: function (aClass, aString, aCollection, moduleName){
+var self=this;
+smalltalk.addClass(aString, aClass, aCollection, moduleName);
+	    return smalltalk[aString];
+return self;},
+args: ["aClass", "aString", "aCollection", "moduleName"],
+source: unescape('addSubclassOf%3A%20aClass%20named%3A%20aString%20instanceVariableNames%3A%20aCollection%20module%3A%20moduleName%0A%09%3Csmalltalk.addClass%28aString%2C%20aClass%2C%20aCollection%2C%20moduleName%29%3B%0A%09%20%20%20%20return%20smalltalk%5BaString%5D%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.ClassBuilder);
+
 
 
 
 
 smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel');
 smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel');
@@ -7819,27 +7950,11 @@ selector: 'current',
 category: 'accessing',
 category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self['@current'];
-return self;},
-args: [],
-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 (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return self['@current']=smalltalk.send(self, "_new", []);})() : $receiver;
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('initialize%0A%09self%20register'),
-messageSends: ["register"],
+source: unescape('current%0A%09%5Ecurrent%20ifNil%3A%20%5Bcurrent%20%3A%3D%20self%20new%5D'),
+messageSends: ["ifNil:", "new"],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.ErrorHandler.klass);
 smalltalk.ErrorHandler.klass);
@@ -7949,6 +8064,29 @@ referencedClasses: [smalltalk.Dictionary]
 }),
 }),
 smalltalk.JSObjectProxy);
 smalltalk.JSObjectProxy);
 
 
+smalltalk.addMethod(
+'_doesNotUnderstand_',
+smalltalk.method({
+selector: 'doesNotUnderstand:',
+category: 'proxy',
+fn: function (aMessage){
+var self=this;
+var obj=nil;
+var selector=nil;
+var arguments=nil;
+obj=smalltalk.send(self, "_jsObject", []);
+selector=smalltalk.send(aMessage, "_selector", []);
+arguments=smalltalk.send(aMessage, "_arguments", []);
+if(obj[selector]) {return smalltalk.send(obj, selector, arguments)};
+smalltalk.send(self, "_doesNotUnderstand_", [aMessage], smalltalk.Object);
+return self;},
+args: ["aMessage"],
+source: unescape('doesNotUnderstand%3A%20aMessage%0A%09%7C%20obj%20selector%20arguments%20%7C%0A%09obj%20%3A%3D%20self%20jsObject.%0A%09selector%20%3A%3D%20aMessage%20selector.%0A%09arguments%20%3A%3D%20aMessage%20arguments.%0A%09%3Cif%28obj%5Bselector%5D%29%20%7Breturn%20smalltalk.send%28obj%2C%20selector%2C%20arguments%29%7D%3E.%0A%09super%20doesNotUnderstand%3A%20aMessage'),
+messageSends: ["jsObject", "selector", "arguments", "doesNotUnderstand:"],
+referencedClasses: []
+}),
+smalltalk.JSObjectProxy);
+
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_on_',
 '_on_',

+ 33 - 33
js/SUnit.deploy.js

@@ -1,4 +1,26 @@
 smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit');
 smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit');
+smalltalk.addMethod(
+'_setTestSelector_',
+smalltalk.method({
+selector: 'setTestSelector:',
+fn: function (aSelector){
+var self=this;
+self['@testSelector']=aSelector;
+return self;}
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_selector',
+smalltalk.method({
+selector: 'selector',
+fn: function (){
+var self=this;
+return self['@testSelector'];
+return self;}
+}),
+smalltalk.TestCase);
+
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_signalFailure_',
 '_signalFailure_',
 smalltalk.method({
 smalltalk.method({
@@ -101,28 +123,6 @@ return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
-smalltalk.addMethod(
-'_setTestSelector_',
-smalltalk.method({
-selector: 'setTestSelector:',
-fn: function (aSelector){
-var self=this;
-self['@testSelector']=aSelector;
-return self;}
-}),
-smalltalk.TestCase);
-
-smalltalk.addMethod(
-'_selector',
-smalltalk.method({
-selector: 'selector',
-fn: function (){
-var self=this;
-return self['@testSelector'];
-return self;}
-}),
-smalltalk.TestCase);
-
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_testSelectors',
 '_testSelectors',
@@ -157,17 +157,6 @@ return self;}
 }),
 }),
 smalltalk.TestCase.klass);
 smalltalk.TestCase.klass);
 
 
-smalltalk.addMethod(
-'_shouldInheritSelectors',
-smalltalk.method({
-selector: 'shouldInheritSelectors',
-fn: function (){
-var self=this;
-return smalltalk.send(self, "_~_eq", [smalltalk.send(self, "_lookupHierarchyRoot", [])]);
-return self;}
-}),
-smalltalk.TestCase.klass);
-
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_allTestSelectors',
 '_allTestSelectors',
 smalltalk.method({
 smalltalk.method({
@@ -193,6 +182,17 @@ return self;}
 }),
 }),
 smalltalk.TestCase.klass);
 smalltalk.TestCase.klass);
 
 
+smalltalk.addMethod(
+'_shouldInheritSelectors',
+smalltalk.method({
+selector: 'shouldInheritSelectors',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_~_eq", [smalltalk.send(self, "_lookupHierarchyRoot", [])]);
+return self;}
+}),
+smalltalk.TestCase.klass);
+
 
 
 smalltalk.addClass('TestFailure', smalltalk.Error, [], 'SUnit');
 smalltalk.addClass('TestFailure', smalltalk.Error, [], 'SUnit');
 
 

+ 51 - 51
js/SUnit.js

@@ -1,4 +1,36 @@
 smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit');
 smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit');
+smalltalk.addMethod(
+'_setTestSelector_',
+smalltalk.method({
+selector: 'setTestSelector:',
+category: 'accessing',
+fn: function (aSelector){
+var self=this;
+self['@testSelector']=aSelector;
+return self;},
+args: ["aSelector"],
+source: unescape('setTestSelector%3A%20aSelector%0A%09testSelector%20%3A%3D%20aSelector'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_selector',
+smalltalk.method({
+selector: 'selector',
+category: 'accessing',
+fn: function (){
+var self=this;
+return self['@testSelector'];
+return self;},
+args: [],
+source: unescape('selector%0A%09%5EtestSelector'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestCase);
+
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_signalFailure_',
 '_signalFailure_',
 smalltalk.method({
 smalltalk.method({
@@ -9,9 +41,9 @@ var self=this;
 (function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send((smalltalk.TestFailure || TestFailure), "_new", []));
 (function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send((smalltalk.TestFailure || TestFailure), "_new", []));
 return self;},
 return self;},
 args: ["aString"],
 args: ["aString"],
-source: unescape('signalFailure%3A%20aString%0A%09TestFailure%20new%0A%09%09messageText%3A%20aString%3B%0A%09%09signal%20'),
+source: unescape('signalFailure%3A%20aString%0A%09TestFailure%20new%0A%09%09messageText%3A%20aString%3B%0A%09%09signal'),
 messageSends: ["messageText:", "signal", "new"],
 messageSends: ["messageText:", "signal", "new"],
-referencedClasses: [smalltalk.nil]
+referencedClasses: []
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
@@ -78,7 +110,7 @@ return self;},
 args: ["aResult"],
 args: ["aResult"],
 source: unescape('performTestFor%3A%20aResult%0A%09%5B%5Bself%20perform%3A%20self%20selector%5D%0A%09%09on%3A%20TestFailure%20do%3A%20%5B%3Aex%20%7C%20aResult%20addFailure%3A%20self%5D%5D%0A%09%09on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%20aResult%20addError%3A%20self%5D'),
 source: unescape('performTestFor%3A%20aResult%0A%09%5B%5Bself%20perform%3A%20self%20selector%5D%0A%09%09on%3A%20TestFailure%20do%3A%20%5B%3Aex%20%7C%20aResult%20addFailure%3A%20self%5D%5D%0A%09%09on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%20aResult%20addError%3A%20self%5D'),
 messageSends: ["on:do:", "perform:", "selector", "addFailure:", "addError:"],
 messageSends: ["on:do:", "perform:", "selector", "addFailure:", "addError:"],
-referencedClasses: [smalltalk.TestFailure,smalltalk.Error]
+referencedClasses: [smalltalk.Error]
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
@@ -146,38 +178,6 @@ referencedClasses: []
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
-smalltalk.addMethod(
-'_setTestSelector_',
-smalltalk.method({
-selector: 'setTestSelector:',
-category: 'accessing',
-fn: function (aSelector){
-var self=this;
-self['@testSelector']=aSelector;
-return self;},
-args: ["aSelector"],
-source: unescape('setTestSelector%3A%20aSelector%0A%09testSelector%20%3A%3D%20aSelector'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.TestCase);
-
-smalltalk.addMethod(
-'_selector',
-smalltalk.method({
-selector: 'selector',
-category: 'accessing',
-fn: function (){
-var self=this;
-return self['@testSelector'];
-return self;},
-args: [],
-source: unescape('selector%0A%09%5EtestSelector'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.TestCase);
-
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_testSelectors',
 '_testSelectors',
@@ -227,22 +227,6 @@ referencedClasses: [smalltalk.TestCase]
 }),
 }),
 smalltalk.TestCase.klass);
 smalltalk.TestCase.klass);
 
 
-smalltalk.addMethod(
-'_shouldInheritSelectors',
-smalltalk.method({
-selector: 'shouldInheritSelectors',
-category: 'testing',
-fn: function (){
-var self=this;
-return smalltalk.send(self, "_~_eq", [smalltalk.send(self, "_lookupHierarchyRoot", [])]);
-return self;},
-args: [],
-source: unescape('shouldInheritSelectors%0A%09%5Eself%20%7E%3D%20self%20lookupHierarchyRoot'),
-messageSends: [unescape("%7E%3D"), "lookupHierarchyRoot"],
-referencedClasses: []
-}),
-smalltalk.TestCase.klass);
-
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_allTestSelectors',
 '_allTestSelectors',
 smalltalk.method({
 smalltalk.method({
@@ -278,6 +262,22 @@ referencedClasses: []
 }),
 }),
 smalltalk.TestCase.klass);
 smalltalk.TestCase.klass);
 
 
+smalltalk.addMethod(
+'_shouldInheritSelectors',
+smalltalk.method({
+selector: 'shouldInheritSelectors',
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_~_eq", [smalltalk.send(self, "_lookupHierarchyRoot", [])]);
+return self;},
+args: [],
+source: unescape('shouldInheritSelectors%0A%09%5Eself%20%7E%3D%20self%20lookupHierarchyRoot'),
+messageSends: [unescape("%7E%3D"), "lookupHierarchyRoot"],
+referencedClasses: []
+}),
+smalltalk.TestCase.klass);
+
 
 
 smalltalk.addClass('TestFailure', smalltalk.Error, [], 'SUnit');
 smalltalk.addClass('TestFailure', smalltalk.Error, [], 'SUnit');
 
 

+ 57 - 12
js/boot.js

@@ -38,6 +38,7 @@
 function SmalltalkObject(){};
 function SmalltalkObject(){};
 function SmalltalkBehavior(){};
 function SmalltalkBehavior(){};
 function SmalltalkClass(){};
 function SmalltalkClass(){};
+function SmalltalkModule(){};
 function SmalltalkMetaclass(){
 function SmalltalkMetaclass(){
     this.meta = true;
     this.meta = true;
 };
 };
@@ -49,6 +50,20 @@ function Smalltalk(){
     var st = this;
     var st = this;
     this.thisContext = undefined;
     this.thisContext = undefined;
 
 
+    
+    /* We hold all Modules in a separate Object */
+    st.modules = {};
+
+    /* Smalltalk Module object. To add a Module, use smalltalk.addModule() */
+
+    function mod(spec) {
+	var that = new SmalltalkModule();
+	that.moduleName        = spec.moduleName;
+	that.requires          = spec.requires || [];
+	that.fn                = spec.fn || function(){};
+	return that;
+    };
+
     /* Smalltalk class creation. A class is an instance of an automatically 
     /* Smalltalk class creation. A class is an instance of an automatically 
        created metaclass object. Newly created classes (not their metaclass) 
        created metaclass object. Newly created classes (not their metaclass) 
        should be added to the smalltalk object, see smalltalk.addClass().
        should be added to the smalltalk object, see smalltalk.addClass().
@@ -72,7 +87,11 @@ function Smalltalk(){
 	if(that.superclass) {
 	if(that.superclass) {
 	    that.klass.superclass = that.superclass.klass;
 	    that.klass.superclass = that.superclass.klass;
 	}
 	}
-	that.category = spec.category || "";
+	that.module = spec.module;
+        // For a while we keep the category attribute...
+        if(!(spec.module === undefined)) {
+	    that.category = spec.module.moduleName;
+	}
 	that.fn.prototype.methods = {};
 	that.fn.prototype.methods = {};
 	that.fn.prototype.inheritedMethods = {};
 	that.fn.prototype.inheritedMethods = {};
 	that.fn.prototype.klass = that;
 	that.fn.prototype.klass = that;
@@ -123,6 +142,16 @@ function Smalltalk(){
 	}
 	}
     };
     };
 
 
+    /* Answer all registered Modules */
+
+    st.modules.all = function() {
+	var modules = [];
+	for(var i in st.modules) {
+	    modules.push(st.modules[i]);
+	}
+	return modules
+    };
+
     /* Answer all registered Smalltalk classes */
     /* Answer all registered Smalltalk classes */
 
 
     st.classes = function() {
     st.classes = function() {
@@ -131,7 +160,6 @@ function Smalltalk(){
 	    if(i.search(/^[A-Z]/g) != -1) {
 	    if(i.search(/^[A-Z]/g) != -1) {
 		classes.push(st[i]);
 		classes.push(st[i]);
 	    }
 	    }
-
 	}
 	}
 	return classes
 	return classes
     };
     };
@@ -170,31 +198,47 @@ function Smalltalk(){
     };
     };
 
 
     /* Create a new class wrapping a JavaScript constructor, and add it to the 
     /* Create a new class wrapping a JavaScript constructor, and add it to the 
-       global smalltalk object. */
+       global smalltalk object. Module is lazily created if it does not exist with given name. */
 
 
-    st.mapClassName = function(className, category, fn, superclass) {
+    st.mapClassName = function(className, moduleName, fn, superclass) {
+	modul = st.addModule(moduleName);
 	st[className] = klass({
 	st[className] = klass({
 	    className:  className, 
 	    className:  className, 
-	    category:   category, 
+	    module:     modul, 
 	    superclass: superclass,
 	    superclass: superclass,
 	    fn:         fn
 	    fn:         fn
 	});
 	});
     };
     };
 
 
-    /* Add a class to the smalltalk object, creating a new one if needed. */
+    /* Add a module to the smalltalk.modules object, creating a new one if needed.
+       If moduleName is nil or empty we return nil, which is an allowed module for a class. */
 
 
-    st.addClass = function(className, superclass, iVarNames, category) {
+    st.addModule = function(moduleName) {
+	if(!moduleName) {return nil;}
+	if(!(st.modules[moduleName])) {
+	    st.modules[moduleName] = mod({
+		moduleName: moduleName
+	    });
+	}
+	return st.modules[moduleName];
+    };
+
+    /* Add a class to the smalltalk object, creating a new one if needed.
+       Module is lazily created if it does not exist with given name.*/
+
+    st.addClass = function(className, superclass, iVarNames, moduleName) {
+	modul = st.addModule(moduleName);
 	if(st[className]) {
 	if(st[className]) {
 	    st[className].superclass = superclass;
 	    st[className].superclass = superclass;
 	    st[className].iVarNames = iVarNames;
 	    st[className].iVarNames = iVarNames;
-	    st[className].category = category || st[className].category;
-	} else {
+	    st[className].module = modul || st[className].module;
+	} else {    
 	    st[className] = klass({
 	    st[className] = klass({
 		className: className, 
 		className: className, 
 		iVarNames: iVarNames,
 		iVarNames: iVarNames,
-		superclass: superclass
+		superclass: superclass,
+		module: modul
 	    });
 	    });
-	    st[className].category = category || '';
 	}
 	}
     };
     };
 
 
@@ -467,12 +511,13 @@ if(this.jQuery) {
 
 
 smalltalk.mapClassName("Object", "Kernel", SmalltalkObject);
 smalltalk.mapClassName("Object", "Kernel", SmalltalkObject);
 smalltalk.mapClassName("Smalltalk", "Kernel", Smalltalk, smalltalk.Object);
 smalltalk.mapClassName("Smalltalk", "Kernel", Smalltalk, smalltalk.Object);
+smalltalk.mapClassName("Module", "Kernel", SmalltalkModule, smalltalk.Object);
 smalltalk.mapClassName("Behavior", "Kernel", SmalltalkBehavior, smalltalk.Object);
 smalltalk.mapClassName("Behavior", "Kernel", SmalltalkBehavior, smalltalk.Object);
 smalltalk.mapClassName("Class", "Kernel", SmalltalkClass, smalltalk.Behavior);
 smalltalk.mapClassName("Class", "Kernel", SmalltalkClass, smalltalk.Behavior);
 smalltalk.mapClassName("Metaclass", "Kernel", SmalltalkMetaclass, smalltalk.Behavior);
 smalltalk.mapClassName("Metaclass", "Kernel", SmalltalkMetaclass, smalltalk.Behavior);
 smalltalk.mapClassName("CompiledMethod", "Kernel", SmalltalkMethod, smalltalk.Object);
 smalltalk.mapClassName("CompiledMethod", "Kernel", SmalltalkMethod, smalltalk.Object);
 
 
-smalltalk.Object.klass.superclass = smalltalk.Class
+smalltalk.Object.klass.superclass = smalltalk.Class;
 
 
 smalltalk.mapClassName("Number", "Kernel", Number, smalltalk.Object);
 smalltalk.mapClassName("Number", "Kernel", Number, smalltalk.Object);
 smalltalk.mapClassName("BlockClosure", "Kernel", Function, smalltalk.Object);
 smalltalk.mapClassName("BlockClosure", "Kernel", Function, smalltalk.Object);

+ 0 - 0
st/Compiler.st


+ 89 - 49
st/IDE.st

@@ -1,5 +1,5 @@
 Widget subclass: #TabManager
 Widget subclass: #TabManager
-	instanceVariableNames: 'selectedTab tabs opened ul'
+	instanceVariableNames: 'selectedTab tabs opened ul input'
 	category: 'IDE'!
 	category: 'IDE'!
 
 
 !TabManager methodsFor: 'accessing'!
 !TabManager methodsFor: 'accessing'!
@@ -20,11 +20,11 @@ labelFor: aWidget
 !TabManager methodsFor: 'actions'!
 !TabManager methodsFor: 'actions'!
 
 
 updateBodyMargin
 updateBodyMargin
-    self setBodyMargin: '#jtalk' asJQuery height + 27
+    self setBodyMargin: '#jtalk' asJQuery height
 !
 !
 
 
 updatePosition
 updatePosition
-    <jQuery('#jtalk').css('top', '').css('bottom', '27px')>
+    <jQuery('#jtalk').css('top', '').css('bottom', '0px')>
 !
 !
 
 
 removeBodyMargin
 removeBodyMargin
@@ -86,6 +86,14 @@ closeTab: aWidget
     self selectTab: self tabs last.
     self selectTab: self tabs last.
     aWidget remove.
     aWidget remove.
     self update
     self update
+!
+
+search: aString
+	| searchedClass |
+	searchedClass := Smalltalk current at: aString.
+		searchedClass isClass
+			ifTrue: [Browser openOn: searchedClass]
+			ifFalse: [ReferencesBrowser search: aString]
 ! !
 ! !
 
 
 !TabManager methodsFor: 'adding/Removing'!
 !TabManager methodsFor: 'adding/Removing'!
@@ -107,9 +115,9 @@ initialize
     super initialize.
     super initialize.
     opened := true.
     opened := true.
     'body' asJQuery 
     'body' asJQuery 
-	append: self;
 	append: [:html | html div id: 'jtalk'];
 	append: [:html | html div id: 'jtalk'];
 	addClass: 'jtalkBody'.
 	addClass: 'jtalkBody'.
+    '#jtalk' asJQuery append: self.
     self 
     self 
 	addTab: Transcript current;
 	addTab: Transcript current;
 	addTab: Workspace new;
 	addTab: Workspace new;
@@ -123,6 +131,8 @@ initialize
 !TabManager methodsFor: 'rendering'!
 !TabManager methodsFor: 'rendering'!
 
 
 renderOn: html
 renderOn: html
+	html div id: 'logo'.
+	self renderToolbarOn: html.
 	ul := html ul
 	ul := html ul
 		id: 'jtalkTabs';
 		id: 'jtalkTabs';
 		yourself.
 		yourself.
@@ -130,33 +140,49 @@ renderOn: html
 !
 !
 
 
 renderTabFor: aWidget on: html
 renderTabFor: aWidget on: html
-    | li |
-    li := html li.
-    selectedTab = aWidget ifTrue: [
+	| li |
+	li := html li.
+	selectedTab = aWidget ifTrue: [
 	li class: 'selected'].
 	li class: 'selected'].
-    li with: [
-        aWidget canBeClosed ifTrue: [
-	    html span 
-		class: 'close';
-		with: 'x';
-		onClick: [self closeTab: aWidget]].
-	html span
-	    with: (self labelFor: aWidget);
-	    onClick: [self selectTab: aWidget]]
+	li with: [
+		html span class: 'ltab'.
+		html span
+     	    		class: 'mtab';
+      	    		with: [
+        			aWidget canBeClosed ifTrue: [
+	    				html span 
+						class: 'close';
+						with: 'x';
+					onClick: [self closeTab: aWidget]].
+	    		html span with: (self labelFor: aWidget)].
+        	html span class: 'rtab'];
+	onClick: [self selectTab: aWidget]
 !
 !
 
 
 renderTabs
 renderTabs
 	ul contents: [:html |
 	ul contents: [:html |
-	    html li 
-		class: 'closeAll';
-		with: 'x';
-		onClick: [self close].
 	    self tabs do: [:each |
 	    self tabs do: [:each |
 		self renderTabFor: each on: html].
 		self renderTabFor: each on: html].
 	    html li
 	    html li
 		class: 'newtab';
 		class: 'newtab';
-		with: ' + ';
+		with: [
+                	html span class: 'ltab'.
+                	html span class: 'mtab'; with: ' + '.
+                	html span class: 'rtab'];
 		onClick: [self newBrowserTab]]
 		onClick: [self newBrowserTab]]
+!
+
+renderToolbarOn: html
+	html div 
+		id: 'jt_toolbar';
+		with: [
+			input := html input 
+				class: 'implementors';
+				yourself.
+			input onKeyPress: [:event |
+				event keyCode = 13 ifTrue: [
+				self search: input asJQuery val]].
+                	html div id: 'jt_close'; onClick: [self close]]
 ! !
 ! !
 
 
 !TabManager methodsFor: 'updating'!
 !TabManager methodsFor: 'updating'!
@@ -258,7 +284,7 @@ TabWidget subclass: #Workspace
 !Workspace methodsFor: 'accessing'!
 !Workspace methodsFor: 'accessing'!
 
 
 label
 label
-    ^'[Workspace]'
+    ^'Workspace'
 ! !
 ! !
 
 
 !Workspace methodsFor: 'actions'!
 !Workspace methodsFor: 'actions'!
@@ -277,6 +303,10 @@ printIt
 
 
 inspectIt
 inspectIt
     sourceArea inspectIt
     sourceArea inspectIt
+!
+
+fileIn
+    sourceArea fileIn
 ! !
 ! !
 
 
 !Workspace methodsFor: 'rendering'!
 !Workspace methodsFor: 'rendering'!
@@ -299,6 +329,10 @@ renderButtonsOn: html
 	with: 'InspectIt';
 	with: 'InspectIt';
 	title: 'ctrl+i';
 	title: 'ctrl+i';
 	onClick: [self inspectIt].
 	onClick: [self inspectIt].
+    html button
+	with: 'FileIn';
+	title: 'ctrl+f';
+	onClick: [self fileIn].
     html button
     html button
 	with: 'Clear workspace';
 	with: 'Clear workspace';
 	onClick: [self clearWorkspace]
 	onClick: [self clearWorkspace]
@@ -311,7 +345,7 @@ TabWidget subclass: #Transcript
 !Transcript methodsFor: 'accessing'!
 !Transcript methodsFor: 'accessing'!
 
 
 label
 label
-    ^'[Transcript]'
+    ^'Transcript'
 ! !
 ! !
 
 
 !Transcript methodsFor: 'actions'!
 !Transcript methodsFor: 'actions'!
@@ -377,7 +411,7 @@ clear
 ! !
 ! !
 
 
 TabWidget subclass: #Browser
 TabWidget subclass: #Browser
-	instanceVariableNames: 'selectedCategory selectedClass selectedProtocol selectedMethod commitButton categoriesList classesList protocolsList methodsList sourceArea tabsList selectedTab saveButton classButtons methodButtons unsavedChanges input'
+	instanceVariableNames: 'selectedCategory selectedClass selectedProtocol selectedMethod commitButton categoriesList classesList protocolsList methodsList sourceArea tabsList selectedTab saveButton classButtons methodButtons unsavedChanges'
 	category: 'IDE'!
 	category: 'IDE'!
 
 
 !Browser methodsFor: 'accessing'!
 !Browser methodsFor: 'accessing'!
@@ -385,7 +419,7 @@ TabWidget subclass: #Browser
 label
 label
     ^selectedClass 
     ^selectedClass 
 	ifNil: ['Browser (nil)']
 	ifNil: ['Browser (nil)']
-	ifNotNil: [selectedClass name]
+	ifNotNil: ['Browser: ', selectedClass name]
 !
 !
 
 
 categories
 categories
@@ -644,7 +678,7 @@ setMethodProtocol: aString
 addNewProtocol
 addNewProtocol
     | newProtocol |
     | newProtocol |
     newProtocol := self prompt: 'New method protocol'.
     newProtocol := self prompt: 'New method protocol'.
-    newProtocol notEmpty ifTrue: [
+    (newProtocol notNil and: [newProtocol notEmpty]) ifTrue: [
 	selectedMethod category: newProtocol.
 	selectedMethod category: newProtocol.
 	self setMethodProtocol: newProtocol]
 	self setMethodProtocol: newProtocol]
 !
 !
@@ -751,7 +785,6 @@ renderTopPanelOn: html
     html div 
     html div 
 	class: 'top'; 
 	class: 'top'; 
 	with: [
 	with: [
-	    self renderInputOn: html.
 	    categoriesList := html ul class: 'jt_column browser categories'.
 	    categoriesList := html ul class: 'jt_column browser categories'.
 	    commitButton := html button 
 	    commitButton := html button 
 		class: 'jt_commit';
 		class: 'jt_commit';
@@ -771,7 +804,7 @@ renderTopPanelOn: html
 !
 !
 
 
 renderTabsOn: html
 renderTabsOn: html
-    tabsList := html ul class: 'jt_tabs'.
+    tabsList := html ul class: 'jt_tabs jt_browser'.
     self updateTabsList.
     self updateTabsList.
 !
 !
 
 
@@ -803,15 +836,6 @@ renderButtonsOn: html
 		html button with: 'InspectIt';
 		html button with: 'InspectIt';
 			onClick: [sourceArea inspectit]]. 
 			onClick: [sourceArea inspectit]]. 
     self updateSourceAndButtons
     self updateSourceAndButtons
-!
-
-renderInputOn: html 
-	input := html input 
-		class: 'implementors';
-		yourself.
-	input onKeyPress: [:event |
-		event keyCode = 13 ifTrue: [
-			self search: input asJQuery val]]
 ! !
 ! !
 
 
 !Browser methodsFor: 'testing'!
 !Browser methodsFor: 'testing'!
@@ -876,17 +900,26 @@ updateTabsList
 	li := html li.
 	li := html li.
 	selectedTab = #instance ifTrue: [li class: 'selected'].
 	selectedTab = #instance ifTrue: [li class: 'selected'].
 	li
 	li
-	    with: 'Instance';
+	    with: [
+              	html span class: 'ltab'.
+              	html span class: 'mtab'; with: 'Instance'.
+              	html span class: 'rtab'];
 	    onClick: [self selectTab: #instance].
 	    onClick: [self selectTab: #instance].
 	li := html li.
 	li := html li.
 	selectedTab = #class ifTrue: [li class: 'selected'].
 	selectedTab = #class ifTrue: [li class: 'selected'].
 	li
 	li
-	    with: 'Class';
+	    with: [
+              	html span class: 'ltab'.
+              	html span class: 'mtab'; with: 'Class'.
+              	html span class: 'rtab'];
 	    onClick: [self selectTab: #class].
 	    onClick: [self selectTab: #class].
 	li := html li.
 	li := html li.
 	selectedTab = #comment ifTrue: [li class: 'selected'].
 	selectedTab = #comment ifTrue: [li class: 'selected'].
 	li
 	li
-	    with: 'Comment';
+	    with: [
+              	html span class: 'ltab'.
+              	html span class: 'mtab'; with: 'Comment'.
+              	html span class: 'rtab'];
 	    onClick: [self selectTab: #comment]]
 	    onClick: [self selectTab: #comment]]
 !
 !
 
 
@@ -1047,7 +1080,7 @@ renderTopPanelOn: html
 		with: [
 		with: [
 			variablesList := html ul class: 'jt_column variables'.
 			variablesList := html ul class: 'jt_column variables'.
 			valueTextarea := html textarea class: 'jt_column value'; at: 'readonly' put: 'readonly'.
 			valueTextarea := html textarea class: 'jt_column value'; at: 'readonly' put: 'readonly'.
-                  	html div class: 'jt_buttons inspector'; with: [
+                  	html div class: 'jt_tabs inspector'; with: [
           			html button
           			html button
                   			class: 'jt_button inspector refresh';
                   			class: 'jt_button inspector refresh';
 					with: 'Refresh';
 					with: 'Refresh';
@@ -1144,7 +1177,7 @@ implementors
 !
 !
 
 
 label
 label
-	^'[ReferencesBrowser]'
+	^'[References]'
 !
 !
 
 
 selector
 selector
@@ -1376,6 +1409,12 @@ onDoIt: aBlock
 
 
 onDoIt
 onDoIt
 	^onDoIt
 	^onDoIt
+!
+
+currentLineOrSelection
+    ^editor somethingSelected
+	ifFalse: [self currentLine]
+	ifTrue: [self selection]
 ! !
 ! !
 
 
 !SourceArea methodsFor: 'actions'!
 !SourceArea methodsFor: 'actions'!
@@ -1385,11 +1424,8 @@ clear
 !
 !
 
 
 doIt
 doIt
-    | selection result |
-    editor somethingSelected
-	ifFalse: [selection := self currentLine]
-	ifTrue: [selection := self selection].
-    result := self eval: selection.
+    | result |
+    result := self eval: self currentLineOrSelection.
     self onDoIt ifNotNil: [self onDoIt value].
     self onDoIt ifNotNil: [self onDoIt value].
     ^result
     ^result
 !
 !
@@ -1441,6 +1477,10 @@ print: aString
 
 
 printIt
 printIt
     self print: self doIt printString
     self print: self doIt printString
+!
+
+fileIn
+    Importer new import: self currentLineOrSelection readStream
 ! !
 ! !
 
 
 !SourceArea methodsFor: 'events'!
 !SourceArea methodsFor: 'events'!
@@ -1889,7 +1929,7 @@ TabWidget subclass: #TestRunner
 !TestRunner methodsFor: 'accessing'!
 !TestRunner methodsFor: 'accessing'!
 
 
 label
 label
-    ^'[SUnit]'
+    ^'SUnit'
 !
 !
 
 
 categories
 categories
@@ -2046,7 +2086,7 @@ renderClassesOn: html
 renderResultsOn: html
 renderResultsOn: html
     	statusDiv := html div.
     	statusDiv := html div.
 	html with: self progressBar.
 	html with: self progressBar.
-   	methodsList := html ul class: 'jt_column sunit methods'.
+   	methodsList := html ul class: 'jt_column sunit results'.
 	self updateMethodsList.
 	self updateMethodsList.
 	self updateStatusDiv
 	self updateStatusDiv
 !
 !

+ 74 - 26
st/Kernel.st

@@ -287,9 +287,13 @@ parseError: anException parsing: aString
 	badLine := (badLine copyFrom: 1 to: col - 1), ' ===>', (badLine copyFrom:  col to: badLine size).
 	badLine := (badLine copyFrom: 1 to: col - 1), ' ===>', (badLine copyFrom:  col to: badLine size).
 	lines at: row put: badLine.
 	lines at: row put: badLine.
 	code := String streamContents: [:s |
 	code := String streamContents: [:s |
-                                        lines withIndexDo: [:l :i |
-                                                   s nextPutAll: i asString, ': ', l, String lf]].
+                  lines withIndexDo: [:l :i |
+                     s nextPutAll: i asString, ': ', l, String lf]].
 	^ Error new messageText: ('Parse error on line ' , row , ' column ' , col , ' : ' , message , ' Below is code with line numbers and ===> marker inserted:' , String lf, code)
 	^ Error new messageText: ('Parse error on line ' , row , ' column ' , col , ' : ' , message , ' Below is code with line numbers and ===> marker inserted:' , String lf, code)
+!
+
+modules
+	<return self.modules.all()>
 ! !
 ! !
 
 
 Smalltalk class instanceVariableNames: 'current'!
 Smalltalk class instanceVariableNames: 'current'!
@@ -300,6 +304,24 @@ current
 	<return smalltalk>
 	<return smalltalk>
 ! !
 ! !
 
 
+Object subclass: #Module
+	instanceVariableNames: ''
+	category: 'Kernel'!
+
+!Module methodsFor: 'accessing'!
+
+name
+	<return self.moduleName || nil>
+!
+
+requires
+	<return self.requires || nil>
+!
+
+name: aString
+	<return self.moduleName = aString>
+! !
+
 Object subclass: #Behavior
 Object subclass: #Behavior
 	instanceVariableNames: ''
 	instanceVariableNames: ''
 	category: 'Kernel'!
 	category: 'Kernel'!
@@ -456,11 +478,7 @@ Behavior subclass: #Class
 !Class methodsFor: 'accessing'!
 !Class methodsFor: 'accessing'!
 
 
 category
 category
-	<return self.category>
-!
-
-category: aString
-	<self.category = aString>
+	^self module ifNil: ['unclassified'] ifNotNil: [self module name]
 !
 !
 
 
 rename: aString
 rename: aString
@@ -469,22 +487,36 @@ rename: aString
 		delete smalltalk[self.className];
 		delete smalltalk[self.className];
 		self.className = aString;
 		self.className = aString;
 	>
 	>
+!
+
+module
+	<return self.module>
+!
+
+module: aModule
+	<self.module = aModule>
 ! !
 ! !
 
 
 !Class methodsFor: 'class creation'!
 !Class methodsFor: 'class creation'!
 
 
 subclass: aString instanceVariableNames: anotherString
 subclass: aString instanceVariableNames: anotherString
-	^self subclass: aString instanceVariableNames: anotherString category: nil
+	"Kept for compatibility."
+	^self subclass: aString instanceVariableNames: anotherString module: nil
 !
 !
 
 
 subclass: aString instanceVariableNames: aString2 category: aString3
 subclass: aString instanceVariableNames: aString2 category: aString3
-	^ClassBuilder new
-	    superclass: self subclass: aString instanceVariableNames: aString2 category: aString3
+	"Kept for compatibility."
+	^self subclass: aString instanceVariableNames: aString2 module: aString3
 !
 !
 
 
 subclass: aString instanceVariableNames: aString2 classVariableNames: classVars poolDictionaries: pools category: aString3
 subclass: aString instanceVariableNames: aString2 classVariableNames: classVars poolDictionaries: pools category: aString3
 	"Just ignore class variables and pools. Added for compatibility."
 	"Just ignore class variables and pools. Added for compatibility."
-	^self subclass: aString instanceVariableNames: aString2 category: aString3
+	^self subclass: aString instanceVariableNames: aString2 module: aString3
+!
+
+subclass: aString instanceVariableNames: aString2 module: aString3
+	^ClassBuilder new
+	    superclass: self subclass: aString instanceVariableNames: aString2 module: aString3
 ! !
 ! !
 
 
 !Class methodsFor: 'printing'!
 !Class methodsFor: 'printing'!
@@ -1132,12 +1164,17 @@ Object subclass: #UndefinedObject
 !UndefinedObject methodsFor: 'class creation'!
 !UndefinedObject methodsFor: 'class creation'!
 
 
 subclass: aString instanceVariableNames: anotherString
 subclass: aString instanceVariableNames: anotherString
-	^self subclass: aString instanceVariableNames: anotherString category: nil
+	^self subclass: aString instanceVariableNames: anotherString module: nil
 !
 !
 
 
 subclass: aString instanceVariableNames: aString2 category: aString3
 subclass: aString instanceVariableNames: aString2 category: aString3
+	"Kept for compatibility."
+	^self subclass: aString instanceVariableNames: aString2 module: aString3
+!
+
+subclass: aString instanceVariableNames: aString2 module: aString3
 	^ClassBuilder new
 	^ClassBuilder new
-	    superclass: self subclass: aString instanceVariableNames: aString2 category: aString3
+	    superclass: self subclass: aString instanceVariableNames: aString2 module: aString3
 ! !
 ! !
 
 
 !UndefinedObject methodsFor: 'copying'!
 !UndefinedObject methodsFor: 'copying'!
@@ -2264,20 +2301,21 @@ Object subclass: #ClassBuilder
 !ClassBuilder methodsFor: 'class creation'!
 !ClassBuilder methodsFor: 'class creation'!
 
 
 superclass: aClass subclass: aString
 superclass: aClass subclass: aString
-	self superclass: aClass subclass: aString instanceVariableNames: '' category: nil
-!
-
-superclass: aClass subclass: aString instanceVariableNames: aString2 category: aString3
-	| newClass |
-	newClass := self addSubclassOf: aClass named: aString instanceVariableNames: (self instanceVariableNamesFor: aString2).
-	self setupClass: newClass.
-	newClass category: (aString3 ifNil: ['unclassified'])
+	^self superclass: aClass subclass: aString instanceVariableNames: '' module: nil
 !
 !
 
 
 class: aClass instanceVariableNames: aString
 class: aClass instanceVariableNames: aString
 	aClass isMetaclass ifFalse: [self error: aClass name, ' is not a metaclass'].
 	aClass isMetaclass ifFalse: [self error: aClass name, ' is not a metaclass'].
 	aClass basicAt: 'iVarNames' put: (self instanceVariableNamesFor: aString).
 	aClass basicAt: 'iVarNames' put: (self instanceVariableNamesFor: aString).
 	self setupClass: aClass
 	self setupClass: aClass
+!
+
+superclass: aClass subclass: aString instanceVariableNames: aString2 module: aString3
+	| newClass |
+	newClass := self addSubclassOf: aClass
+				named: aString instanceVariableNames: (self instanceVariableNamesFor: aString2)
+				module: (aString3 ifNil: ['unclassified']).
+	self setupClass: newClass
 ! !
 ! !
 
 
 !ClassBuilder methodsFor: 'private'!
 !ClassBuilder methodsFor: 'private'!
@@ -2293,6 +2331,11 @@ addSubclassOf: aClass named: aString instanceVariableNames: aCollection
 
 
 setupClass: aClass
 setupClass: aClass
 	<smalltalk.init(aClass);>
 	<smalltalk.init(aClass);>
+!
+
+addSubclassOf: aClass named: aString instanceVariableNames: aCollection module: moduleName
+	<smalltalk.addClass(aString, aClass, aCollection, moduleName);
+	    return smalltalk[aString]>
 ! !
 ! !
 
 
 Object subclass: #ClassCategoryReader
 Object subclass: #ClassCategoryReader
@@ -2703,7 +2746,7 @@ ErrorHandler class instanceVariableNames: 'current'!
 !ErrorHandler class methodsFor: 'accessing'!
 !ErrorHandler class methodsFor: 'accessing'!
 
 
 current
 current
-	^current
+	^current ifNil: [current := self new]
 !
 !
 
 
 setCurrent: anHandler
 setCurrent: anHandler
@@ -2712,10 +2755,6 @@ setCurrent: anHandler
 
 
 !ErrorHandler class methodsFor: 'initialization'!
 !ErrorHandler class methodsFor: 'initialization'!
 
 
-initialize
-	self register
-!
-
 register
 register
 	ErrorHandler setCurrent: self new
 	ErrorHandler setCurrent: self new
 ! !
 ! !
@@ -2749,6 +2788,15 @@ inspectOn: anInspector
 		variables._at_put_(i, self['@jsObject'][i]);
 		variables._at_put_(i, self['@jsObject'][i]);
 	}>.
 	}>.
 	anInspector setVariables: variables
 	anInspector setVariables: variables
+!
+
+doesNotUnderstand: aMessage
+	| obj selector arguments |
+	obj := self jsObject.
+	selector := aMessage selector.
+	arguments := aMessage arguments.
+	<if(obj[selector]) {return smalltalk.send(obj, selector, arguments)}>.
+	super doesNotUnderstand: aMessage
 ! !
 ! !
 
 
 !JSObjectProxy class methodsFor: 'instance creation'!
 !JSObjectProxy class methodsFor: 'instance creation'!

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