[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