[squeak-dev] FFI: FFI-Tools-mt.12.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Jun 6 12:16:39 UTC 2020


Marcel Taeumel uploaded a new version of FFI-Tools to project FFI:
http://source.squeak.org/FFI/FFI-Tools-mt.12.mcz

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

Name: FFI-Tools-mt.12
Author: mt
Time: 6 June 2020, 2:16:38.695722 pm
UUID: 591b817d-fd8f-b24e-9a58-b4abe7980316
Ancestors: FFI-Tools-mt.11

- complements FFI-Kernel-mt.97
- fixes bugs when exploring external data
- fixes bugs when exploring type aliases
- makes ExternalStructureInspector work again
- adds copyright to FFI tool icons

=============== Diff against FFI-Tools-mt.11 ===============

Item was added:
+ ----- Method: ExternalData class>>allFieldSelectors (in category '*FFI-Tools') -----
+ allFieldSelectors
+ 
+ 	^ #()!

Item was added:
+ ----- Method: ExternalData>>explorerContentsTypeFields (in category '*FFI-Tools') -----
+ explorerContentsTypeFields
+ 	"Ignore because our type is already in the basic explorer fields because it is an instance variable."
+ 	^ #()!

Item was changed:
  ----- Method: ExternalStructure class>>allFieldSelectors (in category '*FFI-Tools') -----
  allFieldSelectors
  	"Answer a list of all simple getters for fields in this structure. Rely on the #fields definition but only return selectors that are actually implemented. Consequently for any change in #fields, #defineFields should be called before calling this method."
  
+ 	self flag: #dicuss. "mt: To which extent should tools support type aliasing when subclassing ExternalStructure instead of subclassing ExternalTypeAlias."
  	^ self isTypeAlias
