[squeak-dev] The Trunk: Compiler-ar.115.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Jan 4 23:51:37 UTC 2010


Andreas Raab uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-ar.115.mcz

==================== Summary ====================

Name: Compiler-ar.115
Author: ar
Time: 4 January 2010, 4:27:09 am
UUID: 210eedd3-6a9f-f541-8699-2dbe477bb147
Ancestors: Compiler-ar.114

Making Tests unloadable: Move Compiler-Tests to Tests-Compiler.

=============== Diff against Compiler-ar.114 ===============

Item was changed:
  SystemOrganization addCategory: #'Compiler-Kernel'!
  SystemOrganization addCategory: #'Compiler-ParseNodes'!
  SystemOrganization addCategory: #'Compiler-Support'!
- SystemOrganization addCategory: #'Compiler-Tests'!
  SystemOrganization addCategory: #'Compiler-Syntax'!
  SystemOrganization addCategory: #'Compiler-Exceptions'!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesJAtoJM (in category 'tests') -----
- testDecompilerInClassesJAtoJM
- 	self decompileClassesSelect: [:cn| cn first = $J and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: ArrayLiteralTest>>tearDown (in category 'initialize-release') -----
- tearDown
- 	self class removeSelector: #array!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesWAtoWM (in category 'tests') -----
- testDecompilerInClassesWAtoWM
- 	self decompileClassesSelect: [:cn| cn first = $W and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: ClosureTests>>testToDoInsideTemp (in category 'testing-todo') -----
- testToDoInsideTemp
- 	1 to: 5 do: [ :index | 
- 		| temp | 
- 		temp := index. 
- 		collection add: [ temp ] ].
- 	self assertValues: #(1 2 3 4 5)!

Item was removed:
- ----- Method: DecompilerTests>>blockingClasses (in category 'utilities') -----
- blockingClasses
- 
- 
- 	^ #(CompiledMethod)!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesUNtoUZ (in category 'tests') -----
- testDecompilerInClassesUNtoUZ
- 	self decompileClassesSelect: [:cn| cn first = $U and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest>>supportTestSourceRangeAccessForInjectInto:source:selectionSequence: (in category 'tests') -----
- supportTestSourceRangeAccessForInjectInto: method source: source selectionSequence: selections
- 	"Test debugger source range selection for inject:into:"
- 	| evaluationCount sourceMap debugTokenSequence debugCount |
- 	DebuggerMethodMap voidMapCache.
- 	evaluationCount := 0.
- 	sourceMap := method debuggerMap abstractSourceMap.
- 	debugTokenSequence := selections collect: [:string| Scanner new scanTokens: string].
- 	debugCount := 0.
- 	thisContext
- 		runSimulated: [(1 to: 2)
- 						withArgs:
- 							{	0.
- 								[:sum :each|
- 								 evaluationCount := evaluationCount + 1.
- 								 sum + each]}
- 						executeMethod: method]
- 		contextAtEachStep:
- 			[:ctxt| | range debugTokens |
- 			(ctxt method == method
- 			and: ["Exclude the send of #blockCopy: or #closureCopy:copiedValues: and braceWith:with:
- 				    to create the block, and the #new: and #at:'s for the indirect temp vector.
- 				   This for compilation without closure bytecodes. (Note that at:put:'s correspond to stores)"
- 				(ctxt willSend
- 					and: [(#(closureCopy:copiedValues: blockCopy: new: at: braceWith:with:) includes: ctxt selectorToSendOrSelf) not])
- 				"Exclude the store of the argument into the home context (for BlueBook blocks)
- 				 and the store of an indirection vector into an initial temp"
- 				or: [(ctxt willStore
- 					and: [(ctxt isBlock and: [ctxt pc = ctxt startpc]) not
- 					and: [(ctxt isBlock not
- 						and: [(method usesClosureBytecodes and: [ctxt abstractPC = 2])]) not]])
- 				or: [ctxt willReturn]]]) ifTrue:
- 				[debugTokens := debugTokenSequence at: (debugCount := debugCount + 1) ifAbsent: [#(bogusToken)].
- 				 self assert: (sourceMap includesKey: ctxt abstractPC).
- 				 range := sourceMap at: ctxt abstractPC ifAbsent: [(1 to: 0)].
- 				 self assert: (Scanner new scanTokens: (source copyFrom: range first to: range last)) = debugTokens]].
- 	self assert: evaluationCount = 2!

Item was removed:
- ----- Method: ClosureTests>>testWhileModificationAfter (in category 'testing-while') -----
- testWhileModificationAfter
- 	| index |
- 	index := 0.
- 	[ index < 5 ] whileTrue: [
- 		collection add: [ index ].
- 		index := index + 1 ].
- 	self assertValues: #(5 5 5 5 5)!

Item was removed:
- TestCase subclass: #ArrayLiteralTest
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Compiler-Tests'!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesGNtoGZ (in category 'tests') -----
- testDecompilerInClassesGNtoGZ
- 	self decompileClassesSelect: [:cn| cn first = $G and: [cn second asUppercase > $M]]!

Item was removed:
- TestCase subclass: #CompilerExceptionsTest
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Compiler-Tests'!

Item was removed:
- ----- Method: ClosureCompilerTest>>supportTestSourceRangeAccessForDecompiledInjectInto:source: (in category 'tests') -----
- supportTestSourceRangeAccessForDecompiledInjectInto: method source: source
- 	"Test debugger source range selection for inject:into:"
- 	^self
- 		supportTestSourceRangeAccessForInjectInto: method
- 		source: source
- 		selectionSequence: #(	':= t1'
- 								'do: [:t4 | t3 := t2 value: t3 value: t4]'
- 								'value: t3 value: t4'
- 								':= t2 value: t3 value: t4'
- 								']'
- 								'value: t3 value: t4'
- 								':= t2 value: t3 value: t4'
- 								']'
- 								'^t3')!

Item was removed:
- TestCase subclass: #MirrorPrimitiveTests
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Compiler-Tests'!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesFAtoFM (in category 'tests') -----
- testDecompilerInClassesFAtoFM
- 	self decompileClassesSelect: [:cn| cn first = $F and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesSAtoSM (in category 'tests') -----
- testDecompilerInClassesSAtoSM
- 	self decompileClassesSelect: [:cn| cn first = $S and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: MethodHighlightingTests>>testMethodHighlighting (in category 'tests') -----
- testMethodHighlighting
- 	| map before after method retpc |
- 	"Test the highlighting of the asXML method.  Test the highlighting of the return
- 	 statement which should include the whole block supplied to streamContents:."
- 	"DebuggerMethodMap voidMapCache"
- 	"DebuggerMethodMap forMethod: MethodHighlightingTests >> #asXML"
- 	method := MethodHighlightingTests >> #asXML.
- 	map := DebuggerMethodMap forMethod: method.
- 	retpc := method endPC.
- 	before := map rangeForPC: retpc contextIsActiveContext: false.
- 	map instVarNamed: 'abstractSourceRanges' put: nil.
- 	after := map rangeForPC: retpc contextIsActiveContext: false.
- 	self assert: before size > 500.
- 	self assert: before = after!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesQNtoQZ (in category 'tests') -----
- testDecompilerInClassesQNtoQZ
- 	self decompileClassesSelect: [:cn| cn first = $Q and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest class>>methodWithCopiedTemps (in category 'code examples') -----
- methodWithCopiedTemps
- 	| a b c r |
- 	a := 1.
- 	b := 2.
- 	c := 4.
- 	r := [a + b + c] value.
- 	b := nil.
- 	r
- 
- 	"Parser new
- 		parse: (self class sourceCodeAt: #methodWithCopiedTemps)
- 		class: self class"
- 
- 	"(Parser new
- 		encoderClass: EncoderForV3;
- 		parse: (self class sourceCodeAt: #methodWithCopiedTemps)
- 		class: self class) generateUsingClosures: #(0 0 0 0)"!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesCNtoCZ (in category 'tests') -----
- testDecompilerInClassesCNtoCZ
- 	self decompileClassesSelect: [:cn| cn first = $C and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest class>>methodWithOptimizedBlocksA (in category 'code examples') -----
- methodWithOptimizedBlocksA
- 	| s c |
- 	s := self isNil
- 			ifTrue: [| a | a := 'isNil'. a]
- 			ifFalse: [| a | a := 'notNil'. a].
- 	c := String new: s size.
- 	1 to: s size do:
- 		[:i| c at: i put: (s at: i)].
- 	^c
- 
- 	"Parser new
- 		parse: (self class sourceCodeAt: #methodWithOptimizedBlocksA)
- 		class: self class"!

Item was removed:
- ----- Method: ClosureCompilerTest>>testInlineBlockCollectionSD1 (in category 'tests') -----
- testInlineBlockCollectionSD1
- 	| a1 b1 a2 b2 |
- 	b1 := OrderedCollection new.
- 	1 to: 3 do:
- 		[:i |
- 		a1 := i.
- 		b1 add: [a1]].
- 	b1 := b1 asArray collect: [:b | b value].
- 	b2 := OrderedCollection new.
- 	1 to: 3 do:
- 		[:i |
- 		a2 := i.
- 		b2 add: [a2]] yourself. "defeat optimization"
- 	b2 := b2 asArray collect: [:b | b value].
- 	self assert: b1 = b2!

Item was removed:
- TestCase subclass: #ClosureCompilerTest
- 	instanceVariableNames: ''
- 	classVariableNames: 'CmpRR CogRTLOpcodes Jump MoveCqR Nop'
- 	poolDictionaries: ''
- 	category: 'Compiler-Tests'!

Item was removed:
- ----- Method: ClosureTests>>setUp (in category 'running') -----
- setUp
- 	super setUp.
- 	collection := OrderedCollection new!

Item was removed:
- ----- Method: ClosureCompilerTest>>doTestDebuggerTempAccessWith:with: (in category 'tests') -----
- doTestDebuggerTempAccessWith: one with: two
- 	"Test debugger access for temps"
- 	| outerContext local1 remote1 |
- 	outerContext := thisContext.
- 	local1 := 3.
- 	remote1 := 1/2.
- 	self assert: (Compiler new evaluate: 'one' in: thisContext to: self) == one.
- 	self assert: (Compiler new evaluate: 'two' in: thisContext to: self) == two.
- 	self assert: (Compiler new evaluate: 'local1' in: thisContext to: self) == local1.
- 	self assert: (Compiler new evaluate: 'remote1' in: thisContext to: self) == remote1.
- 	Compiler new evaluate: 'local1 := -3.0' in: thisContext to: self.
- 	self assert: local1 = -3.0.
- 	(1 to: 2) do:
- 		[:i| | local2 r1 r2 r3 r4 |
- 		local2 := i * 3.
- 		remote1 := local2 / 7.
- 		self assert: thisContext ~~ outerContext.
- 		self assert: (r1 := Compiler new evaluate: 'one' in: thisContext to: self) == one.
- 		self assert: (r2 := Compiler new evaluate: 'two' in: thisContext to: self) == two.
- 		self assert: (r3 := Compiler new evaluate: 'i' in: thisContext to: self) == i.
- 		self assert: (r4 := Compiler new evaluate: 'local2' in: thisContext to: self) == local2.
- 		self assert: (r4 := Compiler new evaluate: 'remote1' in: thisContext to: self) == remote1.
- 		self assert: (r4 := Compiler new evaluate: 'remote1' in: outerContext to: self) == remote1.
- 		Compiler new evaluate: 'local2 := 15' in: thisContext to: self.
- 		self assert: local2 = 15.
- 		Compiler new evaluate: 'local1 := 25' in: thisContext to: self.
- 		self assert: local1 = 25.
- 		{ r1. r2. r3. r4 } "placate the compiler"].
- 	self assert: local1 = 25.
- 	self assert: remote1 = (6/7)!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesBAtoBM (in category 'tests') -----
- testDecompilerInClassesBAtoBM
- 	self decompileClassesSelect: [:cn| cn first = $B and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesOAtoOM (in category 'tests') -----
- testDecompilerInClassesOAtoOM
- 	self decompileClassesSelect: [:cn| cn first = $O and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: CompilerTest>>testScaledDecimalLiterals (in category 'literals') -----
- testScaledDecimalLiterals
- 	"Equal ScaledDecimal with different scales should use different slots
- 	This is related to http://bugs.squeak.org/view.php?id=6797"
- 	
- 	"This correctly works when evaluated separately"
- 	self deny: (Compiler evaluate: '0.5s1') scale = (Compiler evaluate: '0.5s2') scale.
- 	
- 	"But not when evaluated together if literal reduction is too agressive"
- 	self deny: (Compiler evaluate: '0.5s1 scale =  0.5s2 scale').!

Item was removed:
- ClosureCompilerTest subclass: #MethodHighlightingTests
- 	instanceVariableNames: 'creator timeStamp duration tracks'
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Compiler-Tests'!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesMNtoMZ (in category 'tests') -----
- testDecompilerInClassesMNtoMZ
- 	self decompileClassesSelect: [:cn| cn first = $M and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesZNtoZZ (in category 'tests') -----
- testDecompilerInClassesZNtoZZ
- 	self decompileClassesSelect: [:cn| cn first = $Z and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest>>testInlineBlockCollectionLR3 (in category 'tests') -----
- testInlineBlockCollectionLR3
- 	| col |
- 	col := OrderedCollection new.
- 	1 to: 11 do: [ :each | | i | i := each. col add: [ i ]. i := i + 1 ].
- 	self assert: (col collect: [ :each | each value ]) asArray = (2 to: 12) asArray!

Item was removed:
- ----- Method: ClosureCompilerTest>>testInjectIntoDecompiledDebugs (in category 'tests') -----
- testInjectIntoDecompiledDebugs
- 	"Test various debugs of the decompiled form debug correctly."
- 	"self new testInjectIntoDecompiledDebugs"
- 	| source |
- 	source := (Collection sourceCodeAt: #inject:into:) asString.
- 	{ Encoder.
- 	   EncoderForV3PlusClosures. EncoderForLongFormV3PlusClosures } do:
- 		[:encoderClass| | method |
- 		method := (Parser new
- 							encoderClass: encoderClass;
- 							parse: source
- 							class: Collection)
- 						generate.
- 		self supportTestSourceRangeAccessForDecompiledInjectInto: method source: method decompileString]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesLNtoLZ (in category 'tests') -----
- testDecompilerInClassesLNtoLZ
- 	self decompileClassesSelect: [:cn| cn first = $L and: [cn second asUppercase > $M]]!

Item was removed:
- TestCase subclass: #ClosureTests
- 	instanceVariableNames: 'collection'
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Compiler-Tests'!

Item was removed:
- TestCase subclass: #CompilerTest
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Compiler-Tests'!
- 
- !CompilerTest commentStamp: 'nice 12/3/2007 22:15' prior: 0!
- CompilerTest is a holder for SUnit test of Compiler!

Item was removed:
- ----- Method: ClosureCompilerTest>>testSourceRangeAccessForClosureLongFormBytecodeInjectInto (in category 'tests') -----
- testSourceRangeAccessForClosureLongFormBytecodeInjectInto
- 	"Test debugger source range selection for inject:into: for a version compiled with closures"
- 	"self new testSourceRangeAccessForClosureLongFormBytecodeInjectInto"
- 	| source method |
- 	source := (Collection sourceCodeAt: #inject:into:) asString.
- 	method := (Parser new
- 						encoderClass: EncoderForLongFormV3PlusClosures;
- 						parse: source
- 						class: Collection)
- 					generate: (Collection compiledMethodAt: #inject:into:) trailer.
- 	self supportTestSourceRangeAccessForInjectInto: method source: source!

Item was removed:
- ----- Method: CompilerExceptionsTest>>selectFrom:to: (in category 'emulating') -----
- selectFrom: start to: end 
- 	!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesYAtoYM (in category 'tests') -----
- testDecompilerInClassesYAtoYM
- 	self decompileClassesSelect: [:cn| cn first = $Y and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: ClosureTests>>testToDoArgumentNotInlined (in category 'testing-todo') -----
- testToDoArgumentNotInlined
- 	| block |
- 	block := [ :index |
- 		collection add: [ index ] ].
- 	1 to: 5 do: block.
- 	self assertValues: #(1 2 3 4 5)!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesKAtoKM (in category 'tests') -----
- testDecompilerInClassesKAtoKM
- 	self decompileClassesSelect: [:cn| cn first = $K and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesXAtoXM (in category 'tests') -----
- testDecompilerInClassesXAtoXM
- 	self decompileClassesSelect: [:cn| cn first = $X and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: ClosureTests>>testWhileWithTemp (in category 'testing-while') -----
- testWhileWithTemp
- 	| index |
- 	index := 0.
- 	[ index < 5 ] whileTrue: [
- 		| temp |
- 		temp := index := index + 1.
- 		collection add: [ temp ] ].
- 	self assertValues: #(1 2 3 4 5)!

Item was removed:
- ----- Method: ClosureTests>>testWhileModificationBefore (in category 'testing-while') -----
- testWhileModificationBefore
- 	| index |
- 	index := 0.
- 	[ index < 5 ] whileTrue: [ 
- 		index := index + 1.
- 		collection add: [ index ] ].
- 	self assertValues: #(5 5 5 5 5)!

Item was removed:
- ----- Method: ClosureTests>>evaluateCopyOf: (in category 'utilities') -----
- evaluateCopyOf: aBlock
- 	aBlock copy value!

Item was removed:
- ----- Method: ClosureCompilerTest class>>methodWithVariousTemps (in category 'code examples') -----
- methodWithVariousTemps
- 	| classes total totalLength |
- 	classes := self withAllSuperclasses.
- 	total := totalLength := 0.
- 	classes do: [:class| | className |
- 		className := class name.
- 		total := total + 1.
- 		totalLength := totalLength + className size].
- 	^total -> totalLength
- 
- 	"Parser new
- 		parse: (self class sourceCodeAt: #methodWithVariousTemps)
- 		class: self class"!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesINtoIZ (in category 'tests') -----
- testDecompilerInClassesINtoIZ
- 	self decompileClassesSelect: [:cn| cn first = $I and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesVNtoVZ (in category 'tests') -----
- testDecompilerInClassesVNtoVZ
- 	self decompileClassesSelect: [:cn| cn first = $V and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: DecompilerTests>>decompileClassesSelect: (in category 'utilities') -----
- decompileClassesSelect: aBlock
- 	
- 	(Smalltalk classNames select: aBlock) do:
- 		[:cn | | cls |
- 		cls := Smalltalk at: cn.
- 		Smalltalk garbageCollect.
- 		 Transcript cr; show: cn.
- 		 cls selectorsDo:
- 			[:selector | | methodNode oldMethod newMethod oldCodeString newCodeString |
- 			(self isFailure: cls sel: selector) ifFalse:
- 				[" to help making progress
- 					(self
- 						isStoredProblems: cls theNonMetaClass
- 						sel: selector
- 						meta: cls isMeta)
- 					ifFalse: [ "
- 				Transcript nextPut: $.; flush.
- 				self checkDecompileMethod: (cls compiledMethodAt: selector)]]]!

Item was removed:
- ----- Method: CompilerExceptionsTest>>testUnknownSelector (in category 'tests') -----
- testUnknownSelector
- 	self 
- 		should: 
- 			[self class 
- 				compile: 'griffle self reallyHopeThisIsntImplementedAnywhere'
- 				notifying: self]
- 		raise: UnknownSelector!

Item was removed:
- ----- Method: ClosureTests>>testWhileWithTempNotInlined (in category 'testing-while') -----
- testWhileWithTempNotInlined
- 	| index block |
- 	index := 0.
- 	block := [
- 		| temp |
- 		temp := index := index + 1.
- 		collection add: [ temp ] ].
- 	[ index < 5 ] whileTrue: block.
- 	self assertValues: #(1 2 3 4 5)!

Item was removed:
- ----- Method: ClosureCompilerTest>>testInlineBlockCollectionLR2 (in category 'tests') -----
- testInlineBlockCollectionLR2
- 	"Test case from Lukas Renggli"
- 	| col |
- 	col := OrderedCollection new.
- 	1 to: 11 do: [ :each | #(1) do: [:ignored| col add: [ each ]] ].
- 	self assert: (col collect: [ :each | each value ]) asArray = (1 to: 11) asArray!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesHNtoHZ (in category 'tests') -----
- testDecompilerInClassesHNtoHZ
- 	self decompileClassesSelect: [:cn| cn first = $H and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest>>testBlockNumberingForInjectInto (in category 'tests') -----
- testBlockNumberingForInjectInto
- 	"Test that the compiler and CompiledMethod agree on the block numbering of Collection>>inject:into:
- 	 and that temp names for inject:into: are recorded."
- 	"self new testBlockNumberingForInjectInto"
- 	| methodNode method tempRefs |
- 	methodNode := Parser new
- 						encoderClass: EncoderForV3PlusClosures;
- 						parse: (Collection sourceCodeAt: #inject:into:)
- 						class: Collection.
- 	method := methodNode generate.
- 	tempRefs := methodNode encoder blockExtentsToTempsMap.
- 	self assert: tempRefs keys asSet = method startpcsToBlockExtents values asSet.
- 	self assert: ((tempRefs includesKey: (0 to: 6))
- 				and: [(tempRefs at: (0 to: 6)) hasEqualElements: #(('thisValue' 1) ('binaryBlock' 2) ('nextValue' (3 1)))]).
- 	self assert: ((tempRefs includesKey: (2 to: 4))
- 				and: [(tempRefs at: (2 to: 4)) hasEqualElements: #(('each' 1) ('binaryBlock' 2) ('nextValue' (3 1)))])!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesUAtoUM (in category 'tests') -----
- testDecompilerInClassesUAtoUM
- 	self decompileClassesSelect: [:cn| cn first = $U and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: ClosureTests>>testToDoOutsideTempNotInlined (in category 'testing-todo') -----
- testToDoOutsideTempNotInlined
- 	| block temp |
- 	block := [ :index | 
- 		temp := index. 
- 		collection add: [ temp ] ].
- 	1 to: 5 do: block.
- 	self assertValues: #(5 5 5 5 5)!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesGAtoGM (in category 'tests') -----
- testDecompilerInClassesGAtoGM
- 	self decompileClassesSelect: [:cn| cn first = $G and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: ClosureTests>>testBlockArgument (in category 'testing') -----
- testBlockArgument
- 	| block block1 block2 |
- 	block := [ :arg | | temp | temp := arg. [ temp ] ].
- 	block1 := block value: 1.
- 	block2 := block value: 2.
- 	self assert: block1 value = 1.
- 	self assert: block2 value = 2!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesTAtoTM (in category 'tests') -----
- testDecompilerInClassesTAtoTM
- 	self decompileClassesSelect: [:cn| cn first = $T and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: DecompilerTestFailuresCollector>>failures (in category 'accessing') -----
- failures
- 	^failures!

Item was removed:
- ----- Method: ClosureCompilerTest>>testSourceRangeAccessForInjectInto (in category 'tests') -----
- testSourceRangeAccessForInjectInto
- 	"Test debugger source range selection for inject:into: for the current version of the method"
- 	"self new testSourceRangeAccessForInjectInto"
- 	self supportTestSourceRangeAccessForInjectInto: (Collection compiledMethodAt: #inject:into:)
- 		source: (Collection sourceCodeAt: #inject:into:) asString!

Item was removed:
- ----- Method: MirrorPrimitiveTests>>testMirrorSize (in category 'tests') -----
- testMirrorSize
- 	| stackpBefore stackpAfter |
- 	stackpBefore := thisContext stackPtr.
- 	self assert: (thisContext objectSize: #(1 2 3)) = 3.
- 	self assert: (thisContext objectSize: '123') = 3.
- 	self assert: (thisContext objectSize: nil) = 0.
- 	self assert: (thisContext objectSize: 1) = 0.
- 	stackpAfter := thisContext stackPtr.
- 	self assert: stackpBefore = stackpAfter. "Make sure primitives pop all their arguments"!

Item was removed:
- ----- Method: ClosureTests>>testWhileModificationBeforeNotInlined (in category 'testing-while') -----
- testWhileModificationBeforeNotInlined
- 	| index block |
- 	index := 0.
- 	block := [ 
- 		index := index + 1.
- 		collection add: [ index ] ].
- 	[ index < 5 ] whileTrue: block.
- 	self assertValues: #(5 5 5 5 5)!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesENtoEZ (in category 'tests') -----
- testDecompilerInClassesENtoEZ
- 	self decompileClassesSelect: [:cn| cn first = $E and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesRNtoRZ (in category 'tests') -----
- testDecompilerInClassesRNtoRZ
- 	self decompileClassesSelect: [:cn| cn first = $R and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ArrayLiteralTest>>testSymbols (in category 'tests') -----
- testSymbols
- 	self class compile: 'array ^ #(#nil #true #false #''nil'' #''true'' #''false'')'.
- 	self assert: self array = {#nil. #true. #false. #nil. #true. #false}.!

Item was removed:
- ----- Method: ClosureTests>>testMethodTemp (in category 'testing') -----
- testMethodTemp
- 	| block1 block2 |
- 	block1 := self methodArgument: 1.
- 	block2 := self methodArgument: 2.
- 	self assert: block1 value = 1.
- 	self assert: block2 value = 2!

Item was removed:
- ----- Method: ClosureCompilerTest class>>methodWithCopiedAndPostClosedOverAssignedTemps (in category 'code examples') -----
- methodWithCopiedAndPostClosedOverAssignedTemps
- 	| blk a b c r1 r2 |
- 	a := 1.
- 	b := 2.
- 	c := 4.
- 	blk := [a + b + c].
- 	r1 := blk value.
- 	b := nil.
- 	r2 := blk value.
- 	r1 -> r2
- 
- 	"(Parser new
- 		encoderClass: EncoderForV3;
- 		parse: (self class sourceCodeAt: #methodWithCopiedAndPostClosedOverAssignedTemps)
- 		class: self class) generateUsingClosures: #(0 0 0 0)"!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesDNtoDZ (in category 'tests') -----
- testDecompilerInClassesDNtoDZ
- 	self decompileClassesSelect: [:cn| cn first = $D and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest>>testInlineBlockCollectionLR1 (in category 'tests') -----
- testInlineBlockCollectionLR1
- 	"Test case from Lukas Renggli"
- 	| col |
- 	col := OrderedCollection new.
- 	1 to: 11 do: [ :each | col add: [ each ] ].
- 	self assert: (col collect: [ :each | each value ]) asArray = (1 to: 11) asArray!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesQAtoQM (in category 'tests') -----
- testDecompilerInClassesQAtoQM
- 	self decompileClassesSelect: [:cn| cn first = $Q and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: ClosureTests>>testCopyNonLocalReturn (in category 'testing') -----
- testCopyNonLocalReturn
- 	self
- 		shouldnt: [self methodWithNonLocalReturn]
- 		raise: Error!

Item was removed:
- ----- Method: MirrorPrimitiveTests>>expectedFailures (in category 'testing') -----
- expectedFailures
- 
- 	^#(testMirrorAt testMirrorEqEq testMirrorInstVarAt testMirrorPerform testMirrorSize)!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesCAtoCM (in category 'tests') -----
- testDecompilerInClassesCAtoCM
- 	self decompileClassesSelect: [:cn| cn first = $C and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesPAtoPM (in category 'tests') -----
- testDecompilerInClassesPAtoPM
- 	self decompileClassesSelect: [:cn| cn first = $P and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: CompilerExceptionsTest>>select (in category 'emulating') -----
- select
- 	!

Item was removed:
- ----- Method: ClosureCompilerTest>>testSourceRangeAccessForBlueBookInjectInto (in category 'tests') -----
- testSourceRangeAccessForBlueBookInjectInto
- 	"Test debugger source range selection for inject:into: for a version compiled with closures"
- 	"self new testSourceRangeAccessForBlueBookInjectInto"
- 	| source method |
- 	source := (Collection sourceCodeAt: #inject:into:) asString.
- 	method := (Parser new
- 						encoderClass: EncoderForV3;
- 						parse: source
- 						class: Collection)
- 					generate: (Collection compiledMethodAt: #inject:into:) trailer.
- 	self supportTestSourceRangeAccessForInjectInto: method source: source!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesANtoAZ (in category 'tests') -----
- testDecompilerInClassesANtoAZ
- 	self decompileClassesSelect: [:cn| cn first = $A and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureTests>>testToDoInsideTempNotInlined (in category 'testing-todo') -----
- testToDoInsideTempNotInlined
- 	| block |
- 	block := [ :index | 
- 		| temp | 
- 		temp := index. 
- 		collection add: [ temp ] ].
- 	1 to: 5 do: block.
- 	self assertValues: #(1 2 3 4 5)!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesNNtoNZ (in category 'tests') -----
- testDecompilerInClassesNNtoNZ
- 	self decompileClassesSelect: [:cn| cn first = $N and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest>>testBlockNumbering (in category 'tests') -----
- testBlockNumbering
- 	"Test that the compiler and CompiledMethod agree on the block numbering of a substantial doit."
- 	"self new testBlockNumbering"
- 	| methodNode method tempRefs |
- 	methodNode :=
- 		Parser new
- 			encoderClass: EncoderForV3PlusClosures;
- 			parse: 'foo
- 					| numCopiedValuesCounts |
- 					numCopiedValuesCounts := Dictionary new.
- 					0 to: 32 do: [:i| numCopiedValuesCounts at: i put: 0].
- 					Transcript clear.
- 					Smalltalk allClasses remove: GeniePlugin; do:
- 						[:c|
- 						{c. c class} do:
- 							[:b|
- 							Transcript nextPut: b name first; endEntry.
- 							b selectorsAndMethodsDo:
- 								[:s :m| | pn |
- 								m isQuick not ifTrue:
- 									[pn := b parserClass new
- 												encoderClass: EncoderForV3PlusClosures;
- 												parse: (b sourceCodeAt: s)
- 												class: b.
- 									 pn generate.
- 									 [pn accept: nil]
- 										on: MessageNotUnderstood
- 										do: [:ex| | msg numCopied |
- 											msg := ex message.
- 											(msg selector == #visitBlockNode:
- 											 and: [(msg argument instVarNamed: ''optimized'') not]) ifTrue:
- 												[numCopied := (msg argument computeCopiedValues: pn) size.
- 												 numCopiedValuesCounts
- 													at: numCopied
- 													put: (numCopiedValuesCounts at: numCopied) + 1].
- 											msg setSelector: #==.
- 											ex resume: nil]]]]].
- 					numCopiedValuesCounts'
- 			class: Object.
- 	method := methodNode generate.
- 	tempRefs := methodNode encoder blockExtentsToTempsMap.
- 	self assert: tempRefs keys asSet = method startpcsToBlockExtents values asSet!

Item was removed:
- ----- Method: MirrorPrimitiveTests>>testMirrorClass (in category 'tests') -----
- testMirrorClass
- 	| stackpBefore stackpAfter |
- 	stackpBefore := thisContext stackPtr.
- 	self assert: (thisContext objectClass: Array new) = Array.
- 	self assert: (thisContext objectClass: 1) = 1 class.
- 	self assert: (thisContext objectClass: ProtoObject new) = ProtoObject.
- 	stackpAfter := thisContext stackPtr.
- 	self assert: stackpBefore = stackpAfter "Make sure primitives pop all their arguments"!

Item was removed:
- ----- Method: MethodHighlightingTests>>asXML (in category 'tests') -----
- asXML
- 	"self new asXML"
- 	"Convert the master index into external XML representation"
- 	
- 	^String streamContents:[:s| | writer |
- 		writer := self xmlWriter on: s.
- 		writer xmlDeclaration: '1.0'.
- 		writer startTag: 'recording'; endTag.
- 			writer tag: 'creator' pcData: creator.
- 			writer tag: 'timestamp' pcData: timeStamp.
- 			writer tag: 'duration' pcData: duration.
- 			writer startTag: 'tracks'; endTag.
- 				tracks do:[:tdata|
- 					writer startTag: 'track'; attribute: 'type' value: tdata value; endTag.
- 					writer pcData: tdata key.
- 					writer endTag: 'track'.
- 				].
- 			writer endTag: 'tracks'.
- 		writer endTag: 'recording'.
- 	].
- !

Item was removed:
- ----- Method: MirrorPrimitiveTests>>testMirrorInstVarAt (in category 'tests') -----
- testMirrorInstVarAt
- 	| stackpBefore stackpAfter array point |
- 	stackpBefore := thisContext stackPtr.
- 	array := { 1. 2. 3 }.
- 	point := Point x: 1 y: 2.
- 	self assert: (thisContext object: array instVarAt: 1) = 1.
- 	self assert: (thisContext object: point instVarAt: 2) = 2.
- 	thisContext object: array instVarAt: 2 put: #two.
- 	self assert: array = #(1 #two 3).
- 	thisContext object: point instVarAt: 1 put: 1/2.
- 	self assert: point = (Point x: 1 / 2 y: 2).
- 	stackpAfter := thisContext stackPtr.
- 	self assert: stackpBefore = stackpAfter. "Make sure primitives pop all their arguments"
- 	self should: [thisContext object: array instVarAt: 4] raise: Error.
- 	self should: [thisContext object: point instVarAt: 3] raise: Error!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesMAtoMM (in category 'tests') -----
- testDecompilerInClassesMAtoMM
- 	self decompileClassesSelect: [:cn| cn first = $M and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesZAtoZM (in category 'tests') -----
- testDecompilerInClassesZAtoZM
- 	self decompileClassesSelect: [:cn| cn first = $Z and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest>>supportTestSourceRangeAccessForInjectInto:source: (in category 'tests') -----
- supportTestSourceRangeAccessForInjectInto: method source: source
- 	"Test debugger source range selection for inject:into:"
- 	^self
- 		supportTestSourceRangeAccessForInjectInto: method
- 		source: source
- 		selectionSequence: #(	':= thisValue'
- 								'do: [:each | nextValue := binaryBlock value: nextValue value: each]'
- 								'value: nextValue value: each'
- 								':= binaryBlock value: nextValue value: each'
- 								'nextValue := binaryBlock value: nextValue value: each'
- 								'value: nextValue value: each'
- 								':= binaryBlock value: nextValue value: each'
- 								'nextValue := binaryBlock value: nextValue value: each'
- 								'^nextValue')!

Item was removed:
- ----- Method: CompilerExceptionsTest>>selectionInterval (in category 'emulating') -----
- selectionInterval
- 	^ 1 to: 0!

Item was removed:
- ----- Method: ArrayLiteralTest>>testReservedIdentifiers (in category 'tests') -----
- testReservedIdentifiers
- 	self class compile: 'array ^ #(nil true false)'.
- 	self assert: self array = {nil. true. false}.!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesLAtoLM (in category 'tests') -----
- testDecompilerInClassesLAtoLM
- 	self decompileClassesSelect: [:cn| cn first = $L and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesXNtoXZ (in category 'tests') -----
- testDecompilerInClassesXNtoXZ
- 	self decompileClassesSelect: [:cn| cn first = $X and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest>>closureCases (in category 'source') -----
- closureCases
- 	^#(
- '| n |
- n := 1.
- ^n + n'
- 
- '| i |
- i := 0.
- [i := i + 1.
-  i <= 10] whileTrue.
- ^i'
- 
- '[:c :s| | mn |
- mn := Compiler new
- 		compile: (c sourceCodeAt: s)
- 		in: c
- 		notifying: nil
- 		ifFail: [self halt].
- mn generate: #(0 0 0 0).
- {mn blockExtentsToTempsMap.
-   mn encoder schematicTempNames}]
- 			value: AbstractInstructionTests
- 			value: #runBinaryConditionalJumps:'
- 
- 'inject: thisValue into: binaryBlock
- 	| nextValue |
- 	nextValue := thisValue.
- 	self do: [:each | nextValue := binaryBlock value: nextValue value: each].
- 	^nextValue'
- 
- 'runBinaryConditionalJumps: assertPrintBar
- 	"CogIA32CompilerTests new runBinaryConditionalJumps: false"
- 	| mask reg1 reg2 reg3 |
- 	mask := 1 << self processor bitsInWord - 1.
- 	self concreteCompilerClass dataRegistersWithAccessorsDo:
- 		[:n :get :set|
- 		n = 0 ifTrue: [reg1 := get].
- 		n = 1 ifTrue: [reg2 := set].
- 		n = 2 ifTrue: [reg3 := set]].
- 	#(	(JumpAbove > unsigned)			(JumpBelowOrEqual <= unsigned)
- 		(JumpBelow < unsigned)			(JumpAboveOrEqual >= unsigned)
- 		(JumpGreater > signed)			(JumpLessOrEqual <= signed)
- 		(JumpLess < signed)				(JumpGreaterOrEqual >= signed)
- 		(JumpZero = signed)				(JumpNonZero ~= signed)) do:
- 		[:triple|
- 		[:opName :relation :signednessOrResult| | opcode jumpNotTaken jumpTaken nop memory bogus |
- 		self resetGen.
- 		opcode := CogRTLOpcodes classPool at: opName.
- 		self gen: CmpRR operand: 2 operand: 1.
- 		jumpTaken := self gen: opcode.
- 		self gen: MoveCqR operand: 0 operand: 0.
- 		jumpNotTaken := self gen: Jump.
- 		jumpTaken jmpTarget: (self gen: MoveCqR operand: 1 operand: 0).
- 		jumpNotTaken jmpTarget: (nop := self gen: Nop).
- 		memory := self generateInstructions.
- 		bogus := false.
- 		self pairs: (-2 to: 2)  do:
- 			[:a :b| | taken |
- 			self processor
- 				reset;
- 				perform: reg2 with: a signedIntToLong;
- 				perform: reg3 with: b signedIntToLong.
- 			[self processor singleStepIn: memory.
- 			 self processor pc ~= nop address] whileTrue.
- 			taken := (self processor perform: reg1) = 1.
- 			assertPrintBar
- 				ifTrue:
- 					[self assert: taken = (signednessOrResult == #unsigned
- 											ifTrue: [(a bitAnd: mask) perform: relation with: (b bitAnd: mask)]
- 											ifFalse: [a perform: relation with: b])]
- 				ifFalse:
- 					[Transcript
- 						nextPutAll: reg2; nextPut: $(; print: a; nextPutAll: '') ''; nextPutAll: relation; space;
- 						nextPutAll: reg3; nextPut: $(; print: b; nextPutAll: '') = '';
- 						print: taken; cr; flush.
- 					 taken = (signednessOrResult == #unsigned
- 											ifTrue: [(a bitAnd: mask) perform: relation with: (b bitAnd: mask)]
- 											ifFalse: [a perform: relation with: b]) ifFalse:
- 						[bogus := true]]].
- 			 bogus ifTrue:
- 				[self processor printRegistersOn: Transcript.
- 				 Transcript show: (self processor disassembleInstructionAt: jumpTaken address In: memory); cr]]
- 					valueWithArguments: triple]'
- 
- 'mapFromBlockStartsIn: aMethod toTempVarsFrom: schematicTempNamesString constructor: aDecompilerConstructor
- 	| map |
- 	map := aMethod
- 				mapFromBlockKeys: aMethod startpcsToBlockExtents keys asSortedCollection
- 				toSchematicTemps: schematicTempNamesString.
- 	map keysAndValuesDo:
- 		[:startpc :tempNameTupleVector| | subMap tempVector numTemps |
- 		subMap := Dictionary new.
- 		"Find how many temp slots there are (direct & indirect temp vectors)
- 		 and for each indirect temp vector find how big it is."
- 		tempNameTupleVector do:
- 			[:tuple|
- 			tuple last isArray
- 				ifTrue:
- 					[subMap at: tuple last first put: tuple last last.
- 					 numTemps := tuple last first]
- 				ifFalse:
- 					[numTemps := tuple last]].
- 		"create the temp vector for this scope level."
- 		tempVector := Array new: numTemps.
- 		"fill it in with any indirect temp vectors"
- 		subMap keysAndValuesDo:
- 			[:index :size|
- 			tempVector at: index put: (Array new: size)].
- 		"fill it in with temp nodes."
- 		tempNameTupleVector do:
- 			[:tuple| | itv |
- 			tuple last isArray
- 				ifTrue:
- 					[itv := tempVector at: tuple last first.
- 					 itv at: tuple last last
- 						put: (aDecompilerConstructor
- 								codeTemp: tuple last last - 1
- 								named: tuple first)]
- 				ifFalse:
- 					[tempVector
- 						at: tuple last
- 						put: (aDecompilerConstructor
- 								codeTemp: tuple last - 1
- 								named: tuple first)]].
- 		"replace any indirect temp vectors with proper RemoteTempVectorNodes"
- 		subMap keysAndValuesDo:
- 			[:index :size|
- 			tempVector
- 				at: index
- 				put: (aDecompilerConstructor
- 						codeRemoteTemp: index
- 						remoteTemps: (tempVector at: index))].
- 		"and update the entry in the map"
- 		map at: startpc put: tempVector].
- 	^map'
- 
-  'gnuifyFrom: inFileStream to: outFileStream
- 
- "convert interp.c to use GNU features"
- 
- 	| inData beforeInterpret inInterpret inInterpretVars beforePrimitiveResponse inPrimitiveResponse |
- 
- 	inData := inFileStream upToEnd withSqueakLineEndings.
- 	inFileStream close.
- 
- 	"print a header"
- 	outFileStream
- 		nextPutAll: ''/* This file has been post-processed for GNU C */'';
- 		cr; cr; cr.
- 
- 	beforeInterpret := true.    "whether we are before the beginning of interpret()"
- 	inInterpret := false.     "whether we are in the middle of interpret"
- 	inInterpretVars := false.    "whether we are in the variables of interpret"
- 	beforePrimitiveResponse := true.  "whether we are before the beginning of primitiveResponse()"
- 	inPrimitiveResponse := false.   "whether we are inside of primitiveResponse"
- 	''Gnuifying''
- 		displayProgressAt: Sensor cursorPoint
- 		from: 1 to: (inData occurrencesOf: Character cr)
- 		during:
- 			[:bar | | lineNumber |
- 			lineNumber := 0.
- 			inData linesDo:
- 				[ :inLine | | outLine extraOutLine caseLabel |
- 				bar value: (lineNumber := lineNumber + 1).
- 				outLine := inLine. 	"print out one line for each input line; by default, print out the line that was input, but some rules modify it"
- 				extraOutLine := nil.   "occasionally print a second output line..."
- 				beforeInterpret ifTrue: [
- 					inLine = ''#include "sq.h"'' ifTrue: [
- 						outLine := ''#include "sqGnu.h"'' ].
- 					inLine = ''interpret(void) {'' ifTrue: [
- 						"reached the beginning of interpret"
- 						beforeInterpret := false.
- 						inInterpret := true.
- 						inInterpretVars := true ] ]
- 				ifFalse: [
- 				inInterpretVars ifTrue: [
- 					(inLine findString: ''register struct foo * foo = &fum;'') > 0 ifTrue: [
- 						outLine := ''register struct foo * foo FOO_REG = &fum;'' ].
- 					(inLine findString: '' localIP;'') > 0 ifTrue: [
- 						outLine := ''    char* localIP IP_REG;'' ].
- 					(inLine findString: '' localFP;'') > 0 ifTrue: [
- 						outLine := ''    char* localFP FP_REG;'' ].
- 					(inLine findString: '' localSP;'') > 0 ifTrue: [
- 						outLine := ''    char* localSP SP_REG;'' ].
- 					(inLine findString: '' currentBytecode;'') > 0 ifTrue: [
- 						outLine := ''    sqInt currentBytecode CB_REG;'' ].
- 					inLine isEmpty ifTrue: [
- 						"reached end of variables"
- 						inInterpretVars := false.
- 						outLine := ''    JUMP_TABLE;''.
- 						extraOutLine := inLine ] ]
- 				ifFalse: [
- 				inInterpret ifTrue: [
- 					"working inside interpret(); translate the switch statement"
- 					(inLine beginsWith: ''		case '') ifTrue: [
- 						caseLabel := (inLine findTokens: ''	 :'') second.
- 						outLine := ''		CASE('', caseLabel, '')'' ].
- 					inLine = ''			break;'' ifTrue: [
- 						outLine := ''			BREAK;'' ].
- 					inLine = ''}'' ifTrue: [
- 						"all finished with interpret()"
- 						inInterpret := false ] ]
- 				ifFalse: [
- 				beforePrimitiveResponse ifTrue: [
- 					(inLine beginsWith: ''primitiveResponse('') ifTrue: [
- 						"into primitiveResponse we go"
- 						beforePrimitiveResponse := false.
- 						inPrimitiveResponse := true.
- 						extraOutLine := ''    PRIM_TABLE;'' ] ]
- 				ifFalse: [
- 				inPrimitiveResponse ifTrue: [
- 					inLine = ''	switch (primitiveIndex) {'' ifTrue: [
- 						extraOutLine := outLine.
- 						outLine := ''	PRIM_DISPATCH;'' ].
- 					inLine = ''	switch (GIV(primitiveIndex)) {'' ifTrue: [
- 						extraOutLine := outLine.
- 						outLine := ''	PRIM_DISPATCH;'' ].
- 					(inLine beginsWith: ''	case '') ifTrue: [
- 						caseLabel := (inLine findTokens: ''	 :'') second.
- 						outLine := ''	CASE('', caseLabel, '')'' ].
- 					inLine = ''}'' ifTrue: [
- 						inPrimitiveResponse := false ] ]
- 				] ] ] ].
- 
- 				outFileStream nextPutAll: outLine; cr.
- 				extraOutLine ifNotNil: [
- 					outFileStream nextPutAll: extraOutLine; cr ]]].
- 
- 	outFileStream close' )!

Item was removed:
- ----- Method: ClosureTests>>testMethodArgument (in category 'testing') -----
- testMethodArgument
- 	| temp block |
- 	temp := 0.
- 	block := [ [ temp ] ].
- 	temp := 1.
- 	block := block value.
- 	temp := 2.
- 	self assert: block value = 2!

Item was removed:
- ----- Method: ClosureCompilerTest>>testMethodAndNodeTempNames (in category 'tests') -----
- testMethodAndNodeTempNames
- 	"self new testMethodAndNodeTempNames"
- 	"Test that BytecodeAgnosticMethodNode>>blockExtentsToTempRefs answers the same
- 	 structure as CompiledMethod>>blockExtentsToTempRefs when the method has been
- 	 copied with the appropriate temps.  This tests whether doit methods are debuggable
- 	 since they carry their own temps."
- 	self closureCases do:
- 		[:source| | mn om m mbe obe |
- 		mn := source first isLetter
- 					ifTrue:
- 						[self class compilerClass new
- 							compile: source
- 							in: self class
- 							notifying: nil
- 							ifFail: [self error: 'compilation error']]
- 					ifFalse:
- 						[self class compilerClass new
- 							compileNoPattern: source
- 							in: self class
- 							context: nil
- 							notifying: nil
- 							ifFail: [self error: 'compilation error']].
- 		m := (om := mn generate) copyWithTempsFromMethodNode: mn.
- 		self assert: m holdsTempNames.
- 		self assert: m endPC = om endPC.
- 		mbe := m blockExtentsToTempsMap.
- 		obe := mn blockExtentsToTempsMap.
- 		self assert: mbe keys asSet = obe keys asSet.
- 		(mbe keys intersection: obe keys) do:
- 			[:interval|
- 			self assert: (mbe at: interval) = (obe at: interval)]]!

Item was removed:
- ----- Method: CompilerExceptionsTest>>griffle (in category 'as yet unclassified') -----
- griffle | goo |!

Item was removed:
- ----- Method: ClosureTests>>testBlockTemp (in category 'testing') -----
- testBlockTemp
- 	| block block1 block2 |
- 	block := [ :arg | [ arg ] ].
- 	block1 := block value: 1.
- 	block2 := block value: 2.
- 	self assert: block1 value = 1.
- 	self assert: block2 value = 2!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesJNtoJZ (in category 'tests') -----
- testDecompilerInClassesJNtoJZ
- 	self decompileClassesSelect: [:cn| cn first = $J and: [cn second asUppercase > $M]]!

Item was removed:
- TestCase subclass: #ScannerTest
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Compiler-Tests'!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesWNtoWZ (in category 'tests') -----
- testDecompilerInClassesWNtoWZ
- 	self decompileClassesSelect: [:cn| cn first = $W and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest>>testDecompiledDoitMethodTempNames (in category 'tests') -----
- testDecompiledDoitMethodTempNames
- 	"self new testDecompiledDoitMethodTempNames"
- 	"Test that a decompiled doit that has been copied with temps decompiles to the input"
- 	| removeComments |
- 	removeComments := [:n| n comment: nil].
- 	self closureCases do:
- 		[:source| | mns m mps mnps |
- 		"Need to compare an ungenerated tree with the generated method's methodNode
- 		 because generating code alters the tree when it introduces remote temp vectors."
- 		mns := #(first last) collect:
- 					[:ignored|
- 					source first isLetter
- 						ifTrue:
- 							[self class compilerClass new
- 								compile: source
- 								in: self class
- 								notifying: nil
- 								ifFail: [self error: 'compilation error']]
- 						ifFalse:
- 							[self class compilerClass new
- 								compileNoPattern: source
- 								in: self class
- 								context: nil
- 								notifying: nil
- 								ifFail: [self error: 'compilation error']]].
- 		m := (mns last generateWithTempNames).
- 		removeComments value: mns first.
- 		mns first nodesDo: removeComments.
- 		self assert: (mnps := mns first printString) = (mps := m methodNode printString)]!

Item was removed:
- ----- Method: ClosureCompilerTest>>testTempNameAccessForInjectInto (in category 'tests') -----
- testTempNameAccessForInjectInto
- 	"self new testTempNameAccessForInjectInto"
- 	| methodNode method evaluationCount block debuggerMap |
- 	methodNode := Parser new
- 						encoderClass: EncoderForV3PlusClosures;
- 						parse: (Collection sourceCodeAt: #inject:into:)
- 						class: Collection.
- 	method := methodNode generate.
- 	debuggerMap := DebuggerMethodMap forMethod: method methodNode: methodNode.
- 	evaluationCount := 0.
- 	block := [:prev :each| | theContext tempNames |
- 			evaluationCount := evaluationCount + 1.
- 			theContext := thisContext sender.
- 			tempNames := debuggerMap tempNamesForContext: theContext.
- 			self assert: (tempNames hasEqualElements: tempNames).
- 			#('thisValue' 'each' 'binaryBlock' 'nextValue')
- 				with: { 0. each. block. prev}
- 				do: [:tempName :value|
- 					self assert: (debuggerMap namedTempAt: (tempNames indexOf: tempName) in: theContext) == value.
- 					tempName ~= 'each' ifTrue:
- 						[self assert: (debuggerMap namedTempAt: (tempNames indexOf: tempName) in: theContext home) == value]]].
- 	(1 to: 10) withArgs: { 0. block } executeMethod: method.
- 	self assert: evaluationCount = 10!

Item was removed:
- ----- Method: MirrorPrimitiveTests>>testMirrorEqEq (in category 'tests') -----
- testMirrorEqEq
- 	| stackpBefore stackpAfter |
- 	stackpBefore := thisContext stackPtr.
- 	self assert: (thisContext object: Array new eqeq: Array new) == false.
- 	self assert: (thisContext object: Array eqeq: Array) == true.
- 	stackpAfter := thisContext stackPtr.
- 	self assert: stackpBefore = stackpAfter "Make sure primitives pop all their arguments"!

Item was removed:
- ----- Method: MirrorPrimitiveTests>>testMirrorPerform (in category 'tests') -----
- testMirrorPerform
- 	| stackpBefore stackpAfter anInterval |
- 	stackpBefore := thisContext stackPtr.
- 	anInterval := 1 to: 2.
- 	self assert: (thisContext object: anInterval perform:# species withArguments: #() inClass: Interval) == Array.
- 	self assert: (thisContext object: anInterval perform:# species withArguments: #() inClass: Interval superclass) == Interval.
- 	self should: [thisContext object: anInterval perform:# species withArguments: #() inClass: Point]
- 		raise: Error.
- 	self should: [thisContext object: anInterval perform:# species withArguments: OrderedCollection new inClass: Interval]
- 		raise: Error.
- 	stackpAfter := thisContext stackPtr.
- 	self assert: stackpBefore = stackpAfter "Make sure primitives pop all their arguments"!

Item was removed:
- ----- Method: ClosureCompilerTest>>testDebuggerTempAccess (in category 'tests') -----
- testDebuggerTempAccess
- 	self doTestDebuggerTempAccessWith: 1 with: 2!

Item was removed:
- ----- Method: DecompilerTests>>checkDecompileMethod: (in category 'utilities') -----
- checkDecompileMethod: oldMethod
- 	
- 	| cls selector oldMethodNode methodNode newMethod oldCodeString newCodeString |
- 	cls := oldMethod methodClass.
- 	selector := oldMethod selector.
- 	oldMethodNode := cls decompilerClass new
- 						decompile: selector
- 						in: cls
- 						method: oldMethod.
- 	[oldMethodNode properties includesKey: #warning] whileTrue:
- 		[oldMethodNode properties removeKey: #warning].
- 	oldCodeString := oldMethodNode decompileString.
- 	methodNode := [cls compilerClass new
- 						compile: oldCodeString
- 						in: cls
- 						notifying: nil
- 						ifFail: []]
- 						on: SyntaxErrorNotification
- 						do: [:ex|
- 							ex errorMessage = 'Cannot store into' ifTrue:
- 								[ex return: #badStore].
- 							ex pass].
- 	"Ignore cannot store into block arg errors; they're not our issue."
- 	methodNode ~~ #badStore ifTrue:
- 		[newMethod := methodNode generate.
- 		 newCodeString := (cls decompilerClass new
- 							decompile: selector
- 							in: cls
- 							method: newMethod) decompileString.
- 		 "(StringHolder new textContents:
- 			(TextDiffBuilder buildDisplayPatchFrom: oldCodeString to: newCodeString))
- 				openLabel: 'Decompilation Differences for ', cls name,'>>',selector"
- 		 "(StringHolder new textContents:
- 			(TextDiffBuilder buildDisplayPatchFrom: oldMethod abstractSymbolic to: newMethod abstractSymbolic))
- 				openLabel: 'Bytecode Differences for ', cls name,'>>',selector"
- 		 self assert: oldCodeString = newCodeString
- 			description: cls name asString, ' ', selector asString
- 			resumable: true]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesIAtoIM (in category 'tests') -----
- testDecompilerInClassesIAtoIM
- 	self decompileClassesSelect: [:cn| cn first = $I and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesVAtoVM (in category 'tests') -----
- testDecompilerInClassesVAtoVM
- 	self decompileClassesSelect: [:cn| cn first = $V and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest>>supportTestSourceRangeAccessForDecompiledNoBytecodeInjectInto:source: (in category 'tests') -----
- supportTestSourceRangeAccessForDecompiledNoBytecodeInjectInto: method source: source
- 	"Test debugger source range selection for inject:into:"
- 	^self
- 		supportTestSourceRangeAccessForInjectInto: method
- 		source: source
- 		selectionSequence: #(	'at: 1 put: t1'
- 								'do: [:t4 | t3 at: 1 put: (t2 value: (t3 at: 1) value: t4)]'
- 								'value: (t3 at: 1) value: t4'
- 								'at: 1 put: (t2 value: (t3 at: 1) value: t4)'
- 								']'
- 								'value: (t3 at: 1) value: t4'
- 								'at: 1 put: (t2 value: (t3 at: 1) value: t4)'
- 								']'
- 								'^t3 at: 1')!

Item was removed:
- ----- Method: ClosureTests>>testToDoOutsideTemp (in category 'testing-todo') -----
- testToDoOutsideTemp
- 	| temp |
- 	1 to: 5 do: [ :index | 
- 		temp := index. 
- 		collection add: [ temp ] ].
- 	self assertValues: #(5 5 5 5 5)!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesHAtoHM (in category 'tests') -----
- testDecompilerInClassesHAtoHM
- 	self decompileClassesSelect: [:cn| cn first = $H and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesTNtoTZ (in category 'tests') -----
- testDecompilerInClassesTNtoTZ
- 	self decompileClassesSelect: [:cn| cn first = $T and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesFNtoFZ (in category 'tests') -----
- testDecompilerInClassesFNtoFZ
- 	self decompileClassesSelect: [:cn| cn first = $F and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesSNtoSZ (in category 'tests') -----
- testDecompilerInClassesSNtoSZ
- 	self decompileClassesSelect: [:cn| cn first = $S and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: CompilerExceptionsTest>>testUndeclaredVariable (in category 'tests') -----
- testUndeclaredVariable
- 	self 
- 		should: 
- 			[self class 
- 				compile: 'griffle ^ goo'
- 				notifying: self]
- 		raise: UndeclaredVariable!

Item was removed:
- ----- Method: ClosureCompilerTest>>testInlineBlockCollectionEM1 (in category 'tests') -----
- testInlineBlockCollectionEM1
- 	| a1 b1 i1 a2 b2 i2 we wb |
- 	b1 := OrderedCollection new.
- 	i1 := 1.
- 	[a1 := i1.
- 	 i1 <= 3] whileTrue:
- 		[b1 add: [a1].
- 		i1 := i1 + 1].
- 	b1 := b1 asArray collect: [:b | b value].
- 	b2 := OrderedCollection new.
- 	i2 := 1.
- 	we := [a2 := i2. i2 <= 3].
- 	wb := [b2 add: [a2]. i2 := i2 + 1].
- 	we whileTrue: wb. "defeat optimization"
- 	b2 := b2 asArray collect: [:b | b value].
- 	self assert: b1 = b2!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesEAtoEM (in category 'tests') -----
- testDecompilerInClassesEAtoEM
- 	self decompileClassesSelect: [:cn| cn first = $E and: [cn second asUppercase <= $M]]!

Item was removed:
- LongTestCase subclass: #DecompilerTests
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Compiler-Tests'!
- 
- !DecompilerTests commentStamp: 'sd 9/26/2004 13:24' prior: 0!
- Apparently the decompiler does not really work totally.
- Here are a bunch of methods that can help improving the decompiler:
- 	- blockingClasses return class for which it is impossible to decompile methods 
- 	- failures are problems that lead to a DNU
- 	- decompilerDiscrepancies are the results of running decompileTestHelper..as you see the pattern 	
- 	is quite present.!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesRAtoRM (in category 'tests') -----
- testDecompilerInClassesRAtoRM
- 	self decompileClassesSelect: [:cn| cn first = $R and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: ClosureTests>>testWhileModificationAfterNotInlined (in category 'testing-while') -----
- testWhileModificationAfterNotInlined
- 	| index block |
- 	index := 0.
- 	block := [ 
- 		collection add: [ index ].
- 		index := index + 1 ].
- 	[ index < 5 ] whileTrue: block.
- 	self assertValues: #(5 5 5 5 5)!

Item was removed:
- DecompilerTests subclass: #DecompilerTestFailuresCollector
- 	instanceVariableNames: 'failures'
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Compiler-Tests'!
- 
- !DecompilerTestFailuresCollector commentStamp: '<historical>' prior: 0!
- (| dtfc |
- dtfc := DecompilerTestFailuresCollector new.
- (dtfc class superclass organization listAtCategoryNamed: #tests) do:
- 	[:s| dtfc perform: s].
- dtfc failures)
- 
- (Transcript nextPut: ${.
- self do: [:mr| Transcript print: mr actualClass; nextPut: $.; space; store: mr methodSymbol; nextPut: $.; cr; flush].
- Transcript nextPut: $}; flush)
- 
- eem 7/1/2009 16:13
- {AdditionalMethodState. #keysAndValuesDo:.
- AdditionalMethodState. #propertyKeysAndValuesDo:.
- AdditionalMethodState. #at:ifAbsent:.
- AdditionalMethodState. #removeKey:ifAbsent:.
- AdditionalMethodState. #at:ifAbsentPut:.
- AdditionalMethodState. #setMethod:.
- AdditionalMethodState. #at:put:.
- AdditionalMethodState. #pragmas.
- AdditionalMethodState. #includesProperty:.
- AdditionalMethodState. #properties.
- AdditionalMethodState. #hasLiteralSuchThat:.
- AdditionalMethodState. #propertyValueAt:ifAbsent:.
- AdditionalMethodState. #hasLiteralThorough:.
- Array. #hasLiteralSuchThat:.
- BitBltSimulation. #initDither8Lookup.
- BlockNode. #sizeCodeExceptLast:.
- BlockNode. #emitCodeExceptLast:encoder:.
- Categorizer. #changeFromCategorySpecs:.
- Categorizer. #elementCategoryDict.
- CColorPicker. #colors:.
- CCustomDrawListCostume. #drawListOn:in:.
- ChangeList. #browseCurrentVersionsOfSelections.
- ClosureTests. #testToDoInsideTemp.
- Cogit. #computeMaximumSizes.
- Cogit. #outputInstructionsAt:.
- Cogit. #generateMapAt:start:.
- CogVMSimulator. #printFrameThing:at:.
- CogVMSimulator. #str:n:cmp:.
- CoInterpreter. #validStackPageBaseFrames.
- CoInterpreter. #markAndTraceTraceLog.
- CoInterpreter. #mapTraceLog.
- CoInterpreter. #checkStackIntegrity.
- CoInterpreter. #mapStackPages.
- CoInterpreter. #updateStackZoneReferencesToCompiledCodePreCompaction.
- CoInterpreter. #ceActivateFailingPrimitiveMethod:.
- CoInterpreterStackPages. #initializeStack:numSlots:pageSize:stackLimitOffset:stackPageHeadroom:.
- CompiledMethod. #=.
- CompiledMethod. #getPreambleFrom:at:.
- CompiledMethod. #hasLiteralThorough:.
- CompiledMethod. #hasLiteralSuchThat:.
- CPopUpMenuCostume. #drawMenu:on:in:.
- CroquetParticipant. #dropFiles:.
- CTextParagraph. #selectionRectsFrom:to:.
- CWheelWidgetCostume. #drawOn:in:.
- Dictionary. #scanFor:.
- Float. #printPaddedWith:to:.
- FMSound. #mixSampleCount:into:startingAt:leftVol:rightVol:.
- Form. #transformColors:.
- FTPClient. #getDataInto:.
- GIFReadWriter. #nextImageWithPlugin.
- GraphMorph. #drawDataOn:.
- GZipReadStream. #on:from:to:.
- HTTPServiceDispatcher. #errorReportFor:stack:on:.
- HttpUrl. #checkAuthorization:retry:.
- Integer. #benchSwitch:.
- Interpreter. #primitiveClosureValueWithArgs.
- Interpreter. #primitivePerformAt:.
- Interpreter. #primitiveDoPrimitiveWithArgs.
- Interpreter. #primitiveNewMethod.
- InterpreterStackPages. #initializeStack:numSlots:pageSize:stackLimitOffset:stackPageHeadroom:.
- JPEGReadWriter. #decodeBlockInto:component:dcTable:acTable:.
- KeyedIdentitySet. #scanFor:.
- KeyedSet. #scanFor:.
- LargeIntegersPlugin. #isNormalized:.
- LargeIntegersPlugin. #cBytesCopyFrom:to:len:.
- LargeIntegersPlugin. #cDigitMultiply:len:with:len:into:.
- LiteralDictionary. #scanFor:.
- LoopedSampledSound. #mixSampleCount:into:startingAt:leftVol:rightVol:.
- MethodDictionary. #scanFor:.
- MP4BoxInfoParser. #parseMP4BoxOutput:.
- MP4BoxNHMLTrack. #computeDTSDeltas.
- MultiByteBinaryOrTextStream. #next:.
- MultiByteFileStream. #next:.
- MViewPane. #reconstructEnabledDocuments.
- MViewPane. #reconstructOpenDocuments.
- MViewPane. #reconstructSelectionList.
- NewParagraph. #selectionRectsFrom:to:.
- Object. #instanceFields.
- OldSocket. #getResponseNoLF.
- PasteUpMorph. #dropFiles:.
- PlotMorphGrid. #bestStep:.
- PluckedSound. #reset.
- PluggableDictionary. #scanFor:.
- PluggableSet. #scanFor:.
- PluggableTabButtonMorph. #calculateArcLengths.
- PluggableTabButtonMorph. #drawTabOn:.
- PNGReadWriter. #copyPixelsGray:.
- PNMReadWriter. #readPlainRGB.
- PNMReadWriter. #readBWreverse:.
- PNMReadWriter. #nextPutRGB:.
- PNMReadWriter. #nextPutBW:reverse:.
- PopUpMenu. #readKeyboard.
- QFloorFan. #initialize.
- QMinimalForum. #demoDesksUnused.
- QNetVidReorderingBuffer. #popFramesForCTS:.
- QNetVidTrackStreamer. #sampleIndexWithCTS:.
- QServiceProvider. #statusReport.
- QServicesPane. #forumMenuInto:.
- QUserListItem. #drawOn:in:.
- QVMProfiler. #computeHistograms:.
- QVMProfiler. #selectSymbolsInRange.
- QwaqParticipantUI. #onDropFiles:.
- RelativeInstructionPrinter. #print:.
- RemoteHandMorph. #appendNewDataToReceiveBuffer.
- SchizophrenicClosureFormatStackInterpreter. #primitiveClosureValueWithArgs.
- Set. #do:.
- Set. #scanFor:.
- SHParserST80. #isBinary.
- ShootoutMall. #processVisitors.
- ShortIntegerArray. #writeOn:.
- SparseLargeArray. #analyzeSpaceSaving.
- StackInterpreter. #validStackPageBaseFrames.
- StackInterpreter. #divorceAllFrames.
- StackInterpreter. #checkStackIntegrity.
- StackInterpreter. #primitiveDoPrimitiveWithArgs.
- StackInterpreter. #reverseDisplayFrom:to:.
- StackInterpreter. #printOop:.
- StackInterpreter. #mapStackPages.
- StackInterpreter. #primitiveNewMethod.
- StackInterpreter. #primitiveClosureValueWithArgs.
- StrikeFontSet. #displayStringR2L:on:from:to:at:kern:.
- String. #howManyMatch:.
- Text. #asHtmlFragmentTextStyle:useBreaks:.
- TextURL. #actOnClickFor:.
- TFractalTerrain. #heightAt:.
- TFractalTerrain. #makeFaces.
- TFractalTerrain. #makeVertices.
- TFractalTerrain. #makeTextureUV.
- TFractalTerrain. #makeVertexNormals.
- TFrame. #computeUnionSphere.
- TMethod. #emitCCommentOn:.
- TRFBStreamOutput. #handleRequest:.
- TTCFontReader. #processCharacterMappingTable:.
- TTContourConstruction. #segmentsDo:.
- TTensor. #projectionIntegrate:.
- TTFontReader. #processHorizontalMetricsTable:length:.
- TTFontReader. #processCharacterMappingTable:.
- TWaves. #step.
- Vector. #copyFrom:.
- Vector. #asVector3.
- VectorColor. #copyFrom:.
- WeakKeyDictionary. #scanForNil:.
- WeakKeyDictionary. #scanFor:.
- WeakSet. #scanFor:.
- WeakSet. #scanForLoadedSymbol:.
- }!

Item was removed:
- ----- Method: CompilerExceptionsTest>>testUndefinedVariable (in category 'tests') -----
- testUndefinedVariable
- 	self 
- 		should: 
- 			[self class 
- 				compile: 'griffle | goo | ^ goo'
- 				notifying: self]
- 		raise: UndefinedVariable!

Item was removed:
- ----- Method: DecompilerTests>>isFailure:sel: (in category 'utilities') -----
- isFailure: cls sel: selector 
- 	"self new isKnowProblem: PNMReaderWriter sel: #nextImage"
- 	"#((PNMReadWriter nextImage)) includes: {PNMReadWriter
- 	name asSymbol . #nextImage}."
- 	^(#(#DoIt #DoItIn:) includes: selector)
- 	   or: [self decompilerFailures includes: {cls name asSymbol. selector}]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesDAtoDM (in category 'tests') -----
- testDecompilerInClassesDAtoDM
- 	self decompileClassesSelect: [:cn| cn first = $D and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: MirrorPrimitiveTests>>testMirrorAt (in category 'tests') -----
- testMirrorAt
- 	| stackpBefore stackpAfter array byteArray |
- 	stackpBefore := thisContext stackPtr.
- 	array := { 1. 2. 3 }.
- 	byteArray := ByteArray with: 1 with: 2 with: 3.
- 	self assert: (thisContext object: array basicAt: 1) = 1.
- 	self assert: (thisContext object: byteArray basicAt: 2) = 2.
- 	thisContext object: array basicAt: 2 put: #two.
- 	self assert: array = #(1 #two 3).
- 	thisContext object: byteArray basicAt: 2 put: 222.
- 	self assert: byteArray asArray = #(1 222 3).
- 	stackpAfter := thisContext stackPtr.
- 	self assert: stackpBefore = stackpAfter. "Make sure primitives pop all their arguments"
- 	self should: [thisContext object: array basicAt: 4] raise: Error.
- 	self should: [thisContext object: byteArray basicAt: 0] raise: Error.
- 	self should: [thisContext object: byteArray basicAt: 1 put: -1] raise: Error!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesPNtoPZ (in category 'tests') -----
- testDecompilerInClassesPNtoPZ
- 	self decompileClassesSelect: [:cn| cn first = $P and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest>>testSourceRangeAccessForBlueBookLongFormInjectInto (in category 'tests') -----
- testSourceRangeAccessForBlueBookLongFormInjectInto
- 	"Test debugger source range selection for inject:into: for a version compiled with closures"
- 	"self new testSourceRangeAccessForBlueBookLongFormInjectInto"
- 	| source method |
- 	source := (Collection sourceCodeAt: #inject:into:) asString.
- 	method := (Parser new
- 						encoderClass: EncoderForLongFormV3;
- 						parse: source
- 						class: Collection)
- 					generate: (Collection compiledMethodAt: #inject:into:) trailer.
- 	self supportTestSourceRangeAccessForInjectInto: method source: source!

Item was removed:
- ----- Method: CompilerExceptionsTest>>unusedVariableSource (in category 'private') -----
- unusedVariableSource
- 	^ 'griffle 
- 		| goo |
- 		^ nil'!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesBNtoBZ (in category 'tests') -----
- testDecompilerInClassesBNtoBZ
- 	self decompileClassesSelect: [:cn| cn first = $B and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesONtoOZ (in category 'tests') -----
- testDecompilerInClassesONtoOZ
- 	self decompileClassesSelect: [:cn| cn first = $O and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureCompilerTest>>testSourceRangeAccessForClosureBytecodeInjectInto (in category 'tests') -----
- testSourceRangeAccessForClosureBytecodeInjectInto
- 	"Test debugger source range selection for inject:into: for a version compiled with closures"
- 	"self new testSourceRangeAccessForClosureBytecodeInjectInto"
- 	| source method |
- 	source := (Collection sourceCodeAt: #inject:into:) asString.
- 	method := (Parser new
- 						encoderClass: EncoderForV3PlusClosures;
- 						parse: source
- 						class: Collection)
- 					generate: (Collection compiledMethodAt: #inject:into:) trailer.
- 	self supportTestSourceRangeAccessForInjectInto: method source: source!

Item was removed:
- ----- Method: ClosureTests>>testToDoArgument (in category 'testing-todo') -----
- testToDoArgument
- 	1 to: 5 do: [ :index |
- 		collection add: [ index ] ].
- 	self assertValues: #(1 2 3 4 5)!

Item was removed:
- ----- Method: ClosureCompilerTest class>>methodWithCopiedAndAssignedTemps (in category 'code examples') -----
- methodWithCopiedAndAssignedTemps
- 	| blk "0w" a "0w" b "0w" c "0w" t "0w" r1 "0w" r2 "0w" |
- 	a := 1. "1w"
- 	b := 2. "1w"
- 	c := 4. "1w"
- 	t := 0. "1w"
- 	blk "5w" := ["2" t  "3w" := t "3r" + a "3r" + b "3r" + c "3r" ] "4".
- 	r1 "5w" := blk "5r" value.
- 	b "5w" := -100.
- 	r2 "5w" := blk "5r" value.
- 	^r1 "5r" -> r2 "5r" -> t "5r"
- 
- 	"a: main(read(),write(0,1)), block(read(3),write()) => copy; no writes follow read
- 	 b: main(read(),write(0,1,5)), block(read(3),write()) => remote; write follows contained read
- 	 blk: main(read(5),write(0,5)), block(read(),write()) => no copy in blocks < 5
- 	 c: main(read(),write(0,1)), block(read(3),write()) => copy; no writes follow read
- 	 r1: main(read(5),write(0,5)), block(read(),write()) => no copy in blocks < 5
- 	 r2: main(read(5),write(0,5)), block(read(),write()) => no copy in blocks < 5
- 	 t: main(read(5),write(0,1)), block(read(3),write(3)) => remote; read follows contained write"
- 
- 
- 	"(Parser new
- 		encoderClass: EncoderForV3;
- 		parse: (self class sourceCodeAt: #methodWithCopiedAndAssignedTemps)
- 		class: self class) generateUsingClosures: #(0 0 0 0)"!

Item was removed:
- ----- Method: CompilerExceptionsTest>>text (in category 'emulating') -----
- text
- 	^ self unusedVariableSource!

Item was removed:
- TestCase subclass: #ContextCompilationTest
- 	instanceVariableNames: ''
- 	classVariableNames: ''
- 	poolDictionaries: ''
- 	category: 'Compiler-Tests'!

Item was removed:
- ----- Method: ClosureCompilerTest>>testInjectIntoDecompilations (in category 'tests') -----
- testInjectIntoDecompilations
- 	"Test various compilations decompile to the same code for a method sufficiently
- 	 simple that this is possible and sufficiently complex that the code generated
- 	 varies between the compilations."
- 	"self new testInjectIntoDecompilations"
- 	| source |
- 	source := (Collection sourceCodeAt: #inject:into:) asString.
- 	{ Encoder.
- 	   EncoderForV3. EncoderForLongFormV3.
- 	   EncoderForV3PlusClosures. EncoderForLongFormV3PlusClosures } do:
- 		[:encoderClass| | method |
- 		method := (Parser new
- 							encoderClass: encoderClass;
- 							parse: source
- 							class: Collection)
- 						generate.
- 		self assert: (Scanner new scanTokens: method decompileString)
- 					= #(inject: t1 into: t2
- 							| t3 |
- 							t3 ':=' t1 .
- 							self do: [ ':t4' | t3 ':=' t2 value: t3 value: t4 ] .
- 							^ t3)]!

Item was removed:
- ----- Method: CompilerExceptionsTest>>testUnusedVariable (in category 'tests') -----
- testUnusedVariable
- 	self 
- 		should: 
- 			[self class 
- 				compile: self unusedVariableSource
- 				notifying: self]
- 		raise: UnusedVariable!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesAAtoAM (in category 'tests') -----
- testDecompilerInClassesAAtoAM
- 	self decompileClassesSelect: [:cn| cn first = $A and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesNAtoNM (in category 'tests') -----
- testDecompilerInClassesNAtoNM
- 	self decompileClassesSelect: [:cn| cn first = $N and: [cn second asUppercase <= $M]]!

Item was removed:
- ----- Method: DecompilerTestFailuresCollector>>assert:description:resumable: (in category 'accessing') -----
- assert: aBoolean description: aString resumable: resumableBoolean 
- 	aBoolean ifFalse: 
- 		[failures isNil ifTrue:
- 			[failures := OrderedCollection new].
- 		 failures addLast: (thisContext sender tempAt: 1) methodReference]!

Item was removed:
- ----- Method: ClosureTests>>assertValues: (in category 'utilities') -----
- assertValues: anArray
- 	| values |
- 	values := collection collect: [ :each | each value ].
- 	self 
- 		assert: anArray asArray = values asArray
- 		description: 'Expected: ' , anArray asArray printString , 
- 			', but got ' , values asArray printString!

Item was removed:
- ----- Method: ContextCompilationTest>>testVariablesAndOffsetsDo (in category 'tests') -----
- testVariablesAndOffsetsDo
- 
- 	"ContextCompilationTest new testVariablesAndOffsetsDo"
- 	| contextClasses |
- 	contextClasses := ContextPart withAllSuperclasses, ContextPart allSubclasses asArray.
- 	contextClasses do:
- 		[:class|
- 		class variablesAndOffsetsDo:
- 			[:var :offset|
- 			self assert: offset < 0.
- 			self assert: (class instVarNameForIndex: offset negated) == var]].
- 
- 	InstructionStream withAllSuperclasses, InstructionStream allSubclasses asArray do:
- 		[:class|
- 		(contextClasses includes: class) ifFalse:
- 			[class variablesAndOffsetsDo:
- 				[:var :offset|
- 				(InstructionStream instVarNames includes: var) ifFalse:
- 					[self assert: offset > 0.
- 					 self assert: (class instVarNameForIndex: offset) == var]]]]!

Item was removed:
- ----- Method: ScannerTest>>testLiteralSymbols (in category 'testing') -----
- testLiteralSymbols
- 
- 	self assert: ('*+-/\~=<>&@%,|' allSatisfy: [:char | Scanner isLiteralSymbol: (Symbol with: char)])
- 		description: 'single letter binary symbols can be printed without string quotes'.
- 		
- 	self assert: (#('x' 'x:' 'x:y:' 'from:to:by:' 'yourself') allSatisfy: [:str | Scanner isLiteralSymbol: str asSymbol])
- 		description: 'valid ascii selector symbols can be printed without string quotes'.
- 		
- 	((32 to: 126) collect: [:ascii | Character value: ascii]) ,
- 	#(':x:yourself' '::' 'x:yourself' '123' 'x0:1:2:' 'x.y.z' '1abc' 'a1b0c2' ' x' 'x ' '+x-y' '||' '--' '++' '+-' '+/-' '-/+' '<|>' '#x' '()' '[]' '{}' '')
- 		do: [:str |
- 			self assert: (Compiler evaluate: str asSymbol printString) = str asSymbol
- 				description: 'in all case, a Symbol must be printed in an interpretable fashion']!

Item was removed:
- ----- Method: ClosureCompilerTest class>>methodWithOptimizedBlocks (in category 'code examples') -----
- methodWithOptimizedBlocks
- 	| s c |
- 	s := self isNil
- 			ifTrue: [| a | a := 'isNil'. a]
- 			ifFalse: [| b | b := 'notNil'. b].
- 	c := String new: s size.
- 	1 to: s size do:
- 		[:i| c at: i put: (s at: i)].
- 	^c
- 
- 	"Parser new
- 		parse: (self class sourceCodeAt: #methodWithOptimizedBlocks)
- 		class: self class"!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesYNtoYZ (in category 'tests') -----
- testDecompilerInClassesYNtoYZ
- 	self decompileClassesSelect: [:cn| cn first = $Y and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: DecompilerTests>>decompilerFailures (in category 'utilities') -----
- decompilerFailures
- 	"here is the list of failures: DNU resulting in trying to decompile the following methods"
- 
- 	^ #((BalloonEngineSimulation circleCosTable "-0.3826834323650903 => -0.38268343236509 or -0.3826834323650902")
- 		 (BalloonEngineSimulation circleSinTable "-0.3826834323650903 => -0.38268343236509 or -0.3826834323650902")
- 		 (GeniePlugin primSameClassAbsoluteStrokeDistanceMyPoints:otherPoints:myVectors:otherVectors:mySquaredLengths:otherSquaredLengths:myAngles:otherAngles:maxSizeAndReferenceFlag:rowBase:rowInsertRemove:rowInsertRemoveCount: "Cannot compile -- stack including temps is too deep")
- 		(QPickable2D pick:) "foo ifTrue: [^bar] ifFalse: [^baz]. ^huh?"
- 		(QUsersPane userEntryCompare:to:) "foo ifTrue: [^bar] ifFalse: [^baz]. ^huh?"
- 		(TShaderProgram vertexStrings) "foo ifTrue: []. => foo. => ."
- 		(TShaderProgram fragmentStrings) "foo ifTrue: []. => foo. => ."
- 		(TWindow zoomWindow:) "foo ifTrue: [^bar] ifFalse: [^baz]. ^huh?"
- 
- 		"(PNMReadWriter nextImage) (Collection #ifEmpty:ifNotEmpty:) (Collection #ifEmpty:) (Collection #ifNotEmpty:ifEmpty:) (Text #alignmentAt:ifAbsent:) (ObjectWithDocumentation propertyAt:ifAbsent:)")!

Item was removed:
- ----- Method: ClosureTests>>methodWithNonLocalReturn (in category 'utilities') -----
- methodWithNonLocalReturn
- 	self evaluateCopyOf: [^ self].
- 	self signalFailure: 'Should never reach here'!

Item was removed:
- ----- Method: DecompilerTests>>testDecompilerInClassesKNtoKZ (in category 'tests') -----
- testDecompilerInClassesKNtoKZ
- 	self decompileClassesSelect: [:cn| cn first = $K and: [cn second asUppercase > $M]]!

Item was removed:
- ----- Method: ClosureTests>>methodArgument: (in category 'testing') -----
- methodArgument: anObject
- 	^ [ anObject ]
- 	!




More information about the Squeak-dev mailing list