翻訳対象を切り出す on OLPC

OLPC etoys用に書き直しました。Tweak-kedamaの一部としてParseNode中に実装されている一般化構文木トラバーサーを使っています。そのため、Squeakland上では動作しません。
(トラバーサーのコードが正しい限り)一応全ての種類ParseNodeを処理しているはずです。
あと少し手を加えれば、リテラル以外のレシーバーも集められます。

'From OLPC2.0 of ''24 October 2006'' [latest update: #1315] on 10 July 2007 at 12:47:51 pm'!

!TranslatedReceiverFinder methodsFor: 'private' stamp: 'KR 7/10/2007 12:38'!
searchParseNode: aParseNode addTo: aCollection
	(aParseNode isMemberOf: MessageNode) ifTrue: [
		((aParseNode selector isMemberOf: SelectorNode) and: [aParseNode selector key = #translated]) ifTrue: [
			aCollection add: aParseNode.
		].
	].
	aParseNode isNil not ifTrue: [
		aParseNode isLeaf not ifTrue: [
			aParseNode getAllChildren do: [:child |
				self searchParseNode: child addTo: aCollection.
			].
		].
	].
! !

!TranslatedReceiverFinder methodsFor: 'as yet unclassified' stamp: 'KR 7/10/2007 12:44'!
analyzeSenders
	| mrs results rr cls mn t o |
	mrs _ SystemNavigation default allCallsOn: #translated.
	results _ OrderedCollection new.
	mrs do: [:mr |
		rr _ OrderedCollection new.
		cls _ Smalltalk at: mr classSymbol.
		rr add: cls category.
		rr add: mr classSymbol.
		rr add: mr methodSymbol.
		mr classIsMeta ifTrue: [
			mn _  cls class decompile: mr methodSymbol.
		] ifFalse: [
			mn _ cls decompile: mr methodSymbol.
		].
		o _ OrderedCollection new.
		t _ Set new.
		self searchParseNode: mn addTo: t.
		t do: [ :te |
			oe _ OrderedCollection new.
			(te receiver isMemberOf: LiteralNode) ifTrue: [ 
			    o add: te receiver key.
			].
		].
		rr add: o.

		results add: rr.
	].
	^ results.
			
	! !