[squeak-dev] The Trunk: Tests-eem.440.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Oct 9 19:51:37 UTC 2020
Eliot Miranda uploaded a new version of Tests to project The Trunk:
http://source.squeak.org/trunk/Tests-eem.440.mcz
==================== Summary ====================
Name: Tests-eem.440
Author: eem
Time: 9 October 2020, 12:51:35.424652 pm
UUID: 0ef6e6e7-af79-4a08-9a66-734fb771f2c2
Ancestors: Tests-eem.439
Provide a less superficial test for the full block method copying bug. test both the most superficial form of the bug and a deeper form.
=============== Diff against Tests-eem.439 ===============
Item was changed:
----- Method: CompilerTest>>foo (in category 'private') -----
foo
+ ^[{thisContext method method. thisContext home method}] value
+
+ "CompilerTest compile: (CompilerTest sourceCodeAt: #foo) classified: #private"
+ "self new foo first == self new foo second"!
- ^[{thisContext method method. thisContext home method}] value!
Item was added:
+ ----- Method: CompilerTest>>fubar (in category 'private') -----
+ fubar
+ ^[[[[{thisContext method method. thisContext home method}] value ] value ] value ] value
+
+ "CompilerTest compile: (CompilerTest sourceCodeAt: #fubar) classified: #private"
+ "self new fubar first == self new fubar second"!
Item was changed:
----- Method: CompilerTest>>testValidFullBlockMethod (in category 'tests - code generation') -----
testValidFullBlockMethod
+ "Check that the full block system creates properly connected methods
+ whose constituent blocks refer back to the correct method."
+ #(foo fubar) do:
+ [:selector| | fooMethod |
+ fooMethod := self class >> selector.
+ fooMethod encoderClass supportsFullBlocks ifFalse:
+ [self class compileMethodToUseFullBlocks: selector.
+ fooMethod := self class >> selector].
+ self assert: fooMethod encoderClass supportsFullBlocks.
+ self assert: ((fooMethod literalAt: 1) isCompiledCode and: [(fooMethod literalAt: 1) isCompiledBlock]).
+ self assert: (fooMethod literalAt: 1) method == fooMethod.
+ "And if it looks safe to do so, actually run foo and check its result"
+ (CompiledCode primaryBytecodeSetEncoderClass supportsFullBlocks
+ or: [CompiledCode secondaryBytecodeSetEncoderClass supportsFullBlocks]) ifTrue:
+ [self assert: {fooMethod. fooMethod } equals: (self perform: selector)]]!
- | fooMethod |
- fooMethod := self class >> #foo.
- fooMethod encoderClass supportsFullBlocks ifFalse:
- [self class compileMethodToUseFullBlocks: #foo.
- fooMethod := self class >> #foo].
- self assert: fooMethod encoderClass supportsFullBlocks.
- self assert: ((fooMethod literalAt: 1) isCompiledCode and: [(fooMethod literalAt: 1) isCompiledBlock]).
- self assert: (fooMethod literalAt: 1) method == fooMethod.
- "And if it looks safe to do so, actually run foo and check its result"
- (CompiledCode primaryBytecodeSetEncoderClass supportsFullBlocks
- or: [CompiledCode secondaryBytecodeSetEncoderClass supportsFullBlocks]) ifTrue:
- [self assert: {fooMethod. fooMethod } equals: self foo]!
More information about the Squeak-dev
mailing list
|