[Vm-dev] VM Maker: VMMaker.oscog-eem.2942.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Feb 4 03:57:01 UTC 2021


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2942.mcz

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

Name: VMMaker.oscog-eem.2942
Author: eem
Time: 3 February 2021, 7:56:52.6547 pm
UUID: 31e90656-0f99-4fae-8633-6b761b62bc6f
Ancestors: VMMaker.oscog-eem.2941

Add TerfVM-specific support to the SondPlugin for retrieving a sound device's UID. Use stackEphemeralStringValue: for marshalling devuce names. Remove an obsolete method.

=============== Diff against VMMaker.oscog-eem.2941 ===============

Item was added:
+ ----- Method: SoundPlugin>>primitiveGetSoundPlayerDeviceUID (in category 'primitives') -----
+ primitiveGetSoundPlayerDeviceUID
+ 	"arguments: name(type, stack offset)
+ 		deviceNumber(Integer, 0)"
+ 	"answers a string or nil"
+ 	<export: true>
+ 	<option: #TerfVM>
+ 	| deviceNumber |
+ 
+ 	"Parse arguments" 
+ 	interpreterProxy methodArgumentCount = 1 ifFalse:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadNumArgs].
+ 
+ 	deviceNumber := interpreterProxy positive32BitValueOf: (interpreterProxy stackValue: 0).
+ 	interpreterProxy failed ifTrue:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
+ 	
+ 	self methodReturnStringOrNil: (self getSoundPlayerDeviceUID: deviceNumber - 1)!

Item was added:
+ ----- Method: SoundPlugin>>primitiveGetSoundRecorderDeviceUID (in category 'primitives') -----
+ primitiveGetSoundRecorderDeviceUID
+ 	"arguments: name(type, stack offset)
+ 		deviceNumber(Integer, 0)"
+ 	"answers a string or nil"
+ 	<export: true>
+ 	<option: #TerfVM>
+ 	| deviceNumber |
+ 
+ 	"Parse arguments" 
+ 	interpreterProxy methodArgumentCount = 1 ifFalse:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadNumArgs].
+ 
+ 	deviceNumber := interpreterProxy positive32BitValueOf: (interpreterProxy stackValue: 0).
+ 	interpreterProxy failed ifTrue:
+ 		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
+ 	
+ 	self methodReturnStringOrNil: (self getSoundRecorderDeviceUID: deviceNumber - 1)!

Item was changed:
  ----- Method: SoundPlugin>>primitiveSetDefaultSoundPlayer (in category 'primitives') -----
  primitiveSetDefaultSoundPlayer
  	"Tell the operating system to use the specified device name as the output device for sound."
  	"arg at top of stack is the String"
  	<export: true>
+ 	| deviceName |
- 	| deviceName obj srcPtr sz |
- 	<var: 'deviceName' declareC: 'char deviceName[257]'>
- 	<var: 'srcPtr' type: #'char *'>
- 	self cCode: [] inSmalltalk: [deviceName := ByteString new: 257].
  	"Parse arguments"
  	interpreterProxy methodArgumentCount = 1 ifFalse:
  		[^interpreterProxy primitiveFailFor: PrimErrBadNumArgs].
+ 	deviceName := interpreterProxy stackEphemeralStringValue: 0.
- 	((interpreterProxy isBytes: (obj := interpreterProxy stackValue: 0))
- 	and: [(sz := interpreterProxy byteSizeOf: obj) <= 256]) ifFalse:
- 		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
- 
- 	srcPtr := self cCoerce: (interpreterProxy firstIndexableField: obj) to: #'char *'.
- 	self strncpy: deviceName _: srcPtr _: sz.
- 	deviceName at: sz put: 0.
- 	self setDefaultSoundPlayer: deviceName.
- 
  	interpreterProxy failed ifFalse:
+ 		[self setDefaultSoundPlayer: deviceName.
+ 		 interpreterProxy failed ifFalse:
+ 			[interpreterProxy methodReturnReceiver]]!
- 		[interpreterProxy methodReturnReceiver]!

Item was changed:
  ----- Method: SoundPlugin>>primitiveSetDefaultSoundRecorder (in category 'primitives') -----
  primitiveSetDefaultSoundRecorder
  	"Tell the operating system to use the specified device name as the input device for sound."
  	"arg at top of stack is the String"
  	<export: true>
+ 	| deviceName |
- 	| deviceName obj srcPtr sz |
- 	<var: 'deviceName' declareC: 'char deviceName[257]'>
- 	<var: 'srcPtr' type: #'char *'>
- 	self cCode: [] inSmalltalk: [deviceName := ByteString new: 257].
  	"Parse arguments"
  	interpreterProxy methodArgumentCount = 1 ifFalse:
  		[^interpreterProxy primitiveFailFor: PrimErrBadNumArgs].
+ 	deviceName := interpreterProxy stackEphemeralStringValue: 0.
- 	((interpreterProxy isBytes: (obj := interpreterProxy stackValue: 0))
- 	and: [(sz := interpreterProxy byteSizeOf: obj) <= 256]) ifFalse:
- 		[^interpreterProxy primitiveFailFor: PrimErrBadArgument].
- 
- 	srcPtr := self cCoerce: (interpreterProxy firstIndexableField: obj) to: #'char *'.
- 	self strncpy: deviceName _: srcPtr _: sz.
- 	deviceName at: sz put: 0.
- 	self setDefaultSoundRecorder: deviceName.
- 
  	interpreterProxy failed ifFalse:
+ 		[self setDefaultSoundRecorder: deviceName.
+ 		 interpreterProxy failed ifFalse:
+ 			[interpreterProxy methodReturnReceiver]]!
- 		[interpreterProxy methodReturnReceiver]!

Item was removed:
- ----- Method: SoundPlugin>>sampleSizeOf: (in category 'support') -----
- sampleSizeOf: buf
- 	"Answer the number of 16-bit sound samples in buf, a pointer to the first indexable field of a sound buffer."
- 	<inline: #always>
- 	^(interpreterProxy byteSizeOf: buf cPtrAsOop) / (self sizeof: #short)!



More information about the Vm-dev mailing list