| 
					
				 | 
			
			
				@@ -17,484 +17,483 @@ define(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    RuntimeSelectorsBrik.deps = ["selectors", "selectorConversion", "classes"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    function RuntimeSelectorsBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var selectors = brikz.selectors.selectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var globals = brikz.commonGlobals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var nilAsClass = brikz.classes.nilAsClass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var st2js = brikz.selectorConversion.st2js; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var jsSelectors = this.jsSelectors = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Method not implemented handlers */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function installNewSelectors (newSelectors, targetClasses) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            newSelectors.forEach(function (selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var jsSelector = st2js(selector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                jsSelectors.push(jsSelector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var fn = createDnuHandler(selector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                installJSMethod(nilAsClass.fn.prototype, jsSelector, fn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                targetClasses.forEach(function (target) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    installJSMethod(target.fn.prototype, jsSelector, fn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function RuntimeFactory (globals, emit) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        RuntimeSelectorsBrik.deps = ["selectors", "selectorConversion", "classes"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function RuntimeSelectorsBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var selectors = brikz.selectors.selectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var nilAsClass = brikz.classes.nilAsClass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var st2js = brikz.selectorConversion.st2js; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var jsSelectors = this.jsSelectors = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* Method not implemented handlers */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function installNewSelectors (newSelectors, targetClasses) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                newSelectors.forEach(function (selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var jsSelector = st2js(selector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    jsSelectors.push(jsSelector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var fn = createDnuHandler(selector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    installJSMethod(nilAsClass.fn.prototype, jsSelector, fn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    targetClasses.forEach(function (target) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        installJSMethod(target.fn.prototype, jsSelector, fn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.installNewSelectors = installNewSelectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* Dnu handler method */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function createDnuHandler (stSelector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return globals.Message._selector_arguments_notUnderstoodBy_( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        stSelector, [].slice.call(arguments), this 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            installNewSelectors(selectors, []); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.installNewSelectors = installNewSelectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        RuntimeClassesBrik.deps = ["runtimeSelectors", "behaviors", "classes", "runtimeMethods"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Dnu handler method */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function RuntimeClassesBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var jsSelectors = brikz.runtimeSelectors.jsSelectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var installNewSelectors = brikz.runtimeSelectors.installNewSelectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var installMethod = brikz.runtimeMethods.installMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var traitsOrClasses = brikz.behaviors.traitsOrClasses; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var wireKlass = brikz.classes.wireKlass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var installIvarCompat = brikz.classes.installIvarCompat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function createDnuHandler (stSelector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return globals.Message._selector_arguments_notUnderstoodBy_( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    stSelector, [].slice.call(arguments), this 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var detachedRootClasses = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function detachClass (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                klass.detachedRoot = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                detachedRootClasses = traitsOrClasses.filter(function (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return klass.detachedRoot; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                initClass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.detachClass = detachClass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            emit.selectorsAdded = function (newSelectors) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                installNewSelectors(newSelectors, detachedRootClasses); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        installNewSelectors(selectors, []); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* Initialize a class in its class hierarchy. Handle both classes and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             metaclasses. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function initClassAndMetaclass (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                initClass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (klass.a$cls && !klass.meta) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    initClass(klass.a$cls); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    RuntimeClassesBrik.deps = ["runtimeSelectors", "behaviors", "classes", "runtimeMethods"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    function RuntimeClassesBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var globals = brikz.commonGlobals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var jsSelectors = brikz.runtimeSelectors.jsSelectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var installNewSelectors = brikz.runtimeSelectors.installNewSelectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var installMethod = brikz.runtimeMethods.installMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var traitsOrClasses = brikz.behaviors.traitsOrClasses; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var wireKlass = brikz.classes.wireKlass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var installIvarCompat = brikz.classes.installIvarCompat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var emit = brikz.commonEmit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var detachedRootClasses = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function detachClass (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            klass.detachedRoot = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            detachedRootClasses = traitsOrClasses.filter(function (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return klass.detachedRoot; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            traitsOrClasses.forEach(function (traitOrClass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!traitOrClass.trait) initClassAndMetaclass(traitOrClass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            initClass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.detachClass = detachClass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function installStHooks () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emit.classAdded = function (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    initClassAndMetaclass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    klass._enterOrganization(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        emit.selectorsAdded = function (newSelectors) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            installNewSelectors(newSelectors, detachedRootClasses); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emit.traitAdded = function (trait) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    trait._enterOrganization(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Initialize a class in its class hierarchy. Handle both classes and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         metaclasses. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emit.classRemoved = function (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    klass._leaveOrganization(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function initClassAndMetaclass (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            initClass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (klass.a$cls && !klass.meta) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                initClass(klass.a$cls); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emit.traitRemoved = function (trait) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    trait._leaveOrganization(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        traitsOrClasses.forEach(function (traitOrClass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!traitOrClass.trait) initClassAndMetaclass(traitOrClass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.installStHooks = installStHooks; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function installStHooks () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             emit.classAdded = function (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 initClassAndMetaclass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                klass._enterOrganization(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            emit.traitAdded = function (trait) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                trait._enterOrganization(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function initClass (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                wireKlass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (klass.detachedRoot) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    copySuperclass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                installMethods(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            emit.classRemoved = function (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                klass._leaveOrganization(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function copySuperclass (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var myproto = klass.fn.prototype, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    superproto = klass.superclass.fn.prototype; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                jsSelectors.forEach(function (jsSelector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    installJSMethod(myproto, jsSelector, superproto[jsSelector]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function installMethods (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var methods = klass.methods; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Object.keys(methods).forEach(function (selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    installMethod(methods[selector], klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* Create an alias for an existing class */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            emit.traitRemoved = function (trait) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                trait._leaveOrganization(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.alias = function (traitOrClass, alias) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                globals[alias] = traitOrClass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.installStHooks = installStHooks; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* Manually set the constructor of an existing Smalltalk klass, making it a detached root class. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        emit.classAdded = function (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            initClassAndMetaclass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.setClassConstructor = this.setClassConstructor = function (klass, constructor) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                klass.fn = constructor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                detachClass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                installIvarCompat(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                klass.subclasses.forEach(reprotoFn(constructor)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function initClass (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            wireKlass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (klass.detachedRoot) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                copySuperclass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function reprotoFn (constructor) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var prototype = constructor.prototype; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return function (subclass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Object.setPrototypeOf(subclass.fn.prototype, prototype); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            installMethods(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function copySuperclass (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var myproto = klass.fn.prototype, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                superproto = klass.superclass.fn.prototype; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            jsSelectors.forEach(function (jsSelector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                installJSMethod(myproto, jsSelector, superproto[jsSelector]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        FrameBindingBrik.deps = ["runtimeClasses"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function installMethods (klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var methods = klass.methods; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Object.keys(methods).forEach(function (selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                installMethod(methods[selector], klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function FrameBindingBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var setClassConstructor = brikz.runtimeClasses.setClassConstructor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClassConstructor(globals.Number, Number); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClassConstructor(globals.BlockClosure, Function); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClassConstructor(globals.Boolean, Boolean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClassConstructor(globals.Date, Date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClassConstructor(globals.String, String); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClassConstructor(globals.Array, Array); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClassConstructor(globals.RegularExpression, RegExp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClassConstructor(globals.Error, Error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClassConstructor(globals.Promise, Promise); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.__init__ = function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                st.alias(globals.Array, "OrderedCollection"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                st.alias(globals.Date, "Time"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Create an alias for an existing class */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        RuntimeMethodsBrik.deps = ["selectorConversion"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.alias = function (traitOrClass, alias) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            globals[alias] = traitOrClass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function RuntimeMethodsBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var st2js = brikz.selectorConversion.st2js; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Manually set the constructor of an existing Smalltalk klass, making it a detached root class. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function installMethod (method, klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var jsSelector = method.jsSelector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!jsSelector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    jsSelector = method.jsSelector = st2js(method.selector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                installJSMethod(klass.fn.prototype, jsSelector, method.fn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.setClassConstructor = this.setClassConstructor = function (klass, constructor) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            klass.fn = constructor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            detachClass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            installIvarCompat(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            klass.subclasses.forEach(reprotoFn(constructor)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.installMethod = installMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function reprotoFn (constructor) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var prototype = constructor.prototype; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return function (subclass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Object.setPrototypeOf(subclass.fn.prototype, prototype); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            emit.behaviorMethodAdded = function (method, klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                installMethod(method, klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                propagateMethodChange(klass, method, klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    FrameBindingBrik.deps = ["runtimeClasses"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    function FrameBindingBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var globals = brikz.commonGlobals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var setClassConstructor = brikz.runtimeClasses.setClassConstructor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setClassConstructor(globals.Number, Number); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setClassConstructor(globals.BlockClosure, Function); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setClassConstructor(globals.Boolean, Boolean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setClassConstructor(globals.Date, Date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setClassConstructor(globals.String, String); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setClassConstructor(globals.Array, Array); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setClassConstructor(globals.RegularExpression, RegExp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setClassConstructor(globals.Error, Error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setClassConstructor(globals.Promise, Promise); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.__init__ = function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            st.alias(globals.Array, "OrderedCollection"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            st.alias(globals.Date, "Time"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            emit.behaviorMethodRemoved = function (method, klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                delete klass.fn.prototype[method.jsSelector]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                propagateMethodChange(klass, method, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    RuntimeMethodsBrik.deps = ["selectorConversion"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    function RuntimeMethodsBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var st2js = brikz.selectorConversion.st2js; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var emit = brikz.commonEmit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function installStHooks () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emit.methodReplaced = function (newMethod, oldMethod, traitOrBehavior) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    traitOrBehavior._methodOrganizationEnter_andLeave_(newMethod, oldMethod); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function installMethod (method, klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var jsSelector = method.jsSelector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!jsSelector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                jsSelector = method.jsSelector = st2js(method.selector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.installStHooks = installStHooks; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function propagateMethodChange (klass, method, exclude) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var selector = method.selector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var jsSelector = method.jsSelector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                st.traverseClassTree(klass, function (subclass, sentinel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (subclass === exclude) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (subclass.methods[selector]) return sentinel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (subclass.detachedRoot) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        installJSMethod(subclass.fn.prototype, jsSelector, subclass.superclass.fn.prototype[jsSelector]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            installJSMethod(klass.fn.prototype, jsSelector, method.fn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.installMethod = installMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        emit.behaviorMethodAdded = function (method, klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            installMethod(method, klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            propagateMethodChange(klass, method, klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function PrimitivesBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* Converts a JavaScript object to valid Smalltalk Object */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.readJSObject = function (js) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (js == null) return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else if (Array.isArray(js)) return js.map(st.readJSObject); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else if (js.constructor !== Object) return js; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        emit.behaviorMethodRemoved = function (method, klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            delete klass.fn.prototype[method.jsSelector]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            propagateMethodChange(klass, method, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var pairs = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (var i in js) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pairs.push(i, st.readJSObject(js[i])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return globals.Dictionary._newFromPairs_(pairs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function installStHooks () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            emit.methodReplaced = function (newMethod, oldMethod, traitOrBehavior) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                traitOrBehavior._methodOrganizationEnter_andLeave_(newMethod, oldMethod); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* Boolean assertion */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.assert = function (shouldBeBoolean) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (typeof shouldBeBoolean === "boolean") return shouldBeBoolean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else if (shouldBeBoolean != null && typeof shouldBeBoolean === "object") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    shouldBeBoolean = shouldBeBoolean.valueOf(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (typeof shouldBeBoolean === "boolean") return shouldBeBoolean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                globals.NonBooleanReceiver._signalOn_(shouldBeBoolean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.installStHooks = installStHooks; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        RuntimeBrik.deps = ["selectorConversion", "runtimeClasses"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function RuntimeBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var setClassConstructor = brikz.runtimeClasses.setClassConstructor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function propagateMethodChange (klass, method, exclude) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var selector = method.selector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var jsSelector = method.jsSelector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            st.traverseClassTree(klass, function (subclass, sentinel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (subclass === exclude) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (subclass.methods[selector]) return sentinel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (subclass.detachedRoot) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    installJSMethod(subclass.fn.prototype, jsSelector, subclass.superclass.fn.prototype[jsSelector]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function SmalltalkMethodContext (home, setup) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // TODO lazy fill of .sendIdx 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.sendIdx = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // TODO very likely .senderContext, not .homeContext here 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.homeContext = home; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.setup = setup; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // Fallbacks 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SmalltalkMethodContext.prototype.supercall = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SmalltalkMethodContext.prototype.locals = Object.freeze({}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SmalltalkMethodContext.prototype.receiver = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SmalltalkMethodContext.prototype.selector = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SmalltalkMethodContext.prototype.outerContext = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SmalltalkMethodContext.prototype.index = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            defineMethod(SmalltalkMethodContext, "fill", function (receiver, selector, locals) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.receiver = receiver; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.selector = selector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (locals != null) this.locals = locals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (this.homeContext) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    this.homeContext.evaluatedSelector = selector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    function PrimitivesBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var globals = brikz.commonGlobals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            defineMethod(SmalltalkMethodContext, "fillBlock", function (locals, ctx, index) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (locals != null) this.locals = locals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.outerContext = ctx; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (index) this.index = index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Converts a JavaScript object to valid Smalltalk Object */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.readJSObject = function (js) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (js == null) return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else if (Array.isArray(js)) return js.map(st.readJSObject); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else if (js.constructor !== Object) return js; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setClassConstructor(globals.MethodContext, SmalltalkMethodContext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* This is the current call context object. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             In Smalltalk code, it is accessible just by using 'thisContext' variable. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             In JS code, use api.getThisContext() (see below). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var thisContext = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             Runs worker function so that error handler is not set up 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             if there isn't one. This is accomplished by unconditional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             wrapping inside a context of a simulated `nil seamlessDoIt` call, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             which then stops error handler setup (see st.withContext above). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             The effect is, $core.seamless(fn)'s exceptions are not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             handed into ST error handler and caller should process them. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.seamless = function (worker) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var oldContext = thisContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                thisContext = new SmalltalkMethodContext(thisContext, function (ctx) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ctx.fill(null, "seamlessDoIt", {}, globals.UndefinedObject); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var result = worker(thisContext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                thisContext = oldContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var pairs = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (var i in js) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                pairs.push(i, st.readJSObject(js[i])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return globals.Dictionary._newFromPairs_(pairs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Boolean assertion */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.assert = function (shouldBeBoolean) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (typeof shouldBeBoolean === "boolean") return shouldBeBoolean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else if (shouldBeBoolean != null && typeof shouldBeBoolean === "object") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                shouldBeBoolean = shouldBeBoolean.valueOf(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (typeof shouldBeBoolean === "boolean") return shouldBeBoolean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function resultWithErrorHandling (worker) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return worker(thisContext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    globals.ErrorHandler._handleError_(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    thisContext = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // Rethrow the error in any case. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw error; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            globals.NonBooleanReceiver._signalOn_(shouldBeBoolean); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    RuntimeBrik.deps = ["selectorConversion", "runtimeClasses"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    function RuntimeBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var globals = brikz.commonGlobals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var setClassConstructor = brikz.runtimeClasses.setClassConstructor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function SmalltalkMethodContext (home, setup) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // TODO lazy fill of .sendIdx 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            this.sendIdx = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // TODO very likely .senderContext, not .homeContext here 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            this.homeContext = home; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            this.setup = setup; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             Standard way to run within context. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             Sets up error handler if entering first ST context in a stack. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.withContext = function (worker, setup) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var oldContext = thisContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                thisContext = new SmalltalkMethodContext(thisContext, setup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var result = oldContext == null ? resultWithErrorHandling(worker) : worker(thisContext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                thisContext = oldContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // Fallbacks 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        SmalltalkMethodContext.prototype.supercall = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        SmalltalkMethodContext.prototype.locals = Object.freeze({}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        SmalltalkMethodContext.prototype.receiver = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        SmalltalkMethodContext.prototype.selector = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        SmalltalkMethodContext.prototype.outerContext = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        SmalltalkMethodContext.prototype.index = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        defineMethod(SmalltalkMethodContext, "fill", function (receiver, selector, locals) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            this.receiver = receiver; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            this.selector = selector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (locals != null) this.locals = locals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (this.homeContext) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                this.homeContext.evaluatedSelector = selector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        defineMethod(SmalltalkMethodContext, "fillBlock", function (locals, ctx, index) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (locals != null) this.locals = locals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            this.outerContext = ctx; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (index) this.index = index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* Handle thisContext pseudo variable */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setClassConstructor(globals.MethodContext, SmalltalkMethodContext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* This is the current call context object. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         In Smalltalk code, it is accessible just by using 'thisContext' variable. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         In JS code, use api.getThisContext() (see below). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var thisContext = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         Runs worker function so that error handler is not set up 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         if there isn't one. This is accomplished by unconditional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         wrapping inside a context of a simulated `nil seamlessDoIt` call, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         which then stops error handler setup (see st.withContext above). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         The effect is, $core.seamless(fn)'s exceptions are not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         handed into ST error handler and caller should process them. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.seamless = function (worker) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var oldContext = thisContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            thisContext = new SmalltalkMethodContext(thisContext, function (ctx) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ctx.fill(null, "seamlessDoIt", {}, globals.UndefinedObject); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var result = worker(thisContext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            thisContext = oldContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function resultWithErrorHandling (worker) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return worker(thisContext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                globals.ErrorHandler._handleError_(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                thisContext = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // Rethrow the error in any case. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                throw error; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.getThisContext = function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!thisContext) return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (var frame = thisContext; frame; frame = frame.homeContext) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    frame.setup(frame); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return thisContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         Standard way to run within context. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         Sets up error handler if entering first ST context in a stack. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.withContext = function (worker, setup) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var oldContext = thisContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            thisContext = new SmalltalkMethodContext(thisContext, setup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var result = oldContext == null ? resultWithErrorHandling(worker) : worker(thisContext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            thisContext = oldContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Handle thisContext pseudo variable */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.getThisContext = function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!thisContext) return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (var frame = thisContext; frame; frame = frame.homeContext) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                frame.setup(frame); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return thisContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MessageSendBrik.deps = ["selectorConversion"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MessageSendBrik.deps = ["selectorConversion"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    function MessageSendBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var globals = brikz.commonGlobals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function MessageSendBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Send message programmatically. Used to implement #perform: & Co. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* Send message programmatically. Used to implement #perform: & Co. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.send2 = function (self, selector, args, klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var method = klass ? klass.fn.prototype[st.st2js(selector)] : self.a$cls && self[st.st2js(selector)]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return method != null ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    method.apply(self, args || []) : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    globals.Message._selector_arguments_notUnderstoodBy_( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        selector, [].slice.call(args), self.a$cls ? self : wrapJavaScript(self) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.send2 = function (self, selector, args, klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var method = klass ? klass.fn.prototype[st.st2js(selector)] : self.a$cls && self[st.st2js(selector)]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return method != null ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                method.apply(self, args || []) : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                globals.Message._selector_arguments_notUnderstoodBy_( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    selector, [].slice.call(args), self.a$cls ? self : wrapJavaScript(self) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function wrapJavaScript (o) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return globals.JSObjectProxy._on_(o); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function wrapJavaScript (o) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return globals.JSObjectProxy._on_(o); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.wrapJavaScript = wrapJavaScript; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* If the object property is a function, then call it, except if it starts with 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             an uppercase character (we probably want to answer the function itself in this 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             case and send it #new from Amber). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.accessJavaScript = function (self, propertyName, args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var propertyValue = self[propertyName]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (typeof propertyValue === "function" && !(args.length === 0 && /^[A-Z]/.test(propertyName))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return propertyValue.apply(self, args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                switch (args.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    case 0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return propertyValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    case 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        self[propertyName] = args[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return self; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        throw new Error("Cannot interpret " + propertyName + " with " + args.length + " arguments; field is a " + typeof propertyValue + ", not a function") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.wrapJavaScript = wrapJavaScript; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* If the object property is a function, then call it, except if it starts with 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         an uppercase character (we probably want to answer the function itself in this 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         case and send it #new from Amber). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.accessJavaScript = function (self, propertyName, args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var propertyValue = self[propertyName]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (typeof propertyValue === "function" && !(args.length === 0 && /^[A-Z]/.test(propertyName))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return propertyValue.apply(self, args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            switch (args.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                case 0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return propertyValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                case 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    self[propertyName] = args[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return self; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    throw new Error("Cannot interpret " + propertyName + " with " + args.length + " arguments; field is a " + typeof propertyValue + ", not a function") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function SelectorConversionBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var st2jsMemo = Object.create(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* Convert a Smalltalk selector into a JS selector */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function st2js (string) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return '_' + string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/:/g, '_') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/[\&]/g, '_and') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/[\|]/g, '_or') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/[+]/g, '_plus') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/-/g, '_minus') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/[*]/g, '_star') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/[\/]/g, '_slash') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/[\\]/g, '_backslash') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/[\~]/g, '_tild') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/%/g, '_percent') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/>/g, '_gt') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/</g, '_lt') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/=/g, '_eq') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/,/g, '_comma') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/[@]/g, '_at'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.st2js = function (stSelector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return st2jsMemo[stSelector] || st2js(stSelector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.st2js = function (stSelector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return st2jsMemo[stSelector] || (st2jsMemo[stSelector] = st2js(stSelector)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /* Convert a string to a valid smalltalk selector. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             if you modify the following functions, also change st2js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             accordingly */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.js2st = function (selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (selector.match(/^__/)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return binaryJsToSt(selector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return keywordJsToSt(selector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    function SelectorConversionBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var st2jsMemo = Object.create(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Convert a Smalltalk selector into a JS selector */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function st2js (string) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return '_' + string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/:/g, '_') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/[\&]/g, '_and') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/[\|]/g, '_or') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/[+]/g, '_plus') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/-/g, '_minus') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/[*]/g, '_star') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/[\/]/g, '_slash') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/[\\]/g, '_backslash') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/[\~]/g, '_tild') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/%/g, '_percent') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/>/g, '_gt') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/</g, '_lt') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/=/g, '_eq') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/,/g, '_comma') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/[@]/g, '_at'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.st2js = function (stSelector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return st2jsMemo[stSelector] || st2js(stSelector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.st2js = function (stSelector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return st2jsMemo[stSelector] || (st2jsMemo[stSelector] = st2js(stSelector)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* Convert a string to a valid smalltalk selector. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         if you modify the following functions, also change st2js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         accordingly */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.js2st = function (selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (selector.match(/^__/)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return binaryJsToSt(selector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return keywordJsToSt(selector); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function keywordJsToSt (selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return selector.replace(/^_/, '').replace(/_/g, ':'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function keywordJsToSt (selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return selector.replace(/^_/, '').replace(/_/g, ':'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            function binaryJsToSt (selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return selector 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/^_/, '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_and/g, '&') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_or/g, '|') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_plus/g, '+') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_minus/g, '-') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_star/g, '*') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_slash/g, '/') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_backslash/g, '\\') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_tild/g, '~') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_percent/g, '%') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_gt/g, '>') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_lt/g, '<') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_eq/g, '=') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_comma/g, ',') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .replace(/_at/g, '@'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function binaryJsToSt (selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return selector 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/^_/, '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_and/g, '&') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_or/g, '|') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_plus/g, '+') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_minus/g, '-') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_star/g, '*') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_slash/g, '/') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_backslash/g, '\\') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_tild/g, '~') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_percent/g, '%') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_gt/g, '>') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_lt/g, '<') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_eq/g, '=') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_comma/g, ',') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .replace(/_at/g, '@'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            st.st2prop = function (stSelector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var colonPosition = stSelector.indexOf(':'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return colonPosition === -1 ? stSelector : stSelector.slice(0, colonPosition); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        st.st2prop = function (stSelector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var colonPosition = stSelector.indexOf(':'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return colonPosition === -1 ? stSelector : stSelector.slice(0, colonPosition); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        StartImageBrik.deps = ["runtimeClasses", "runtimeMethods"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    StartImageBrik.deps = ["runtimeClasses", "runtimeMethods"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    function StartImageBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var globals = brikz.commonGlobals; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function StartImageBrik (brikz, st) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.run = function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                brikz.runtimeClasses.installStHooks(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                brikz.runtimeMethods.installStHooks(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return globals.AmberBootstrapInitialization._run(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.run = function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            brikz.runtimeClasses.installStHooks(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            brikz.runtimeMethods.installStHooks(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return globals.AmberBootstrapInitialization._run(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /* Making smalltalk that can run */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /* Making smalltalk that can run */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function configure (brikz) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            brikz.runtimeSelectors = RuntimeSelectorsBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            brikz.runtimeClasses = RuntimeClassesBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            brikz.frameBinding = FrameBindingBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            brikz.runtimeMethods = RuntimeMethodsBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            brikz.messageSend = MessageSendBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            brikz.runtime = RuntimeBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            brikz.primitives = PrimitivesBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            brikz.selectorConversion = SelectorConversionBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            brikz.startImage = StartImageBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    function configureWithRuntime (brikz) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        brikz.runtimeSelectors = RuntimeSelectorsBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        brikz.runtimeClasses = RuntimeClassesBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        brikz.frameBinding = FrameBindingBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        brikz.runtimeMethods = RuntimeMethodsBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        brikz.messageSend = MessageSendBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        brikz.runtime = RuntimeBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        brikz.primitives = PrimitivesBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        brikz.selectorConversion = SelectorConversionBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        brikz.startImage = StartImageBrik; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            brikz(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        brikz(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return {configure: configure}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return configureWithRuntime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return RuntimeFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 |