FFI: FFI-Kernel-mt.134.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.134.mcz

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

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

Name: FFI-Kernel-mt.134
Author: mt
Time: 5 May 2021, 7:00:01.584784 pm
UUID: 2737ad22-4c7e-9645-9837-93f0319dc31c
Ancestors: FFI-Kernel-mt.133

Allocate! Clarify what is actually possible to allocate through an external type.

(I think it would be nice to have some kind of mapping between atomic types and a representative. Maybe a mapping to a class to call #zero on.)

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

Item was added:
+ ----- Method: ExternalArrayType>>allocate (in category 'external data') -----
+ allocate
+
+ ^ self contentType allocate: self size!

Item was added:
+ ----- Method: ExternalArrayType>>allocate: (in category 'external data') -----
+ allocate: anInteger
+ "No support for n-dimensional containers."
+ self notYetImplemented.!

Item was added:
+ ----- Method: ExternalArrayType>>allocateExternal (in category 'external data') -----
+ allocateExternal
+
+ ^ self contentType allocateExternal: self size!

Item was added:
+ ----- Method: ExternalArrayType>>allocateExternal: (in category 'external data') -----
+ allocateExternal: anInteger
+ "No support for n-dimensional containers."
+ self notYetImplemented.!

Item was added:
+ ----- Method: ExternalType>>allocate (in category 'external data') -----
+ allocate
+ "Allocate a single representative for this type."
+
+ referentClass ifNotNil: [
+ "Allocate bytes for the struct."
+ ^ referentClass new].
+
+ self isPointerType ifTrue: [
+ "Allocate bytes for a pointer."
+ ^ ExternalType void asPointerType allocate: 1].
+
+ "Answer an object representing the atomic type."
+ self notYetImplemented.!

Item was changed:
  ----- Method: ExternalType>>allocate: (in category 'external data') -----
  allocate: anInteger
  "Allocate space for containing an array of size anInteger of this dataType"
 
  | handle |
+ self
+ assert: [self isPointerType not or: [self isVoid]]
+ description: 'No support for n-dimensional containers. Allocate for void* as workaround.';
+ assert: [self byteSize > 0]
+ description: 'Invalid byte size.'.
+
  handle := ByteArray new: self byteSize * anInteger.
  ^(ExternalData fromHandle: handle type: self) size: anInteger!

Item was added:
+ ----- Method: ExternalType>>allocateExternal (in category 'external data') -----
+ allocateExternal
+ "Allocate a single representative for this type."
+
+ referentClass ifNotNil: [
+ "Allocate bytes for the struct."
+ ^ referentClass externalNew].
+
+ self isPointerType ifTrue: [
+ "Allocate bytes for a pointer."
+ ^ ExternalType void asPointerType allocateExternal: 1].
+
+ "Answer an object representing the atomic type."
+ self notYetImplemented.!

Item was changed:
  ----- Method: ExternalType>>allocateExternal: (in category 'external data') -----
  allocateExternal: anInteger
  "Allocate space for containing an array of size anInteger of this dataType"
 
  | handle |
+ self
+ assert: [self isPointerType not or: [self isVoid]]
+ description: 'No support for n-dimensional containers. Allocate for void* as workaround.';
+ assert: [self byteSize > 0]
+ description: 'Invalid byte size.'.
+
  handle := ExternalAddress allocate: self byteSize * anInteger.
  ^(ExternalData fromHandle: handle type: self) size: anInteger!