Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1997.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1997 Author: eem Time: 20 November 2016, 4:20:26.447594 pm UUID: 6d4a1cc8-5117-438d-b6ab-6ef315dd0210 Ancestors: VMMaker.oscog-eem.1996
The new FilePlugin code must protect against zero-divide when given empty arrays.
=============== Diff against VMMaker.oscog-eem.1996 ===============
Item was changed: ----- Method: FilePlugin>>primitiveFileReadWithPinning (in category 'file primitives') ----- primitiveFileReadWithPinning "This version of primitiveFileRead is for garbage collectors that support pinning." | count startIndex array file slotSize elementSize bytesRead | <inline: true> <var: 'file' type: #'SQFile *'> <var: 'count' type: #'size_t'> <var: 'startIndex' type: #'size_t'> <var: 'slotSize' type: #'size_t'> <var: 'elementSize' type: #'size_t'> count := interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 0). startIndex := interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 1). array := interpreterProxy stackValue: 2. file := self fileValueOf: (interpreterProxy stackValue: 3).
(interpreterProxy failed "buffer can be any indexable words or bytes object except CompiledMethod" or: [(interpreterProxy isWordsOrBytes: array) not]) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument].
slotSize := interpreterProxy slotSizeOf: array. (startIndex >= 1 and: [startIndex + count - 1 <= slotSize]) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex].
"Note: adjust startIndex for zero-origin byte indexing" + elementSize := slotSize = 0 + ifTrue: [0] + ifFalse: [(interpreterProxy byteSizeOf: array) // slotSize]. - elementSize := (interpreterProxy byteSizeOf: array) // slotSize. bytesRead := self sqFile: file Read: count * elementSize Into: (interpreterProxy cCoerce: (interpreterProxy firstIndexableField: array) to: #'char *') At: startIndex - 1 * elementSize. interpreterProxy failed ifFalse: [interpreterProxy pop: 5 "pop rcvr, file, array, startIndex, count" thenPush:(interpreterProxy integerObjectOf: bytesRead // elementSize) "push # of elements read"]!
Item was changed: ----- Method: FilePlugin>>primitiveFileWrite (in category 'file primitives') ----- primitiveFileWrite | count startIndex array file slotSize elementSize bytesWritten | <var: 'file' type: 'SQFile *'> <var: 'count' type: 'size_t'> <var: 'startIndex' type: 'size_t'> <var: 'slotSize' type: #'size_t'> <var: 'elementSize' type: #'size_t'> <export: true> count := interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 0). startIndex := interpreterProxy positiveMachineIntegerValueOf: (interpreterProxy stackValue: 1). array := interpreterProxy stackValue: 2. file := self fileValueOf: (interpreterProxy stackValue: 3).
(interpreterProxy failed "buffer can be any indexable words or bytes object except CompiledMethod" or: [(interpreterProxy isWordsOrBytes: array) not]) ifTrue: [^interpreterProxy primitiveFailFor: PrimErrBadArgument].
slotSize := interpreterProxy slotSizeOf: array. (startIndex >= 1 and: [startIndex + count - 1 <= slotSize]) ifFalse: [^interpreterProxy primitiveFailFor: PrimErrBadIndex].
"Note: adjust startIndex for zero-origin byte indexing" + elementSize := slotSize = 0 + ifTrue: [0] + ifFalse: [(interpreterProxy byteSizeOf: array) // slotSize]. - elementSize := (interpreterProxy byteSizeOf: array) // slotSize. bytesWritten := self sqFile: file Write: count * elementSize From: (interpreterProxy cCoerce: (interpreterProxy firstIndexableField: array) to: #'char *') At: startIndex - 1 * elementSize. interpreterProxy failed ifFalse: [interpreterProxy pop: 5 thenPush: (interpreterProxy integerObjectOf: bytesWritten // elementSize)]!
vm-dev@lists.squeakfoundation.org