[Vm-dev] VM Maker: VMMaker.oscog-eem.1542.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Dec 2 20:43:22 UTC 2015
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1542.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1542
Author: eem
Time: 2 December 2015, 12:41:45.337 pm
UUID: f4d237d6-28fd-4441-9ca6-eaa7cf79541d
Ancestors: VMMaker.oscog-eem.1541
...and fix the shadowing warning.
Make primitiveDirectoryEntry fail silently when it should.
=============== Diff against VMMaker.oscog-eem.1541 ===============
Item was changed:
----- Method: CogVMSimulator>>primitiveDirectoryEntry (in category 'file primitives') -----
primitiveDirectoryEntry
| name pathName arrayNilOrSymbol result |
name := self stringOf: self stackTop.
pathName := self stringOf: (self stackValue: 1).
self successful ifFalse:
[^self primitiveFail].
arrayNilOrSymbol := FileDirectory default primLookupEntryIn: pathName name: name.
arrayNilOrSymbol ifNil:
[self pop: 3 thenPush: objectMemory nilObject.
^self].
arrayNilOrSymbol isArray ifFalse:
+ [arrayNilOrSymbol ~~ #primFailed ifTrue:
+ [self halt].
- [self halt.
^self primitiveFail].
result := PharoVM
ifTrue:
[self makeDirEntryName: (arrayNilOrSymbol at: 1) size: (arrayNilOrSymbol at: 1) size
createDate: (arrayNilOrSymbol at: 2) modDate: (arrayNilOrSymbol at: 3)
isDir: (arrayNilOrSymbol at: 4) fileSize: (arrayNilOrSymbol at: 5)
posixPermissions: (arrayNilOrSymbol at: 6) isSymlink: (arrayNilOrSymbol at: 7) ]
ifFalse:
[self makeDirEntryName: (arrayNilOrSymbol at: 1) size: (arrayNilOrSymbol at: 1) size
createDate: (arrayNilOrSymbol at: 2) modDate: (arrayNilOrSymbol at: 3)
isDir: (arrayNilOrSymbol at: 4) fileSize: (arrayNilOrSymbol at: 5) ].
self pop: 3 thenPush: result!
Item was changed:
----- Method: Cogit>>fillInMethodHeader:size:selector: (in category 'generate machine code') -----
fillInMethodHeader: method size: size selector: selector
<returnTypeC: #'CogMethod *'>
<var: #method type: #'CogMethod *'>
+ | originalMethod rawHeader |
<var: #originalMethod type: #'CogMethod *'>
- | methodHeader originalMethod |
method cmType: CMMethod.
method objectHeader: objectMemory nullHeaderForMachineCodeMethod.
method blockSize: size.
method methodObject: methodObj.
+ rawHeader := coInterpreter rawHeaderOf: methodObj.
- methodHeader := coInterpreter rawHeaderOf: methodObj.
"If the method has already been cogged (e.g. Newspeak accessors) then
leave the original method attached to its cog method, but get the right header."
+ (coInterpreter isCogMethodReference: rawHeader)
- (coInterpreter isCogMethodReference: methodHeader)
ifTrue:
+ [originalMethod := self cCoerceSimple: rawHeader to: #'CogMethod *'.
- [originalMethod := self cCoerceSimple: methodHeader to: #'CogMethod *'.
self assert: originalMethod blockSize = size.
+ self assert: methodHeader = originalMethod methodHeader.
- methodHeader := originalMethod methodHeader.
NewspeakVM ifTrue:
[methodZone addToUnpairedMethodList: method]]
ifFalse:
[coInterpreter rawHeaderOf: methodObj put: method asInteger.
NewspeakVM ifTrue:
[method nextMethodOrIRCs: theIRCs]].
method methodHeader: methodHeader.
method selector: selector.
method cmNumArgs: (coInterpreter argumentCountOfMethodHeader: methodHeader).
(method cmRefersToYoung: hasYoungReferent) ifTrue:
[methodZone addToYoungReferrers: method].
method cmUsageCount: self initialMethodUsageCount.
method cpicHasMNUCase: false.
method cmUsesPenultimateLit: maxLitIndex >= ((objectMemory literalCountOfMethodHeader: methodHeader) - 2).
method blockEntryOffset: (blockEntryLabel notNil
ifTrue: [blockEntryLabel address - method asInteger]
ifFalse: [0]).
"This can be an error check since a large stackCheckOffset is caused by compiling
a machine-code primitive, and hence depends on the Cogit, not the input method."
needsFrame ifTrue:
[stackCheckLabel address - method asInteger <= MaxStackCheckOffset ifFalse:
[self error: 'too much code for stack check offset']].
method stackCheckOffset: (needsFrame
ifTrue: [stackCheckLabel address - method asInteger]
ifFalse: [0]).
self assert: (backEnd callTargetFromReturnAddress: method asInteger + missOffset)
= (self methodAbortTrampolineFor: method cmNumArgs).
self assert: size = (methodZone roundUpLength: size).
processor flushICacheFrom: method asUnsignedInteger to: method asUnsignedInteger + size.
^method!
More information about the Vm-dev
mailing list