From 1bd9150f7c577a8196c7e48527059de699fa1643 Mon Sep 17 00:00:00 2001 From: hogoww Date: Thu, 23 Dec 2021 18:34:36 +0100 Subject: [PATCH] Mutant #599, Reverting [ Replace #ifTrue: receiver with true ] on method [ markAndShouldScan: ] KILLED by 1/10 test cases. --- .../VMMaker/SpurMemoryManager.class.st | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/smalltalksrc/VMMaker/SpurMemoryManager.class.st b/smalltalksrc/VMMaker/SpurMemoryManager.class.st index f18e93c61f..d6cae225bb 100644 --- a/smalltalksrc/VMMaker/SpurMemoryManager.class.st +++ b/smalltalksrc/VMMaker/SpurMemoryManager.class.st @@ -8159,7 +8159,6 @@ SpurMemoryManager >> markAllUnscannedEphemerons [ { #category : #'gc - global' } SpurMemoryManager >> markAndShouldScan: objOop [ - "Helper for markAndTrace:. Mark the argument, and answer if its fields should be scanned now. Immediate objects don't need to be marked. @@ -8167,25 +8166,29 @@ SpurMemoryManager >> markAndShouldScan: objOop [ Pure bits objects don't need scanning, although their class does. Weak objects should be pushed on the weakling stack. Anything else need scanning." - - | format | - (self isImmediate: objOop) ifTrue: [ ^ false ]. + + (self isImmediate: objOop) ifTrue: + [^false]. "if markAndTrace: is to follow and eliminate forwarding pointers in its scan it cannot be handed an r-value which is forwarded." self assert: (self isForwarded: objOop) not. - (self isMarked: objOop) ifTrue: [ ^ false ]. + (self isMarked: objOop) ifTrue: + [^false]. self setIsMarkedOf: objOop to: true. format := self formatOf: objOop. - (self isPureBitsFormat: format) ifTrue: [ "Avoid tracing classes of non-objects on the heap, e.g. IRC caches, Sista counters.""avoid pushing non-pointer objects on the markStack." - (self classIndexOf: objOop) > self lastClassIndexPun ifTrue: [ - self markAndTraceClassOf: objOop ]. - ^ false ]. - format = self weakArrayFormat ifTrue: [ "push weaklings on the weakling stack to scan later" - self push: objOop onObjStack: weaklingStack. - ^ false ]. - true ifTrue: [ ^ false ]. - ^ true + (self isPureBitsFormat: format) ifTrue: "avoid pushing non-pointer objects on the markStack." + ["Avoid tracing classes of non-objects on the heap, e.g. IRC caches, Sista counters." + (self classIndexOf: objOop) > self lastClassIndexPun ifTrue: + [self markAndTraceClassOf: objOop]. + ^false]. + format = self weakArrayFormat ifTrue: "push weaklings on the weakling stack to scan later" + [self push: objOop onObjStack: weaklingStack. + ^false]. + (format = self ephemeronFormat + and: [self activeAndDeferredScan: objOop]) ifTrue: + [^false]. + ^true ] { #category : #'gc - global' }