Use inlined FNV1a hash for String
...and do not use __symbolHash(). Although currently the VM also
uses FNV1a hash for Symbols, the __symbolHash() does not handle
properly character with codepoint 0 (because '\0' is used as a
string terminator). This causes problems with Unicode16/32Strigs whose
version of FNV1a hash is using object size from header to determine
string's end.
Added Symbol>>hash that actually *uses* the __symbolHash() to make
sure it's hash is the the same as used bu the VM. Symbols with zeroes
are rare and there's no Unicode16/32Symbol.
This commit fixes issue #65.
"{ Package: 'stx:libbasic' }"
Object subclass:#SystemChangeNotifier
instanceVariableNames:'silenceLevel'
classVariableNames:'UniqueInstance'
poolDictionaries:''
category:'Kernel-Classes-Support'
!
!SystemChangeNotifier class methodsFor:'documentation'!
documentation
"
For now, this implementation is mostly for squeak compatibility.
However, in the future, we may move the change notification code from ClassDescription to here,
to make things easier to understand, and classDescription a little bit more lightweight.
"
! !
!SystemChangeNotifier class methodsFor:'instance creation'!
uniqueInstance
"I am a singleton"
UniqueInstance isNil ifTrue: [UniqueInstance := self basicNew initialize].
^ UniqueInstance
"
UniqueInstance releaseAll.
UniqueInstance := nil
"
! !
!SystemChangeNotifier methodsFor:'change notifications'!
class: trait recategorizedFrom: oldCategory to:newCategory
"dummy for now - will write a change record eventually"
!
classAdded:aClass inCategory:aCategoryString
"dummy for now - will write a change record eventually"
!
traitDefinitionChangedFrom:oldTrait to:newTrait
"dummy for now - will write a change record eventually"
! !
!SystemChangeNotifier methodsFor:'initialization'!
initialize
"/ eventSource := SystemEventManager new.
silenceLevel := 0.
! !
!SystemChangeNotifier methodsFor:'public'!
doSilently: aBlock
"Perform the block, and ensure that no system notification are broadcasted while doing so."
|result|
silenceLevel := silenceLevel + 1.
[
"/ temporary hack:
Class withoutUpdatingChangesDo:[
result := aBlock value
]
] ensure: [
silenceLevel > 0 ifTrue: [
silenceLevel := silenceLevel - 1
]
].
^ result.
!
isBroadcasting
^ silenceLevel = 0
!
noMoreNotificationsFor: aStakeHolder
"dummy for now "
!
notify:aStakeHolder ofSystemChangesOfItem:anItemSymbol change: changeTypeSymbol using: changeMessage
"dummy for now "
! !
!SystemChangeNotifier class methodsFor:'documentation'!
version_CVS
^ '$Header: /cvs/stx/stx/libbasic/SystemChangeNotifier.st,v 1.6 2013-06-23 22:23:09 cg Exp $'
! !