[squeak-dev] The Trunk: Kernel-eem.1106.mcz

commits at source.squeak.org commits at source.squeak.org
Sat May 27 05:46:41 UTC 2017


Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1106.mcz

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

Name: Kernel-eem.1106
Author: eem
Time: 26 May 2017, 10:46:24.565361 pm
UUID: 50900779-04ef-43b2-8b95-6db258fbc8fe
Ancestors: Kernel-pre.1105

Several small fixes harvested from Terf.
Comment behavior>>startUp:.
Make sure that missing method chunks are still output as chunks.
Fix EventSensor>>flushNonKbdEvents to do just that and not flush key changes.
Provide an accessor for Float's Sqrt2 class var.
Guard against setting the comment of a metaclass.
Fix the comments of the 64-bit mixed integer primitives.
Nuke an unused variable in highestPriority: and guard against a possible bounds violation.
Fix the comment in SmallInteger>>bitAnd:.

=============== Diff against Kernel-pre.1105 ===============

Item was changed:
  ----- Method: Behavior>>startUp: (in category 'system startup') -----
  startUp: resuming
+ 	"This message is sent to registered classes when the system is coming up.
+ 	 resuming will be true if a snapshot is being resumed.  resuming will be false
+ 	 if the system is merely reinitializing after writing a snapshot."
- 	"This message is sent to registered classes when the system is coming up."
  	^self startUp!

Item was changed:
  ----- Method: Categorizer>>printString (in category 'printing') -----
  printString
+ 	^self fullPrintString!
- 	^ String streamContents: [ :stream | self printOn: stream ].!

Item was changed:
  ----- Method: ClassDescription>>copy:from:classified: (in category 'copying') -----
  copy: sel from: class classified: cat 
  	"Install the method associated with the first arugment, sel, a message 
  	selector, found in the method dictionary of the second argument, class, 
  	as one of the receiver's methods. Classify the message under the third 
  	argument, cat."
  
- 	| code category |
  	"Useful when modifying an existing class"
+ 	(class sourceCodeAt: sel ifAbsent: []) ifNotNil:
+ 		[:code| | method category |
+ 		method := class compiledMethodAt: sel.
+ 		category := cat == nil
+ 						ifTrue: [class organization categoryOfElement: sel]
+ 						ifFalse: [cat].
+ 		((self methodDict includesKey: sel)
+ 		 and: [code asString ~= (self sourceCodeAt: sel) asString]) ifTrue:
+ 			[self error: self name , ' '  , sel  , ' will be redefined if you proceed.'].
+ 		self compile: code classified: category withStamp: method timeStamp notifying: nil]!
- 	code := class sourceMethodAt: sel.
- 	code == nil
- 		ifFalse: 
- 			[cat == nil
- 				ifTrue: [category := class organization categoryOfElement: sel]
- 				ifFalse: [category := cat].
- 			(self methodDict includesKey: sel)
- 				ifTrue: [code asString = (self sourceMethodAt: sel) asString 
- 							ifFalse: [self error: self name 
- 										, ' ' 
- 										, sel 
- 										, ' will be redefined if you proceed.']].
- 			self compile: code classified: category]!

Item was changed:
  ----- Method: ClassDescription>>printMethodChunk:withPreamble:on:moveSource:toFile: (in category 'fileIn/Out') -----
  printMethodChunk: selector withPreamble: doPreamble on: outStream
  		moveSource: moveSource toFile: fileIndex
  	"Copy the source code for the method associated with selector onto the fileStream.  If moveSource true, then also set the source code pointer of the method."
  	| preamble method oldPos newPos sourceFile endPos |
  	doPreamble 
  		ifTrue: [preamble := self name , ' methodsFor: ' ,
  					(self organization categoryOfElement: selector) asString printString]
  		ifFalse: [preamble := ''].
  	method := self methodDict at: selector ifAbsent:
  		[outStream nextPutAll: selector; cr.
+ 		outStream tab; nextChunkPut: '** ERROR!!  THIS SCRIPT IS MISSING ** ' translated; cr; cr.
- 		outStream tab; nextPutAll: '** ERROR!!  THIS SCRIPT IS MISSING ** ' translated; cr; cr.
  		outStream nextPutAll: '  '.
  		^ outStream].
  
  	((method fileIndex = 0
  		or: [(SourceFiles at: method fileIndex) == nil])
  		or: [(oldPos := method filePosition) = 0])
  		ifTrue:
  		["The source code is not accessible.  We must decompile..."
  		preamble size > 0 ifTrue: [outStream cr; nextPut: $!!; nextChunkPut: preamble; cr].
  		outStream nextChunkPut: method decompileString]
  		ifFalse:
  		[sourceFile := SourceFiles at: method fileIndex.
  		preamble size > 0
  			ifTrue:    "Copy the preamble"
  				[outStream copyPreamble: preamble from: sourceFile at: oldPos]
  			ifFalse:
  				[sourceFile position: oldPos].
  		"Copy the method chunk"
  		newPos := outStream position.
  		outStream copyMethodChunkFrom: sourceFile.
  		sourceFile skipSeparators.      "The following chunk may have ]style["
  		sourceFile peek == $] ifTrue: [
  			outStream cr; copyMethodChunkFrom: sourceFile].
  		moveSource ifTrue:    "Set the new method source pointer"
  			[endPos := outStream position.
  			method checkOKToAdd: endPos - newPos at: newPos.
  			method setSourcePosition: newPos inFile: fileIndex]].
  	preamble size > 0 ifTrue: [outStream nextChunkPut: ' '].
  	^ outStream cr!

