Marcel Taeumel uploaded a new version of FFI-Kernel to project FFI:
http://source.squeak.org/FFI/FFI-Kernel-mt.93.mcz ==================== Summary ==================== Name: FFI-Kernel-mt.93 Author: mt Time: 4 June 2020, 7:50:57.117722 pm UUID: 7f85e15e-756b-b142-a6e9-54ecdf13e97d Ancestors: FFI-Kernel-mt.92 Fixes a regression from the previous commit. Not all subclasses of ExternalStructure have fields to be compiled. Mark that with #isSkipped, which is coherent with ExternalPool's #isSkipped. Mark empty structure types, which are the ones where only the pointer should be used. Fixes a bug (or regression?) in #doneCompiling. That is, support changing the base class from, e.g., Object to ExternalStructure. =============== Diff against FFI-Kernel-mt.92 =============== Item was added: + ----- Method: ExternalData class>>isSkipped (in category 'field definition') ----- + isSkipped + + ^ true! Item was added: + ----- Method: ExternalPackedStructure class>>isSkipped (in category 'field definition') ----- + isSkipped + + ^ self == ExternalPackedStructure! Item was changed: ----- Method: ExternalStructure class>>doneCompiling (in category 'class management') ----- doneCompiling + + "Base class changed to something that is an external structure now." + self compiledSpec ifNil: [self compileFields].! - "I have been recompiled. Update any types that reference me." - ExternalType noticeModificationOf: self.! Item was changed: ----- Method: ExternalStructure class>>fields (in category 'field definition') ----- fields + "Return the fields defining the receiver. By default, return an empty array, which means that only the pointer type of this external structure should be used." + - "Return the fields defining the receiver" ^#()! Item was added: + ----- Method: ExternalStructure class>>isSkipped (in category 'field definition') ----- + isSkipped + + ^ self == ExternalStructure! Item was changed: ----- Method: ExternalStructure class>>recompileStructures (in category 'system startup') ----- recompileStructures "Check and update the layout of all subclasses for host machine dependency. Arrange to check the inner nested structures first." "ExternalStructure recompileStructures" | sorted unsorted priorAuthorInitials | + unsorted := self withAllSubclasses reject: [:ea | ea isSkipped]. - unsorted := self withAllSubclasses. sorted := OrderedCollection new: unsorted size. self sortStructs: unsorted into: sorted. priorAuthorInitials := Utilities authorInitialsPerSe. Utilities setAuthorInitials: 'FFI'. [sorted do: [:struct | struct checkFieldLayoutChange ifFalse: [ "Even if no layout change, communicate that result to the corresponding types." struct externalType compiledSpec: struct compiledSpec; byteAlignment: struct byteAlignment]]] ensure: [Utilities setAuthorInitials: priorAuthorInitials]! Item was added: + ----- Method: ExternalType>>isEmptyStructureType (in category 'testing') ----- + isEmptyStructureType + "Return true if the receiver represents a structure type" + ^ self isStructureType and: [self byteSize = 0]! Item was changed: ----- Method: ExternalType>>printOn: (in category 'printing') ----- printOn: aStream self isTypeAlias ifTrue: [ aStream nextPutAll: referentClass name; nextPut: $<; print: self originalType; nextPut: $>. ^ self]. self isAtomic ifTrue: [aStream nextPutAll: (AtomicTypeNames at: self atomicType)] ifFalse: [ referentClass == nil ifTrue:[aStream nextPutAll: '<unknown struct type>'] + ifFalse:[ + aStream nextPutAll: referentClass name. + self isEmptyStructureType + ifTrue: [aStream nextPutAll: ' { void }']]]. - ifFalse:[aStream nextPutAll: referentClass name]]. self isPointerType ifTrue:[aStream nextPut: $*].! Item was added: + ----- Method: ExternalTypeAlias class>>isSkipped (in category 'field definition') ----- + isSkipped + + ^ self == ExternalTypeAlias! Item was added: + ----- Method: ExternalUnion class>>isSkipped (in category 'field definition') ----- + isSkipped + + ^ self == ExternalUnion! |
Free forum by Nabble | Edit this page |