+ 		ifTrue: [(ExternalType typeNamed: self originalTypeName) referentClass
+ 			ifNil: [#()] ifNotNil: [:structClass | structClass allFieldSelectors]]
+ 		ifFalse: [
+ 			self fields		
+ 				collect: [:spec | spec first]
+ 				thenSelect: [:selector |
+ 					selector notNil and: [self includesSelector: selector]]]!
- 		ifTrue: [#()]
- 		ifFalse: [self fields
- 			collect: [:spec | spec first]
- 			thenSelect: [:selector |
- 				selector notNil and: [self includesSelector: selector]]]!

Item was changed:
  ----- Method: ExternalStructure>>explorerContents (in category '*FFI-Tools') -----
  explorerContents
  
  	| basicExplorerFields |
  	basicExplorerFields := super explorerContents.
  	basicExplorerFields do: [:explorerField |
  		explorerField itemName: '_', explorerField itemName].
+ 	^ basicExplorerFields,
+ 		self explorerContentsTypeFields,
+ 		self explorerContentsStructFields!
- 	^ basicExplorerFields, (self class allFieldSelectors replace: [:simpleGetter |
- 		ObjectExplorerWrapper
- 			with: (self isNull ifFalse: [self perform: simpleGetter])
- 			name: simpleGetter
- 			model: self])!

Item was added:
+ ----- Method: ExternalStructure>>explorerContentsStructFields (in category '*FFI-Tools') -----
+ explorerContentsStructFields
+ 
+ 	^ self class allFieldSelectors replace: [:simpleGetter |
+ 		ObjectExplorerWrapper
+ 			with: (self isNull ifFalse: [self value perform: simpleGetter])
+ 			name: simpleGetter
+ 			model: self]!

Item was added:
+ ----- Method: ExternalStructure>>explorerContentsTypeFields (in category '*FFI-Tools') -----
+ explorerContentsTypeFields
+ 
+ 	^ {ObjectExplorerWrapper
+ 		with: (handle isExternalAddress ifTrue: [self class externalType asPointerType] ifFalse: [self class externalType])
+ 		name: '_type'
+ 		model: self}!

Item was changed:
  ----- Method: ExternalStructureInspector>>streamFieldsOn: (in category 'fields - streaming') -----
  streamFieldsOn: aStream
  
  	self
  		streamBaseFieldsOn: aStream;
+ 		streamVariableFieldsOn: aStream;
+ 		streamRecordFieldsOn: aStream;
+ 		streamCustomFieldsOn: aStream.!
- 		streamRecordFieldsOn: aStream.!

Item was changed:
  ----- Method: ExternalStructureInspector>>streamRecordFieldsOn: (in category 'fields - streaming') -----
  streamRecordFieldsOn: aStream
+ 	"Supports type aliases through #value field. See ExternalTypeAlias."
+ 	
- 
  	self object class allFieldSelectors do: [:field |
  		aStream nextPut: ((self newFieldForType: #record key: field)
+ 			name: '#', field;
+ 			valueGetter: [:object | object isNull ifFalse: [object value perform: field]];
+ 			valueSetter: [:object :value | object isNull ifFalse: [object value perform: (field, ':') asSymbol with: value]];
- 			valueGetter: [:object | object isNull ifFalse: [object perform: field]];
- 			valueSetter: [:object :value | object isNull ifFalse: [(field, ':') asSymbol with: value]];
  			yourself)].!

Item was added:
+ ----- Method: ExternalType>>explorerContents (in category '*FFI-Tools') -----
+ explorerContents
+ 
+ 	| basicExplorerFields originalTypeField |
+ 	basicExplorerFields := super explorerContents.
+ 	self isTypeAlias ifFalse: [^ basicExplorerFields].
+ 	originalTypeField := ObjectExplorerWrapper
+ 		with: self originalType
+ 		name: '_originalType'
+ 		model: self.
+ 	^ {originalTypeField}, basicExplorerFields!

Item was added:
+ ----- Method: ExternalTypeAlias class>>allFieldSelectors (in category '*FFI-Tools') -----
+ allFieldSelectors
+ 	"Overridden because we know that we are an alias."
+ 
+ 	^ (ExternalType typeNamed: self originalTypeName) referentClass
+ 		ifNil: [#()]
+ 		ifNotNil: [:structClass | structClass allFieldSelectors]!

Item was added:
+ ----- Method: ExternalTypeAlias>>explorerContentsTypeFields (in category '*FFI-Tools') -----
+ explorerContentsTypeFields
+ 	"Add a field to -- just in case -- explore the external object after casting to it."
+ 	
+ 	^ super explorerContentsTypeFields, {ObjectExplorerWrapper
+ 		with: self value
+ 		name: '_value'
+ 		model: self}!

Item was changed:
  ----- Method: ToolIcons class>>externalData (in category '*FFI-Tools') -----
  externalData
+ 	"(c) 2020 Marcel Taeumel
+ 	Website: https://www.taeumel.eu
+ 	License: https://creativecommons.org/licenses/by/4.0"
+ 	
- 
  	^ Form
  	extent: 12 at 12
  	depth: 32
  	fromArray: #( 0 4294967295 4294967295 4294967295 0 4294967295 4294967295 4294967295 0 4294967295 0 0 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4278227710 4278227710 4278227710 4278227710 4294967295 4278190080 4294967295 0 0 4294967295 0 4278227710 4294967295 4294967295 4294967295 4278227710 4278227710 4294967295 0 0 0 0 0 4278227710 4294967295 4278227710 4278227710 4294967295 4278227710 0 0 0 0 0 0 4278227710 4294967295 4278227710 4278227710 4294967295 4278227710 0 0 0 0 0 0 4278227710 4294967295 4278227710 4278227710 4294
 967295 4278227710 0 0 0 0 0 0 4278227710 4294967295 4294967295 4294967295 4278227710 4278227710 0 0 0 0 0 0 0 4278227710 4278227710 4278227710 4278227710 0 0 0 0)
  	offset: 0 at 0!

Item was changed:
  ----- Method: ToolIcons class>>externalObject (in category '*FFI-Tools') -----
  externalObject
+ 	"(c) 2020 Marcel Taeumel
+ 	Website: https://www.taeumel.eu
+ 	License: https://creativecommons.org/licenses/by/4.0"
  
  	^ Form
  	extent: 12 at 12
  	depth: 32
  	fromArray: #( 0 4294967295 4294967295 4294967295 0 4294967295 4294967295 4294967295 0 4294967295 0 0 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 0 4294967295 0 0 0 4294967295 0 0 0 4294967295 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
  	offset: 0 at 0!

Item was changed:
  ----- Method: ToolIcons class>>externalPackedStructure (in category '*FFI-Tools') -----
  externalPackedStructure
+ 	"(c) 2020 Marcel Taeumel
+ 	Website: https://www.taeumel.eu
+ 	License: https://creativecommons.org/licenses/by/4.0"
+ 	
- 
  	^ (Form
  	extent: 12 at 12
  	depth: 32
  	fromArray: #( 0 4294967295 4294967295 4294967295 0 4294967295 4294967295 4294967295 0 4294967295 0 0 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 4278235136 4278235136 4278235136 4278235136 4278235136 4294967295 4278190080 4294967295 0 0 0 4278235136 4278235136 4278235136 4294967295 4294967295 4294967295 4278235136 4294967295 0 0 0 0 4278235136 4278235136 4278235136 4294967295 4278235136 4278235136 4278235136 0 0 0 0 0 4278235136 4294967295 4294967295 4278235136 4294967295 4278235136 4278235136 0 0 0 0 0 4278235136 4294967295 4
 294967295 4278235136 4278235136 4294967295 4278235136 0 0 0 0 0 4278235136 4294967295 4278235136 4294967295 4294967295 4294967295 4278235136 0 0 0 0 0 0 4278235136 4278235136 4278235136 4278235136 4278235136 0 0 0 0)
  	offset: 0 at 0)!

Item was changed:
  ----- Method: ToolIcons class>>externalStructure (in category '*FFI-Tools') -----
  externalStructure
+ 	"(c) 2020 Marcel Taeumel
+ 	Website: https://www.taeumel.eu
+ 	License: https://creativecommons.org/licenses/by/4.0"
+ 	
- 
  	^ (Form
  	extent: 12 at 12
  	depth: 32
  	fromArray: #( 0 4294967295 4294967295 4294967295 0 4294967295 4294967295 4294967295 0 4294967295 0 0 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4278235136 4278235136 4278235136 4278235136 4294967295 4278190080 4294967295 0 0 4294967295 0 4278235136 4278235136 4294967295 4294967295 4294967295 4278235136 4294967295 0 0 0 0 0 4278235136 4294967295 4278235136 4278235136 4278235136 4278235136 0 0 0 0 0 0 4278235136 4278235136 4294967295 4294967295 4278235136 4278235136 0 0 0 0 0 0 4278235136 4278235136 4278235136 4278235136 4294
 967295 4278235136 0 0 0 0 0 0 4278235136 4294967295 4294967295 4294967295 4278235136 4278235136 0 0 0 0 0 0 0 4278235136 4278235136 4278235136 4278235136 0 0 0 0)
  	offset: 0 at 0)!

Item was changed:
  ----- Method: ToolIcons class>>externalType (in category '*FFI-Tools') -----
  externalType
+ 	"(c) 2020 Marcel Taeumel
+ 	Website: https://www.taeumel.eu
+ 	License: https://creativecommons.org/licenses/by/4.0"
+ 	
- 
  	^ (Form
  	extent: 12 at 12
  	depth: 32
  	fromArray: #( 0 4294967295 4294967295 4294967295 0 4294967295 4294967295 4294967295 0 4294967295 0 0 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 4287861651 4287861651 4287861651 4287861651 4287861651 4294967295 4278190080 4294967295 0 0 4294967295 4287861651 4294967295 4294967295 4294967295 4294967295 4294967295 4287861651 4294967295 0 0 0 0 4287861651 4294967295 4287861651 4287861651 4287861651 4294967295 4287861651 0 0 0 0 0 4287861651 4294967295 4294967295 4287861651 4294967295 4294967295 4287861651 0 0 0 0 0 4287861651 429
 4967295 4294967295 4287861651 4294967295 4294967295 4287861651 0 0 0 0 0 4287861651 4294967295 4294967295 4294967295 4294967295 4294967295 4287861651 0 0 0 0 0 0 4287861651 4287861651 4287861651 4287861651 4287861651 0 0 0 0)
  	offset: 0 at 0)!

Item was changed:
  ----- Method: ToolIcons class>>externalTypeAlias (in category '*FFI-Tools') -----
  externalTypeAlias
+ 	"(c) 2020 Marcel Taeumel
+ 	Website: https://www.taeumel.eu
+ 	License: https://creativecommons.org/licenses/by/4.0"
+ 	
- 
  	^ (Form
  	extent: 12 at 12
  	depth: 32
  	fromArray: #( 0 4294967295 4294967295 4294967295 0 4294967295 4294967295 4294967295 0 4294967295 0 0 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4287861651 4287861651 4287861651 4287861651 4294967295 4278190080 4294967295 0 0 4294967295 0 4287861651 4287861651 4294967295 4294967295 4287861651 4287861651 4294967295 0 0 0 0 0 4287861651 4294967295 4287861651 4287861651 4294967295 4287861651 0 0 0 0 0 0 4287861651 4294967295 4294967295 4294967295 4294967295 4287861651 0 0 0 0 0 0 4287861651 4294967295 4287861651 4287861651 4294
 967295 4287861651 0 0 0 0 0 0 4287861651 4294967295 4287861651 4287861651 4294967295 4287861651 0 0 0 0 0 0 0 4287861651 4287861651 4287861651 4287861651 0 0 0 0)
  	offset: 0 at 0)!

