[Vm-dev] VM Maker: VMMaker.oscog-eem.2110.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Jan 24 22:26:40 UTC 2017


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2110.mcz

==================== Summary ====================

Name: VMMaker.oscog-eem.2110
Author: eem
Time: 24 January 2017, 2:25:56.230129 pm
UUID: efa09ad2-54d9-4746-a2cb-39acc333d22b
Ancestors: VMMaker.oscog-eem.2109, VMMaker.oscog-nice.2109

Merge VMMaker.oscog-nice.2109 & VMMaker.oscog-eem.2109

=============== Diff against VMMaker.oscog-eem.2109 ===============

Item was changed:
  ----- Method: ThreadedFFIPlugin>>ffiLoadCalloutModule: (in category 'symbol loading') -----
  ffiLoadCalloutModule: module
  	"Load the given module and return its handle"
  	| moduleHandlePtr moduleHandle ffiModuleName moduleLength rcvr ptr |
+ 	<var: #ptr type:'sqInt *'>
- 	<var: #ptr type:'int *'>
  	(interpreterProxy isBytes: module) ifTrue:[
  		"plain module name"
  		ffiModuleName := module.
  		moduleLength := interpreterProxy byteSizeOf: ffiModuleName.
  		moduleHandle := (interpreterProxy
  							ioLoadModule: (interpreterProxy firstIndexableField: ffiModuleName) asInteger
  							OfLength: moduleLength) asInteger.
  		(interpreterProxy failed
  		 or: [moduleHandle = 0]) ifTrue:
  			[^self ffiFail: FFIErrorModuleNotFound]. "failed"
  		^moduleHandle].
  	"Check if the external method is defined in an external library"
  	rcvr := interpreterProxy stackValue: interpreterProxy methodArgumentCount.
  	(interpreterProxy is: rcvr KindOfClass: interpreterProxy classExternalLibrary) ifFalse:
  		[^self ffiFail: FFIErrorNoModule].
  	"external library"
  	moduleHandlePtr := interpreterProxy fetchPointer: 0 ofObject: rcvr.
  	moduleHandle := self ffiContentsOfHandle: moduleHandlePtr errCode: FFIErrorBadExternalLibrary.
  	interpreterProxy failed ifTrue:[^0].
  	moduleHandle = 0 ifTrue:["need to reload module"
  		ffiModuleName := interpreterProxy fetchPointer: 1 ofObject: rcvr.
  		(interpreterProxy isBytes: ffiModuleName) ifFalse:[^self ffiFail: FFIErrorBadExternalLibrary].
  		moduleLength := interpreterProxy byteSizeOf: ffiModuleName.
  		moduleHandle := (interpreterProxy
  								ioLoadModule: (interpreterProxy firstIndexableField: ffiModuleName) asInteger
  								OfLength: moduleLength) asInteger.
  		(interpreterProxy failed
  		 or: [moduleHandle = 0]) ifTrue:
  			[^self ffiFail: FFIErrorModuleNotFound]. "failed"
  		"and store back"
  		ptr := interpreterProxy firstIndexableField: moduleHandlePtr.
  		ptr at: 0 put: moduleHandle].
  	^moduleHandle!



More information about the Vm-dev mailing list