Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.127.mcz==================== Summary ====================
Name: VMMaker.oscog-eem.127
Author: eem
Time: 23 September 2011, 1:44:07.265 pm
UUID: 35927684-7e1e-4ff8-ad9f-90ecec7bb9a0
Ancestors: VMMaker.oscog-eem.126
Fix MNU PIC creation not to answer an error code to the interpreter.
This is the demon call 0x00000013 bug.
=============== Diff against VMMaker.oscog-eem.126 ===============
Item was changed:
----- Method: Cogit>>cogMNUPICSelector:methodOperand:numArgs: (in category 'in-line cacheing') -----
cogMNUPICSelector: selector methodOperand: methodOperand numArgs: numArgs
<api>
"Attempt to create a one-case PIC for an MNU.
The tag for the case is at the send site and so doesn't need to be generated."
<returnTypeC: #'CogMethod *'>
| startAddress headerSize size end |
coInterpreter
compilationBreak: selector
point: (objectMemory lengthOf: selector).
+ self assert: endCPICCase0 notNil.
- endCPICCase0 isNil ifTrue:
- [^self cCoerceSimple: NotFullyInitialized to: #'CogMethod *'].
startAddress := methodZone allocate: closedPICSize.
startAddress = 0 ifTrue:
+ [coInterpreter callForCogCompiledCodeCompaction.
+ ^0].
- [^self cCoerceSimple: InsufficientCodeSpace to: #'CogMethod *'].
methodLabel
address: startAddress;
dependent: nil.
"stack allocate the various collections so that they
are effectively garbage collected on return."
self allocateOpcodes: numPICCases * 7 bytecodes: 0.
self compileMNUCPIC: (self cCoerceSimple: startAddress to: #'CogMethod *')
methodOperand: methodOperand
numArgs: numArgs.
self computeMaximumSizes.
headerSize := self sizeof: CogMethod.
size := self generateInstructionsAt: startAddress + headerSize.
end := self outputInstructionsAt: startAddress + headerSize.
"The missOffset is the same as the interpretOffset."
self assert: missOffset = (interpretCall address + interpretCall machineCodeSize - startAddress).
self assert: startAddress + cmEntryOffset = entry address.
^self
fillInCPICHeader: (self cCoerceSimple: startAddress to: #'CogMethod *')
size: closedPICSize
numArgs: numArgs
numCases: 1
hasMNUCase: true
selector: selector !