Item was changed:
  ----- Method: ToolIcons class>>externalTypeEmpty (in category '*FFI-Tools') -----
  externalTypeEmpty
+ 	"(c) 2020 Marcel Taeumel
+ 	Website: https://www.taeumel.eu
+ 	License: https://creativecommons.org/licenses/by/4.0"
+ 	
- 
  	^ (Form
  	extent: 12 at 12
  	depth: 32
  	fromArray: #( 0 4294967295 4294967295 4294967295 0 4294967295 4294967295 4294967295 0 4294967295 0 0 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 4294967295 4287861651 4294967295 4287861651 4294967295 4294967295 4278190080 4294967295 0 0 4294967295 4287861651 4294967295 4294967295 4294967295 4294967295 4294967295 4287861651 4294967295 0 0 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 0 0 0 4287861651 4294967295 4294967295 4294967295 4294967295 4294967295 4287861651 0 0 0 0 0 4294967295 429
 4967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 0 0 0 4287861651 4294967295 4294967295 4294967295 4294967295 4294967295 4287861651 0 0 0 0 0 0 4294967295 4287861651 4294967295 4287861651 4294967295 0 0 0 0)
  	offset: 0 at 0)!

Item was changed:
  ----- Method: ToolIcons class>>externalUnion (in category '*FFI-Tools') -----
  externalUnion
