VM Maker: VMMaker.oscog-eem.2110.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-eem.2110.mcz

commits-2
 
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!