'From Squeak3.0 of 4 February 2001 [latest update: #3414] on 4 February 2001 at 8:19:50 pm'! "Change Set: FixSyntaxErrors Date: 4 February 2001 Author: Jerry Archibald While clearing the underbrush to create a shrunken version of Squeak 3.0, I stumbled across a syntax error that occurred when running #abandonSources (which parses all methods as part of supplying an temporary variable dictionary). I finally decided to run #abandonSources against the entire image (I wonder if that's ever been done before) to see if there where any more syntax errors. This ferreted out one more. These are in change sets that were released just a few days ago, so it wasn't likely that anyone would have bumped into them. Apparently improvements in the compiler parsing algorithms followed them in the update stream, as they otherwise would have been caught earlier. These updates are just my best guess at what the correct code should be; particularly in the case of EToyVocabulary>>initialize I had to intuit freely to come up with I thought was correct. Original authors should check these for proper semantics. EToyVocabulary>>initialize sw Scott Wallace 1/26/2001 23:03 MethodFinder>>constEquiv tk Ted Kaehler 1/8/2001 17:48"! !EToyVocabulary methodsFor: 'initialization' stamp: 'jla 2/4/2001 19:24'! initialize "Initialize the receiver (automatically called when instances are created via 'new')" | classes aMethodCategory selector selectors categorySymbols | super initialize. self vocabularyName: #eToy. self documentation: '"EToy" is a vocabulary that provides the equivalent of the 1997-2000 etoy prototype'. categorySymbols _ Set new. classes _ Smalltalk allImplementorsOf: #additionsToViewerCategories. classes do: [:anItem | MessageSet parse: anItem toClassAndSelector: [:aClass :aSelector | categorySymbols addAll: aClass soleInstance basicNew categoriesForViewer]]. categorySymbols asOrderedCollection do: [:aCategorySymbol | aMethodCategory _ ElementCategory new categoryName: aCategorySymbol.. classes _ (Smalltalk allImplementorsOf: #additionsToViewerCategories) collect: [:anItem | MessageSet parse: anItem toClassAndSelector: [:aMetaClass :aSelector | aMetaClass soleInstance]]. selectors _ Set new. classes do: [:aClass | (aClass additionsToViewerCategory: aCategorySymbol) do: [:anElement | anElement first == #command ifTrue: [selectors add: (selector _ anElement second). (methodInterfaces includesKey: selector) ifFalse: [methodInterfaces at: selector put: (MethodInterface new initializeFromEToyCommandSpec: anElement category: aCategorySymbol)]] ifFalse: "#slot format" [selectors add: (selector _ anElement seventh). "the getter" selectors add: (anElement at: 9) "the setter". (methodInterfaces includesKey: selector) ifFalse: [self addGetterAndSetterInterfacesFromOldSlotSpec: anElement]]]]. (selectors copyWithout: #unused) asSortedArray do: [:aSelector | aMethodCategory elementAt: aSelector put: (methodInterfaces at: aSelector)]. self addCategory: aMethodCategory]. #(scripts 'instance variables') do: [:sym | self addCategoryNamed: sym]. self setCategoryDocumentationStrings! ! !MethodFinder methodsFor: 'find a constant' stamp: 'jla 2/4/2001 18:30'! constEquiv | const subTest got jj | "See if (data1 = C) or (data1 ~= C) is the answer" "quick test" ((answers at: 1) class superclass == Boolean) ifFalse: [^ false]. 2 to: answers size do: [:ii | ((answers at: ii) class superclass == Boolean) ifFalse: [^ false]].. const _ (thisData at: 1) at: 1. got _ (subTest _ MethodFinder new copy: self addArg: const) searchForOne isEmpty not. got ifFalse: ["try other polarity for ~~ " (jj _ answers indexOf: (answers at: 1) not) > 0 ifTrue: [ const _ (thisData at: jj) at: 1. got _ (subTest _ MethodFinder new copy: self addArg: const) searchForOne isEmpty not]]. got ifFalse: [^ false]. "replace data2 with const in expressions" subTest expressions do: [:exp | expressions add: (exp copyReplaceAll: 'data2' with: const printString)]. selector addAll: subTest selectors. ^ true! !