Item was added:
+ ----- Method: ClassOrganizer>>classComment: (in category 'accessing') -----
+ classComment: aString
+ 	"Guards against setting the comment in a metaclass which is invalid"
+ 	subject isMeta ifTrue:[^self error: 'Cannot set metaclass comments'].
+ 	^super classComment: aString!

Item was added:
+ ----- Method: ClassOrganizer>>classComment:stamp: (in category 'accessing') -----
+ classComment: aString  stamp: aStamp
+ 	"Guards against setting the comment in a metaclass which is invalid"
+ 	subject isMeta ifTrue:[^self error: 'Cannot set metaclass comments'].
+ 	^super classComment: aString  stamp: aStamp!

Item was changed:
  ----- Method: EventSensor>>flushNonKbdEvents (in category 'private') -----
  flushNonKbdEvents
+ 	"We do NOT use 'isKeybdEvent: ' here,
+ 	 as that would have us flush key press-release events,
+ 	 which is not appropriate when flushing non-keyboard events."
+ 	self eventQueue ifNotNil:
+ 		[:queue |
+ 		 queue flushAllSuchThat: [:buf | (self isAnyKbdEvent: buf) not]]!
- 
- 	self eventQueue ifNotNil: [:queue |
- 		queue flushAllSuchThat: [:buf | (self isKbdEvent: buf) not]].!

Item was added:
+ ----- Method: EventSensor>>isAnyKbdEvent: (in category 'private') -----
+ isAnyKbdEvent: buf
+ 	^(buf at: 1) = EventTypeKeyboard!

Item was added:
+ ----- Method: Float class>>sqrt2 (in category 'constants') -----
+ sqrt2
+ 
+ 	^ Sqrt2!

Item was changed:
  ----- Method: LargePositiveInteger>>* (in category 'arithmetic') -----
  * anInteger 
  	"Primitive. Multiply the receiver by the argument and answer with an
+ 	 Integer result. Fail if either the argument or the result is not in 64 bit range.
+ 	 Optional. See Object documentation whatIsAPrimitive."
- 	Integer result. Fail if either the argument or the result is not a
- 	SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See
- 	Object documentation whatIsAPrimitive. "
  
  	<primitive: 29>
  	^super * anInteger!

Item was changed:
  ----- Method: LargePositiveInteger>>+ (in category 'arithmetic') -----
  + anInteger 
  	"Primitive. Add the receiver to the argument and answer with an
+ 	 Integer result. Fail if either the argument or the result is not in 64 bit range.
+ 	 Optional. See Object documentation whatIsAPrimitive."
- 	Integer result. Fail if either the argument or the result is not a
- 	SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See
- 	Object documentation whatIsAPrimitive."
  
  	<primitive: 21>
  	^super + anInteger!

Item was changed:
  ----- Method: LargePositiveInteger>>- (in category 'arithmetic') -----
  - anInteger 
  	"Primitive. Subtract the argument from the receiver and answer with an
+ 	 Integer result. Fail if either the argument or the result is not in 64 bit range.
+ 	 Optional. See Object documentation whatIsAPrimitive."
- 	Integer result. Fail if either the argument or the result is not a
- 	SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See
- 	Object documentation whatIsAPrimitive."
  
  	<primitive: 22>
  	^super - anInteger!

Item was changed:
  ----- Method: LargePositiveInteger>>/ (in category 'arithmetic') -----
  / anInteger 
  	"Primitive. Divide the receiver by the argument and answer with the
+ 	 result if the division is exact. Fail if the result is not a whole integer.
+ 	 Fail if the argument is 0. Fail if either the argument or the result is not in 64 bit range.
+ 	 Optional. See Object documentation whatIsAPrimitive."
- 	result if the division is exact. Fail if the result is not a whole integer.
- 	Fail if the argument is 0. Fail if either the argument or the result is not
- 	a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See
- 	Object documentation whatIsAPrimitive. "
  
  	<primitive: 30>
  	^super / anInteger!

