Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1031.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1031 Author: eem Time: 30 January 2015, 12:45:40.801 pm UUID: dacb0163-3f52-4afa-8c44-eed0ed3d892e Ancestors: VMMaker.oscog-eem.1030
Redo the Asynch changes to avoid ugly code generation
=============== Diff against VMMaker.oscog-eem.1030 ===============
Item was changed: ----- Method: AsynchFilePlugin>>primitiveAsyncFileClose: (in category 'primitives') ----- primitiveAsyncFileClose: fh | f | <var: #f type: 'AsyncFile *'> self primitive: 'primitiveAsyncFileClose' parameters: #(Oop ). f := self asyncFileValueOf: fh. + interpreterProxy failed ifTrue: [^nil]. + self asyncFileClose: f! - interpreterProxy failed ifFalse: - [self asyncFileClose: f]!
Item was changed: ----- Method: AsynchFilePlugin>>primitiveAsyncFileReadResult:intoBuffer:at:count: (in category 'primitives') ----- primitiveAsyncFileReadResult: fhandle intoBuffer: buffer at: start count: num | bufferSize bufferPtr r f count startIndex | <var: #f type: 'AsyncFile *'> self primitive: 'primitiveAsyncFileReadResult' parameters: #(Oop Oop SmallInteger SmallInteger ).
f := self asyncFileValueOf: fhandle. count := num. startIndex := start. bufferSize := interpreterProxy slotSizeOf: buffer. "in bytes or words" (interpreterProxy isWords: buffer) ifTrue: "covert word counts to byte counts" [count := count * 4. startIndex := startIndex - 1 * 4 + 1. bufferSize := bufferSize * 4]. interpreterProxy success: (startIndex >= 1 and: [startIndex + count - 1 <= bufferSize]).
+ interpreterProxy failed ifTrue: [^nil]. + "adjust for zero-origin indexing" + bufferPtr := (self cCoerce: (interpreterProxy firstIndexableField: buffer) to:#sqInt) + startIndex - 1. + r := self asyncFile: f Read: bufferPtr asVoidPointer Result: count. + ^r asOop: SmallInteger! - interpreterProxy failed ifFalse: - ["adjust for zero-origin indexing" - bufferPtr := (self cCoerce: (interpreterProxy firstIndexableField: buffer) to:#sqInt) + startIndex - 1. - r := self asyncFile: f Read: bufferPtr asVoidPointer Result: count]. - ^ r asOop: SmallInteger!
Item was changed: ----- Method: AsynchFilePlugin>>primitiveAsyncFileReadStart:fPosition:count: (in category 'primitives') ----- primitiveAsyncFileReadStart: fHandle fPosition: fPosition count: count | f | <var: #f type: 'AsyncFile *'> self primitive: 'primitiveAsyncFileReadStart' parameters: #(Oop SmallInteger SmallInteger). f := self asyncFileValueOf: fHandle. + interpreterProxy failed ifTrue: [^nil]. + self asyncFile: f Read: fPosition Start: count! - interpreterProxy failed ifFalse: - [self asyncFile: f Read: fPosition Start: count] - !
Item was changed: ----- Method: AsynchFilePlugin>>primitiveAsyncFileWriteResult: (in category 'primitives') ----- primitiveAsyncFileWriteResult: fHandle | f r | <var: #f type: 'AsyncFile *'> self primitive: 'primitiveAsyncFileWriteResult' parameters:#(Oop).
f := self asyncFileValueOf: fHandle. + interpreterProxy failed ifTrue: [^nil]. + r := self asyncFileWriteResult: f. + ^r asOop: SmallInteger! - interpreterProxy failed ifFalse: - [r := self asyncFileWriteResult: f. - ^r asOop: SmallInteger]!
Item was changed: ----- Method: AsynchFilePlugin>>primitiveAsyncFileWriteStart:fPosition:fromBuffer:at:count: (in category 'primitives') ----- primitiveAsyncFileWriteStart: fHandle fPosition: fPosition fromBuffer: buffer at: start count: num | f bufferSize bufferPtr count startIndex | <var: #f type: 'AsyncFile *'> self primitive: 'primitiveAsyncFileWriteStart' parameters: #(Oop SmallInteger Oop SmallInteger SmallInteger ). f := self asyncFileValueOf: fHandle. count := num. startIndex := start. bufferSize := interpreterProxy slotSizeOf: buffer. "in bytes or words" (interpreterProxy isWords: buffer) ifTrue: "covert word counts to byte counts" [count := count * 4. startIndex := startIndex - 1 * 4 + 1. bufferSize := bufferSize * 4]. interpreterProxy success: (startIndex >= 1 and: [startIndex + count - 1 <= bufferSize]).
+ interpreterProxy failed ifTrue: [^nil]. + "adjust for zero-origin indexing" + bufferPtr := (self cCoerce: (interpreterProxy firstIndexableField: buffer) to: #sqInt) + startIndex - 1. + self async: f File: fPosition Write: bufferPtr asVoidPointer Start: count! - interpreterProxy failed ifFalse: - ["adjust for zero-origin indexing" - bufferPtr := (self cCoerce: (interpreterProxy firstIndexableField: buffer) to: #sqInt) + startIndex - 1. - self async: f File: fPosition Write: bufferPtr asVoidPointer Start: count]!
vm-dev@lists.squeakfoundation.org