[squeak-dev] FFI: FFI-Kernel-mt.76.mcz

commits at source.squeak.org commits at source.squeak.org
Wed May 27 09:42:41 UTC 2020


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

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

Name: FFI-Kernel-mt.76
Author: mt
Time: 27 May 2020, 11:42:40.599317 am
UUID: 7cfea7d7-c95e-a24a-aaf3-0d96c409e13d
Ancestors: FFI-Kernel-mt.75

At least from within FFI package, use FFIPlatformDescription, not the Smalltalk global.

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

Item was changed:
  ----- Method: ExternalStructure class>>maxFieldAlignment (in category 'alignment') -----
  maxFieldAlignment
  	"Answer the maximum alignment of structure fields.
  	This is platform dependent.
  	On x86, struct{float f; double d} will have different alignment:
  	- on windows, d will be 8-byte aligned
  	- on SysV linux/OSX, d will be 4 byte aligned
  	There are some special types that may have higher alignment requirements
  	- SSE vectors
  	- jump_buf ...
  	But we do not handle these types yet"
+ 	FFIPlatformDescription current isWindows ifTrue: [^8].
+ 	FFIPlatformDescription current isARM ifTrue: [^8].
+ 	^ FFIPlatformDescription current wordSize!
- 	 Smalltalk platformName = 'Win32' ifTrue: [^8].
- 	 (Smalltalk platformSubtype beginsWith: 'arm') ifTrue: [^8].
- 	^Smalltalk wordSize!

Item was changed:
  ----- Method: ExternalType class>>initializeAtomicTypes (in category 'class initialization') -----
  initializeAtomicTypes
  	"ExternalType initialize"
  	| atomicType byteSize type typeName byteAlignment |
  	#(
  		"name		atomic id		byte size	byte alignment"
  		('void' 		0 				0			0)
  		('bool' 		1 				1			1)
  		('byte' 		2 				1			1)
  		('sbyte' 	3 				1			1)
  		('ushort' 	4 				2			2)
  		('short' 		5 				2			2)
  		('ulong' 	6 				4			4)
  		('long' 		7 				4			4)
  		('ulonglong' 8 				8			8)
  		('longlong' 	9 				8			8)
  		('char' 		10 				1			1)
  		('schar' 	11 				1			1)
  		('float' 		12 				4			4)
  		('double' 	13 				8			8)
  	) do:[:typeSpec| | compiled |
  		typeName := typeSpec first.
  		atomicType := typeSpec second.
  		byteSize := typeSpec third.
  		byteAlignment := typeSpec fourth.
  		"On 32 bits Windows and MacOS, double and long have an alignment of 8. But on Linux, their alignment is 4"
+ 		(FFIPlatformDescription current wordSize = 4 and: [FFIPlatformDescription current isUnix]) ifTrue: [
- 		(Smalltalk wordSize = 4 and: [Smalltalk platformName = 'unix']) ifTrue: [
  			(#('double longlong ulonglong') includes: typeName) ifTrue: [
  				byteAlignment := 4
  			]
  		].
  		compiled := WordArray with: ((byteSize bitOr: FFIFlagAtomic) bitOr:
  				(atomicType bitShift: FFIAtomicTypeShift)).
  		type := (AtomicTypes at: typeName).
  		type compiledSpec: compiled;
  			byteAlignment: byteAlignment.
  		compiled := WordArray with: ((self pointerSpec bitOr: FFIFlagAtomic) bitOr:
  				(atomicType bitShift: FFIAtomicTypeShift)).
  		type asPointerType
  			byteAlignment: self pointerAlignment;
  			compiledSpec: compiled.
  	].!

Item was changed:
  ----- Method: ExternalType class>>pointerAlignment (in category 'private') -----
  pointerAlignment
+ 	^ FFIPlatformDescription current wordSize!
- 	^ Smalltalk wordSize!

Item was changed:
  ----- Method: ExternalType class>>pointerSpec (in category 'private') -----
  pointerSpec
+ 	^(FFIPlatformDescription current wordSize bitOr: FFIFlagPointer)!
- 	^(Smalltalk wordSize bitOr: FFIFlagPointer)!

Item was removed:
- ----- Method: FFIPlatformDescription class>>isCurrentPlatformWindows (in category 'testing') -----
- isCurrentPlatformWindows
- 	^ self isWindowsPlatformName: self currentName!

Item was removed:
- ----- Method: FFIPlatformDescription class>>isWindowsPlatformName: (in category 'private') -----
- isWindowsPlatformName: aPlatformName
- 	^ aPlatformName asLowercase beginsWith: 'win'!

Item was added:
+ ----- Method: FFIPlatformDescription>>isARM (in category 'testing') -----
+ isARM
+ 
+ 	^ self subtype beginsWith: 'arm'!

Item was added:
+ ----- Method: FFIPlatformDescription>>isUnix (in category 'testing') -----
+ isUnix
+ 
+ 	^ self name = 'unix'!

Item was changed:
  ----- Method: FFIPlatformDescription>>isWindows (in category 'testing') -----
  isWindows
+ 
+ 	^ self name = 'Win32'!
- 	^ self class isWindowsPlatformName: self name!



More information about the Squeak-dev mailing list