[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