--- a/.hgtags Thu Jun 30 21:11:02 2016 +0100
+++ b/.hgtags Thu Jun 30 21:12:35 2016 +0100
@@ -20,6 +20,7 @@
484307b07a7b64f21b0a6dd83d5856556904a435 expecco_2_9_0
484307b07a7b64f21b0a6dd83d5856556904a435 expecco_2_9_0_a
484307b07a7b64f21b0a6dd83d5856556904a435 expecco_2_9_0_win75_lx36
+484307b07a7b64f21b0a6dd83d5856556904a435 expecco_2_9_1
508e9e5d9254027c7f4aed4fe7734dab793e5230 expecco_ALM_1_9_7
59d0cc49b9442979ff138bc2424f588e8a533c2f expecco_1_7_0rc3
602e61cb64a3aaa674fbaf01705064701f2f5c14 expecco_2_2_5
--- a/ApplicationDefinition.st Thu Jun 30 21:11:02 2016 +0100
+++ b/ApplicationDefinition.st Thu Jun 30 21:12:35 2016 +0100
@@ -16,10 +16,10 @@
"{ NameSpace: Smalltalk }"
ProjectDefinition subclass:#ApplicationDefinition
- instanceVariableNames:''
- classVariableNames:''
- poolDictionaries:''
- category:'System-Support-Projects'
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'System-Support-Projects'
!
!ApplicationDefinition class methodsFor:'documentation'!
@@ -798,18 +798,6 @@
^ self packageName,'.nsi'.
"Created: / 14-09-2006 / 21:03:41 / cg"
-!
-
-rcFilename
- ^ self packageName,'WinRC.rc'.
-
- "Created: / 07-09-2006 / 17:07:08 / cg"
-!
-
-resourceFilename
- ^ (self rcFilename asFilename withSuffix:'$(RES)') name
-
- "Created: / 07-09-2006 / 17:12:53 / cg"
! !
!ApplicationDefinition class methodsFor:'file mappings'!
@@ -1408,7 +1396,7 @@
generateAllPreRequisiteLibs_modules_dot_stx
^ String streamContents:[:s |
- self allPreRequisitesWithMandatorySorted do:[:projectID |
+ self allPreRequisitesSorted do:[:projectID |
(self shouldBeLoadedInitially:projectID) ifFalse:[
s nextPut:$*.
].
@@ -1425,7 +1413,7 @@
exept_expecco_application generateAllPreRequisiteLibs_modules_dot_stx
"
- "Modified: / 06-06-2016 / 14:31:09 / cg"
+ "Modified: / 07-09-2006 / 17:22:58 / cg"
!
generateExtensionLine: extensionLineTemplate
@@ -1463,7 +1451,7 @@
generatePreRequisiteLines_bc_dot_mak
^ String streamContents:[:s |
- self allPreRequisitesWithMandatorySorted do:[:eachPackage |
+ self allPreRequisitesSorted do:[:eachPackage |
|mappings newObjectLine|
mappings := self preRequisiteLine_bc_dot_mak_mappings: eachPackage.
newObjectLine := self replaceMappings: mappings
@@ -1486,12 +1474,13 @@
"
"Created: / 09-08-2006 / 11:24:39 / fm"
- "Modified: / 06-06-2016 / 14:33:30 / cg"
+ "Modified: / 14-09-2006 / 21:58:47 / cg"
!
generatePreRequisiteLines_make_dot_proto
+
^ String streamContents:[:s |
- self allPreRequisitesWithMandatorySorted do:[:eachPackage |
+ self allPreRequisitesSorted do:[:eachPackage |
|mappings newObjectLine|
mappings := self preRequisiteLine_make_dot_proto_mappings: eachPackage.
newObjectLine := self replaceMappings: mappings
@@ -1514,32 +1503,31 @@
"
"Created: / 09-08-2006 / 11:24:39 / fm"
- "Modified: / 06-06-2016 / 14:33:55 / cg"
+ "Modified: / 14-09-2006 / 21:58:47 / cg"
!
generateRequiredLibobjs_make_dot_proto
^ String streamContents:[:s |
- self allPreRequisitesWithMandatorySorted do:[:projectID |
+ self allPreRequisitesSorted do:[:projectID |
|libobjPath libPath|
libPath := self pathToPackage:projectID withSeparator:'/'.
libobjPath := libPath , '/', (self libraryNameFor:projectID).
s space; nextPutAll: libobjPath; nextPutLine:'$(O_EXT) \'.
].
+
s cr.
].
"
exept_expecco_application generateRequiredLibobjs_make_dot_proto
"
-
- "Modified: / 06-06-2016 / 14:34:17 / cg"
!
generateRequiredLibs_bc_dot_mak
^ String streamContents:[:s |
s nextPutLine:' \'.
- self allPreRequisitesWithMandatorySorted do:[:projectID |
+ self allPreRequisitesSorted do:[:projectID |
s space; nextPutAll:(self libraryNameFor:projectID); nextPutLine:'.dll \'.
].
@@ -1560,13 +1548,13 @@
bosch_dapasx_application generateRequiredLibs_bc_dot_mak
"
- "Modified: / 06-06-2016 / 14:34:41 / cg"
+ "Modified: / 07-09-2006 / 17:22:51 / cg"
!
generateRequiredLibs_make_dot_proto
"/ cg: why not (self libraryNameFor:projectID),'.so'; ???
^ String streamContents:[:s |
- self allPreRequisitesWithMandatorySorted do:[:projectID |
+ self allPreRequisitesSorted do:[:projectID |
s space; nextPutAll:(self libraryNameFor:projectID); nextPutLine:' \'.
].
"/ Subprojects are only built, but not linked to the executable!!
@@ -1585,14 +1573,12 @@
"
alspa_batch_application generateRequiredLibs_make_dot_proto
"
-
- "Modified: / 06-06-2016 / 14:34:59 / cg"
!
generateRequiredLinkLibobjs_make_dot_proto
^ String streamContents:[:s |
- self allPreRequisitesWithMandatorySorted do:[:projectID |
+ self allPreRequisitesSorted do:[:projectID |
s space; nextPutAll:(self libraryNameFor:projectID),'$(O_EXT)'; nextPutLine:' \'.
].
@@ -1610,8 +1596,6 @@
"
alspa_batch_application generateRequiredLinkLibobjs_make_dot_proto
"
-
- "Modified: / 06-06-2016 / 14:35:15 / cg"
!
generateSubProjectLibs_bc_dot_mak
@@ -3087,8 +3071,8 @@
'%(FILE_NAME).dll: %(MODULE_DIRECTORY)\$(OBJDIR)\%(FILE_NAME).dll
copy %(MODULE_DIRECTORY)\$(OBJDIR)\%(FILE_NAME).dll *.*
-# %(MODULE_DIRECTORY)\$(OBJDIR)\%(FILE_NAME).dll: $(FORCE)
-# pushd %(MODULE_DIRECTORY) & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+%(MODULE_DIRECTORY)\$(OBJDIR)\%(FILE_NAME).dll: $(FORCE)
+ pushd %(MODULE_DIRECTORY) & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
'
"Modified: / 06-06-2016 / 15:53:51 / cg"
--- a/Behavior.st Thu Jun 30 21:11:02 2016 +0100
+++ b/Behavior.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 1988 by Claus Gittinger
All Rights Reserved
@@ -2118,23 +2120,22 @@
However, within one inheritance level, there is no specific order,
in which the entries are enumerated.
Warning:
- This will only enumerate globally known classes - for anonymous
- behaviors, you have to walk over all instances of Behavior."
+ This will only enumerate globally known classes - for anonymous
+ behaviors, you have to walk over all instances of Behavior."
|meta toDo cls|
meta := self isMeta.
- toDo := OrderedCollection new.
- toDo addAll:self theNonMetaclass subclasses.
+ toDo := self theNonMetaclass subclasses asNewOrderedCollection.
[toDo notEmpty] whileTrue:[
- cls := toDo removeFirst.
- toDo addAll:cls subclasses.
- meta ifTrue:[
- aBlock value:cls class.
- ] ifFalse:[
- aBlock value:cls.
- ]
+ cls := toDo removeFirst.
+ toDo addAll:cls subclasses.
+ meta ifTrue:[
+ aBlock value:cls class.
+ ] ifFalse:[
+ aBlock value:cls.
+ ]
].
"/ self isMeta ifTrue:[
@@ -5278,3 +5279,4 @@
version_CVS
^ '$Header$'
! !
+
--- a/CachingRegistry.st Thu Jun 30 21:11:02 2016 +0100
+++ b/CachingRegistry.st Thu Jun 30 21:12:35 2016 +0100
@@ -10,7 +10,8 @@
hereby transferred.
"
"{ Package: 'stx:libbasic' }"
-"{ Package: 'stx:libbasic' }"
+
+"{ NameSpace: Smalltalk }"
Registry subclass:#CachingRegistry
instanceVariableNames:'keptReferences cacheSize'
@@ -42,7 +43,7 @@
However, it keeps hard references to the last n registered objects,
preventing them from being garbage collected (and finalized).
This is useful for resources, which do not cost too much memory,
- but are expensive to allocate - a special canditate of this kind are
+ but are expensive to allocate - a special candidate of this kind are
XFonts. With a CachingRegistry, fonts are kept a bit longer alive
and can therefore often be reused - even if temporarily unreferenced.
@@ -50,13 +51,13 @@
[author:]
- Claus Gittinger (cg@exept)
+ Claus Gittinger (cg@exept)
[see also:]
[instance variables:]
- keptObjects Collection hard referenced objects
- cacheSize Integer number of hard references
+ keptObjects Collection hard referenced objects
+ cacheSize Integer number of hard references
[class variables:]
"
@@ -73,27 +74,29 @@
register:anObject as:aHandle
keptReferences removeIdentical:anObject ifAbsent:nil.
- keptReferences addLast:anObject.
- keptReferences size > cacheSize ifTrue:[
- keptReferences removeFirst.
+ aHandle notNil ifTrue:[
+ keptReferences addLast:anObject.
+ keptReferences size > cacheSize ifTrue:[
+ keptReferences removeFirst.
+ ].
].
super register:anObject as:aHandle.
!
-repairTally
- keptReferences := OrderedCollection new:cacheSize.
- super repairTally.
+removeKey:anObject ifAbsent:absentBlock
+ keptReferences removeIdentical:anObject ifAbsent:nil.
+ super removeKey:anObject ifAbsent:absentBlock.
!
-unregister:anObject atIndex:index
+safeRemoveKey:anObject
keptReferences removeIdentical:anObject ifAbsent:nil.
- super unregister:anObject atIndex:index.
+ super safeRemoveKey:anObject.
! !
!CachingRegistry class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/CachingRegistry.st,v 1.2 2015-04-21 16:01:16 cg Exp $'
+ ^ '$Header$'
!
version_SVN
--- a/Character.st Thu Jun 30 21:11:02 2016 +0100
+++ b/Character.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 1988 by Claus Gittinger
All Rights Reserved
@@ -311,7 +313,6 @@
^ self codePoint:anInteger
! !
-
!Character class methodsFor:'accessing untypeable characters'!
controlCharacter:char
@@ -358,7 +359,6 @@
^ self codePoint:41
! !
-
!Character class methodsFor:'constants'!
backspace
@@ -648,7 +648,6 @@
or:[ (asciivalue == 247 ) ]]]]]
! !
-
!Character methodsFor:'accessing'!
codePoint
@@ -1499,7 +1498,7 @@
^ s contents
"
- 'ä' utf8Encoded
+ 'ä' utf8Encoded
'a' utf8Encoded
"
! !
@@ -1798,6 +1797,75 @@
asciivalue <= 16rFF ifTrue:[^ String].
asciivalue <= 16rFFFF ifTrue:[^ Unicode16String].
^ Unicode32String
+!
+
+unicodeBlock
+ "return the name of the unicode block in which this character is.
+ incomplete"
+
+ asciivalue <= 16r007F ifTrue:[^ #BASIC_LATIN ].
+ asciivalue <= 16r00FF ifTrue:[^ #LATIN1_SUPPLEMENT ].
+ asciivalue <= 16r017F ifTrue:[^ #LATIN1_EXTENDED_A].
+ asciivalue <= 16r024F ifTrue:[^ #LATIN1_EXTENDED_B].
+ asciivalue <= 16r02AF ifTrue:[^ #IPA_EXTENSIONS].
+ asciivalue <= 16r02FF ifTrue:[^ #SPACING_MODIFIER_LETTERS].
+ asciivalue <= 16r036f ifTrue:[ ^ #COMBINING_DIACRITICAL_MARKS ].
+ asciivalue <= 16r03FF ifTrue:[ ^ #GREEK_AND_COPTIC ].
+ asciivalue <= 16r04FF ifTrue:[ ^ #CYRILLIC ].
+ asciivalue <= 16r052F ifTrue:[ ^ #CYRILLIC_SUPPLEMENT ].
+ asciivalue <= 16r058F ifTrue:[ ^ #ARMENIAN ].
+ asciivalue <= 16r05FF ifTrue:[ ^ #HEBREW ].
+ asciivalue <= 16r06FF ifTrue:[ ^ #ARABIC ].
+ asciivalue <= 16r074F ifTrue:[ ^ #SYRIAC ].
+ asciivalue <= 16r077F ifTrue:[ ^ #ARABIC_SUPPLEMENT ].
+ asciivalue <= 16r07BF ifTrue:[ ^ #THAANA ].
+ asciivalue <= 16r07FF ifTrue:[ ^ #NKO ].
+ asciivalue <= 16r083F ifTrue:[ ^ #SAMARITAN ].
+ asciivalue <= 16r085F ifTrue:[ ^ #MANDAIC ].
+ asciivalue <= 16r087F ifTrue:[ ^ nil ].
+ asciivalue <= 16r08FF ifTrue:[ ^ #ARABIC_EXTENDED_A ].
+ asciivalue <= 16r097F ifTrue:[ ^ #DEVANAGARI ].
+ asciivalue <= 16r09FF ifTrue:[ ^ #BENGALI ].
+ asciivalue <= 16r0A7F ifTrue:[ ^ #GURMUKHI ].
+ asciivalue <= 16r0AFF ifTrue:[ ^ #GUJARATI ].
+ asciivalue <= 16r0B7F ifTrue:[ ^ #ORIYA ].
+ asciivalue <= 16r0BFF ifTrue:[ ^ #TAMIL ].
+ asciivalue <= 16r0C7F ifTrue:[ ^ #TELUGU ].
+ asciivalue <= 16r0CFF ifTrue:[ ^ #KANNADA ].
+ asciivalue <= 16r0D7F ifTrue:[ ^ #MALAYALAM ].
+ asciivalue <= 16r0DFF ifTrue:[ ^ #SINHALA ].
+ asciivalue <= 16r0E7F ifTrue:[ ^ #THAI ].
+ asciivalue <= 16r0EFF ifTrue:[ ^ #LAO ].
+ asciivalue <= 16r0FFF ifTrue:[ ^ #TIBETAN ].
+ asciivalue <= 16r109F ifTrue:[ ^ #MYANMAR ].
+ asciivalue <= 16r10FF ifTrue:[ ^ #GEORGIAN ].
+ asciivalue <= 16r11FF ifTrue:[ ^ #HANGUL_JAMO ].
+ asciivalue <= 16r137F ifTrue:[ ^ #ETHIOPIC ].
+ asciivalue <= 16r139F ifTrue:[ ^ #ETHIOPIC_SUPPLEMENT ].
+ asciivalue <= 16r13FF ifTrue:[ ^ #CHEROKEE ].
+ asciivalue <= 16r167F ifTrue:[ ^ #UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS ].
+ asciivalue < 16r1AB0 ifTrue:[ ^ #OTHER ].
+ asciivalue <= 16r1AFF ifTrue:[ ^ #COMBINING_DIACRITICAL_MARKS_EXTENDED ].
+ asciivalue < 16r1DC0 ifTrue:[ ^ #OTHER ].
+ asciivalue <= 16r1DFF ifTrue:[ ^ #COMBINING_DIACRITICAL_MARKS_SUPPLEMENT ].
+ asciivalue <= 16r1EFF ifTrue:[ ^ #LATIN_EXTENDED_ADDITIONAL ].
+ asciivalue <= 16r1FFF ifTrue:[ ^ #GREEK_EXTENDED ].
+ asciivalue <= 16r206F ifTrue:[ ^ #GENERAL_PUNKTUATION ].
+ asciivalue <= 16r209F ifTrue:[ ^ #SUPERSCRIPTS_AND_SUBSCRIPTS ].
+ asciivalue <= 16r20CF ifTrue:[ ^ #CURRENCY_SYMBOLS ].
+ asciivalue < 16r2190 ifTrue:[ ^ #OTHER ].
+ asciivalue <= 16r21FF ifTrue:[ ^ #ARROWS ].
+ asciivalue <= 16r22FF ifTrue:[ ^ #MATHEMATICAL_OPERATORS ].
+ asciivalue <= 16r23FF ifTrue:[ ^ #MISCELLANEOUS_TECHNICAL ].
+ asciivalue < 16r2600 ifTrue:[ ^ #OTHER ].
+ asciivalue <= 16r26FF ifTrue:[ ^ #MISCELLANEOUS_SYMBOLS ].
+ asciivalue <= 16r27BF ifTrue:[ ^ #DINGBATS ].
+ asciivalue <= 16r27EF ifTrue:[ ^ #MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A ].
+ ^ #OTHER
+
+ "
+ (Character value:16r200) unicodeBlock
+ "
! !
!Character methodsFor:'testing'!
@@ -2569,9 +2637,9 @@
"
$e asNonDiacritical
- $é asNonDiacritical
- $ä asNonDiacritical
- $å asNonDiacritical
+ $é asNonDiacritical
+ $ä asNonDiacritical
+ $Ã¥ asNonDiacritical
"
!
--- a/CharacterArray.st Thu Jun 30 21:11:02 2016 +0100
+++ b/CharacterArray.st Thu Jun 30 21:12:35 2016 +0100
@@ -18,7 +18,8 @@
UninterpretedBytes variableByteSubclass:#CharacterArray
instanceVariableNames:''
classVariableNames:'PreviousMatch DecoderTables EncoderTables DecodingFailedSignal
- EncodingFailedSignal'
+ EncodingFailedSignal UnicodeNormalizationMap
+ UnicodeDenormalizationMap'
poolDictionaries:''
category:'Collections-Text'
!
@@ -350,7 +351,6 @@
"Created: 3.8.1997 / 18:16:40 / cg"
! !
-
!CharacterArray class methodsFor:'cleanup'!
lowSpaceCleanup
@@ -549,8 +549,68 @@
CharacterArray decodeFromUTF8:#[ 16rC0 16r80 ]
CharacterArray decodeFromUTF8:#[ 16rE0 16r80 16r80 ]
"
+!
+
+setupNormalizationMaps
+ "returns a 2-stage map from ch2 -> ch1 -> mappedChar
+ for unicode normalization (i.e. for making combining chars regular ones)"
+
+ |def|
+
+ UnicodeNormalizationMap := Dictionary new.
+ UnicodeDenormalizationMap := Dictionary new.
+
+ def := [:combiner :chars :mappedChars |
+ |d|
+
+ d := UnicodeNormalizationMap at:combiner ifAbsentPut:[Dictionary new].
+ chars with:mappedChars do:[:ch1 :mappedChar |
+ d at:ch1 put:mappedChar.
+ UnicodeDenormalizationMap at:mappedChar put:(Unicode16String with:ch1 with:combiner).
+ ].
+ ].
+ def value:(Character codePoint:16r0300) "grave" value:'AEIOUaeiouWw' value:'ÀÈÌÒÙà èìòùẀáº'.
+ def value:(Character codePoint:16r0301) "acute" value:'AEIOUYaeiouyÇçKkMmPpWw' value:'ÃÉÃÓÚÃáéÃóúýḈḉḰḱḾḿṔṕẂẃ'.
+ def value:(Character codePoint:16r0302) "circumflex" value:'AEIOUaeiouZz' value:'ÂÊÎÔÛâêîôûáºáº‘'.
+ def value:(Character codePoint:16r0303) "tilde" value:'AONaon' value:'ÃÕÑãõñ'.
+ def value:(Character codePoint:16r0307) "dot over" value:'BbDdFfHhMmNnPpRrSsTtWwXxYyṢṣ' value:'ḂḃḊḋḞḟḢḣṀá¹á¹„ṅṖṗṘṙṠṡṪṫẆẇẊẋẎáºá¹¨á¹©'.
+ def value:(Character codePoint:16r0308) "diaresis" value:'AEIOUaeiouyHhWwXxt' value:'ÄËÃÖÜäëïöüÿḦḧẄẅẌáºáº—'.
+ def value:(Character codePoint:16r030A) "ring" value:'Aawy' value:'Ååẘẙ'.
+ def value:(Character codePoint:16r0323) "dot under" value:'AaBbDdEeIiHhKkLlMmNnOoRrSsTtUuVvWwZzṠṡ' value:'ẠạḄḅḌá¸áº¸áº¹á»Šá»‹á¸¤á¸¥á¸²á¸³á¸¶á¸·á¹‚ṃṆṇỌá»á¹šá¹›á¹¢á¹£á¹¬á¹á»¤á»¥á¹¾á¹¿áºˆáº‰áº’ẓṨṩ'.
+ def value:(Character codePoint:16r0327) "cedilla" value:'Cc' value:'Çç'.
+
+ "
+ self setupNormalizationMaps
+ "
+!
+
+unicodeDenormalizationMap
+ "returns a 2-stage map from ch2 -> ch1 -> mappedChar
+ for unicode normalization (i.e. for making combining chars regular ones)"
+
+ UnicodeDenormalizationMap isNil ifTrue:[
+ self setupNormalizationMaps
+ ].
+ ^ UnicodeDenormalizationMap
+
+ "
+ self unicodeDenormalizationMap
+ "
+!
+
+unicodeNormalizationMap
+ "returns a 2-stage map from ch2 -> ch1 -> mappedChar
+ for unicode normalization (i.e. for making combining chars regular ones)"
+
+ UnicodeNormalizationMap isNil ifTrue:[
+ self setupNormalizationMaps
+ ].
+ ^ UnicodeNormalizationMap
+
+ "
+ self unicodeNormalizationMap
+ "
! !
-
!CharacterArray class methodsFor:'pattern matching'!
matchEscapeCharacter
@@ -956,7 +1016,6 @@
^ Unicode32String
! !
-
!CharacterArray methodsFor:'Compatibility-ANSI'!
addLineDelimiters
@@ -4540,6 +4599,77 @@
!CharacterArray methodsFor:'encoding & decoding'!
+asDenormalizedUnicodeString
+ "return a new string containing the same characters, as a denormalized Unicode string.
+ This replaces diacritical chars (umlauts, accented chars etc) by
+ a sequence with combination characters.
+ (i.e. a plain character followed by a combining diacritical in the 0x03xx range)"
+
+ |map outStream mapChar|
+
+ map := self class unicodeDenormalizationMap.
+
+ self containsNon7BitAscii ifFalse:[^ self]. "/ I cannot contain any
+
+ mapChar :=
+ [:char |
+ |mappedChars|
+
+ (mappedChars := map at:char ifAbsent:nil) notNil ifTrue:[
+ mappedChars do:mapChar.
+ ] ifFalse:[
+ outStream nextPut:char.
+ ].
+ ].
+
+ outStream := WriteStream on:(Unicode16String new:self size).
+ self do:mapChar.
+ ^ outStream contents asSingleByteStringIfPossible.
+
+ "
+ 'Ö' asDenormalizedUnicodeString
+ 'aÖÄx' asDenormalizedUnicodeString
+ 'abc' asDenormalizedUnicodeString
+ 'ṩ' asString asDenormalizedUnicodeString
+ "
+!
+
+asNormalizedUnicodeString
+ "return a new string containing the same characters, as a normalized Unicode string.
+ This replaces combination characters by corresponding single characters.
+ (i.e. diaresis and other combining diacriticals in the 0x03xx range)"
+
+ |outStream prevChar map mapEntries mappedChar|
+
+ map := self class unicodeNormalizationMap.
+
+ self bitsPerCharacter <= 8 ifTrue:[^ self]. "/ I cannot contain any overtypes
+ (self contains:[:ch | ch unicodeBlock == #'COMBINING_DIACRITICAL_MARKS']) ifFalse:[^ self]. "/ I do not contain any overtypes
+
+ outStream := WriteStream on:(self species new:self size).
+ self do:[:char |
+ ((char unicodeBlock == #'COMBINING_DIACRITICAL_MARKS')
+ and:[ (mapEntries := map at:char ifAbsent:nil) notNil
+ and:[ (mappedChar := mapEntries at:prevChar ifAbsent:nil) notNil ]]) ifTrue:[
+ prevChar := mappedChar.
+ ] ifFalse:[
+ prevChar notNil ifTrue:[ outStream nextPut:prevChar].
+ prevChar := char
+ ].
+ ].
+ prevChar notNil ifTrue:[ outStream nextPut:prevChar].
+ ^ outStream contents asSingleByteStringIfPossible.
+
+ "
+ self unicodeNormalizationMap
+ ('O' , (Character value:16r0308)) asNormalizedUnicodeString -> 'Ö'
+ ('O' , (Character value:16r0308) ,
+ 'A' , (Character value:16r0308)) asNormalizedUnicodeString -> 'ÖÄ'
+ ('s' , (Character value:16r0323) , (Character value:16r0307)) asNormalizedUnicodeString -> 'ṩ'
+ ('s' , (Character value:16r0307) , (Character value:16r0323)) asNormalizedUnicodeString -> 'ṩ'
+ "
+!
+
decodeAsLiteralArray
"given a literalEncoding in the receiver,
create & return the corresponding object.
@@ -4761,8 +4891,6 @@
! !
-
-
!CharacterArray methodsFor:'matching - glob expressions'!
compoundMatch:aString
@@ -6045,7 +6173,7 @@
encoding
"return the strings encoding, as a symbol.
Here, by default, we assume unicode-encoding.
- Notice, that iso8859-1 is a true subset of unicode,
+ Notice, that ISO-8859-1 is a true subset of unicode,
and that singleByteStrings are therefore both unicode AND
8859-1 encoded."
@@ -8053,7 +8181,6 @@
^ aVisitor visitString:self with:aParameter
! !
-
!CharacterArray class methodsFor:'documentation'!
version
--- a/CharacterEncoder.st Thu Jun 30 21:11:02 2016 +0100
+++ b/CharacterEncoder.st Thu Jun 30 21:12:35 2016 +0100
@@ -94,18 +94,18 @@
All the ISO 8859 codesets include ASCII as a proper codeset within them:
- ISO 8859-1: Latin 1 - Western European Languages.
- ISO 8859-2: Latin 2 - Eastern European Languages.
- ISO 8859-3: Latin 3 - Afrikaans, Catalan, Dutch, English, Esperanto, German,
+ ISO-8859-1: Latin 1 - Western European Languages.
+ ISO-8859-2: Latin 2 - Eastern European Languages.
+ ISO-8859-3: Latin 3 - Afrikaans, Catalan, Dutch, English, Esperanto, German,
Italian, Maltese, Spanish and Turkish.
- ISO 8859-4: Latin 4 - Danish, English, Estonian, Finnish, German, Greenlandic, Lappish and Latvian.
- ISO 8859-5: Latin/Cyrillic - Bulgarian, Byelorussian, English, Macedonian, Russian, Serbo-Croat and Ukranian.
- ISO 8859-6: Latin/Arabic - Arabic.
- ISO 8859-7: Latin/Greek - Greek.
- ISO 8859-8: Latin/Hebrew - Hebrew.
- ISO 8859-9: Latin 5 - Danish, Dutch, English, Finnish, French, German, Irish, Italian,
+ ISO-8859-4: Latin 4 - Danish, English, Estonian, Finnish, German, Greenlandic, Lappish and Latvian.
+ ISO-8859-5: Latin/Cyrillic - Bulgarian, Byelorussian, English, Macedonian, Russian, Serbo-Croat and Ukranian.
+ ISO-8859-6: Latin/Arabic - Arabic.
+ ISO-8859-7: Latin/Greek - Greek.
+ ISO-8859-8: Latin/Hebrew - Hebrew.
+ ISO-8859-9: Latin 5 - Danish, Dutch, English, Finnish, French, German, Irish, Italian,
Norwegian, Portuguese, Spanish, Swedish and Turkish.
- ISO 8859-10: Latin 6 - Danish, English, Estonian, Finnish, German, Greenlandic, Icelandic,
+ ISO-8859-10: Latin 6 - Danish, English, Estonian, Finnish, German, Greenlandic, Icelandic,
Sami (Lappish), Latvian, Lithuanian, Norwegian, Faroese and Swedish.
[author:]
Claus Gittinger
@@ -1427,7 +1427,7 @@
decodingError
"report an error that there is no unicode-codePoint for a given codePoint in this encoding.
(which is unlikely) or that the encoding is undefined for that value
- (for example, holes in the ISO8859-3 encoding)"
+ (for example, holes in the ISO-8859-3 encoding)"
|badCodePoint sender|
--- a/CharacterEncoderError.st Thu Jun 30 21:11:02 2016 +0100
+++ b/CharacterEncoderError.st Thu Jun 30 21:12:35 2016 +0100
@@ -40,7 +40,7 @@
"
raised if no encoding/decoding exists for some codePoint
while converting
- (for example, when converting unicode to iso8859-x and vice versa).
+ (for example, when converting unicode to ISO-8859-x and vice versa).
"
! !
@@ -69,6 +69,6 @@
!CharacterEncoderError class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoderError.st,v 1.10 2014-12-30 12:39:44 cg Exp $'
+ ^ '$Header$'
! !
--- a/ExternalStream.st Thu Jun 30 21:11:02 2016 +0100
+++ b/ExternalStream.st Thu Jun 30 21:12:35 2016 +0100
@@ -3067,7 +3067,7 @@
}
if (__INST(handleType) == @symbol(socketHandle)) {
- fd = __FILEVal(fp);
+ fd = (int)((SOCKET)(__FILEVal(fp)));
} else
if ((__INST(handleType) == nil)
|| (__INST(handleType) == @symbol(filePointer))
@@ -4690,7 +4690,7 @@
}
if (__INST(handleType) == @symbol(socketHandle)) {
- SOCKET sock = __FILEVal(fp);
+ SOCKET sock = (SOCKET)(__FILEVal(fp));
if (@global(FileOpenTrace) == true) {
fprintf(stderr, "close socket [ExternalStream] %"_lx_"\n", (INT)sock);
@@ -6305,7 +6305,7 @@
}
RETURN (self);
}
- fprintf(stderr, "cnt=%d len=%d\n", cnt, len);
+ fprintf(stderr, "cnt=%"_ld_" len=%"_ld_"\n", (INT)cnt, (INT)len);
error = __mkSmallInteger(__threadErrno);
}
}
--- a/Float.st Thu Jun 30 21:11:02 2016 +0100
+++ b/Float.st Thu Jun 30 21:12:35 2016 +0100
@@ -496,7 +496,6 @@
^ Epsilon
! !
-
!Float class methodsFor:'binary storage'!
readBinaryIEEEDoubleFrom:aStream
@@ -2342,7 +2341,8 @@
frac = frexp(__floatVal(self), &exp);
RETURN (__MKFLOAT(frac));
%}.
-
+ ^ super mantissa
+
"
1.0 exponent
1.0 mantissa
--- a/FolderForProjectsDefinition.st Thu Jun 30 21:11:02 2016 +0100
+++ b/FolderForProjectsDefinition.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 2014 by eXept Software AG
All Rights Reserved
@@ -11,6 +13,8 @@
"
"{ Package: 'stx:libbasic' }"
+"{ NameSpace: Smalltalk }"
+
ProjectDefinition subclass:#FolderForProjectsDefinition
instanceVariableNames:''
classVariableNames:''
@@ -127,7 +131,7 @@
$(TOP)\goodies\builder\reports\report-runner.bat -D . -r Builder::TestReport -p $(PACKAGE)
clean::
- del *.$(CSUFFIX)
+ -del *.$(CSUFFIX)
%(ADDITIONAL_RULES_HG)'
!
@@ -282,10 +286,10 @@
!FolderForProjectsDefinition class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/FolderForProjectsDefinition.st,v 1.3 2014-12-19 14:24:05 cg Exp $'
+ ^ '$Header$'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/FolderForProjectsDefinition.st,v 1.3 2014-12-19 14:24:05 cg Exp $'
+ ^ '$Header$'
! !
--- a/HandleRegistry.st Thu Jun 30 21:11:02 2016 +0100
+++ b/HandleRegistry.st Thu Jun 30 21:12:35 2016 +0100
@@ -11,6 +11,8 @@
"
"{ Package: 'stx:libbasic' }"
+"{ NameSpace: Smalltalk }"
+
Registry subclass:#HandleRegistry
instanceVariableNames:''
classVariableNames:''
@@ -72,7 +74,7 @@
!HandleRegistry class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/HandleRegistry.st,v 1.9 2002/03/04 19:15:09 stefan Exp $'
+ ^ '$Header$'
!
version_SVN
--- a/IdentityDictionary.st Thu Jun 30 21:11:02 2016 +0100
+++ b/IdentityDictionary.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 1992 by Claus Gittinger
All Rights Reserved
@@ -98,7 +100,7 @@
[
probe := keyArray basicAt:index.
- probe == key ifTrue:[^ index]. "<<<< == is different from inherited"
+ probe == key ifTrue:[^ index]. "<--- == is different from inherited"
probe isNil ifTrue:[^ aBlock value].
index == length ifTrue:[
@@ -130,17 +132,15 @@
[
probe := keyArray basicAt:index.
- key == probe ifTrue:[^ index]. "<<<< == is different from inherited"
+ key == probe ifTrue:[^ index]. "<--- == is different from inherited"
probe isNil ifTrue:[
delIndex == 0 ifTrue:[^ index].
keyArray basicAt:delIndex put:nil.
^ delIndex
].
- probe == DeletedEntry ifTrue:[
- delIndex == 0 ifTrue:[
- delIndex := index
- ]
+ (delIndex == 0 and:[probe == DeletedEntry]) ifTrue:[
+ delIndex := index
].
index == length ifTrue:[
@@ -153,7 +153,9 @@
keyArray basicAt:delIndex put:nil.
^ delIndex
].
- ^ self grow findKeyOrNil:key
+ self grow.
+ length := keyArray basicSize.
+ startIndex := index := self initialIndexForKey:key.
].
] loop.
--- a/ImmutableString.st Thu Jun 30 21:11:02 2016 +0100
+++ b/ImmutableString.st Thu Jun 30 21:12:35 2016 +0100
@@ -129,6 +129,46 @@
!ImmutableString methodsFor:'copying'!
+copy
+ "return a copy of the receiver"
+
+ ^ self copyFrom:1
+
+ "
+ 'abcd' asImmutableString copy
+ "
+!
+
+deepCopy
+ "when copying, return a real (mutable) String"
+
+ (self class == ImmutableString) ifTrue:[
+ ^ self copyFrom:1
+ ].
+ ^ super deepCopy
+
+ "
+ 'hello world' asImmutableString deepCopy
+ "
+!
+
+deepCopyUsing:aDictionary postCopySelector:postCopySelector
+ "return a deep copy of the receiver - reimplemented to be a bit faster"
+
+ "
+ could be an instance of a subclass which needs deepCopy
+ of its named instvars ...
+ "
+ (self class == ImmutableString) ifTrue:[
+ ^ self copyFrom:1
+ ].
+ ^ super deepCopyUsing:aDictionary postCopySelector:postCopySelector
+
+ "
+ 'hello world' asImmutableString deepCopyUsing:nil postCopySelector:nil
+ "
+!
+
postCopy
"when copied, make me a real (mutable) String"
@@ -152,16 +192,29 @@
shallowCopy
"when copying, return a real (mutable) String"
- |sz|
-
- sz := self size.
- ^ (String new:sz) replaceFrom:1 to:sz with:self startingAt:1
+ (self class == ImmutableString) ifTrue:[
+ ^ self copyFrom:1
+ ].
+ ^ super shallowCopy
"
'hello world' asImmutableString shallowCopy
"
"Created: / 3.8.1998 / 14:47:00 / cg"
+!
+
+simpleDeepCopy
+ "when copying, return a real (mutable) String"
+
+ (self class == ImmutableString) ifTrue:[
+ ^ self copyFrom:1
+ ].
+ ^ super simpleDeepCopy
+
+ "
+ 'hello world' asImmutableString simpleDeepCopy
+ "
! !
!ImmutableString methodsFor:'private'!
--- a/LibraryDefinition.st Thu Jun 30 21:11:02 2016 +0100
+++ b/LibraryDefinition.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 2006-2013 by eXept Software AG
All Rights Reserved
@@ -121,7 +123,7 @@
bc_dot_mak_mappings
|d resFileName|
- resFileName := (self package copyFrom:(self package lastIndexOfAny:':/')+1),'.$(RES)'.
+ resFileName := self resourceFilename. "/ (self package copyFrom:(self package lastIndexOfAny:':/')+1),'.$(RES)'.
d := super bc_dot_mak_mappings.
^ d
@@ -338,7 +340,7 @@
$(TOP)\goodies\builder\reports\report-runner.bat -D . -r Builder::TestReport -p $(PACKAGE)
clean::
- del *.$(CSUFFIX)
+ -del *.$(CSUFFIX)
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
--- a/LinkedList.st Thu Jun 30 21:11:02 2016 +0100
+++ b/LinkedList.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
@@ -164,7 +166,7 @@
^ self at:index ifAbsent:[ self subscriptBoundsError:index]
!
-at:index ifAbsent:exceptionBlock
+at:index ifAbsent:exceptionValue
"return the n'th value - use of this method should be avoided,
since it is slow to walk through the list - think about using
another collection if you need indexed access.
@@ -176,16 +178,9 @@
This method is provided for protocol completeness,
but please consider using another type of collection if you use it"
- |theLink
- runIndex "{Class: SmallInteger}"|
+ |theLink|
- theLink := firstLink.
- runIndex := 1.
- [runIndex == index] whileFalse:[
- theLink isNil ifTrue:[^ exceptionBlock value].
- theLink := theLink nextLink.
- runIndex := runIndex + 1.
- ].
+ theLink := self linkAt:index ifAbsent:[^ exceptionValue value].
^ theLink value
!
@@ -439,15 +434,13 @@
!LinkedList methodsFor:'enumerating'!
do:aBlock
- "evaluate the argument, aBlock with 1 arg for every link element in the list"
+ "evaluate the argument, aBlock with 1 arg for every value element in the list"
|thisNode|
- self obsoleteFeatureWarning:'this will soon change to enumerate the link values instead of the link itself'.
-
thisNode := firstLink.
[thisNode notNil] whileTrue:[
- aBlock value:thisNode "value".
+ aBlock value:thisNode value.
thisNode := thisNode nextLink
]
!
--- a/Make.proto Thu Jun 30 21:11:02 2016 +0100
+++ b/Make.proto Thu Jun 30 21:12:35 2016 +0100
@@ -186,7 +186,6 @@
$(OUTDIR)ProjectDefinition.$(O) ProjectDefinition.$(C) ProjectDefinition.$(H): ProjectDefinition.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)ReadEvalPrintLoop.$(O) ReadEvalPrintLoop.$(C) ReadEvalPrintLoop.$(H): ReadEvalPrintLoop.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)RecursionLock.$(O) RecursionLock.$(C) RecursionLock.$(H): RecursionLock.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)Registry.$(O) Registry.$(C) Registry.$(H): Registry.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Semaphore.$(O) Semaphore.$(C) Semaphore.$(H): Semaphore.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)SharedPool.$(O) SharedPool.$(C) SharedPool.$(H): SharedPool.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Signal.$(O) Signal.$(C) Signal.$(H): Signal.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -205,7 +204,6 @@
$(OUTDIR)Bag.$(O) Bag.$(C) Bag.$(H): Bag.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)BlockContext.$(O) BlockContext.$(C) BlockContext.$(H): BlockContext.st $(INCLUDE_TOP)/stx/libbasic/Context.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)BuiltinLookup.$(O) BuiltinLookup.$(C) BuiltinLookup.$(H): BuiltinLookup.st $(INCLUDE_TOP)/stx/libbasic/Lookup.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)CachingRegistry.$(O) CachingRegistry.$(C) CachingRegistry.$(H): CachingRegistry.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Registry.$(H) $(STCHDR)
$(OUTDIR)Character.$(O) Character.$(C) Character.$(H): Character.st $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)CharacterEncoderImplementations__ISO10646_1.$(O) CharacterEncoderImplementations__ISO10646_1.$(C) CharacterEncoderImplementations__ISO10646_1.$(H): CharacterEncoderImplementations__ISO10646_1.st $(INCLUDE_TOP)/stx/libbasic/CharacterEncoder.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)CharacterEncoderImplementations__SingleByteEncoder.$(O) CharacterEncoderImplementations__SingleByteEncoder.$(C) CharacterEncoderImplementations__SingleByteEncoder.$(H): CharacterEncoderImplementations__SingleByteEncoder.st $(INCLUDE_TOP)/stx/libbasic/CharacterEncoder.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -217,7 +215,6 @@
$(OUTDIR)ExternalFunction.$(O) ExternalFunction.$(C) ExternalFunction.$(H): ExternalFunction.st $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)False.$(O) False.$(C) False.$(H): False.st $(INCLUDE_TOP)/stx/libbasic/Boolean.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)FolderForProjectsDefinition.$(O) FolderForProjectsDefinition.$(C) FolderForProjectsDefinition.$(H): FolderForProjectsDefinition.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
-$(OUTDIR)HandleRegistry.$(O) HandleRegistry.$(C) HandleRegistry.$(H): HandleRegistry.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Registry.$(H) $(STCHDR)
$(OUTDIR)HashStream.$(O) HashStream.$(C) HashStream.$(H): HashStream.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Stream.$(H) $(STCHDR)
$(OUTDIR)InlineObjectPrototype.$(O) InlineObjectPrototype.$(C) InlineObjectPrototype.$(H): InlineObjectPrototype.st $(INCLUDE_TOP)/stx/libbasic/InlineObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)JavaPackage.$(O) JavaPackage.$(C) JavaPackage.$(H): JavaPackage.st $(INCLUDE_TOP)/stx/libbasic/NameSpace.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -455,6 +452,7 @@
$(OUTDIR)PrimitiveFailure.$(O) PrimitiveFailure.$(C) PrimitiveFailure.$(H): PrimitiveFailure.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutionError.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
$(OUTDIR)RangeError.$(O) RangeError.$(C) RangeError.$(H): RangeError.st $(INCLUDE_TOP)/stx/libbasic/ArithmeticError.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
$(OUTDIR)ReadError.$(O) ReadError.$(C) ReadError.$(H): ReadError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/StreamError.$(H) $(STCHDR)
+$(OUTDIR)Registry.$(O) Registry.$(C) Registry.$(H): Registry.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/WeakIdentityDictionary.$(H) $(STCHDR)
$(OUTDIR)SignedByteArray.$(O) SignedByteArray.$(C) SignedByteArray.$(H): SignedByteArray.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/ByteArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
$(OUTDIR)StreamIOError.$(O) StreamIOError.$(C) StreamIOError.$(H): StreamIOError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/StreamError.$(H) $(STCHDR)
$(OUTDIR)StreamNotOpenError.$(O) StreamNotOpenError.$(C) StreamNotOpenError.$(H): StreamNotOpenError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/StreamError.$(H) $(STCHDR)
@@ -468,10 +466,12 @@
$(OUTDIR)WrongProceedabilityError.$(O) WrongProceedabilityError.$(C) WrongProceedabilityError.$(H): WrongProceedabilityError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/SignalError.$(H) $(STCHDR)
$(OUTDIR)AbstractClassInstantiationError.$(O) AbstractClassInstantiationError.$(C) AbstractClassInstantiationError.$(H): AbstractClassInstantiationError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutionError.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/MethodNotAppropriateError.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
$(OUTDIR)BadLiteralsError.$(O) BadLiteralsError.$(C) BadLiteralsError.$(H): BadLiteralsError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutionError.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/InvalidCodeError.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
+$(OUTDIR)CachingRegistry.$(O) CachingRegistry.$(C) CachingRegistry.$(H): CachingRegistry.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Registry.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/WeakIdentityDictionary.$(H) $(STCHDR)
$(OUTDIR)DecodingError.$(O) DecodingError.$(C) DecodingError.$(H): DecodingError.st $(INCLUDE_TOP)/stx/libbasic/CharacterEncoderError.$(H) $(INCLUDE_TOP)/stx/libbasic/ConversionError.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
$(OUTDIR)EncodingError.$(O) EncodingError.$(C) EncodingError.$(H): EncodingError.st $(INCLUDE_TOP)/stx/libbasic/CharacterEncoderError.$(H) $(INCLUDE_TOP)/stx/libbasic/ConversionError.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
$(OUTDIR)FileDoesNotExistException.$(O) FileDoesNotExistException.$(C) FileDoesNotExistException.$(H): FileDoesNotExistException.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/OpenError.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(INCLUDE_TOP)/stx/libbasic/StreamError.$(H) $(STCHDR)
$(OUTDIR)FileStream.$(O) FileStream.$(C) FileStream.$(H): FileStream.st $(INCLUDE_TOP)/stx/libbasic/ExternalStream.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/PeekableStream.$(H) $(INCLUDE_TOP)/stx/libbasic/PositionableStream.$(H) $(INCLUDE_TOP)/stx/libbasic/ReadWriteStream.$(H) $(INCLUDE_TOP)/stx/libbasic/Stream.$(H) $(INCLUDE_TOP)/stx/libbasic/WriteStream.$(H) $(STCHDR)
+$(OUTDIR)HandleRegistry.$(O) HandleRegistry.$(C) HandleRegistry.$(H): HandleRegistry.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Registry.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/WeakIdentityDictionary.$(H) $(STCHDR)
$(OUTDIR)ImmutableString.$(O) ImmutableString.$(C) ImmutableString.$(H): ImmutableString.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/CharacterArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/String.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
$(OUTDIR)InvalidByteCodeError.$(O) InvalidByteCodeError.$(C) InvalidByteCodeError.$(H): InvalidByteCodeError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutionError.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/InvalidCodeError.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
$(OUTDIR)InvalidInstructionError.$(O) InvalidInstructionError.$(C) InvalidInstructionError.$(H): InvalidInstructionError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutionError.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/InvalidCodeError.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(STCHDR)
--- a/Make.spec Thu Jun 30 21:11:02 2016 +0100
+++ b/Make.spec Thu Jun 30 21:12:35 2016 +0100
@@ -96,7 +96,6 @@
ProjectDefinition \
ReadEvalPrintLoop \
RecursionLock \
- Registry \
Semaphore \
SharedPool \
Signal \
@@ -115,7 +114,6 @@
Bag \
BlockContext \
BuiltinLookup \
- CachingRegistry \
Character \
CharacterEncoderImplementations::ISO10646_1 \
CharacterEncoderImplementations::SingleByteEncoder \
@@ -127,7 +125,6 @@
ExternalFunction \
False \
FolderForProjectsDefinition \
- HandleRegistry \
HashStream \
InlineObjectPrototype \
JavaPackage \
@@ -365,6 +362,7 @@
PrimitiveFailure \
RangeError \
ReadError \
+ Registry \
SignedByteArray \
StreamIOError \
StreamNotOpenError \
@@ -378,10 +376,12 @@
WrongProceedabilityError \
AbstractClassInstantiationError \
BadLiteralsError \
+ CachingRegistry \
DecodingError \
EncodingError \
FileDoesNotExistException \
FileStream \
+ HandleRegistry \
ImmutableString \
InvalidByteCodeError \
InvalidInstructionError \
@@ -474,7 +474,6 @@
$(OUTDIR_SLASH)ProjectDefinition.$(O) \
$(OUTDIR_SLASH)ReadEvalPrintLoop.$(O) \
$(OUTDIR_SLASH)RecursionLock.$(O) \
- $(OUTDIR_SLASH)Registry.$(O) \
$(OUTDIR_SLASH)Semaphore.$(O) \
$(OUTDIR_SLASH)SharedPool.$(O) \
$(OUTDIR_SLASH)Signal.$(O) \
@@ -493,7 +492,6 @@
$(OUTDIR_SLASH)Bag.$(O) \
$(OUTDIR_SLASH)BlockContext.$(O) \
$(OUTDIR_SLASH)BuiltinLookup.$(O) \
- $(OUTDIR_SLASH)CachingRegistry.$(O) \
$(OUTDIR_SLASH)Character.$(O) \
$(OUTDIR_SLASH)CharacterEncoderImplementations__ISO10646_1.$(O) \
$(OUTDIR_SLASH)CharacterEncoderImplementations__SingleByteEncoder.$(O) \
@@ -505,7 +503,6 @@
$(OUTDIR_SLASH)ExternalFunction.$(O) \
$(OUTDIR_SLASH)False.$(O) \
$(OUTDIR_SLASH)FolderForProjectsDefinition.$(O) \
- $(OUTDIR_SLASH)HandleRegistry.$(O) \
$(OUTDIR_SLASH)HashStream.$(O) \
$(OUTDIR_SLASH)InlineObjectPrototype.$(O) \
$(OUTDIR_SLASH)JavaPackage.$(O) \
@@ -743,6 +740,7 @@
$(OUTDIR_SLASH)PrimitiveFailure.$(O) \
$(OUTDIR_SLASH)RangeError.$(O) \
$(OUTDIR_SLASH)ReadError.$(O) \
+ $(OUTDIR_SLASH)Registry.$(O) \
$(OUTDIR_SLASH)SignedByteArray.$(O) \
$(OUTDIR_SLASH)StreamIOError.$(O) \
$(OUTDIR_SLASH)StreamNotOpenError.$(O) \
@@ -756,10 +754,12 @@
$(OUTDIR_SLASH)WrongProceedabilityError.$(O) \
$(OUTDIR_SLASH)AbstractClassInstantiationError.$(O) \
$(OUTDIR_SLASH)BadLiteralsError.$(O) \
+ $(OUTDIR_SLASH)CachingRegistry.$(O) \
$(OUTDIR_SLASH)DecodingError.$(O) \
$(OUTDIR_SLASH)EncodingError.$(O) \
$(OUTDIR_SLASH)FileDoesNotExistException.$(O) \
$(OUTDIR_SLASH)FileStream.$(O) \
+ $(OUTDIR_SLASH)HandleRegistry.$(O) \
$(OUTDIR_SLASH)ImmutableString.$(O) \
$(OUTDIR_SLASH)InvalidByteCodeError.$(O) \
$(OUTDIR_SLASH)InvalidInstructionError.$(O) \
--- a/Method.st Thu Jun 30 21:11:02 2016 +0100
+++ b/Method.st Thu Jun 30 21:12:35 2016 +0100
@@ -193,18 +193,17 @@
"create signals"
PrivateMethodSignal isNil ifTrue:[
- "EXPERIMENTAL"
- PrivateMethodSignal := ExecutionError newSignalMayProceed:true.
- PrivateMethodSignal nameClass:self message:#privateMethodSignal.
- PrivateMethodSignal notifierString:'attempt to execute private/protected method'.
+ "EXPERIMENTAL"
+ PrivateMethodSignal := ExecutionError newSignalMayProceed:true.
+ PrivateMethodSignal nameClass:self message:#privateMethodSignal.
+ PrivateMethodSignal notifierString:'attempt to execute private/protected method'.
].
LastFileLock isNil ifTrue:[
- LastFileLock := RecursionLock new name:'Method-LastFile'.
- LastMethodSourcesLock := RecursionLock new name:'Method-LastMethodSources'.
-
- LastFileReference := WeakArray new:1.
- LastFileReference at:1 put:nil.
+ LastFileLock := RecursionLock new name:'Method-LastFile'.
+ LastMethodSourcesLock := RecursionLock new name:'Method-LastMethodSources'.
+
+ LastFileReference := WeakArray new:1.
].
CompilationLock := RecursionLock new name:'MethodCompilation'.
@@ -332,8 +331,8 @@
flushSourceStreamCache
LastFileLock critical:[
- LastSourceFileName := LastMethodSources := nil.
- LastFileReference at:1 put:0.
+ LastSourceFileName := LastMethodSources := nil.
+ LastFileReference at:1 put:nil.
].
"
@@ -686,21 +685,21 @@
overwrittenMethod
"Answers overridden method or nil."
-
- Overrides isNil ifTrue:[^ nil].
- ^ (Overrides includesKey: self)
- ifTrue:[Overrides at: self]
+
+ Overrides isNil ifTrue:[
+ ^ nil
+ ].
+ ^ Overrides at:self ifAbsent:nil.
"Created: / 05-07-2012 / 10:49:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
overwrittenMethod: aMethod
-
"Set overridden method to aMethod"
Overrides isNil ifTrue:[Overrides := WeakIdentityDictionary new:10].
aMethod notNil ifTrue:[aMethod makeLocalStringSource].
- Overrides at: self put: aMethod
+ Overrides at:self put:aMethod
"Created: / 05-07-2012 / 10:50:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
@@ -806,76 +805,78 @@
sourcePosition isNil ifTrue:[^ source].
source isNil ifTrue:[^ nil].
- self class lastMethodSourcesLock critical:[
- LastMethodSources notNil ifTrue:[
- chunk := LastMethodSources at:self ifAbsent:nil.
- ].
- ].
- chunk notNil ifTrue:[
- ^ chunk
+ LastMethodSources notNil ifTrue:[
+ self class lastMethodSourcesLock critical:[
+ LastMethodSources notNil ifTrue:[
+ chunk := LastMethodSources at:self ifAbsent:nil.
+ ].
+ ].
+ chunk notNil ifTrue:[
+ ^ chunk
+ ].
].
LastFileLock
- critical:[
- "have to protect sourceStream from being closed as a side effect
- of some other process fetching some the source from a different source file"
-
- sourceStream := self sourceStreamUsingCache:true.
- sourceStream notNil ifTrue:[
- [
- chunk := self sourceChunkFromStream:sourceStream.
- ] on:DecodingError do:[:ex|
- "CharacterEncoder>>#guessEncoding is not fail safe - retry with plain unencoded data"
-
- ('DecodingError ignored when reading <1p> (<2p>)' expandMacrosWith:self whoString with:ex description) infoPrintCR.
- sourceStream := self rawSourceStreamUsingCache:true.
- ex restart.
- ].
- ].
- ]
- timeoutMs:100
- ifBlocking:[
- "take care if LastFileLock is not available - maybe we are
- called by a debugger while someone holds the lock.
- Use uncached source streams"
- sourceStream := self sourceStreamUsingCache:false.
- sourceStream notNil ifTrue:[
- [
- chunk := self sourceChunkFromStream:sourceStream.
- sourceStream close.
- ] on:DecodingError do:[:ex|
- "CharacterEncoder>>#guessEncoding is not fail safe - retry with plain unencoded data"
- ('DecodingError ignored when reading <1p> (<2p>)' expandMacrosWith:self whoString with:ex description) infoPrintCR.
- sourceStream close.
- sourceStream := self rawSourceStreamUsingCache:false.
- ex restart.
- ].
- ].
- ].
+ critical:[
+ "have to protect sourceStream from being closed as a side effect
+ of some other process fetching some the source from a different source file"
+
+ sourceStream := self sourceStreamUsingCache:true.
+ sourceStream notNil ifTrue:[
+ [
+ chunk := self sourceChunkFromStream:sourceStream.
+ ] on:DecodingError do:[:ex|
+ "CharacterEncoder>>#guessEncoding is not fail safe - retry with plain unencoded data"
+
+ Logger info:'DecodingError ignored when reading %1 (%2)' with:self whoString with:ex description.
+ sourceStream := self rawSourceStreamUsingCache:true.
+ ex restart.
+ ].
+ ].
+ ]
+ timeoutMs:100
+ ifBlocking:[
+ "take care if LastFileLock is not available - maybe we are
+ called by a debugger while someone holds the lock.
+ Use uncached source streams"
+ sourceStream := self sourceStreamUsingCache:false.
+ sourceStream notNil ifTrue:[
+ [
+ chunk := self sourceChunkFromStream:sourceStream.
+ sourceStream close.
+ ] on:DecodingError do:[:ex|
+ "CharacterEncoder>>#guessEncoding is not fail safe - retry with plain unencoded data"
+ Logger info:'DecodingError ignored when reading %1 (%2)' with:self whoString with:ex description.
+ sourceStream close.
+ sourceStream := self rawSourceStreamUsingCache:false.
+ ex restart.
+ ].
+ ].
+ ].
"Cache the source of recently used methods"
chunk notNil ifTrue:[
- "JV@2013-08-19: Don't consult UserPreferences if the system is initilizing. This may
- lead in funny side-effect as #initializeDefaultPreferences is called which tries to
- initialize some colors. But Color itsels is likely not yet initialized, so DNU is
- thrown.
- CG: also care for standalone non-GUI progs, which have no userPreferences class"
- (Smalltalk isInitialized
- and:[UserPreferences notNil
- and:[UserPreferences current keepMethodSourceCode]]) ifTrue:[
- source := chunk.
- sourcePosition := nil.
- ^ source.
- ].
-
- CacheDictionary notNil ifTrue:[
- self class lastMethodSourcesLock critical:[
- LastMethodSources isNil ifTrue:[
- LastMethodSources := CacheDictionary new:50.
- ].
- LastMethodSources at:self put:chunk.
- ]
- ].
+ "JV@2013-08-19: Don't consult UserPreferences if the system is initializing. This may
+ lead in funny side-effect as #initializeDefaultPreferences is called which tries to
+ initialize some colors. But Color itself is likely not yet initialized, so DNU is
+ thrown.
+ CG: also care for standalone non-GUI progs, which have no userPreferences class"
+ (Smalltalk isInitialized
+ and:[UserPreferences notNil
+ and:[UserPreferences current keepMethodSourceCode]]) ifTrue:[
+ source := chunk.
+ sourcePosition := nil.
+ ^ source.
+ ].
+
+ CacheDictionary notNil ifTrue:[
+ self class lastMethodSourcesLock critical:[
+ LastMethodSources isNil ifTrue:[
+ LastMethodSources := CacheDictionary new:50.
+ ].
+ LastMethodSources at:self put:chunk.
+ ]
+ ].
].
^ chunk
@@ -1057,7 +1058,6 @@
"Modified (format): / 18-11-2011 / 14:47:06 / cg"
! !
-
!Method methodsFor:'accessing-visibility'!
isIgnored
@@ -2168,30 +2168,31 @@
sourcePosition isNil ifTrue:[^ source readStream].
usingCacheBoolean ifTrue:[
- (package notNil and:[package ~= PackageId noProjectID]) ifTrue:[
- "/ keep the last source file open, because open/close
- "/ operations maybe slow on NFS-mounted file systems.
- "/ Since the reference to the file is weak, it will be closed
- "/ automatically if the file is not referenced for a while.
- "/ Neat trick.
-
- LastFileLock critical:[
- aStream := LastFileReference at:1.
- (aStream isNil
- or:[aStream class == SmallInteger
- or:[aStream isOpen not]]) ifTrue:[
- aStream := nil.
- LastFileReference at:1 put:nil.
- ].
- (aStream notNil and:[LastSourceFileName ~= (package,'/',source)]) ifTrue:[
- aStream := nil.
- ].
- ].
-
- aStream notNil ifTrue:[
- ^ aStream
- ].
- ].
+ (package notNil and:[package ~= PackageId noProjectID]) ifTrue:[
+ "/ keep the last source file open, because open/close
+ "/ operations maybe slow on NFS-mounted file systems.
+ "/ Since the reference to the file is weak, it will be closed
+ "/ automatically if the file is not referenced for a while.
+ "/ Neat trick.
+
+ LastFileLock critical:[
+ aStream := LastFileReference at:1.
+ (aStream isNil
+ or:[aStream class == SmallInteger
+ or:[aStream isOpen not]]) ifTrue:[
+ aStream := nil.
+ LastFileReference at:1 put:nil.
+ ].
+ (aStream notNil
+ and:[LastSourceFileName ~= (package,'/',source)]) ifTrue:[
+ aStream := nil.
+ ].
+ ].
+
+ aStream notNil ifTrue:[
+ ^ aStream
+ ].
+ ].
].
"/ a negative sourcePosition indicates
@@ -2202,47 +2203,47 @@
"/ and having a clue for which file is meant later.
sourcePosition < 0 ifTrue:[
- aStream := source asFilename readStreamOrNil.
- aStream isNil ifTrue:[
- "/ search in some standard places
- fileName := Smalltalk getSourceFileName:source.
- fileName notNil ifTrue:[
- aStream := fileName asFilename readStreamOrNil.
- ].
- ].
- aStream notNil ifTrue:[
- usingCacheBoolean ifTrue:[
- self cacheSourceStream:aStream.
- ].
- ^ aStream
- ].
+ aStream := source asFilename readStreamOrNil.
+ aStream isNil ifTrue:[
+ "/ search in some standard places
+ fileName := Smalltalk getSourceFileName:source.
+ fileName notNil ifTrue:[
+ aStream := fileName asFilename readStreamOrNil.
+ ].
+ ].
+ aStream notNil ifTrue:[
+ usingCacheBoolean ifTrue:[
+ self cacheSourceStream:aStream.
+ ].
+ ^ aStream
+ ].
].
"/
"/ if there is no SourceManager, look in local standard places first
"/
(mclass notNil and:[package == mclass package]) ifTrue:[
- mgr := mclass sourceCodeManagerFromBinaryRevision
+ mgr := mclass sourceCodeManagerFromBinaryRevision
] ifFalse:[
- "I'm an extension and we don't have binary revision info (!!)
- for extensions, try to guess here"
- pkgDef := ProjectDefinition definitionClassForPackage: package.
- pkgDef notNil ifTrue:[
- mgr := pkgDef sourceCodeManagerFromBinaryRevision
- ] ifFalse:[
- "OK, trust the configuration"
- mgr := AbstractSourceCodeManager managerForPackage: package
- ]
+ "I'm an extension and we don't have binary revision info (!!)
+ for extensions, try to guess here"
+ pkgDef := ProjectDefinition definitionClassForPackage: package.
+ pkgDef notNil ifTrue:[
+ mgr := pkgDef sourceCodeManagerFromBinaryRevision
+ ] ifFalse:[
+ "OK, trust the configuration"
+ mgr := AbstractSourceCodeManager managerForPackage: package
+ ]
].
(Class tryLocalSourceFirst or:[mgr isNil]) ifTrue:[
- aStream := self localSourceStream.
- aStream notNil ifTrue:[
- usingCacheBoolean ifTrue:[
- self cacheSourceStream:aStream.
- ].
- ^ aStream
- ].
+ aStream := self localSourceStream.
+ aStream notNil ifTrue:[
+ usingCacheBoolean ifTrue:[
+ self cacheSourceStream:aStream.
+ ].
+ ^ aStream
+ ].
].
"/
@@ -2250,39 +2251,39 @@
"/
who := self who.
who notNil ifTrue:[
- myClass := who methodClass.
-
- (package notNil and:[package ~= myClass package and:[package ~= #'__NoProject__']]) ifTrue:[
- "/ I am an extension
- mgr notNil ifTrue:[
- "/ try to get the source using my package information ...
- mod := package asPackageId module.
- dir := package asPackageId directory.
- aStream := mgr streamForExtensionFile:source package:package directory:dir module:mod cache:true.
- aStream notNil ifTrue:[
- usingCacheBoolean ifTrue:[
- self cacheSourceStream:aStream.
- ].
- ^ aStream
- ].
- ].
- "/ consult the local fileSystem
- aStream := self localSourceStream.
- aStream notNil ifTrue:[
- usingCacheBoolean ifTrue:[
- self cacheSourceStream:aStream.
- ].
- ^ aStream
- ]
- ].
-
- aStream := myClass sourceStreamFor:source.
- aStream notNil ifTrue:[
- usingCacheBoolean ifTrue:[
- self cacheSourceStream:aStream.
- ].
- ^ aStream
- ].
+ myClass := who methodClass.
+
+ (package notNil and:[package ~= myClass package and:[package ~= #'__NoProject__']]) ifTrue:[
+ "/ I am an extension
+ mgr notNil ifTrue:[
+ "/ try to get the source using my package information ...
+ mod := package asPackageId module.
+ dir := package asPackageId directory.
+ aStream := mgr streamForExtensionFile:source package:package directory:dir module:mod cache:true.
+ aStream notNil ifTrue:[
+ usingCacheBoolean ifTrue:[
+ self cacheSourceStream:aStream.
+ ].
+ ^ aStream
+ ].
+ ].
+ "/ consult the local fileSystem
+ aStream := self localSourceStream.
+ aStream notNil ifTrue:[
+ usingCacheBoolean ifTrue:[
+ self cacheSourceStream:aStream.
+ ].
+ ^ aStream
+ ]
+ ].
+
+ aStream := myClass sourceStreamFor:source.
+ aStream notNil ifTrue:[
+ usingCacheBoolean ifTrue:[
+ self cacheSourceStream:aStream.
+ ].
+ ^ aStream
+ ].
].
"/
@@ -2290,49 +2291,49 @@
"/ (if there is a source-code manager - otherwise, we already did that)
"/
(mgr notNil and:[Class tryLocalSourceFirst not]) ifTrue:[
- aStream := self localSourceStream.
- aStream notNil ifTrue:[
- usingCacheBoolean ifTrue:[
- self cacheSourceStream:aStream.
- ].
- ^ aStream
- ].
+ aStream := self localSourceStream.
+ aStream notNil ifTrue:[
+ usingCacheBoolean ifTrue:[
+ self cacheSourceStream:aStream.
+ ].
+ ^ aStream
+ ].
].
"/
"/ final chance: try current directory
"/
aStream isNil ifTrue:[
- aStream := source asFilename readStreamOrNil.
- aStream notNil ifTrue:[
- usingCacheBoolean ifTrue:[
- self cacheSourceStream:aStream.
- ].
- ^ aStream
- ].
+ aStream := source asFilename readStreamOrNil.
+ aStream notNil ifTrue:[
+ usingCacheBoolean ifTrue:[
+ self cacheSourceStream:aStream.
+ ].
+ ^ aStream
+ ].
].
(who isNil and:[source notNil]) ifTrue:[
- "/
- "/ mhmh - seems to be a method which used to be in some
- "/ class, but has been overwritten by another or removed.
- "/ (i.e. it has no containing class anyMore)
- "/ try to guess the class from the sourceFileName.
- "/ and retry.
- "/
- className := Smalltalk classNameForFile:source.
- (classNameSymbol := className asSymbolIfInterned) notNil ifTrue:[
- myClass := Smalltalk at:classNameSymbol ifAbsent:nil.
- myClass notNil ifTrue:[
- aStream := myClass sourceStreamFor:source.
- aStream notNil ifTrue:[
- usingCacheBoolean ifTrue:[
- self cacheSourceStream:aStream.
- ].
- ^ aStream
- ].
- ]
- ]
+ "/
+ "/ mhmh - seems to be a method which used to be in some
+ "/ class, but has been overwritten by another or removed.
+ "/ (i.e. it has no containing class anyMore)
+ "/ try to guess the class from the sourceFileName.
+ "/ and retry.
+ "/
+ className := Smalltalk classNameForFile:source.
+ (classNameSymbol := className asSymbolIfInterned) notNil ifTrue:[
+ myClass := Smalltalk at:classNameSymbol ifAbsent:nil.
+ myClass notNil ifTrue:[
+ aStream := myClass sourceStreamFor:source.
+ aStream notNil ifTrue:[
+ usingCacheBoolean ifTrue:[
+ self cacheSourceStream:aStream.
+ ].
+ ^ aStream
+ ].
+ ]
+ ]
].
^ nil
@@ -3050,14 +3051,16 @@
"Modified: / 05-07-2012 / 10:52:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-overwrites: aMethod
-
- | mth |
- mth := self overwrittenMethod.
- [ mth notNil ] whileTrue:
- [mth == aMethod ifTrue:[^true].
- mth := mth overwrittenMethod].
- ^false
+overwrites:aMethod
+ |mth|
+
+ mth := self.
+ [ mth := mth overwrittenMethod. mth notNil ] whileTrue:[
+ mth == aMethod ifTrue:[
+ ^ true
+ ].
+ ].
+ ^ false
"Created: / 05-07-2012 / 10:52:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
@@ -3725,7 +3728,6 @@
"Created: / 23-07-2012 / 11:16:36 / cg"
! !
-
!Method methodsFor:'source management'!
revisionInfo
--- a/Object.st Thu Jun 30 21:11:02 2016 +0100
+++ b/Object.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 1988 by Claus Gittinger
All Rights Reserved
@@ -14,21 +16,21 @@
"{ NameSpace: Smalltalk }"
nil subclass:#Object
- instanceVariableNames:''
- classVariableNames:'AbortAllSignal AbortSignal ActivityNotificationSignal
- DebuggerHooks DeepCopyErrorSignal Dependencies
- ElementOutOfBoundsSignal EnabledBreakPoints ErrorRecursion
- ErrorSignal FinalizationLobby HaltSignal IndexNotFoundSignal
- InfoPrinting InformationSignal InternalErrorSignal
- KeyNotFoundSignal MessageNotUnderstoodSignal
- NonIntegerIndexSignal NonWeakDependencies NotFoundSignal
- OSSignalInterruptSignal ObjectAttributes
- ObjectAttributesAccessLock PrimitiveFailureSignal
- RecursionInterruptSignal RecursiveStoreStringSignal
- SubscriptOutOfBoundsSignal SynchronizationSemaphores
- UserInterruptSignal UserNotificationSignal WarningSignal'
- poolDictionaries:''
- category:'Kernel-Objects'
+ instanceVariableNames:''
+ classVariableNames:'AbortAllSignal AbortSignal ActivityNotificationSignal
+ DebuggerHooks DeepCopyErrorSignal Dependencies
+ ElementOutOfBoundsSignal EnabledBreakPoints ErrorRecursion
+ ErrorSignal FinalizationLobby HaltSignal IndexNotFoundSignal
+ InfoPrinting InformationSignal InternalErrorSignal
+ KeyNotFoundSignal MessageNotUnderstoodSignal
+ NonIntegerIndexSignal NonWeakDependencies NotFoundSignal
+ OSSignalInterruptSignal ObjectAttributes
+ ObjectAttributesAccessLock PrimitiveFailureSignal
+ RecursionInterruptSignal RecursiveStoreStringSignal
+ SubscriptOutOfBoundsSignal SynchronizationSemaphores
+ UserInterruptSignal UserNotificationSignal WarningSignal'
+ poolDictionaries:''
+ category:'Kernel-Objects'
!
!Object class methodsFor:'documentation'!
@@ -256,6 +258,7 @@
"Modified: / 4.8.1999 / 08:54:06 / stefan"
! !
+
!Object class methodsFor:'Compatibility-ST80'!
rootError
@@ -494,6 +497,7 @@
InfoPrinting := aBoolean
! !
+
!Object class methodsFor:'queries'!
isAbstract
@@ -516,6 +520,8 @@
! !
+
+
!Object methodsFor:'Compatibility-Dolphin'!
stbFixup: anSTBInFiler at: newObjectIndex
@@ -691,6 +697,8 @@
"
! !
+
+
!Object methodsFor:'accessing'!
_at:index
@@ -2051,6 +2059,7 @@
^ aBlock ensure:[ self addDependent:someone ]
! !
+
!Object methodsFor:'comparing'!
= anObject
@@ -5492,10 +5501,10 @@
This is typically sent by the VM, when a ctrl-C is typed at the
controlling tty (i.e. in the xterm)."
- UserInterruptSignal raiseRequest
-!
-
-userInterruptIn:aContext
+ UserInterrupt raiseRequest
+!
+
+userInterruptIn:aContext from:originator
"{ Pragma: +optSpace }"
"user (^c) interrupt - enter debugger, but show aContext
@@ -5503,11 +5512,13 @@
This is used to hide any intermediate scheduler contexts,
in case of an interrupted process. Typically, this is sent by
the WindowGroup, when a keyboardEvent for the ctrl-C key is
- processed."
+ processed.
+ Set the originator to distinguish UserInterrupts from controlling tty vs.
+ UserInterrupt from a view."
<context: #return>
- UserInterruptSignal raiseRequestWith:nil errorString:nil in:aContext
+ UserInterrupt raiseRequestWith:originator errorString:nil in:aContext
"Created: / 18.10.1996 / 20:46:04 / cg"
"Modified: / 20.10.1996 / 13:06:38 / cg"
@@ -7990,6 +8001,7 @@
^ self
! !
+
!Object methodsFor:'secure message sending'!
?:selector
@@ -8595,6 +8607,7 @@
"
! !
+
!Object methodsFor:'synchronized evaluation'!
freeSynchronizationSemaphore
@@ -10359,6 +10372,8 @@
^ aVisitor visitObject:self with:aParameter
! !
+
+
!Object class methodsFor:'documentation'!
version
--- a/OrderedCollection.st Thu Jun 30 21:11:02 2016 +0100
+++ b/OrderedCollection.st Thu Jun 30 21:12:35 2016 +0100
@@ -221,7 +221,7 @@
!OrderedCollection class methodsFor:'initialization'!
initialize
- MinContentsArraySize := 3. "the minimum size of a non-empty contentsArray"
+ MinContentsArraySize := 4. "the minimum size of a non-empty contentsArray"
! !
!OrderedCollection class methodsFor:'instance creation'!
@@ -229,9 +229,6 @@
new
"create a new, empty OrderedCollection"
- MinContentsArraySize isNil ifTrue:[
- self initialize.
- ].
^ self basicNew initContents:0
"
@@ -262,13 +259,7 @@
See also newWithSize:, which might do what you really want.
"
- |sz|
-
- MinContentsArraySize isNil ifTrue:[
- self initialize.
- ].
- sz := size.
- ^ self basicNew initContents:sz
+ ^ self basicNew initContents:size
"Modified: 19.3.1996 / 17:53:47 / cg"
!
@@ -308,13 +299,10 @@
"create a new, empty OrderedCollection, for which we already know
that it is very likely to remain empty.
Use this for collections which may sometimes get elements added, but usually not.
- This creates an initial contents array of size 0 in contrast to the default new:0,
- which preserves space for 3 elements."
+ This is now obsolete and the same as new:
+ as the algorithm is now clever enough to deal efficiently with this situation"
- MinContentsArraySize isNil ifTrue:[
- self initialize.
- ].
- ^ self basicNew initContents:0
+ ^ self new:0
"
self newLikelyToRemainEmpty size
@@ -1359,17 +1347,16 @@
|newCollection|
newCollection := self copyEmpty:(self size + aCollection size).
- self do:[:element |
- newCollection add:element
- ].
- aCollection do:[:element |
- newCollection add:element
- ].
^ newCollection
+ addAll:self;
+ addAll:aCollection;
+ yourself.
"
#(1 2 3) asOrderedCollection , #(4 5 6) asOrderedCollection
- #(1 2 3) asSortedCollection , #(99 101 100) asSortedCollection
+ #(1 3 5) asSortedCollection , #(6 4 2) asSortedCollection
+ #(1 3 5) asSortedCollection , #(6 4 2) asOrderedCollection
+ #(1 3 5) asSortedCollection , (#(6 4 2) asSortedCollection:[:a :b| a > b])
"
"Modified (comment): / 01-04-2012 / 13:17:30 / cg"
@@ -1385,16 +1372,6 @@
^ self copyFrom:1 to:self size
!
-copyEmpty
- "return a copy of the receiver without any elements."
-
- ^ self copyEmpty:0
-
- "
- self new copyEmpty
- "
-!
-
postCopy
"have to copy the contentsArray too"
@@ -1722,7 +1699,7 @@
"setup the receiver-collection to hold size entries"
size == 0 ifTrue:[
- contentsArray := #(). "save garbage"
+ contentsArray := #(). "save memory by using a shared instance"
] ifFalse:[
contentsArray := Array basicNew:size.
].
--- a/PCFilename.st Thu Jun 30 21:11:02 2016 +0100
+++ b/PCFilename.st Thu Jun 30 21:12:35 2016 +0100
@@ -13,7 +13,7 @@
Filename subclass:#PCFilename
instanceVariableNames:''
- classVariableNames:'StandardSuffixTable'
+ classVariableNames:'StandardSuffixTable NextTempFilenameIndex'
poolDictionaries:''
category:'OS-Windows'
!
--- a/PipeStream.st Thu Jun 30 21:11:02 2016 +0100
+++ b/PipeStream.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
@@ -218,7 +220,7 @@
|p|
p := PipeStream bidirectionalFor:'cat -u'.
- p nextPutAll:'Wer ist der Bürgermeister von Wesel'; cr.
+ p nextPutAll:'Wer ist der Bürgermeister von Wesel'; cr.
Transcript showCR:p nextLine.
p close
"
@@ -486,14 +488,13 @@
shutDown
"close the Stream and terminate the command"
- self unregisterForFinalization
- "terminate first under windows".
+ self unregisterForFinalization.
"terminate first under windows"
OperatingSystem isMSDOSlike ifTrue:[
- self terminatePipeCommand.
- self closeFileDescriptor.
- ^ self.
+ self terminatePipeCommand.
+ self closeFileDescriptor.
+ ^ self.
].
"terminate last under unix"
--- a/ProjectDefinition.st Thu Jun 30 21:11:02 2016 +0100
+++ b/ProjectDefinition.st Thu Jun 30 21:12:35 2016 +0100
@@ -383,6 +383,27 @@
"Created: / 25-11-2011 / 14:34:01 / cg"
!
+fullPackageName
+ "all components with underlines"
+
+ ^ self fullPackageNameFor: self package
+
+ "
+ stx_libwidg2 packageName
+ stx_libwidg2 fullPackageName
+ stx_goodies_refactoryBrowser_browser packageName
+ stx_goodies_refactoryBrowser_browser fullPackageName
+ "
+!
+
+fullPackageNameFor: aProjectID
+ ^ (aProjectID copyReplaceAny:':/' with:$_)
+
+ "
+ stx_goodies_refactoryBrowser_lint fullPackageNameFor:#stx_goodies_refactoryBrowser_lint
+ "
+!
+
initialClassNameForDefinitionOf:aPackageId
<resource: #obsolete>
@@ -3344,7 +3365,7 @@
action notNil ifTrue:[
^ self perform:action
].
- (filename = 'app.rc' or:[filename = 'lib.rc']) ifTrue:[
+ (filename = 'app.rc' or:[filename = 'lib.rc' or:[filename = self rcFilename]]) ifTrue:[
^ self generate_packageName_dot_rc
].
(filename = 'loadAll') ifTrue:[
@@ -3771,9 +3792,15 @@
!
rcFilename
- ^ self packageName,'.rc'.
+ ^ self fullPackageName,'WINrc.rc'.
"Created: / 07-09-2006 / 17:07:00 / cg"
+!
+
+resourceFilename
+ ^ (self rcFilename asFilename withSuffix:'$(RES)') name
+
+ "Created: / 07-09-2006 / 17:12:53 / cg"
! !
!ProjectDefinition class methodsFor:'file mappings'!
@@ -3864,7 +3891,7 @@
builder_baseline_dot_rbspec_packages
^ String streamContents:[:s |
- self allPreRequisitesWithMandatorySorted do: [:packageId |
+ self allPreRequisitesSorted do: [:packageId |
s nextPutLine:(' package "%1"' bindWith:packageId).
]
].
@@ -4773,12 +4800,25 @@
subProjectMakeCallsUsing:callString
^ String streamContents:[:s |
self effectiveSubProjects do:[:packageID |
+ |pkgLabel skipLabel joinLabel|
+
+ pkgLabel := (packageID copyReplaceAll:$: with:$_) copyReplaceAll:$/ with:$_.
+ skipLabel := 'skip_',pkgLabel.
+ joinLabel := 'done_',pkgLabel.
+ s nextPutLine:'@if not exist ',(self msdosPathToPackage:packageID from:(self package)),' goto ',skipLabel.
s nextPutLine:'@echo "***********************************"'.
s nextPutLine:'@echo "Building ',(packageID copyReplaceAll:$: with:$/).
s nextPutLine:'@echo "***********************************"'.
s nextPutLine:'@pushd ', (self msdosPathToPackage:packageID from:(self package)).
s nextPutAll:'@'; nextPutAll:callString; nextPutLine:' || exit /b "%errorlevel%"'.
s nextPutLine:'@popd'.
+ s nextPutLine:'@goto ',joinLabel.
+ s nextPutLine:':',skipLabel.
+ s nextPutLine:'@echo "###################################"'.
+ s nextPutLine:'@echo "FOLDER MISSING: ',(packageID copyReplaceAll:$: with:$/).
+ s nextPutLine:'@echo "###################################"'.
+ s nextPutLine:'exit /b 1'.
+ s nextPutLine:':',joinLabel.
s cr.
]
]
@@ -4811,6 +4851,7 @@
! !
+
!ProjectDefinition class methodsFor:'file templates'!
autopackage_default_dot_apspec
--- a/Rectangle.st Thu Jun 30 21:11:02 2016 +0100
+++ b/Rectangle.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
"
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
@@ -1800,7 +1798,7 @@
(Rectangle origin:10@10 corner:50@50) scaledBy:2
"
- "its NOT destructive:"
+ "it is NOT destructive:"
"
|r1 r2|
--- a/Registry.st Thu Jun 30 21:11:02 2016 +0100
+++ b/Registry.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,6 +1,8 @@
+"{ Encoding: utf8 }"
+
"
- COPYRIGHT (c) 1993 by Claus Gittinger
- All Rights Reserved
+ COPYRIGHT (c) 1993,2015 by Claus Gittinger
+ All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
@@ -13,19 +15,19 @@
"{ NameSpace: Smalltalk }"
-Object subclass:#Registry
- instanceVariableNames:'registeredObjects handleArray tally indexTable'
+WeakIdentityDictionary subclass:#Registry
+ instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
- category:'System-Support'
+ category:'Collections-Weak'
!
!Registry class methodsFor:'documentation'!
copyright
"
- COPYRIGHT (c) 1993 by Claus Gittinger
- All Rights Reserved
+ COPYRIGHT (c) 1993,2015 by Claus Gittinger
+ All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
@@ -64,11 +66,11 @@
Example uses are found in Form, Color, ExternalStream and Font
[author:]
- Claus Gittinger
+ Claus Gittinger
[see also:]
- WeakArray WeakIdentityDictionary WeakIdentitySet
- Font Form Color Cursor ExternalStream
+ WeakArray WeakIdentityDictionary
+ Font Form Color Cursor ExternalStream
"
! !
@@ -79,86 +81,64 @@
"return the collection of registered objects.
Warning: this returns a weak collection."
- ^ registeredObjects
-
- "Modified: 16.1.1997 / 16:40:46 / cg"
+ ^ self keys.
! !
-!Registry methodsFor:'dispose handling'!
+!Registry methodsFor:'element disposal'!
+
+clearDeadSlots
+ |wasBlocked executors|
+
+ "
+ have to block here - dispose may be done at a low priority
+ from the background finalizer. If new items are added by a
+ higher prio process, the dictionary might get corrupted otherwise
+ "
+ wasBlocked := OperatingSystem blockInterrupts.
+ [
+ keyArray
+ forAllDeadIndicesDo:[:idx |
+ executors isNil ifTrue:[
+ executors := OrderedCollection new.
+ ].
+ executors add:(valueArray basicAt:idx).
+ valueArray basicAt:idx put:nil.
+ tally := tally - 1.
+ ]
+ replacingCorpsesWith:DeletedEntry.
+ ] ensure:[
+ wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
+ executors notNil ifTrue:[
+ executors do:[:eachExecutor|
+ [
+ self informDispose:eachExecutor.
+ ] on:Error do:[:ex|
+ Logger error:'Error %1 during finalization of: %2' with:ex description with:eachExecutor.
+ ex suspendedContext fullPrintAllLevels:10.
+ ].
+ ].
+ ].
+ ].
+!
informDispose:someHandle
"send a dispose message - this is sent to the executor,
since the original is already gone"
someHandle finalize
-
- "Modified: 16.1.1997 / 17:23:46 / cg"
!
update:something with:aParameter from:changedObject
"an instance has been destroyed - look which one it was"
- |executor
- index "{ Class: SmallInteger }"
- sz "{ Class: SmallInteger }"
- o myHandleArray wasBlocked|
-
something == #ElementExpired ifTrue:[
- wasBlocked := OperatingSystem blockInterrupts.
- [
- myHandleArray := handleArray.
- sz := myHandleArray size.
-
- index := 1.
- [index <= sz] whileTrue:[
- o := registeredObjects at:index.
- o class == SmallInteger ifTrue:[
- executor := myHandleArray at:index.
- "remove the executor from the handle array before informing the executor.
- This is critical in case of errors while executing the executor.
- See ObjectMemory>>finalize"
- registeredObjects at:index put:nil.
- tally := tally - 1.
- executor notNil ifTrue:[
- myHandleArray at:index put:nil.
-
- "/
- "/ allow interrupts for a while ...
- "/
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
- self informDispose:executor.
- OperatingSystem blockInterrupts.
-
- "/
- "/ any change in an interrupt or dispose handling ?
- "/
- handleArray ~~ myHandleArray ifTrue:[
- myHandleArray := handleArray.
- sz := myHandleArray size.
- "/ start again
- index := 0.
- ]
- ]
- ].
- index := index + 1.
- ]
- ] ensure:[
- wasBlocked ifFalse:[
- OperatingSystem unblockInterrupts
- ]
- ].
-
- (sz > 50 and:[tally < (sz // 2)]) ifTrue:[
- "/ shrink
- self resize
- ]
- ] ifFalse:[
- something == #earlyRestart ifTrue:[
- handleArray notNil ifTrue:[
- handleArray atAllPut:nil.
- ]
- ]
+ self clearDeadSlots.
+ ^ self.
].
+ something == #earlyRestart ifTrue:[
+ self removeAll.
+ ].
+ super update:something with:aParameter from:changedObject.
"Created: 15.6.1996 / 15:24:41 / cg"
"Modified: 8.1.1997 / 14:05:02 / stefan"
@@ -168,10 +148,8 @@
!Registry methodsFor:'enumerating'!
detect:aBlock ifNone:exceptionValue
- registeredObjects notNil ifTrue:[
- registeredObjects validElementsDo:[:obj |
- (aBlock value:obj) ifTrue:[^ obj].
- ].
+ keyArray validElementsDo:[:obj |
+ (obj ~~ DeletedEntry and:[aBlock value:obj]) ifTrue:[^ obj].
].
^ exceptionValue value
!
@@ -179,114 +157,76 @@
do:aBlock
"evaluate aBlock for each registered object"
- registeredObjects notNil ifTrue:[
- registeredObjects validElementsDo:aBlock
+ "#keysDo: would not work, since the keyArray instvar may change if
+ elements are unregistered while looping."
+
+ ^ keyArray validElementsDo:[:each|
+ each ~~ DeletedEntry ifTrue:[aBlock value:each].
]
! !
!Registry methodsFor:'private'!
-repairTally
- |sz "{ Class: SmallInteger }"
- cnt "{ Class: SmallInteger }"
- executor wasBlocked|
+findKeyOrNil:key
+ "Look for the key in the receiver.
+ If it is found, return the index,
+ otherwise the index of the first unused slot.
+ Grow the receiver, if key was not found, and no unused slots were present.
- wasBlocked := OperatingSystem blockInterrupts.
+ Warning: an empty slot MUST be filled by the sender - it is only to be sent
+ by at:put: / add: - like methods.
- indexTable := WeakIdentityDictionary new.
+ Redefined to not nil values of expired keys here."
- sz := registeredObjects size.
- cnt := 0.
+ |index "{ Class:SmallInteger }"
+ length "{ Class:SmallInteger }"
+ startIndex probe
+ delIndex "{ Class:SmallInteger }"|
- 1 to:sz do:[:index |
- ((executor := registeredObjects at:index) notNil
- and:[executor class ~~ SmallInteger]) ifTrue:[
- indexTable at:executor put:index.
- cnt := cnt + 1.
- ] ifFalse:[
- handleArray at:index put:nil.
- registeredObjects at:index put:nil.
- ]
+ (OperatingSystem blockInterrupts) ifFalse:[
+ "/
+ "/ may never be entered with interrupts enabled
+ "/
+ OperatingSystem unblockInterrupts.
+ self error:'unblocked call of findKeyOrNil'.
].
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-
- "Created: 6.3.1997 / 22:31:09 / cg"
-!
+ delIndex := 0.
-resize
- |sz "{ Class: SmallInteger }"
- dstIndex "{ Class: SmallInteger }"
- realNewSize "{ Class: SmallInteger }"
- newObjects newHandles wasBlocked
- executor|
-
- sz := registeredObjects size.
-
- (sz > 50 and:[tally < (sz // 2)]) ifTrue:[
- "/ shrink
-
- wasBlocked := OperatingSystem blockInterrupts.
+ length := keyArray basicSize.
+ startIndex := index := self initialIndexForKey:key.
- sz := registeredObjects size.
- realNewSize := tally * 3 // 2.
- newObjects := WeakArray new:realNewSize.
- newHandles := Array new:realNewSize.
- indexTable := WeakIdentityDictionary new.
+ [
+ probe := keyArray basicAt:index.
+ key == probe ifTrue:[^ index].
+ probe isNil ifTrue:[
+ delIndex == 0 ifTrue:[^ index].
+ keyArray basicAt:delIndex put:nil.
+ ^ delIndex
+ ].
- dstIndex := 1.
- 1 to:sz do:[:index |
- (executor := registeredObjects at:index) notNil ifTrue:[
- dstIndex > realNewSize ifTrue:[
- 'Registry [error]: size given is too small in resize' errorPrintCR.
- self repairTally.
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
- ^ self
- ].
- newObjects at:dstIndex put:executor.
- newHandles at:dstIndex put:(handleArray at:index).
- indexTable at:executor put:dstIndex.
+ (delIndex == 0 and:[probe == DeletedEntry]) ifTrue:[
+ delIndex := index
+ ].
- dstIndex := dstIndex + 1
- ]
- ].
-
- registeredObjects removeDependent:self.
- newObjects addDependent:self.
- registeredObjects := newObjects.
- handleArray := newHandles.
-
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
- ]
-
- "Created: 16.1.1997 / 18:08:00 / cg"
- "Modified: 6.3.1997 / 22:29:58 / cg"
-!
-
-unregister:anObject atIndex:index
- "strictly private"
+ index == length ifTrue:[
+ index := 1
+ ] ifFalse:[
+ index := index + 1
+ ].
+ index == startIndex ifTrue:[
+ delIndex ~~ 0 ifTrue:[
+ keyArray basicAt:delIndex put:nil.
+ ^ delIndex
+ ].
+ self grow.
+ length := keyArray basicSize.
+ startIndex := index := self initialIndexForKey:key.
+ ].
+ ] loop.
- handleArray at:index put:nil.
- registeredObjects at:index put:nil.
- (anObject notNil and:[anObject ~~ 0]) ifTrue:[
- indexTable removeKey:anObject ifAbsent:[]
- ].
- tally := tally - 1.
-! !
-
-!Registry methodsFor:'queries'!
-
-isEmpty
- ^ tally == 0
-!
-
-size
- "answer the number of entries in the registry"
-
- tally isNil ifTrue:[
- ^ 0.
- ].
- ^ tally
+ "Modified: 30.1.1997 / 15:04:34 / cg"
+ "Modified: 1.10.1997 / 11:25:32 / stefan"
! !
!Registry methodsFor:'registering objects'!
@@ -299,7 +239,7 @@
executor := anObject executor.
executor notNil ifTrue:[
- self register:anObject as:executor.
+ self register:anObject as:executor.
].
!
@@ -307,154 +247,18 @@
"register anObject, so that I later receive informDispose: with aHandle
(some time in the future)"
- |newColl newPhantoms
- size "{ Class: SmallInteger }"
- index "{ Class: SmallInteger }"
- p wasBlocked idx0|
-
- wasBlocked := OperatingSystem blockInterrupts.
-
- registeredObjects size == 0 "isNil" ifTrue:[
- registeredObjects := WeakArray new:10.
- registeredObjects addDependent:self.
- handleArray := Array basicNew:10.
- indexTable := WeakIdentityDictionary new.
-
- registeredObjects at:1 put:anObject.
- handleArray at:1 put:aHandle.
- indexTable at:anObject put:1.
-
- tally := 1.
- ObjectMemory addDependent:self.
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
- ^ self
- ].
-
- "/
- "/ allow interrupts to be handled here
- "/ (but continue with interrupts disabled)
- "/
- wasBlocked ifFalse:[
- OperatingSystem unblockInterrupts.
- OperatingSystem blockInterrupts.
- ].
-
- "/ index := registeredObjects identityIndexOf:anObject ifAbsent:0.
- index := indexTable at:anObject ifAbsent:0.
- index ~~ 0 ifTrue:[
- "/ double check ...
- (registeredObjects at:index) ~~ anObject ifTrue:[
- ('Registry [warning]: index table clobbered') errorPrintCR.
- ].
-
- "already registered"
-
- handleArray at:index put:aHandle.
-"/ ('Registry [info]: object (' , (registeredObjects at:index) printString , ') is already registered') infoPrintCR.
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
- ^ self
- ].
-
- "/
- "/ allow interrupts to be handled here
- "/ (but continue with interrupts disabled)
- "/
- wasBlocked ifFalse:[
- OperatingSystem unblockInterrupts.
- OperatingSystem blockInterrupts.
+ aHandle isNil ifTrue:[
+ self unregister:anObject.
+ ^ self.
].
- "/
- "/ search for a free slot ...
- "/ on the fly look for leftovers (should no longer happen)
- "/
- idx0 := 1.
- index := registeredObjects identityIndexOf:nil startingAt:idx0.
- [index ~~ 0] whileTrue:[
- "is there a leftover ?"
- p := handleArray at:index.
- p isNil ifTrue:[
- registeredObjects at:index put:anObject.
- handleArray at:index put:aHandle.
- indexTable at:anObject put:index.
-
- tally := tally + 1.
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
- ^ self
- ].
-
- "/ mhmh - a registeredObject vanished, but its
- "/ executor is still there ...
-
- "/
- "/ this may happen, if the registries dispose handling is
- "/ currently being executed by a lower priority process,
- "/ and the registeredObject has already been nilled,
- "/ but the executor is being notified (in the other process).
-
-"/ 'Registry [info]: leftOver executor: ' infoPrint. p infoPrintCR.
-
-"/ "tell the executor"
-"/ handleArray at:index put:nil.
-"/ tally := tally - 1.
-"/ self informDispose:p.
-"/ p := nil.
-
- idx0 := index + 1.
- index := registeredObjects identityIndexOf:nil startingAt:idx0.
- ].
-
- "no free slot, add at the end"
-
- size := registeredObjects size.
- index := size + 1.
- newColl := WeakArray new:(size * 2).
- newColl replaceFrom:1 to:size with:registeredObjects.
- registeredObjects removeDependent:self.
- registeredObjects := newColl.
- registeredObjects addDependent:self.
- registeredObjects at:index put:anObject.
-
- newPhantoms := Array basicNew:(size * 2).
- newPhantoms replaceFrom:1 to:size with:handleArray.
- handleArray := newPhantoms.
- handleArray at:index put:aHandle.
- indexTable at:anObject put:index.
-
- tally := tally + 1.
-
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-
- "Modified: / 7.1.1997 / 16:56:03 / stefan"
- "Modified: / 22.4.1998 / 11:09:23 / cg"
+ self at:anObject put:aHandle.
!
registerChange:anObject
"a registered object has changed, create a new executor"
- |index wasBlocked executor|
-
- executor := anObject executor.
- executor isNil ifTrue:[
- self unregister:anObject.
- ^ self.
- ].
-
- wasBlocked := OperatingSystem blockInterrupts.
- registeredObjects isNil ifTrue:[
- index := 0
- ] ifFalse:[
- "/ index := registeredObjects identityIndexOf:anObject ifAbsent:0.
- index := indexTable at:anObject ifAbsent:0.
- ].
- index ~~ 0 ifTrue:[
- handleArray at:index put:executor.
- ] ifFalse:[
- self register:anObject as:executor
- ].
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-
- "Modified: 6.3.1997 / 22:24:15 / cg"
+ self register:anObject as:anObject executor.
!
unregister:anObject
@@ -462,20 +266,7 @@
should be sent, if we are no more interested in destruction of
anObject (i.e. it no longer holds external resources)."
- |index wasBlocked|
-
- registeredObjects notNil ifTrue:[
- wasBlocked := OperatingSystem blockInterrupts.
- "/ index := registeredObjects identityIndexOf:anObject ifAbsent:0.
- index := indexTable at:anObject ifAbsent:0.
- index ~~ 0 ifTrue:[
- self unregister:anObject atIndex:index.
- self resize.
- ].
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
- ]
-
- "Modified: 16.1.1997 / 18:08:42 / cg"
+ self removeKey:anObject ifAbsent:[].
!
unregisterAllForWhich:aBlock
@@ -484,53 +275,36 @@
should be sent, if we are no more interested in destruction of
a group of objects (i.e. it no longer holds external resources)."
- |n "{ Class: SmallInteger }"
- obj wasBlocked any|
-
- registeredObjects notNil ifTrue:[
- any := false.
- wasBlocked := OperatingSystem blockInterrupts.
- n := registeredObjects size.
+ |wasBlocked any|
- 1 to:n do:[:index |
- obj := registeredObjects at:index.
- (obj notNil and:[obj class ~~ SmallInteger]) ifTrue:[
- (aBlock value:obj) ifTrue:[
- self unregister:obj atIndex:index.
- any := true.
- ]
- ]
+ wasBlocked := OperatingSystem blockInterrupts.
+ keyArray validElementsDo:[:eachObject|
+ (eachObject ~~ DeletedEntry and:[aBlock value:eachObject]) ifTrue:[
+ self safeRemoveKey:eachObject.
+ any := true.
].
- any ifTrue:[ self resize ].
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
- ]
-
- "Created: 16.1.1997 / 16:39:18 / cg"
- "Modified: 16.1.1997 / 18:08:47 / cg"
+ ].
+ any ifTrue:[ self possiblyShrink ].
+ wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
!
unregisterAllForWhichHandle:aBlock
- |n "{ Class: SmallInteger }"
- obj handle wasBlocked any|
+ "remove registration of all handles, for which the argument block
+ evaluates to true.
+ should be sent, if we are no more interested in destruction of
+ a group of objects (i.e. it no longer holds external resources)."
- registeredObjects notNil ifTrue:[
- any := false.
- wasBlocked := OperatingSystem blockInterrupts.
- n := registeredObjects size.
+ |wasBlocked any|
- 1 to:n do:[:index |
- obj := registeredObjects at:index.
- handle := handleArray at:index.
- handle notNil ifTrue:[
- (aBlock value:handle) ifTrue:[
- self unregister:obj atIndex:index.
- any := true.
- ]
- ]
+ wasBlocked := OperatingSystem blockInterrupts.
+ self keysAndValuesDo:[:eachObject :eachHandle|
+ (eachObject class ~~ SmallInteger and:[aBlock value:eachHandle]) ifTrue:[
+ self safeRemoveKey:eachObject.
+ any := true.
].
- any ifTrue:[ self resize ].
- wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
- ]
+ ].
+ any ifTrue:[ self possiblyShrink ].
+ wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
! !
!Registry class methodsFor:'documentation'!
--- a/SequenceableCollection.st Thu Jun 30 21:11:02 2016 +0100
+++ b/SequenceableCollection.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
@@ -639,7 +641,7 @@
around in big chunks"
n := self occurrencesOfAny:elementsToSkip.
- n == 0 ifTrue:[^ self copy].
+ n == 0 ifTrue:[^ self copyFrom:1].
sz := self size.
copy := self copyEmptyAndGrow:(sz - n).
@@ -648,18 +650,18 @@
dstIndex := 1.
n timesRepeat:[
- skipIndex := self indexOfAny:elementsToSkip startingAt:srcIndex.
- l := skipIndex - srcIndex.
- l ~~ 0 ifTrue:[
- copy replaceFrom:dstIndex to:(dstIndex + l - 1)
- with:self startingAt:srcIndex.
- dstIndex := dstIndex + l
- ].
- srcIndex := skipIndex + 1
+ skipIndex := self indexOfAny:elementsToSkip startingAt:srcIndex.
+ l := skipIndex - srcIndex.
+ l ~~ 0 ifTrue:[
+ copy replaceFrom:dstIndex to:(dstIndex + l - 1)
+ with:self startingAt:srcIndex.
+ dstIndex := dstIndex + l
+ ].
+ srcIndex := skipIndex + 1
].
l := sz - srcIndex.
copy replaceFrom:dstIndex to:(dstIndex + l)
- with:self startingAt:srcIndex.
+ with:self startingAt:srcIndex.
^ copy
"
@@ -761,6 +763,7 @@
^ self replaceFrom:start to:stop with:anArray startingAt:repStart
! !
+
!SequenceableCollection methodsFor:'accessing'!
after:anObject
@@ -4041,7 +4044,7 @@
have been replaced by newElement."
"/ 'Warning: #copyReplaceAll:with: will change semantics as defined in ANSI soon' errorPrintCR.
- ^ self copy replaceAll:oldElement with:newElement
+ ^ (self copyFrom:1) replaceAll:oldElement with:newElement
"
#(1 2 1 2 1 2 1 2 1 2) copyReplaceAll:1 with:99
@@ -4107,7 +4110,7 @@
"return a copy of the receiver, where all elements equal to any in collectionOfOldElements
have been replaced by newElement."
- ^ self copy replaceAny:collectionOfOldElements with:newElement
+ ^ (self copyFrom:1) replaceAny:collectionOfOldElements with:newElement
"
#(1 2 3 1 2 3 1 2 3 4 1 2 3 1 2 3) copyReplaceAny:#(1 2) with:99
@@ -4123,7 +4126,7 @@
|newColl sz mySize replSize|
mySize := self size.
- startIndex > mySize ifTrue:[^ self copy].
+ startIndex > mySize ifTrue:[^ self copyFrom:1].
replSize := aCollection size.
sz := mySize - (endIndex - startIndex + 1) + replSize.
@@ -4153,7 +4156,7 @@
|newColl mySize|
mySize := self size.
- startIndex > mySize ifTrue:[^ self copy].
+ startIndex > mySize ifTrue:[^ self copyFrom:1].
newColl := self copyEmptyAndGrow:mySize.
newColl replaceFrom:1 to:(startIndex - 1) with:self.
@@ -4185,7 +4188,7 @@
have been replaced by newElement.
ANSI version of what used to be #copyReplaceAll:with:"
- ^ self copy replaceAll:oldElement with:newElement
+ ^ (self copyFrom:1) replaceAll:oldElement with:newElement
"
#(1 2 1 2 1 2 1 2 1 2) copyReplacing:1 withObject:99
@@ -4560,7 +4563,7 @@
|idx|
idx := self indexOf:element.
- idx == 0 ifTrue:[^ self copy]. "question: is this ok?"
+ idx == 0 ifTrue:[^ self copyFrom:1]. "question: is this ok?"
^ self copyFrom:1 to:idx
"
@@ -4582,7 +4585,7 @@
|idx|
idx := self indexOf:element.
- idx == 0 ifTrue:[^ self copy]. "question: is this ok?"
+ idx == 0 ifTrue:[^ self copyFrom:1]. "question: is this ok?"
idx == 1 ifTrue:[^ self copyEmpty].
^ self copyFrom:1 to:(idx-1)
@@ -4729,7 +4732,7 @@
around in big chunks"
n := self occurrencesOf:elementToSkip.
- n == 0 ifTrue:[^ self copy].
+ n == 0 ifTrue:[^ self copyFrom:1].
sz := self size.
copy := self copyEmptyAndGrow:(sz - n).
@@ -4738,18 +4741,18 @@
dstIndex := 1.
n timesRepeat:[
- skipIndex := self indexOf:elementToSkip startingAt:srcIndex.
- l := skipIndex - srcIndex.
- l ~~ 0 ifTrue:[
- copy replaceFrom:dstIndex to:(dstIndex + l - 1)
- with:self startingAt:srcIndex.
- dstIndex := dstIndex + l
- ].
- srcIndex := skipIndex + 1
+ skipIndex := self indexOf:elementToSkip startingAt:srcIndex.
+ l := skipIndex - srcIndex.
+ l ~~ 0 ifTrue:[
+ copy replaceFrom:dstIndex to:(dstIndex + l - 1)
+ with:self startingAt:srcIndex.
+ dstIndex := dstIndex + l
+ ].
+ srcIndex := skipIndex + 1
].
l := sz - srcIndex.
copy replaceFrom:dstIndex to:(dstIndex + l)
- with:self startingAt:srcIndex.
+ with:self startingAt:srcIndex.
^ copy
"
@@ -4774,7 +4777,7 @@
|copy skipIndex sz|
skipIndex := self indexOf:elementToSkip startingAt:1.
- (skipIndex == 0) ifTrue:[^ self copy].
+ (skipIndex == 0) ifTrue:[^ self copyFrom:1].
sz := self size - 1.
copy := self copyEmptyAndGrow:sz.
@@ -4807,7 +4810,7 @@
around in big chunks"
n := self count:[:el | el == elementToSkip].
- n == 0 ifTrue:[^ self copy].
+ n == 0 ifTrue:[^ self copyFrom:1].
sz := self size.
copy := self copyEmptyAndGrow:(sz - n).
@@ -4816,18 +4819,18 @@
dstIndex := 1.
n timesRepeat:[
- skipIndex := self identityIndexOf:elementToSkip startingAt:srcIndex.
- l := skipIndex - srcIndex.
- l ~~ 0 ifTrue:[
- copy replaceFrom:dstIndex to:(dstIndex + l - 1)
- with:self startingAt:srcIndex.
- dstIndex := dstIndex + l
- ].
- srcIndex := skipIndex + 1
+ skipIndex := self identityIndexOf:elementToSkip startingAt:srcIndex.
+ l := skipIndex - srcIndex.
+ l ~~ 0 ifTrue:[
+ copy replaceFrom:dstIndex to:(dstIndex + l - 1)
+ with:self startingAt:srcIndex.
+ dstIndex := dstIndex + l
+ ].
+ srcIndex := skipIndex + 1
].
l := sz - srcIndex.
copy replaceFrom:dstIndex to:(dstIndex + l)
- with:self startingAt:srcIndex.
+ with:self startingAt:srcIndex.
^ copy
"
@@ -4980,7 +4983,7 @@
|pos|
pos := self indexOf:anElement.
- pos == 0 ifTrue:[^ self copy].
+ pos == 0 ifTrue:[^ self copyFrom:1].
^ self copyFrom:1 to:(pos - 1)
@@ -5063,7 +5066,7 @@
|pos|
pos := self indexOfSubCollection:aSubCollection.
- pos == 0 ifTrue:[^ self copy].
+ pos == 0 ifTrue:[^ self copyFrom:1].
^ self copyFrom:1 to:(pos - 1)
@@ -5087,7 +5090,7 @@
|pos|
pos := self indexOfAny:aCollectionOfObjects.
- pos == 0 ifTrue:[^ self copy].
+ pos == 0 ifTrue:[^ self copyFrom:1].
^ self copyFrom:1 to:(pos - 1)
@@ -5107,7 +5110,7 @@
|pos|
pos := self findFirst:aBlock.
- pos == 0 ifTrue:[^ self copy].
+ pos == 0 ifTrue:[^ self copyFrom:1].
^ self copyFrom:1 to:(pos - 1)
@@ -9295,11 +9298,12 @@
reversed
"return a copy with elements in reverse order"
- ^ self copy reverse
-
- "
- #(4 5 6 7 7) reversed
+ ^ (self copyFrom:1) reverse
+
+ "
+ #(4 5 6 7 7) reversed
#(1 4 7 10 2 5) asOrderedCollection reversed
+ #foo reversed
"
!
--- a/Set.st Thu Jun 30 21:11:02 2016 +0100
+++ b/Set.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 1991 by Claus Gittinger
All Rights Reserved
@@ -200,6 +202,7 @@
"Created: / 24.10.1997 / 23:13:44 / cg"
! !
+
!Set methodsFor:'Compatibility-ST80'!
initialIndexFor:hashKey boundedBy:length
@@ -923,7 +926,9 @@
keyArray basicAt:delIndex put:nil.
^ delIndex
].
- ^ self grow findKeyOrNil:key
+ self grow.
+ length := keyArray basicSize.
+ startIndex := index := self initialIndexForKey:key.
].
] loop.
@@ -1238,6 +1243,7 @@
^ tally
! !
+
!Set methodsFor:'searching'!
findFirst:aBlock ifNone:exceptionValue
--- a/ShortFloat.st Thu Jun 30 21:11:02 2016 +0100
+++ b/ShortFloat.st Thu Jun 30 21:12:35 2016 +0100
@@ -346,7 +346,6 @@
^ Epsilon
! !
-
!ShortFloat class methodsFor:'binary storage'!
readBinaryIEEESingleFrom:aStream
@@ -505,13 +504,6 @@
^ Pi
!
-powersOfTwo
- "/ sigh: cannot have PoersOfTwo as class nstvar (yet)
- PowersOfTwo notNil ifTrue: [^PowersOfTwo].
- PowersOfTwo := self newPowersOfTwo.
- ^PowersOfTwo
-!
-
unity
"return the neutral element for multiplication (1.0) as ShortFloat"
@@ -1636,7 +1628,8 @@
RETURN (__MKFLOAT(frac));
#endif
%}.
-
+ ^ super mantissa
+
"
1.0 asShortFloat exponent
1.0 asShortFloat mantissa
--- a/SmallInteger.st Thu Jun 30 21:11:02 2016 +0100
+++ b/SmallInteger.st Thu Jun 30 21:12:35 2016 +0100
@@ -232,6 +232,8 @@
unsigned INT productLow, productHi;
int negative;
+ myValue = __intVal(self);
+
# define low16Bits(foo) ((foo) & 0xFFFF)
# define hi16Bits(foo) ((foo) >> 16)
# define low32Bits(foo) ((foo) & 0xFFFFFFFFL)
@@ -253,7 +255,6 @@
# endif
if (__isSmallInteger(aNumber)) {
- myValue = __intVal(self);
otherValue = __intVal(aNumber);
# if defined(USE_LONGLONG_FOR_MUL)
@@ -398,18 +399,17 @@
# endif
} else if (__isFloatLike(aNumber)) {
OBJ newFloat;
- double val = (double)__intVal(self) * __floatVal(aNumber);
+ double val = (double)myValue * __floatVal(aNumber);
__qMKFLOAT(newFloat, val);
RETURN ( newFloat );
} else if (__isShortFloat(aNumber)) {
OBJ newFloat;
- float val = (float)__intVal(self) * __shortFloatVal(aNumber);
+ float val = (float)myValue * __shortFloatVal(aNumber);
__qMKSFLOAT(newFloat, val);
RETURN ( newFloat );
} else if (__isFractionLike(aNumber)) {
- INT myValue = __intVal(self);
OBJ t = __FractionInstPtr(aNumber)->f_numerator;
if (myValue == 0) {
@@ -558,16 +558,16 @@
* (see the message send at the bottom)
*/
- INT me, t, val;
+ INT t, val;
double dval;
+ INT myValue = __intVal(self);
if (__isSmallInteger(aNumber)) {
val = __intVal(aNumber);
if (val != 0) {
- me = __intVal(self);
- t = me / val;
+ t = myValue / val;
# ifdef GOOD_OPTIMIZER
- if (me % val == 0) {
+ if (myValue % val == 0) {
# else
/* this is stupid - all I want is to look for a remainder ...
but most compilers are too stupid and generate an extra modulus
@@ -577,7 +577,7 @@
Therefore I use a multiplication which is faster than a modulo
on most machines. Hint to GNU people :-)
*/
- if ((t * val) == me) {
+ if ((t * val) == myValue) {
# endif
RETURN ( __mkSmallInteger(t) );
}
@@ -587,7 +587,7 @@
dval = __floatVal(aNumber);
if (dval != 0.0) {
OBJ newFloat;
- double val = (double)__intVal(self) / dval;
+ double val = (double)myValue / dval;
__qMKFLOAT(newFloat, val);
RETURN ( newFloat );
@@ -646,12 +646,12 @@
* (see the message send at the bottom)
*/
- INT dividend, divisor, rslt;
+ INT divisor, rslt;
+ INT dividend = __intVal(self);
if (__isSmallInteger(aNumber)) {
divisor = __intVal(aNumber);
if (divisor != 0) {
- dividend = __intVal(self);
rslt = dividend / divisor;
/*
* Optimized to speed up positive result
@@ -691,7 +691,6 @@
t = __FractionInstPtr(aNumber)->f_denominator;
if (__isSmallInteger(t)) {
INT den = __intVal(t);
- INT dividend = __intVal(self);
INT prod;
#if 0 && defined(__GNUC__) // supported from GCC 5
if (!__builtin_mul_overflow(myself, den, &prod)) {
--- a/Smalltalk.st Thu Jun 30 21:11:02 2016 +0100
+++ b/Smalltalk.st Thu Jun 30 21:12:35 2016 +0100
@@ -236,6 +236,8 @@
this is NOT called when an image is restarted; in this
case the show starts in Smalltalk>>restart."
+ OrderedCollection initialize.
+
Compiler := ByteCodeCompiler.
Compiler isNil ifTrue:[
"
@@ -4054,7 +4056,10 @@
[
Screen openDefaultDisplay:nil.
] on:Screen deviceOpenErrorSignal do:[:ex|
- ('%1 [error]: No display connection to: %2' bindWith:commandName with:ex parameter) errorPrintCR.
+ "do not use #errorPrintCR, it is no error, when an app supports display and no display.
+ in case shell exec 'app --version' we do not want this error string as part of the output"
+ ('%1 [error]: No display connection to: %2' bindWith:commandName with:ex parameter) infoPrintCR.
+"/ ('%1 [error]: No display connection to: %2' bindWith:commandName with:ex parameter) errorPrintCR.
(commandName, ' [info]: Either set the DISPLAY environment variable,') infoPrintCR.
(commandName, ' [info]: or start smalltalk with a -display argument.') infoPrintCR.
HeadlessOperation == true ifFalse:[
--- a/SmalltalkLanguage.st Thu Jun 30 21:11:02 2016 +0100
+++ b/SmalltalkLanguage.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
"{ Package: 'stx:libbasic' }"
"{ NameSpace: Smalltalk }"
@@ -89,7 +87,7 @@
!
parserClass
- "Answer a class suitable for parsing a source codein 'my' language"
+ "Answer a class suitable for parsing a source code in 'my' language"
^ Parser
--- a/SortedCollection.st Thu Jun 30 21:11:02 2016 +0100
+++ b/SortedCollection.st Thu Jun 30 21:12:35 2016 +0100
@@ -389,10 +389,7 @@
"add all elements of the argument, aCollection to the receiver.
Returns the argument, aCollection (sigh)."
- |addedCollection mySize numAdded|
-
- numAdded := aCollection size.
- mySize := self size.
+ |addedCollection|
(aCollection isSortedCollection
and:[aCollection sortBlock == sortBlock]) ifTrue:[
@@ -401,11 +398,11 @@
addedCollection := Array withAll:aCollection.
addedCollection stableSort:sortBlock.
- mySize == 0 ifTrue:[
+ self size == 0 ifTrue:[
"/ special case: I am empty - add them en-bloque.
contentsArray := addedCollection.
firstIndex := 1.
- lastIndex := numAdded.
+ lastIndex := aCollection size.
^ aCollection
].
].
--- a/String.st Thu Jun 30 21:11:02 2016 +0100
+++ b/String.st Thu Jun 30 21:12:35 2016 +0100
@@ -139,7 +139,7 @@
A little warning though: not all smalltalk systems allow subclassing String,
so your program may become unportable if you do so.
- Strings have an implicit (assumed) encoding of iso8859-1.
+ Strings have an implicit (assumed) encoding of ISO-8859-1.
For strings with other encodings, either keep the encoding separately,
or use instances of encodedString.
@@ -517,7 +517,6 @@
-
!String class methodsFor:'queries'!
defaultPlatformClass
@@ -541,6 +540,7 @@
+
!String methodsFor:'Compatibility-VW5.4'!
asByteString
@@ -560,6 +560,7 @@
"Modified: / 12-01-2011 / 12:33:58 / cg"
! !
+
!String methodsFor:'accessing'!
at:index
@@ -2787,89 +2788,85 @@
%{
#ifdef __SCHTEAM__
if ( aString.isStringLike() && self.isStringLike() ) {
- STString me = self.asSTString();
- STString other = aString.asSTString();
- int myLength = me.characters.length;
- int otherLength = other.characters.length;
-
- char[] newChars = new char[myLength + otherLength];
- System.arraycopy(me.characters, 0, newChars, 0, myLength);
- System.arraycopy(other.characters, 0, newChars, myLength, otherLength);
- return context._RETURN( new STString( newChars ));
+ STString me = self.asSTString();
+ STString other = aString.asSTString();
+ int myLength = me.characters.length;
+ int otherLength = other.characters.length;
+
+ char[] newChars = new char[myLength + otherLength];
+ System.arraycopy(me.characters, 0, newChars, 0, myLength);
+ System.arraycopy(other.characters, 0, newChars, myLength, otherLength);
+ return context._RETURN( new STString( newChars ));
}
#else
- int l1, l2, sz;
- OBJ newString;
-
- if (__isNonNilObject(aString)) {
- /*
- * can do it here if both are Strings/Symbols:
- */
- if (__qIsStringLike(self) && __qIsStringLike(aString)) {
- l1 = __stringSize(self);
- l2 = __stringSize(aString);
-
- sz = OHDR_SIZE + l1 + l2 + 1;
- __qNew(newString, sz); /* OBJECT ALLOCATION */
- if (newString != nil) {
- char *cp1, *cp2;
- REGISTER unsigned char *dstp;
-
- __InstPtr(newString)->o_class = String;
- __qSTORE(newString, String);
- dstp = __stringVal(newString);
- cp1 = (char *) __stringVal(self);
- cp2 = (char *) __stringVal(aString);
+ /*
+ * can do it here if both are Strings/Symbols:
+ */
+ if (__qIsStringLike(self) && __isStringLike(aString)) {
+ OBJ newString;
+ int l1 = __stringSize(self);
+ int l2 = __stringSize(aString);
+ int sz = OHDR_SIZE + l1 + l2 + 1;
+
+ __qNew(newString, sz); /* OBJECT ALLOCATION */
+ if (newString != nil) {
+ char *cp1, *cp2;
+ REGISTER unsigned char *dstp;
+
+ __InstPtr(newString)->o_class = String;
+ __qSTORE(newString, String);
+ dstp = __stringVal(newString);
+ cp1 = (char *) __stringVal(self);
+ cp2 = (char *) __stringVal(aString);
# ifdef bcopy4
- /* knowing that allocation is 4-byte aligned and
- * size rounded up to next 4-byte, the first copy
- * can be done word-wise.
- * that speeds up size-10-string , size-10-string
- * by 10% on a P5/200.
- */
- {
- int nw = l1 >> 2;
-
- if (l1 & 3) nw++;
- bcopy4(cp1, dstp, nw);
- dstp += l1;
- }
+ /* knowing that allocation is 4-byte aligned and
+ * size rounded up to next 4-byte, the first copy
+ * can be done word-wise.
+ * that speeds up size-10-string , size-10-string
+ * by 10% on a P5/200.
+ */
+ {
+ int nw = l1 >> 2;
+
+ if (l1 & 3) nw++;
+ bcopy4(cp1, dstp, nw);
+ dstp += l1;
+ }
# else
# ifdef FAST_MEMCPY
- memcpy(dstp, cp1, l1);
- dstp += l1;
+ memcpy(dstp, cp1, l1);
+ dstp += l1;
# else
- while (l1 >= 4) {
- *(int *)dstp = *(int *)cp1;
- dstp += 4; cp1 += 4;
- l1 -= 4;
- }
- while (l1--) *dstp++ = *cp1++;
+ while (l1 >= 4) {
+ *(int *)dstp = *(int *)cp1;
+ dstp += 4; cp1 += 4;
+ l1 -= 4;
+ }
+ while (l1--) *dstp++ = *cp1++;
# endif
# endif
# ifdef bcopy4
- if (((INT)dstp & 3) == 0) {
- int nw = l2 >> 2;
-
- if (l2 & 3) nw++;
- bcopy4(cp2, dstp, nw);
- *(dstp + l2) = '\0';
- RETURN ( newString );
- }
+ if (((INT)dstp & 3) == 0) {
+ int nw = l2 >> 2;
+
+ if (l2 & 3) nw++;
+ bcopy4(cp2, dstp, nw);
+ *(dstp + l2) = '\0';
+ RETURN ( newString );
+ }
# endif
# ifdef FAST_MEMCPY
- memcpy(dstp, cp2, l2+1);
- dstp[l2] = '\0';
+ memcpy(dstp, cp2, l2+1);
+ dstp[l2] = '\0';
# else
- while (l2--) *dstp++ = *cp2++;
- *dstp = '\0';
+ while (l2--) *dstp++ = *cp2++;
+ *dstp = '\0';
# endif
- RETURN ( newString );
- }
- }
+ RETURN ( newString );
+ }
}
#endif /* not SCHTEAM */
%}.
@@ -3007,42 +3004,38 @@
REGISTER int count;
int len, index1, sz;
OBJ newString;
- OBJ myClass;
-
- myClass = __qClass(self);
#ifndef NO_PRIM_STRING
- if (__isSmallInteger(start)
- && ((myClass==String) || (myClass==Symbol))) {
- len = __stringSize(self);
- index1 = __intVal(start);
- if (index1 > 0) {
- if (index1 <= len) {
- count = len - index1 + 1;
- sz = OHDR_SIZE + count + 1;
-
- __PROTECT_CONTEXT__
- __qNew(newString, sz); /* OBJECT ALLOCATION */
- __UNPROTECT_CONTEXT__
-
- if (newString != nil) {
- __InstPtr(newString)->o_class = String;
- __qSTORE(newString, String);
- dstp = __stringVal(newString);
+ if (__isSmallInteger(start) && __qIsStringLike(self)) {
+ len = __stringSize(self);
+ index1 = __intVal(start);
+ if (index1 > 0) {
+ if (index1 <= len) {
+ count = len - index1 + 1;
+ sz = OHDR_SIZE + count + 1;
+
+ __PROTECT_CONTEXT__
+ __qNew(newString, sz); /* OBJECT ALLOCATION */
+ __UNPROTECT_CONTEXT__
+
+ if (newString != nil) {
+ __InstPtr(newString)->o_class = String;
+ __qSTORE(newString, String);
+ dstp = __stringVal(newString);
#ifdef FAST_MEMCPY
- memcpy(dstp, __stringVal(self) + index1 - 1, count);
- dstp[count] = '\0';
+ memcpy(dstp, __stringVal(self) + index1 - 1, count);
+ dstp[count] = '\0';
#else
- srcp = __stringVal(self) + index1 - 1;
- while (count--) {
- *dstp++ = *srcp++;
- }
- *dstp = '\0';
+ srcp = __stringVal(self) + index1 - 1;
+ while (count--) {
+ *dstp++ = *srcp++;
+ }
+ *dstp = '\0';
#endif
- RETURN ( newString );
- }
- }
- }
+ RETURN ( newString );
+ }
+ }
+ }
}
#endif
%}.
@@ -3050,6 +3043,10 @@
will eventually lead to an out-of-bound signal raise"
^ super copyFrom:start
+
+ "
+ '12345' copyFrom:3
+ "
!
copyFrom:start to:stop
@@ -3065,69 +3062,65 @@
REGISTER int count;
int len, sz, index1, index2;
OBJ newString;
- OBJ myClass;
-
- myClass = __qClass(self);
#ifndef NO_PRIM_STRING
- if (__bothSmallInteger(start, stop)
- && ((myClass==String) || (myClass==Symbol))) {
- len = __stringSize(self);
- index1 = __intVal(start);
- index2 = __intVal(stop);
-
- if ((index1 <= index2) && (index1 > 0)) {
- if (index2 <= len) {
- count = index2 - index1 + 1;
- sz = OHDR_SIZE + count + 1;
-
- __PROTECT_CONTEXT__
- __qNew(newString, sz); /* OBJECT ALLOCATION */
- __UNPROTECT_CONTEXT__
-
- if (newString != nil) {
- __InstPtr(newString)->o_class = String;
- __qSTORE(newString, String);
- dstp = __stringVal(newString);
- srcp = __stringVal(self) + index1 - 1;
+ if (__bothSmallInteger(start, stop) && __qIsStringLike(self)) {
+ len = __stringSize(self);
+ index1 = __intVal(start);
+ index2 = __intVal(stop);
+
+ if ((index1 <= index2) && (index1 > 0)) {
+ if (index2 <= len) {
+ count = index2 - index1 + 1;
+ sz = OHDR_SIZE + count + 1;
+
+ __PROTECT_CONTEXT__
+ __qNew(newString, sz); /* OBJECT ALLOCATION */
+ __UNPROTECT_CONTEXT__
+
+ if (newString != nil) {
+ __InstPtr(newString)->o_class = String;
+ __qSTORE(newString, String);
+ dstp = __stringVal(newString);
+ srcp = __stringVal(self) + index1 - 1;
#ifdef bcopy4
- {
- int nw = count >> 2;
-
- if (count & 3) {
- nw++;
- }
- bcopy4(srcp, dstp, nw);
- dstp[count] = '\0';
- }
+ {
+ int nw = count >> 2;
+
+ if (count & 3) {
+ nw++;
+ }
+ bcopy4(srcp, dstp, nw);
+ dstp[count] = '\0';
+ }
#else
# ifdef FAST_MEMCPY
- memcpy(dstp, srcp, count);
- dstp[count] = '\0';
+ memcpy(dstp, srcp, count);
+ dstp[count] = '\0';
# else
- while (count--) {
- *dstp++ = *srcp++;
- }
- *dstp = '\0';
+ while (count--) {
+ *dstp++ = *srcp++;
+ }
+ *dstp = '\0';
# endif
#endif
- RETURN ( newString );
- }
- }
- }
- /*
- * allow empty copy
- */
- if (index1 > index2) {
- __PROTECT_CONTEXT__
- __qNew(newString, OHDR_SIZE+1); /* OBJECT ALLOCATION */
- __UNPROTECT_CONTEXT__
- if (newString != nil) {
- __InstPtr(newString)->o_class = String;
- (__stringVal(newString))[0] = '\0';
- RETURN ( newString );
- }
- }
+ RETURN ( newString );
+ }
+ }
+ }
+ /*
+ * allow empty copy
+ */
+ if (index1 > index2) {
+ __PROTECT_CONTEXT__
+ __qNew(newString, OHDR_SIZE+1); /* OBJECT ALLOCATION */
+ __UNPROTECT_CONTEXT__
+ if (newString != nil) {
+ __InstPtr(newString)->o_class = String;
+ (__stringVal(newString))[0] = '\0';
+ RETURN ( newString );
+ }
+ }
}
#endif
%}.
@@ -3135,6 +3128,10 @@
will eventually lead to an out-of-bound signal raise"
^ super copyFrom:start to:stop
+
+ "
+ '12345678' copyFrom:3 to:7
+ "
!
copyWith:aCharacter
@@ -3150,58 +3147,54 @@
int sz;
REGISTER unsigned char *dstp;
OBJ cls, newString;
- OBJ myClass;
-
- myClass = __qClass(self);
#ifndef NO_PRIM_STRING
if (__isCharacter(aCharacter)) {
- unsigned int cVal = __intVal(__characterVal(aCharacter));
-
- if ((cVal <= 0xFF)
- && ((myClass==String) || (myClass==Symbol))) {
- count = __stringSize(self);
- sz = OHDR_SIZE + count + 1 + 1;
-
- __PROTECT_CONTEXT__
- __qNew(newString, sz); /* OBJECT ALLOCATION */
- __UNPROTECT_CONTEXT__
-
- if (newString) {
- __InstPtr(newString)->o_class = String;
- __qSTORE(newString, String);
- dstp = __stringVal(newString);
+ unsigned int cVal = __intVal(__characterVal(aCharacter));
+
+ if ((cVal <= 0xFF) && __qIsStringLike(self)) {
+ count = __stringSize(self);
+ sz = OHDR_SIZE + count + 1 + 1;
+
+ __PROTECT_CONTEXT__
+ __qNew(newString, sz); /* OBJECT ALLOCATION */
+ __UNPROTECT_CONTEXT__
+
+ if (newString) {
+ __InstPtr(newString)->o_class = String;
+ __qSTORE(newString, String);
+ dstp = __stringVal(newString);
# ifdef bcopy4
- {
- int nw = count >> 2;
- char *srcp = (char *)__stringVal(self);
-
- if (count & 3) {
- nw++;
- }
- bcopy4(srcp, dstp, nw);
- dstp += count;
- }
+ {
+ int nw = count >> 2;
+ char *srcp = (char *)__stringVal(self);
+
+ if (count & 3) {
+ nw++;
+ }
+ bcopy4(srcp, dstp, nw);
+ dstp += count;
+ }
# else
# ifdef FAST_MEMCPY
- memcpy(dstp, __stringVal(self), count);
- dstp += count;
+ memcpy(dstp, __stringVal(self), count);
+ dstp += count;
# else
- {
- REGISTER unsigned char *srcp;
-
- srcp = __stringVal(self);
- while ((*dstp = *srcp++) != '\0')
- dstp++;
- }
+ {
+ REGISTER unsigned char *srcp;
+
+ srcp = __stringVal(self);
+ while ((*dstp = *srcp++) != '\0')
+ dstp++;
+ }
# endif
# endif
- *dstp++ = cVal;
- *dstp = '\0';
- RETURN (newString );
- }
- }
+ *dstp++ = cVal;
+ *dstp = '\0';
+ RETURN (newString );
+ }
+ }
}
#endif
%}.
--- a/UnixOperatingSystem.st Thu Jun 30 21:11:02 2016 +0100
+++ b/UnixOperatingSystem.st Thu Jun 30 21:12:35 2016 +0100
@@ -9493,7 +9493,7 @@
^ CodesetEncoder decodeString: encodedPathNameOrOutputLine
].
] on:DecodingError do:[:ex|
- "maybe there are old filenames in ISO8859-x,
+ "maybe there are old filenames in ISO-8859-x,
just keep them untranslated"
].
].
@@ -9611,7 +9611,7 @@
^ CodesetEncoder encodeString: pathName.
].
] on:EncodingError do:[:ex|
- "maybe there are old filenames in ISO8859-x,
+ "maybe there are old filenames in ISO-8859-x,
just keep them untranslated"
].
].
--- a/WeakArray.st Thu Jun 30 21:11:02 2016 +0100
+++ b/WeakArray.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
"
COPYRIGHT (c) 1991 by Claus Gittinger
All Rights Reserved
@@ -645,7 +643,7 @@
RETURN (self);
%}.
^ super do:[:each |
- each ~~ nil ifTrue:[aBlock value:each]
+ each notNil ifTrue:[aBlock value:each]
]
"Modified: / 23-07-2015 / 15:35:24 / cg"
@@ -668,7 +666,7 @@
forAllDeadIndicesDo:aBlock replacingCorpsesWith:newValue
"evaluate the argument, aBlock for all indices where elements have been
- replaced by zero (due to a collected object), and replace the element
+ replaced by a SmallInteger (due to a collected object), and replace the element
with newValue.
In the current implementation, the block sees the newValue (i.e. it is
changed before the block is called); this behavior is not guaranteed
@@ -677,10 +675,10 @@
slots may change iff the garbage collector finds new garbage."
self keysAndValuesDo:[:index :element |
- element class == SmallInteger ifTrue:[
- self at:index put:newValue.
- aBlock value:index.
- ]
+ element class == SmallInteger ifTrue:[
+ self at:index put:newValue.
+ aBlock value:index.
+ ]
]
"Modified: 25.1.1997 / 14:51:28 / cg"
@@ -706,57 +704,57 @@
nIndex = __BYTES2OBJS__(__qSize(self) - OHDR_SIZE);
if (__isBlockLike(aBlock)
&& (__BlockInstPtr(aBlock)->b_nargs == __mkSmallInteger(1))) {
- {
- /*
- * the most common case: a static compiled block, with home on the stack ...
- */
- REGISTER OBJFUNC codeVal;
+ {
+ /*
+ * the most common case: a static compiled block, with home on the stack ...
+ */
+ REGISTER OBJFUNC codeVal;
- if (((codeVal = __BlockInstPtr(aBlock)->b_code) != (OBJFUNC)nil)
- && (! ((INT)(__BlockInstPtr(aBlock)->b_flags) & __MASKSMALLINT(F_DYNAMIC)))) {
+ if (((codeVal = __BlockInstPtr(aBlock)->b_code) != (OBJFUNC)nil)
+ && (! ((INT)(__BlockInstPtr(aBlock)->b_flags) & __MASKSMALLINT(F_DYNAMIC)))) {
#ifdef NEW_BLOCK_CALL
# define BLOCK_ARG aBlock
#else
# define BLOCK_ARG rHome
- REGISTER OBJ rHome;
+ REGISTER OBJ rHome;
- rHome = __BlockInstPtr(aBlock)->b_home;
- if ((rHome == nil) || (__qSpace(rHome) >= STACKSPACE))
+ rHome = __BlockInstPtr(aBlock)->b_home;
+ if ((rHome == nil) || (__qSpace(rHome) >= STACKSPACE))
#endif
- {
- for (; index < nIndex; index++) {
- element = __InstPtr(self)->i_instvars[index];
- if (element) {
- if (InterruptPending != nil) {
- __interruptL(@line);
- element = __InstPtr(self)->i_instvars[index];
- }
+ {
+ for (; index < nIndex; index++) {
+ element = __InstPtr(self)->i_instvars[index];
+ if (element) {
+ if (InterruptPending != nil) {
+ __interruptL(@line);
+ element = __InstPtr(self)->i_instvars[index];
+ }
- if (__isNonNilObject(element)) {
- element = __WEAK_READ__(self, element);
+ if (__isNonNilObject(element)) {
+ element = __WEAK_READ__(self, element);
#ifdef WEAK_DEBUG
- if (! __ISVALIDOBJECT(element)) {
- fprintf(stderr, "****** OOPS - invalid Weak-Read\n");
- __dumpObject__(element, __LINE__);
- element = nil;
- }
+ if (! __ISVALIDOBJECT(element)) {
+ fprintf(stderr, "****** OOPS - invalid Weak-Read\n");
+ __dumpObject__(element, __LINE__);
+ element = nil;
+ }
#endif
- }
- if (element) {
- (*codeVal)(BLOCK_ARG, element);
- }
- }
- }
- RETURN (self);
- }
- }
- }
+ }
+ if (element) {
+ (*codeVal)(BLOCK_ARG, element);
+ }
+ }
+ }
+ RETURN (self);
+ }
+ }
+ }
- /*
- * sorry, must check code-pointer in the loop
- * it could be recompiled or flushed
- */
+ /*
+ * sorry, must check code-pointer in the loop
+ * it could be recompiled or flushed
+ */
# undef BLOCK_ARG
#ifdef NEW_BLOCK_CALL
# define BLOCK_ARG aBlock
@@ -766,50 +764,50 @@
# define IBLOCK_ARG (__BlockInstPtr(aBlock)->b_home)
#endif
- for (; index < nIndex; index++) {
- REGISTER OBJFUNC codeVal;
+ for (; index < nIndex; index++) {
+ REGISTER OBJFUNC codeVal;
- element = __InstPtr(self)->i_instvars[index];
- if (element) {
- if (InterruptPending != nil) {
- __interruptL(@line);
- element = __InstPtr(self)->i_instvars[index];
- }
- if (__isNonNilObject(element)) {
- element = __WEAK_READ__(self, element);
+ element = __InstPtr(self)->i_instvars[index];
+ if (element) {
+ if (InterruptPending != nil) {
+ __interruptL(@line);
+ element = __InstPtr(self)->i_instvars[index];
+ }
+ if (__isNonNilObject(element)) {
+ element = __WEAK_READ__(self, element);
#ifdef WEAK_DEBUG
- if (! __ISVALIDOBJECT(element)) {
- fprintf(stderr, "****** OOPS - invalid Weak-Read\n");
- __dumpObject__(element, __LINE__);
- element = nil;
- }
+ if (! __ISVALIDOBJECT(element)) {
+ fprintf(stderr, "****** OOPS - invalid Weak-Read\n");
+ __dumpObject__(element, __LINE__);
+ element = nil;
+ }
#endif
- }
- if (element) {
- if ((codeVal = __BlockInstPtr(aBlock)->b_code) != (OBJFUNC)nil) {
- (*codeVal)(BLOCK_ARG, element);
- } else {
- if (__BlockInstPtr(aBlock)->b_bytecodes != nil) {
- /*
- * arg is a compiled block with bytecode -
- * directly call interpreter without going through Block>>value
- */
+ }
+ if (element) {
+ if ((codeVal = __BlockInstPtr(aBlock)->b_code) != (OBJFUNC)nil) {
+ (*codeVal)(BLOCK_ARG, element);
+ } else {
+ if (__BlockInstPtr(aBlock)->b_bytecodes != nil) {
+ /*
+ * arg is a compiled block with bytecode -
+ * directly call interpreter without going through Block>>value
+ */
#ifdef PASS_ARG_POINTER
- __interpret(aBlock, 1, nil, IBLOCK_ARG, nil, nil, &element);
+ __interpret(aBlock, 1, nil, IBLOCK_ARG, nil, nil, &element);
#else
- __interpret(aBlock, 1, nil, IBLOCK_ARG, nil, nil, element);
+ __interpret(aBlock, 1, nil, IBLOCK_ARG, nil, nil, element);
#endif
- } else {
- /*
- * arg is something else - call it with #value
- */
- (*val.ilc_func)(aBlock, @symbol(value:), nil, &val, element);
- }
- }
- }
- }
- }
- RETURN (self);
+ } else {
+ /*
+ * arg is something else - call it with #value
+ */
+ (*val.ilc_func)(aBlock, @symbol(value:), nil, &val, element);
+ }
+ }
+ }
+ }
+ }
+ RETURN (self);
# undef BLOCK_ARG
# undef IBLOCK_ARG
@@ -819,34 +817,34 @@
* not a block - send it #value:
*/
for (; index < nIndex; index++) {
- element = __InstPtr(self)->i_instvars[index];
- if (element) {
- if (InterruptPending != nil) {
- __interruptL(@line);
- element = __InstPtr(self)->i_instvars[index];
- }
- if (__isNonNilObject(element)) {
- element = __WEAK_READ__(self, element);
+ element = __InstPtr(self)->i_instvars[index];
+ if (element) {
+ if (InterruptPending != nil) {
+ __interruptL(@line);
+ element = __InstPtr(self)->i_instvars[index];
+ }
+ if (__isNonNilObject(element)) {
+ element = __WEAK_READ__(self, element);
#ifdef WEAK_DEBUG
- if (! __ISVALIDOBJECT(element)) {
- fprintf(stderr, "****** OOPS - invalid Weak-Read\n");
- __dumpObject__(element, __LINE__);
- element = nil;
- }
+ if (! __ISVALIDOBJECT(element)) {
+ fprintf(stderr, "****** OOPS - invalid Weak-Read\n");
+ __dumpObject__(element, __LINE__);
+ element = nil;
+ }
#endif
- }
- if (element) {
- (*val.ilc_func)(aBlock,
- @symbol(value:),
- nil, &val,
- element);
- }
- }
+ }
+ if (element) {
+ (*val.ilc_func)(aBlock,
+ @symbol(value:),
+ nil, &val,
+ element);
+ }
+ }
}
RETURN (self);
%}.
^ super do:[:each |
- each ~~ nil ifTrue:[aBlock value:each]
+ each notNil ifTrue:[aBlock value:each]
]
!
@@ -1003,7 +1001,7 @@
RETURN (self);
%}.
^ super do:[:each |
- (each ~~ nil and:[each class ~~ SmallInteger]) ifTrue:[aBlock value:each]
+ (each notNil and:[each class ~~ SmallInteger]) ifTrue:[aBlock value:each]
]
"Modified: / 23-07-2015 / 15:32:44 / cg"
--- a/WeakDependencyDictionary.st Thu Jun 30 21:11:02 2016 +0100
+++ b/WeakDependencyDictionary.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 1997 by Claus Gittinger
All Rights Reserved
@@ -11,6 +13,8 @@
"
"{ Package: 'stx:libbasic' }"
+"{ NameSpace: Smalltalk }"
+
WeakIdentityDictionary subclass:#WeakDependencyDictionary
instanceVariableNames:''
classVariableNames:''
@@ -53,7 +57,7 @@
keyContainerOfSize:n
"return a container for keys of size n.
- use WeakArrays here."
+ use WeakArrays here, but don't make me a dependent of it."
^ WeakArray new:n.
@@ -165,3 +169,4 @@
version
^ '$Header$'
! !
+
--- a/WeakIdentityDictionary.st Thu Jun 30 21:11:02 2016 +0100
+++ b/WeakIdentityDictionary.st Thu Jun 30 21:12:35 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 1992 by Claus Gittinger
All Rights Reserved
@@ -231,7 +233,7 @@
Grow the receiver, if key was not found, and no unused slots were present.
Warning: an empty slot MUST be filled by the sender - it is only to be sent
- by at:put: / add: - like methods."
+ by at:put: / add: - like methods."
|index "{ Class:SmallInteger }"
length "{ Class:SmallInteger }"
@@ -239,11 +241,11 @@
delIndex "{ Class:SmallInteger }"|
(OperatingSystem blockInterrupts) ifFalse:[
- "/
- "/ may never be entered with interrupts enabled
- "/
- OperatingSystem unblockInterrupts.
- self error:'unblocked call of findKeyOrNil'.
+ "/
+ "/ may never be entered with interrupts enabled
+ "/
+ OperatingSystem unblockInterrupts.
+ self error:'unblocked call of findKeyOrNil'.
].
delIndex := 0.
@@ -252,39 +254,39 @@
startIndex := index := self initialIndexForKey:key.
[
- probe := keyArray basicAt:index.
- key == probe ifTrue:[^ index].
- probe isNil ifTrue:[
- delIndex == 0 ifTrue:[^ index].
- keyArray basicAt:delIndex put:nil.
- ^ delIndex
- ].
+ probe := keyArray basicAt:index.
+ key == probe ifTrue:[^ index].
+ probe isNil ifTrue:[
+ delIndex == 0 ifTrue:[^ index].
+ keyArray basicAt:delIndex put:nil.
+ ^ delIndex
+ ].
- probe class == SmallInteger ifTrue:[
- probe := DeletedEntry.
- keyArray basicAt:index put:probe.
- valueArray basicAt:index put:nil.
- tally := tally - 1.
- ].
+ probe class == SmallInteger ifTrue:[
+ probe := DeletedEntry.
+ keyArray basicAt:index put:probe.
+ valueArray basicAt:index put:nil.
+ tally := tally - 1.
+ ].
- delIndex == 0 ifTrue:[
- probe == DeletedEntry ifTrue:[
- delIndex := index
- ]
- ].
+ (delIndex == 0 and:[probe == DeletedEntry]) ifTrue:[
+ delIndex := index
+ ].
- index == length ifTrue:[
- index := 1
- ] ifFalse:[
- index := index + 1
- ].
- index == startIndex ifTrue:[
- delIndex ~~ 0 ifTrue:[
- keyArray basicAt:delIndex put:nil.
- ^ delIndex
- ].
- ^ self grow findKeyOrNil:key
- ].
+ index == length ifTrue:[
+ index := 1
+ ] ifFalse:[
+ index := index + 1
+ ].
+ index == startIndex ifTrue:[
+ delIndex ~~ 0 ifTrue:[
+ keyArray basicAt:delIndex put:nil.
+ ^ delIndex
+ ].
+ self grow.
+ length := keyArray basicSize.
+ startIndex := index := self initialIndexForKey:key.
+ ].
] loop.
"Modified: 30.1.1997 / 15:04:34 / cg"
@@ -338,7 +340,7 @@
keyContainerOfSize:n
"return a container for keys of size n.
- use WeakArrays here, but dont make me a depenent of it."
+ use WeakArrays here."
|w|
--- a/abbrev.stc Thu Jun 30 21:11:02 2016 +0100
+++ b/abbrev.stc Thu Jun 30 21:12:35 2016 +0100
@@ -46,7 +46,6 @@
ProjectDefinition ProjectDefinition stx:libbasic 'System-Support-Projects' 3
ReadEvalPrintLoop ReadEvalPrintLoop stx:libbasic 'System-Support' 0
RecursionLock RecursionLock stx:libbasic 'Kernel-Processes' 0
-Registry Registry stx:libbasic 'System-Support' 0
Semaphore Semaphore stx:libbasic 'Kernel-Processes' 0
SharedPool SharedPool stx:libbasic 'Kernel-Classes' 0
Signal Signal stx:libbasic 'Kernel-Exceptions' 0
@@ -65,7 +64,6 @@
Bag Bag stx:libbasic 'Collections-Unordered' 0
BlockContext BlockContext stx:libbasic 'Kernel-Methods' 0
BuiltinLookup BuiltinLookup stx:libbasic 'Kernel-Extensions' 0
-CachingRegistry CachingRegistry stx:libbasic 'System-Support' 0
Character Character stx:libbasic 'Magnitude-General' 0
CharacterEncoderImplementations::ISO10646_1 CharacterEncoderImplementations__ISO10646_1 stx:libbasic 'Collections-Text-Encodings' 0
CharacterEncoderImplementations::SingleByteEncoder CharacterEncoderImplementations__SingleByteEncoder stx:libbasic 'Collections-Text-Encodings' 0
@@ -77,7 +75,6 @@
ExternalFunction ExternalFunction stx:libbasic 'System-Support' 0
False False stx:libbasic 'Kernel-Objects' 0
FolderForProjectsDefinition FolderForProjectsDefinition stx:libbasic 'System-Support-Projects' 3
-HandleRegistry HandleRegistry stx:libbasic 'System-Support' 0
HashStream HashStream stx:libbasic 'System-Crypt-Hashing' 0
InlineObjectPrototype InlineObjectPrototype stx:libbasic 'Programming-Support' 0
JavaPackage JavaPackage stx:libbasic 'Languages-Java-Support' 0
@@ -319,6 +316,7 @@
PrimitiveFailure PrimitiveFailure stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
RangeError RangeError stx:libbasic 'Kernel-Exceptions-Errors' 1
ReadError ReadError stx:libbasic 'Kernel-Exceptions-Errors' 1
+Registry Registry stx:libbasic 'Collections-Weak' 0
SignedByteArray SignedByteArray stx:libbasic 'Collections-Arrayed' 0
StreamIOError StreamIOError stx:libbasic 'Kernel-Exceptions-Errors' 1
StreamNotOpenError StreamNotOpenError stx:libbasic 'Kernel-Exceptions-Errors' 1
@@ -332,10 +330,12 @@
WrongProceedabilityError WrongProceedabilityError stx:libbasic 'Kernel-Exceptions-Errors' 1
AbstractClassInstantiationError AbstractClassInstantiationError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
BadLiteralsError BadLiteralsError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
+CachingRegistry CachingRegistry stx:libbasic 'System-Support' 0
DecodingError DecodingError stx:libbasic 'Collections-Text-Encodings' 1
EncodingError EncodingError stx:libbasic 'Collections-Text-Encodings' 1
FileDoesNotExistException FileDoesNotExistException stx:libbasic 'Kernel-Exceptions-Errors' 1
FileStream FileStream stx:libbasic 'Streams-External' 0
+HandleRegistry HandleRegistry stx:libbasic 'System-Support' 0
ImmutableString ImmutableString stx:libbasic 'System-Compiler-Support' 0
InvalidByteCodeError InvalidByteCodeError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
InvalidInstructionError InvalidInstructionError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
--- a/bc.mak Thu Jun 30 21:11:02 2016 +0100
+++ b/bc.mak Thu Jun 30 21:12:35 2016 +0100
@@ -34,7 +34,7 @@
LIBNAME=libstx_libbasic
MODULE_PATH=libbasic
-RESFILES=libbasic.$(RES)
+RESFILES=stx_libbasicWINrc.$(RES)
@@ -66,7 +66,7 @@
$(TOP)\goodies\builder\reports\report-runner.bat -D . -r Builder::TestReport -p $(PACKAGE)
clean::
- del *.$(CSUFFIX)
+ -del *.$(CSUFFIX)
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
@@ -115,7 +115,6 @@
$(OUTDIR)ProjectDefinition.$(O) ProjectDefinition.$(C) ProjectDefinition.$(H): ProjectDefinition.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)ReadEvalPrintLoop.$(O) ReadEvalPrintLoop.$(C) ReadEvalPrintLoop.$(H): ReadEvalPrintLoop.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)RecursionLock.$(O) RecursionLock.$(C) RecursionLock.$(H): RecursionLock.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)Registry.$(O) Registry.$(C) Registry.$(H): Registry.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)Semaphore.$(O) Semaphore.$(C) Semaphore.$(H): Semaphore.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)SharedPool.$(O) SharedPool.$(C) SharedPool.$(H): SharedPool.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)Signal.$(O) Signal.$(C) Signal.$(H): Signal.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -134,7 +133,6 @@
$(OUTDIR)Bag.$(O) Bag.$(C) Bag.$(H): Bag.st $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)BlockContext.$(O) BlockContext.$(C) BlockContext.$(H): BlockContext.st $(INCLUDE_TOP)\stx\libbasic\Context.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)BuiltinLookup.$(O) BuiltinLookup.$(C) BuiltinLookup.$(H): BuiltinLookup.st $(INCLUDE_TOP)\stx\libbasic\Lookup.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)CachingRegistry.$(O) CachingRegistry.$(C) CachingRegistry.$(H): CachingRegistry.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Registry.$(H) $(STCHDR)
$(OUTDIR)Character.$(O) Character.$(C) Character.$(H): Character.st $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CharacterEncoderImplementations__ISO10646_1.$(O) CharacterEncoderImplementations__ISO10646_1.$(C) CharacterEncoderImplementations__ISO10646_1.$(H): CharacterEncoderImplementations__ISO10646_1.st $(INCLUDE_TOP)\stx\libbasic\CharacterEncoder.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CharacterEncoderImplementations__SingleByteEncoder.$(O) CharacterEncoderImplementations__SingleByteEncoder.$(C) CharacterEncoderImplementations__SingleByteEncoder.$(H): CharacterEncoderImplementations__SingleByteEncoder.st $(INCLUDE_TOP)\stx\libbasic\CharacterEncoder.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -146,7 +144,6 @@
$(OUTDIR)ExternalFunction.$(O) ExternalFunction.$(C) ExternalFunction.$(H): ExternalFunction.st $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)False.$(O) False.$(C) False.$(H): False.st $(INCLUDE_TOP)\stx\libbasic\Boolean.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)FolderForProjectsDefinition.$(O) FolderForProjectsDefinition.$(C) FolderForProjectsDefinition.$(H): FolderForProjectsDefinition.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
-$(OUTDIR)HandleRegistry.$(O) HandleRegistry.$(C) HandleRegistry.$(H): HandleRegistry.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Registry.$(H) $(STCHDR)
$(OUTDIR)HashStream.$(O) HashStream.$(C) HashStream.$(H): HashStream.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Stream.$(H) $(STCHDR)
$(OUTDIR)InlineObjectPrototype.$(O) InlineObjectPrototype.$(C) InlineObjectPrototype.$(H): InlineObjectPrototype.st $(INCLUDE_TOP)\stx\libbasic\InlineObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)JavaPackage.$(O) JavaPackage.$(C) JavaPackage.$(H): JavaPackage.st $(INCLUDE_TOP)\stx\libbasic\NameSpace.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -384,6 +381,7 @@
$(OUTDIR)PrimitiveFailure.$(O) PrimitiveFailure.$(C) PrimitiveFailure.$(H): PrimitiveFailure.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutionError.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
$(OUTDIR)RangeError.$(O) RangeError.$(C) RangeError.$(H): RangeError.st $(INCLUDE_TOP)\stx\libbasic\ArithmeticError.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
$(OUTDIR)ReadError.$(O) ReadError.$(C) ReadError.$(H): ReadError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\StreamError.$(H) $(STCHDR)
+$(OUTDIR)Registry.$(O) Registry.$(C) Registry.$(H): Registry.st $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\WeakIdentityDictionary.$(H) $(STCHDR)
$(OUTDIR)SignedByteArray.$(O) SignedByteArray.$(C) SignedByteArray.$(H): SignedByteArray.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
$(OUTDIR)StreamIOError.$(O) StreamIOError.$(C) StreamIOError.$(H): StreamIOError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\StreamError.$(H) $(STCHDR)
$(OUTDIR)StreamNotOpenError.$(O) StreamNotOpenError.$(C) StreamNotOpenError.$(H): StreamNotOpenError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\StreamError.$(H) $(STCHDR)
@@ -397,10 +395,12 @@
$(OUTDIR)WrongProceedabilityError.$(O) WrongProceedabilityError.$(C) WrongProceedabilityError.$(H): WrongProceedabilityError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\SignalError.$(H) $(STCHDR)
$(OUTDIR)AbstractClassInstantiationError.$(O) AbstractClassInstantiationError.$(C) AbstractClassInstantiationError.$(H): AbstractClassInstantiationError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutionError.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\MethodNotAppropriateError.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
$(OUTDIR)BadLiteralsError.$(O) BadLiteralsError.$(C) BadLiteralsError.$(H): BadLiteralsError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutionError.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\InvalidCodeError.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
+$(OUTDIR)CachingRegistry.$(O) CachingRegistry.$(C) CachingRegistry.$(H): CachingRegistry.st $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Registry.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\WeakIdentityDictionary.$(H) $(STCHDR)
$(OUTDIR)DecodingError.$(O) DecodingError.$(C) DecodingError.$(H): DecodingError.st $(INCLUDE_TOP)\stx\libbasic\CharacterEncoderError.$(H) $(INCLUDE_TOP)\stx\libbasic\ConversionError.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
$(OUTDIR)EncodingError.$(O) EncodingError.$(C) EncodingError.$(H): EncodingError.st $(INCLUDE_TOP)\stx\libbasic\CharacterEncoderError.$(H) $(INCLUDE_TOP)\stx\libbasic\ConversionError.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
$(OUTDIR)FileDoesNotExistException.$(O) FileDoesNotExistException.$(C) FileDoesNotExistException.$(H): FileDoesNotExistException.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\OpenError.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libbasic\StreamError.$(H) $(STCHDR)
$(OUTDIR)FileStream.$(O) FileStream.$(C) FileStream.$(H): FileStream.st $(INCLUDE_TOP)\stx\libbasic\ExternalStream.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\PeekableStream.$(H) $(INCLUDE_TOP)\stx\libbasic\PositionableStream.$(H) $(INCLUDE_TOP)\stx\libbasic\ReadWriteStream.$(H) $(INCLUDE_TOP)\stx\libbasic\Stream.$(H) $(INCLUDE_TOP)\stx\libbasic\WriteStream.$(H) $(STCHDR)
+$(OUTDIR)HandleRegistry.$(O) HandleRegistry.$(C) HandleRegistry.$(H): HandleRegistry.st $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Registry.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\WeakIdentityDictionary.$(H) $(STCHDR)
$(OUTDIR)ImmutableString.$(O) ImmutableString.$(C) ImmutableString.$(H): ImmutableString.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\CharacterArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\String.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
$(OUTDIR)InvalidByteCodeError.$(O) InvalidByteCodeError.$(C) InvalidByteCodeError.$(H): InvalidByteCodeError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutionError.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\InvalidCodeError.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
$(OUTDIR)InvalidInstructionError.$(O) InvalidInstructionError.$(C) InvalidInstructionError.$(H): InvalidInstructionError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutionError.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\InvalidCodeError.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
--- a/libInit.cc Thu Jun 30 21:11:02 2016 +0100
+++ b/libInit.cc Thu Jun 30 21:12:35 2016 +0100
@@ -61,7 +61,6 @@
extern void _ProjectDefinition_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _ReadEvalPrintLoop_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _RecursionLock_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _Registry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _Semaphore_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _SharedPool_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _Signal_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -80,7 +79,6 @@
extern void _Bag_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _BlockContext_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _BuiltinLookup_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _CachingRegistry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _Character_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _CharacterEncoderImplementations__ISO10646_1371_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _CharacterEncoderImplementations__SingleByteEncoder_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -92,7 +90,6 @@
extern void _ExternalFunction_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _False_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _FolderForProjectsDefinition_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _HandleRegistry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _HashStream_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _InlineObjectPrototype_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _JavaPackage_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -330,6 +327,7 @@
extern void _PrimitiveFailure_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _RangeError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _ReadError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _Registry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _SignedByteArray_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _StreamIOError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _StreamNotOpenError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -343,10 +341,12 @@
extern void _WrongProceedabilityError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _AbstractClassInstantiationError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _BadLiteralsError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _CachingRegistry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _DecodingError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _EncodingError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _FileDoesNotExistException_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _FileStream_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _HandleRegistry_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _ImmutableString_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _InvalidByteCodeError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _InvalidInstructionError_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -447,7 +447,6 @@
_ProjectDefinition_Init(pass,__pRT__,snd);
_ReadEvalPrintLoop_Init(pass,__pRT__,snd);
_RecursionLock_Init(pass,__pRT__,snd);
- _Registry_Init(pass,__pRT__,snd);
_Semaphore_Init(pass,__pRT__,snd);
_SharedPool_Init(pass,__pRT__,snd);
_Signal_Init(pass,__pRT__,snd);
@@ -466,7 +465,6 @@
_Bag_Init(pass,__pRT__,snd);
_BlockContext_Init(pass,__pRT__,snd);
_BuiltinLookup_Init(pass,__pRT__,snd);
- _CachingRegistry_Init(pass,__pRT__,snd);
_Character_Init(pass,__pRT__,snd);
_CharacterEncoderImplementations__ISO10646_1371_Init(pass,__pRT__,snd);
_CharacterEncoderImplementations__SingleByteEncoder_Init(pass,__pRT__,snd);
@@ -478,7 +476,6 @@
_ExternalFunction_Init(pass,__pRT__,snd);
_False_Init(pass,__pRT__,snd);
_FolderForProjectsDefinition_Init(pass,__pRT__,snd);
- _HandleRegistry_Init(pass,__pRT__,snd);
_HashStream_Init(pass,__pRT__,snd);
_InlineObjectPrototype_Init(pass,__pRT__,snd);
_JavaPackage_Init(pass,__pRT__,snd);
@@ -716,6 +713,7 @@
_PrimitiveFailure_Init(pass,__pRT__,snd);
_RangeError_Init(pass,__pRT__,snd);
_ReadError_Init(pass,__pRT__,snd);
+ _Registry_Init(pass,__pRT__,snd);
_SignedByteArray_Init(pass,__pRT__,snd);
_StreamIOError_Init(pass,__pRT__,snd);
_StreamNotOpenError_Init(pass,__pRT__,snd);
@@ -729,10 +727,12 @@
_WrongProceedabilityError_Init(pass,__pRT__,snd);
_AbstractClassInstantiationError_Init(pass,__pRT__,snd);
_BadLiteralsError_Init(pass,__pRT__,snd);
+ _CachingRegistry_Init(pass,__pRT__,snd);
_DecodingError_Init(pass,__pRT__,snd);
_EncodingError_Init(pass,__pRT__,snd);
_FileDoesNotExistException_Init(pass,__pRT__,snd);
_FileStream_Init(pass,__pRT__,snd);
+ _HandleRegistry_Init(pass,__pRT__,snd);
_ImmutableString_Init(pass,__pRT__,snd);
_InvalidByteCodeError_Init(pass,__pRT__,snd);
_InvalidInstructionError_Init(pass,__pRT__,snd);
--- a/stx_libbasic.st Thu Jun 30 21:11:02 2016 +0100
+++ b/stx_libbasic.st Thu Jun 30 21:12:35 2016 +0100
@@ -215,7 +215,6 @@
ProjectDefinition
ReadEvalPrintLoop
RecursionLock
- Registry
Semaphore
SharedPool
Signal
@@ -234,7 +233,6 @@
Bag
BlockContext
BuiltinLookup
- CachingRegistry
Character
#'CharacterEncoderImplementations::ISO10646_1'
#'CharacterEncoderImplementations::SingleByteEncoder'
@@ -246,7 +244,6 @@
ExternalFunction
False
FolderForProjectsDefinition
- HandleRegistry
HashStream
InlineObjectPrototype
JavaPackage
@@ -488,6 +485,7 @@
PrimitiveFailure
RangeError
ReadError
+ Registry
SignedByteArray
StreamIOError
StreamNotOpenError
@@ -501,10 +499,12 @@
WrongProceedabilityError
AbstractClassInstantiationError
BadLiteralsError
+ CachingRegistry
DecodingError
EncodingError
FileDoesNotExistException
FileStream
+ HandleRegistry
ImmutableString
InvalidByteCodeError
InvalidInstructionError
@@ -591,8 +591,10 @@
!
extensionMethodNames
- "list class/selector pairs of extensions.
- A correponding method with real names must be present in my concrete subclasses"
+ "lists the extension methods which are to be included in the project.
+ Entries are 2-element array literals, consisting of class-name and selector.
+ A correponding method with real names must be present in my concrete subclasses
+ if it has extensions."
^ #(
)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/stx_libbasicWINrc.rc Thu Jun 30 21:12:35 2016 +0100
@@ -0,0 +1,37 @@
+//
+// DO NOT EDIT
+// automagically generated from the projectDefinition: stx_libbasic.
+//
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 7,1,1,161
+ PRODUCTVERSION 7,1,0,0
+#if (__BORLANDC__)
+ FILEFLAGSMASK VS_FF_DEBUG | VS_FF_PRERELEASE
+ FILEFLAGS VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
+ FILEOS VOS_NT_WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE VS_USER_DEFINED
+#endif
+
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904E4"
+ BEGIN
+ VALUE "CompanyName", "eXept Software AG\0"
+ VALUE "FileDescription", "Smalltalk/X Basic Classes (LIB)\0"
+ VALUE "FileVersion", "7.1.1.161\0"
+ VALUE "InternalName", "stx:libbasic\0"
+ VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 2013\0"
+ VALUE "ProductName", "Smalltalk/X\0"
+ VALUE "ProductVersion", "7.1.0.0\0"
+ VALUE "ProductDate", "Tue, 28 Jun 2016 19:17:02 GMT\0"
+ END
+
+ END
+
+ BLOCK "VarFileInfo"
+ BEGIN // Language | Translation
+ VALUE "Translation", 0x409, 0x4E4 // U.S. English, Windows Multilingual
+ END
+END