[Vm-dev] VM Maker: VMMaker.oscog-eem.1031.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Jan 30 20:47:09 UTC 2015
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]!
More information about the Vm-dev
mailing list