Item was changed:
  ----- Method: LargePositiveInteger>>// (in category 'arithmetic') -----
  // anInteger 
  	"Primitive. Divide the receiver by the argument and return the result.
+ 	 Round the result down towards negative infinity to make it a whole
+ 	 integer. Fail if the argument is 0. Fail if either the argument or the
+ 	 result is not in 64 bit range.
+ 	 Optional. See Object documentation whatIsAPrimitive."
- 	Round the result down towards negative infinity to make it a whole
- 	integer. Fail if the argument is 0. Fail if either the argument or the
- 	result is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824).
- 	Optional. See Object documentation whatIsAPrimitive. "
  
  	<primitive: 32>
  	^super // anInteger!

Item was changed:
  ----- Method: LargePositiveInteger>>< (in category 'comparing') -----
  < anInteger 
+ 	"Primitive. Compare the receiver with the argument and answer if the
+ 	 receiver is less than the argument. Fail if either the argument or the
+ 	 result is not in 64 bit range.
+ 	 Optional. See Object documentation whatIsAPrimitive."
- 	"Primitive. Compare the receiver with the argument and answer true if
- 	the receiver is less than the argument. Otherwise answer false. Fail if the
- 	argument is not a SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824).
- 	Optional. See Object documentation whatIsAPrimitive."
  
  	<primitive: 23>
  	^super < anInteger!

Item was changed:
  ----- Method: LargePositiveInteger>><= (in category 'comparing') -----
  <= anInteger 
+ 	"Primitive. Compare the receiver with the argument and answer if the
+ 	 receiver is less than or equal to the argument. Fail if the argument is
+ 	 not a SmallInteger or a LargePositiveInteger in the 64 bit range.
+ 	 Optional. See Object documentation whatIsAPrimitive."
- 	"Primitive. Compare the receiver with the argument and answer true if
- 	the receiver is less than or equal to the argument. Otherwise answer false.
- 	Fail if the argument is not a SmallInteger or a LargePositiveInteger less
- 	than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive."
  
  	<primitive: 25>
  	^super <= anInteger!

Item was changed:
  ----- Method: LargePositiveInteger>>> (in category 'comparing') -----
  > anInteger 
+ 	"Primitive. Compare the receiver with the argument and answer if the
+ 	 receiver is greater than the argument. Fail if the argument is
+ 	 not a SmallInteger or a LargePositiveInteger in the 64 bit range.
+ 	 Optional. See Object documentation whatIsAPrimitive."
- 	"Primitive. Compare the receiver with the argument and answer true if
- 	the receiver is greater than the argument. Otherwise answer false. Fail if
- 	the argument is not a SmallInteger or a LargePositiveInteger less than
- 	2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive."
  
  	<primitive: 24>
  	^super > anInteger!

Item was changed:
  ----- Method: LargePositiveInteger>>>= (in category 'comparing') -----
  >= anInteger 
+ 	"Primitive. Compare the receiver with the argument and answer if the
+ 	 receiver is greater than or equal to the argument.  Fail if the argument
+ 	 is not a SmallInteger or a LargePositiveInteger in the 64 bit range.
+ 	 Optional. See Object documentation whatIsAPrimitive."
- 	"Primitive. Compare the receiver with the argument and answer true if
- 	the receiver is greater than or equal to the argument. Otherwise answer
- 	false. Fail if the argument is not a SmallInteger or a LargePositiveInteger
- 	less than 2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive."
  
  	<primitive: 26>
  	^super >= anInteger!

Item was changed:
  ----- Method: LargePositiveInteger>>\\ (in category 'arithmetic') -----
  \\ aNumber 
  	"Primitive. Take the receiver modulo the argument. The result is the
+ 	 remainder rounded towards negative infinity, of the receiver divided
+ 	 by the argument. Fail if the argument is 0. Fail if either the argument
+ 	 or the result is not a SmallInteger or a LargePositiveInteger in the 64 bit range.
+ 	 Optional. See Object documentation whatIsAPrimitive."
- 	remainder rounded towards negative infinity, of the receiver divided
- 	by the argument. Fail if the argument is 0. Fail if either the argument
- 	or the result is not a SmallInteger or a LargePositiveInteger less than
- 	2-to-the-30th (1073741824). Optional. See Object documentation whatIsAPrimitive."
  
  	<primitive: 31>
  	aNumber isInteger
  		ifTrue:
  			[| neg qr q r |
  			neg := self negative == aNumber negative == false.
  			qr := self digitDiv: aNumber neg: neg.
  			q := qr first normalize.
  			r := qr last normalize.
  			^(q negative
  				ifTrue: [r isZero not]
  				ifFalse: [q isZero and: [neg]])
  					ifTrue: [r + aNumber]
  					ifFalse: [r]].
  	^super \\ aNumber
  	!

