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

commits at source.squeak.org commits at source.squeak.org
Tue Mar 6 20:22:10 UTC 2018

Eliot Miranda uploaded a new version of VMMaker to project VM Maker:

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

Name: VMMaker.oscog-eem.2343
Author: eem
Time: 6 March 2018, 12:21:51.336493 pm
UUID: e603efa4-c652-41e1-a981-6814acaca9f3
Ancestors: VMMaker.oscog-topa.2342

Better comment Tobias' inclusion of config.h in all plugins.  Also ensure (almost) no duplications can occur.

Fix a typo in primitiveVMParameter and a compiler warning in primitiveSignalAtMilliseconds (deltaMsecs < 0 implies that deltaMsecs is signed).

=============== Diff against VMMaker.oscog-topa.2342 ===============

Item was changed:
  ----- Method: StackInterpreterPrimitives>>primitiveSignalAtMilliseconds (in category 'system control primitives') -----
  	"Cause the time semaphore, if one has been registered, to be
  	 signalled when the microsecond clock is greater than or equal to
  	 the given tick value. A tick value of zero turns off timer interrupts."
  	| msecsObj msecs deltaMsecs sema |
  	<var: #msecs type: #usqInt>
+ 	<var: #deltaMsecs type: #sqLong>
- 	<var: #deltaMsecs type: #usqLong>
  	msecsObj := self stackTop.
  	sema := self stackValue: 1.
  	msecs := self positive32BitValueOf: msecsObj.
  	self successful ifTrue:
  		[(objectMemory isSemaphoreOop: sema) ifTrue:
  			[objectMemory splObj: TheTimerSemaphore put: sema.
  			 deltaMsecs := msecs - (self ioMSecs bitAnd: MillisecondClockMask).
  			 deltaMsecs < 0 ifTrue:
  				[deltaMsecs := deltaMsecs + MillisecondClockMask + 1].
  			 nextWakeupUsecs := self ioUTCMicroseconds + (deltaMsecs * 1000).
  			 ^self pop: 2].
  		 sema = objectMemory nilObject ifTrue:
  				storePointer: TheTimerSemaphore
  				ofObject: objectMemory specialObjectsOop
  				withValue: objectMemory nilObject.
  			 nextWakeupUsecs := 0.
  			 ^self pop: 2]].
  	self primitiveFailFor: PrimErrBadArgument!

Item was changed:
  ----- Method: StackInterpreterPrimitives>>primitiveVMParameter (in category 'system control primitives') -----
(excessive size, no diff calculated)

Item was changed:
  ----- Method: VMPluginCodeGenerator>>emitCHeaderOn: (in category 'C code generator') -----
  emitCHeaderOn: aStream
+ 	"Write a C file header onto the given stream, adding include files and some basic definitions."
+ 	| standardHeaders |
+ 	aStream nextPutAll: (self fileHeaderVersionStampForSourceClass: pluginClass); cr; cr.
- 	"Write a C file header onto the given stream."
+ 	"config.h should always go first because config.h properly defines flags.
+ 	 One of those is _GNU_SOURCE, as explained in https://www.gnu.org/software/autoconf/manual/autoconf.html#Posix-Variants,
+ 	 where the Autoconf macro AC_USE_SYSTEM_EXTENSIONS makes sure this is defined."
+ 	standardHeaders := #('"config.h"' '<math.h>' '<stdio.h>' '<stdlib.h>' '<string.h>' '<time.h>').
+ 	self emitHeaderFiles: standardHeaders on: aStream.
- 	aStream nextPutAll: (self fileHeaderVersionStampForSourceClass: pluginClass).
- 	aStream cr; cr.
+ 	headerFiles := headerFiles copyWithoutAll: standardHeaders.
- 	#('<math.h>' '<stdio.h>' '<stdlib.h>' '<string.h>' '<time.h>') reverseDo:
- 		[:hdr| self addHeaderFileFirst: hdr].
- 	self addHeaderFileFirst: '"config.h"'. "Should always go first"
  	"Additional header files; include C library ones first."
  	self emitHeaderFiles: (headerFiles select: [:hdr| hdr includes: $<]) on: aStream.
+ 	aStream cr; nextPutAll: '/* Default EXPORT macro that does nothing (see comment in sq.h): */
- 	aStream cr; nextPutAll:'/* Default EXPORT macro that does nothing (see comment in sq.h): */
  #define EXPORT(returnType) returnType
  /* Do not include the entire sq.h file but just those parts needed. */
  #include "sqConfig.h"			/* Configuration options */
  #include "sqVirtualMachine.h"	/*  The virtual machine proxy definition */
  #include "sqPlatformSpecific.h"	/* Platform specific definitions */
  #define true 1
  #define false 0
  #define null 0  /* using ''null'' because nil is predefined in Think C */
  # undef EXPORT
  # define EXPORT(returnType) static returnType
  #endif'; cr; cr.
  	self addHeaderFile: '"sqMemoryAccess.h"'.
  	"Additional header files; include squeak VM ones last"
  	self emitHeaderFiles: (headerFiles reject: [:hdr| hdr includes: $<]) on: aStream.
  	self maybePutPreambleFor: pluginClass on: aStream.
  	aStream cr!

More information about the Vm-dev mailing list