FFI: FFI-Kernel-mt.82.mcz

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

FFI: FFI-Kernel-mt.82.mcz

commits-2
Marcel Taeumel uploaded a new version of FFI-Kernel to project FFI:
http://source.squeak.org/FFI/FFI-Kernel-mt.82.mcz

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

Name: FFI-Kernel-mt.82
Author: mt
Time: 1 June 2020, 9:58:11.800523 am
UUID: ace0c4b6-24ce-a847-ae5f-6f2e281592f4
Ancestors: FFI-Kernel-mt.81

Fixes bug in external type's #storeOn:. Removes ambiguous #externalTypeName, which actually generated a #storeString for the pointer type.

=============== Diff against FFI-Kernel-mt.81 ===============

Item was changed:
  ----- Method: ExternalStructure class>>defineAliasAccessorsFor:type: (in category 'field definition') -----
  defineAliasAccessorsFor: fieldName type: type
  "Define read/write accessors for the given field"
  | code refClass argName |
  (type isVoid and:[type isPointerType not]) ifTrue:[^self].
  refClass := type referentClass.
  code := String streamContents:[:s|
  s
  nextPutAll: fieldName; crtab;
  nextPutAll:'"This method was automatically generated"'; crtab;
  nextPut: $<; nextPutAll: #generated; nextPut: $>; crtab.
  refClass == nil
  ifTrue:[(type isAtomic and:[type isPointerType not])
  ifTrue:[s nextPutAll:'^handle']
  ifFalse:[s nextPutAll:'^ExternalData fromHandle: handle'.
  type isPointerType ifTrue:[s nextPutAll:' asExternalPointer'].
  s nextPutAll:' type: ';
+ nextPutAll: type asPointerType storeString]]
- nextPutAll: type externalTypeName]]
  ifFalse:[s nextPutAll:'^', refClass name,' fromHandle: handle'.
  type isPointerType ifTrue:[s nextPutAll:' asExternalPointer']]].
  self compile: code classified: 'accessing'.
 
  code := String streamContents:[:s|
  argName := refClass == nil
  ifTrue:[(type isAtomic and:[type isPointerType not])
  ifTrue:['anObject']
  ifFalse:['anExternalData']]
  ifFalse:['a',refClass name].
  s
  nextPutAll: fieldName,': '; nextPutAll: argName; crtab;
  nextPutAll:'"This method was automatically generated"'; crtab;
  nextPut: $<; nextPutAll: #generated; nextPut: $>; crtab.
  (refClass == nil and:[type isAtomic and:[type isPointerType not]])
  ifTrue:[s nextPutAll:'handle := ', argName]
  ifFalse:[s nextPutAll:'handle := ', argName,' getHandle'.
  type isPointerType ifTrue:[s nextPutAll:' asByteArrayPointer']]].
  self compile: code classified: 'accessing'.!

Item was removed:
- ----- Method: ExternalType>>externalTypeName (in category 'private') -----
- externalTypeName
- ^'ExternalType ', (AtomicTypeNames at: self atomicType), ' asPointerType'!

Item was changed:
  ----- Method: ExternalType>>storeOn: (in category 'printing') -----
  storeOn: aStream
  referentClass == nil
  ifTrue:[aStream nextPutAll: ExternalType name; space; nextPutAll: (AtomicTypeNames at: self atomicType)]
  ifFalse:[aStream nextPut: $(; nextPutAll: ExternalType name; space; nextPutAll: #structTypeNamed:; space;  store: referentClass name; nextPut: $)].
+ self isPointerType ifTrue: [aStream space; nextPutAll: #asPointerType].!
- self isPointerType ifTrue: [aStream space; nextPutAll: #asPointer].!