[squeak-dev] FFI: FFI-Kernel-mt.190.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Aug 9 15:54:45 UTC 2021
Marcel Taeumel uploaded a new version of FFI-Kernel to project FFI:
http://source.squeak.org/FFI/FFI-Kernel-mt.190.mcz
==================== Summary ====================
Name: FFI-Kernel-mt.190
Author: mt
Time: 9 August 2021, 5:54:44.510391 pm
UUID: 6936522e-daaf-404a-86b6-f21a36197f8d
Ancestors: FFI-Kernel-mt.189
Improves initialization of type aliases during initial code loading. Note that "self defineFields" is still required after changing/implementing #originalTypeName in the alias' referentClass.
=============== Diff against FFI-Kernel-mt.189 ===============
Item was changed:
+ ----- Method: ExternalAtomicType>>newTypeAlias (in category 'private') -----
- ----- Method: ExternalAtomicType>>newTypeAlias (in category 'testing') -----
newTypeAlias
+ "Only support switching between atomic types for now."
+ self isTypeAlias ifFalse: [^ self].
+
+ compiledSpec := referentClass compiledSpec.
+ byteAlignment := referentClass byteAlignment.!
- "self isTypeAlias ifFalse: [^ self]."
- "Nothing to do. My referentClass was already upated."
- !
Item was changed:
----- Method: ExternalStructureType>>newTypeAlias (in category 'private') -----
newTypeAlias
+ "Only support switching between struct types for now."
+ self isTypeAlias ifFalse: [^ self].
+
+ compiledSpec := referentClass compiledSpec.
+ byteAlignment := referentClass byteAlignment.!
- "self isTypeAlias ifFalse: [^ self]."
- "Nothing to do. My referentClass was already upated."
- !
Item was changed:
----- Method: ExternalType class>>newTypeNamed: (in category 'instance creation') -----
newTypeNamed: aTypeName
"Create a new struct type or array type. Not needed for atomic types; see #initializeDefaultTypes."
| structClass arraySpec |
self
assert: [aTypeName last ~~ $*]
description: 'Pointer type will be created automatically'.
self
assert: [aTypeName first ~~ $*]
description: 'Non-pointer type for alias-to-pointer types will be created automatically'.
aTypeName last == $] ifTrue: [ "array type, e.g., char[50]"
arraySpec := self parseArrayTypeName: aTypeName.
arraySpec second ifNil: [arraySpec at: 2 put: (self newTypeNamed: arraySpec first)].
^ self
newTypeForContentType: arraySpec second
size: arraySpec third].
structClass := (self environment classNamed: aTypeName)
ifNotNil: [:class | (class includesBehavior: ExternalStructure) ifTrue: [class]].
+ ^ (structClass isNil or: [structClass isSkipped "i.e., not yet ready, see ExternalTypeAlias"])
+ ifTrue: [self newTypeForUnknownNamed: aTypeName]
+ ifFalse: [self newTypeForStructureClass: structClass]!
- ^ structClass
- ifNil: [self newTypeForUnknownNamed: aTypeName]
- ifNotNil: [self newTypeForStructureClass: structClass]!
Item was changed:
----- Method: ExternalTypeAlias class>>isSkipped (in category 'field definition') -----
isSkipped
+ "Skip this class and all subclasses that have not yet implemented #originalTypeName."
+ ^ self == ExternalTypeAlias
+ or: [(self class lookupSelector: #originalTypeName) hasLiteral: #subclassResponsibility]!
- ^ self == ExternalTypeAlias!
Item was changed:
----- Method: ExternalUnknownType>>newTypeAlias (in category 'construction') -----
newTypeAlias
+ "A type alias is done compiling and its type can now be initialized completely. See ExternalTypeAlias class >> #originalTypeName and #isSkipped."
+ self assert: [referentClass isBehavior].
+
+ referentClass isTypeAlias
+ ifTrue: [^ self becomeKnownType].
+
+ self error: '[FFI] Only type aliases can become a known type later on'.!
- self shouldNotImplement.!
More information about the Squeak-dev
mailing list
|