| 
					
				 | 
			
			
				@@ -0,0 +1,121 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Smalltalk current createPackage: 'Spaces' properties: #{}! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Object subclass: #ObjectSpace 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	instanceVariableNames: 'frame' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	package: 'Spaces'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!ObjectSpace commentStamp! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+I am a connection to another Smalltalk environment. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The implementation creates an iframe on the same location as the window, and connect to the Amber environment. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+## Usage example: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    | space | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    space := ObjectSpace new. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    space do: [ smalltalk ] "Answers aSmalltalk" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (space do: [ smalltalk ]) == smalltalk "Answers false" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    space release "Remove the object space environment"! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!ObjectSpace methodsFor: 'accessing'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+frame 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ frame 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!ObjectSpace methodsFor: 'evaluating'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+do: aBlock 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ frame contentWindow eval: '(', aBlock compiledSource, ')()' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!ObjectSpace methodsFor: 'events'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+whenReadyDo: aBlock 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(window jQuery: frame)  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		bind: 'load' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		do: aBlock 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!ObjectSpace methodsFor: 'initialization'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+connectTo: aFrame 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self release. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	frame := aFrame 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+create 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(window jQuery: 'body') append: '<iframe style="display: none;"></iframe>'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	frame := (window jQuery: 'iframe') get last. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	frame contentWindow location: window location 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+initialize 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	super initialize. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self create 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!ObjectSpace methodsFor: 'releasing'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+destroy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	frame ifNil: [ ^ self ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(window jQuery: frame) remove. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self release 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+release 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	frame := nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!ObjectSpace class methodsFor: 'instance creation'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+on: aFrame 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ self basicNew 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		connectTo: aFrame; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		yourself 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+TestCase subclass: #ObjectSpaceTest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	instanceVariableNames: 'space' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	package: 'Spaces'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!ObjectSpaceTest methodsFor: 'initialization'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+setUp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	space := ObjectSpace new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+tearDown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	space destroy. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	space := nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!ObjectSpaceTest methodsFor: 'tests'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+testCreate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self assert: space frame notNil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+testEvaluation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	| result | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	space whenReadyDo: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		result := space do: [ smalltalk ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self assert: result class name equals: 'Smalltalk'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self deny: result class = Smalltalk. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self deny: result == smalltalk ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+testRelease 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self deny: space frame isNil. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	space release. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self assert: space frame isNil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 |