Item was changed:
  ----- Method: LargePositiveInteger>>quo: (in category 'arithmetic') -----
  quo: anInteger 
+ 	"Primitive. Divide the receiver by the argument and answer the result.
+ 	 Round the result down towards zero to make it a whole integer. Fail if
+ 	 the argument is 0. Fail if either the argument or the result is not a
+ 	 SmallInteger or a LargePositiveInteger in the 64 bit range.
+ 	 Optional. See Object documentation whatIsAPrimitive."
- 	"Primitive. Divide the receiver by the argument and return the result.
- 	Round the result down towards zero to make it a whole integer. Fail if
- 	the argument is 0. Fail if either the argument or the result is not a
- 	SmallInteger or a LargePositiveInteger less than 2-to-the-30th (1073741824). Optional. See
- 	Object documentation whatIsAPrimitive."
  
  	<primitive: 33>
  	^super quo: anInteger!

Item was changed:
  ----- Method: LargePositiveInteger>>rem: (in category 'arithmetic') -----
  rem: aNumber 
+ 	"Remainder defined in terms of quo:. See super rem:. Fail if
+ 	 the argument is 0. Fail if either the argument or the result is not a
+ 	 SmallInteger or a LargePositiveInteger in the 64 bit range.
+ 	 Optional. See Object documentation whatIsAPrimitive."
- 	"Remainder defined in terms of quo:. See super rem:.
- 	This is defined only to speed up case of large integers."
  
  	<primitive: 20>
  	 aNumber isInteger
  		ifTrue:
  			[| ng rem |
  			ng := self negative == aNumber negative == false.
  			rem := (self digitDiv: aNumber neg: ng) at: 2.
  			^ rem normalize].
  	^super rem: aNumber!

Item was added:
+ ----- Method: LargePositiveInteger>>~= (in category 'comparing') -----
+ ~= anInteger 
+ 	"Primitive. Compare the receiver with the argument and answer if the
+ 	 receiver is equal to the argument. Fail if the receiver or argument is not
+ 	 an integer in the 64 bit range.
+ 	Optional. See Object documentation whatIsAPrimitive."
+ 
+ 	<primitive: 28>
+ 	^super ~= anInteger!

Item was changed:
  ----- Method: ProcessorScheduler>>highestPriority: (in category 'accessing') -----
  highestPriority: newHighestPriority
  	"Change the number of priority levels currently available for use."
  
+ 	| newProcessLists |
- 	| continue newProcessLists |
  	(quiescentProcessLists size > newHighestPriority
  		and: [self anyProcessesAbove: newHighestPriority])
  			ifTrue: [self error: 'There are processes with priority higher than '
  													,newHighestPriority printString].
  	newProcessLists := Array new: newHighestPriority.
  	1 to: ((quiescentProcessLists size) min: (newProcessLists size)) do: 
  		[:priority | newProcessLists at: priority put: (quiescentProcessLists at: priority)].
+ 	(quiescentProcessLists size max: 1) to: newProcessLists size do: 
- 	quiescentProcessLists size to: newProcessLists size do: 
  		[:priority | newProcessLists at: priority put: LinkedList new].
  	quiescentProcessLists := newProcessLists!

Item was changed:
  ----- Method: SmallInteger>>bitAnd: (in category 'bit manipulation') -----
  bitAnd: arg 
+ 	"Primitive. Answer an Integer whose bits are the logical AND of the
+ 	 receiver's bits and those of the argument, arg.
+ 	 Numbers are interpreted as having 2's-complement representation.
+ 	 Essential.  See Object documentation whatIsAPrimitive."
- 	"Primitive. Answer an Integer whose bits are the logical OR of the
- 	receiver's bits and those of the argument, arg.
- 	Numbers are interpreted as having 2's-complement representation.
- 	Essential.  See Object documentation whatIsAPrimitive."
  
  	<primitive: 14>
+ 	self >= 0 ifTrue: [^arg bitAnd: self].
+ 	^arg < 0
- 	self >= 0 ifTrue: [^ arg bitAnd: self].
- 	^ arg < 0
  		ifTrue: [(arg bitInvert bitOr: self bitInvert) bitInvert]
  		ifFalse: [arg bitClear: self bitInvert]!



More information about the Squeak-dev mailing list