+ 	"(c) 2020 Marcel Taeumel
+ 	Website: https://www.taeumel.eu
+ 	License: https://creativecommons.org/licenses/by/4.0"
+ 	
- 
  	^ (Form
  	extent: 12 at 12
  	depth: 32
  	fromArray: #( 0 4294967295 4294967295 4294967295 0 4294967295 4294967295 4294967295 0 4294967295 0 0 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4278190080 4278190080 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4278190080 4294967295 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294967295 4278190080 4294967295 0 4294922834 4294922834 4294922834 4294922834 4294967295 4278190080 4294967295 0 0 4294967295 0 4294922834 4294967295 4294922834 4294922834 4294967295 4294922834 4294967295 0 0 0 0 0 4294922834 4294967295 4294922834 4294922834 4294967295 4294922834 0 0 0 0 0 0 4294922834 4294967295 4294922834 4294922834 4294967295 4294922834 0 0 0 0 0 0 4294922834 4294967295 4294922834 4294922834 4294
 967295 4294922834 0 0 0 0 0 0 4294922834 4294922834 4294967295 4294967295 4294922834 4294922834 0 0 0 0 0 0 0 4294922834 4294922834 4294922834 4294922834 0 0 0 0)
  	offset: 0 at 0)!



More information about the Squeak-dev mailing list