[squeak-dev] Daily Commit Log

commits at source.squeak.org commits at source.squeak.org
Sun Feb 13 23:55:06 UTC 2011

Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours:


Name: Compiler-nice.186
Ancestors: Compiler-nice.184

Add both Compiler and Decompiler support for inlined #repeat.

Implementation notes:

For compilation, the repeat is implemented with a simple backward jump if ever the receiver is a block.

For decompilation, things are a bit more tedious because conditonnal loops (whileTrue/False) must be differentiated from unconditional loops (repeat).
The signature of conditional loops is that they all have their backward jump hoping over their conditional jump.
If a backward jump does not cross any conditional jump on its way back, then it must be a repeat.
The idea is thus to register the program counter of the test instruction before the conditional jump (lastJumpIfPc), and verify if the bacward jump branch after or before this instruction.
Things are a bit more complex because there can be a conditional instruction inside the repeat body. 
That's why those conditional jumps must be stacked (on lastJumpIfPcStack), and unstacked once decompiled.



Name: Compiler-nice.187
Ancestors: Compiler-nice.184

In case nil is the doItReceiver of an interactive evaluation, avoid proposing a menu that would add an inst var to UndefinedObject.



Name: Compiler-fbs.183
Ancestors: Compiler-ul.182

Fix for 7588: Decompiler>>interpretNextInstructionFor: bitrot:

If you change the first statement in the above-mentioned method to

  false ifTrue: [^ super interpretNextInstructionFor: client].

you will print out debug information. Or you would if you didn't get an exception printing out the bytecode. "code copyFrom: 4 to: code size" fails because it tries to make a String of size -2. That's because code at this point is something like '70' if you're currently interpreting bytecode 112.

Changing the offending line to "nextPutAll: '<', code, '>' fixes things.



Name: Compiler-nice.188
Ancestors: Compiler-nice.187, Compiler-fbs.183, Compiler-nice.186

Merge fbs.183 nice.186 nice.187 coming from inbox



Name: Compiler-nice.189
Ancestors: Compiler-nice.188

Enable cascading of special messages by deoptimizing, thanks Eliot.
This is mostly useless, but it removes an arbitrary limitation of the language.



Name: Kernel-nice.533
Ancestors: Kernel-nice.532

1) Let Behavior>>deepCopy return self, senders of deepCopy generally have no reason to copy a Behavior.
Moreover, the old code did a shallowCopy which is a non sense.

2) Make it explicit that veryDeepCopy does not copy any Behavior.
This was explicit for Metaclass, but implicit for Class (see Object>>#veryDeepInner: ), and undefined for Traits (they are not used, but who knows...).



Name: Kernel-nice.543
Ancestors: Kernel-nice.542

Cherry pick some changes from Pharo:

avoid inlining #selectors #classVarNames
use #cull:cull: instead of #valueWithPossibleArgs:
patch needsFrameSize: for the case of perform:withArguments: (required by old VM, not Cog)
better comment for Fraction hash



Name: Kernel-nice.544
Ancestors: Kernel-nice.543, Kernel-nice.533

Merge nice.533 (deepCopy clean-up)



Name: Compiler-ul.190
Ancestors: Compiler-nice.189

- changed the postscript to recompile all methods which send #repeat



Name: Kernel-nice.545
Ancestors: Kernel-nice.544

Merge Kernel-spd.444 to allow shadowing of a global namespace variable by a local class variable or shared pool variable.
RATIONALE: forbiding this shadowing works against encapsulation. It prevents packages with a local class var from loading when a concurrent package defined a global. Forbiding is thus like reserving every class var name. Non sense.

Kernel-spd.444 did also remove some methods, but I did not replay those changes as they are unrelated and undocumented.

* fixed Class>>canFindWithoutEnvironment: (it was actually checking the environment, making the behavior like bindingOf:) and added test to KernelTests
* changed Class>>declare: and Class>>addClassVarName:
	- no longer check the environment for conflicts
	- conflict error message clarified
* made conflict error in #addClassVarName: resumable to match the behavior of #declare:



Name: Tests-nice.111
Ancestors: Tests-ul.110

Use := assignments rather than _ in class comment examples.



Name: Tests-nice.115
Ancestors: Tests-ul.114, Tests-nice.111

Merge Tests.nice.111



Name: Tools-fbs.286
Ancestors: Tools-laza.285

Remove the contextStackTop instvar, replacing its calls with an indirection through "self contextStackTop", which just calls the top/first element of contextStack.



Name: Tools-nice.296
Ancestors: Tools-mtf.295, Tools-fbs.286

Merge fbs.286

Remove the contextStackTop instvar in Debugger, replacing its calls with an indirection through "self contextStackTop", which just calls the top/first element of contextStack.


More information about the Squeak-dev mailing list