Class new title: UniqueString subclassof: String fields: '' declare: ''; bytesize: false  t1 _ t2 [user notify: 'UniqueStrings are not for writing into'] = t1 [self  t1] asString [super copy] classInit | t1 t2 t3 [t3 _ Vector new: 128. t2 _ String new: 1. for t1 to: 128 do [t2  1 _ t1 - 1. t3  t1 _ t2 unique]. UST1 _ t3] copy hasInterned: t1 | t2 t3 [[t1 length = 1  [t1  1 < 128  [UST1  (t1  1 + 1)]]]. t3 _ USTable  (t1 stringhash \ USTable length + 1). for t2 to: t3 length do [t3  t2  nil  [] t1 length = (t3  t2) length  [t1 = (t3  t2)  [t3  t2]]]. false] hash [] primitive: 36 intern: t1 | t2 t3 [t2 _ self hasInterned: t1. t2  [t2] t2 _ [t1 is: UniqueString  [t1] (UniqueString new: t1 length) str: t1]. t3 _ t1 stringhash \ USTable length + 1. USTable  t3 _ USTable  t3 , t2. t2] isarrow [self length  1  [false] self  self length = 95] isinfix | t1 [self length  1  [false] (self  1) isletter  false] iskeyword | t1 [self length  1  [false] t1 _ self  self length. t1 = 58  [true] t1 = 3] isuneval | t1 [self  self length = 3] keywords | t1 t2 t3 t4 t5 t6 t7 ['_' = self  [('' '_' )] t1 _ (Vector new: 10) asStream. t2 _ Stream default. t6 _ ':'  1. t7 _ ''  1. t3 _ 1. t4 _ self length. while t3  t4 do [t5 _ self  t3. t2 append: t5. [(t5 = t6 or t5 = t7) or t3 = t4  [t1 next_ t2 contents. t2 reset]]. t3 _ t3 + 1]. t1 contents] mustTake: t1 [self numArgs  t1  [user notify: self + ' does not take ' + t1 asString + ' arguments']] numArgs | t1 t2 t3 t4 [t1 _ self length. t1 = 1  [[(self  1) isletter  [0] 1]] t2 _ 0. for t3 to: t1 do [t4 _ self  t3. t4 = 58  [t2 _ t2 + 1] t4 = 3  [t2 _ t2 + 1] t4 = 95  [t2 _ t2 + 1] t4 = 7  [t2 _ t2 + 1]]. t2] printon: t1 [t1 append: self] recopy rehash | t1 t2 t3 [t1 _ USTable. USTable _ Vector new: t1 length. for t3 to: t1 length do [USTable  t3 _ Vector new: 0. for t2 from: t1  t3 do [t2  nil  [] self intern: t2]. t1  t3 _ nil]] species [String] str: t1 | t2 [for t2 to: t1 length do [super  t2 _ t1  t2]] stringhash [super hash] unique