MCStReader.st
changeset 209 780f37190c97
parent 41 7bf947de2da2
child 308 e7ea1f4fb7fb
--- a/MCStReader.st	Sat Aug 20 13:43:21 2011 +0200
+++ b/MCStReader.st	Sat Aug 20 13:43:28 2011 +0200
@@ -17,29 +17,40 @@
 !MCStReader methodsFor:'as yet unclassified'!
 
 addDefinitionsFromDoit: aString
-	(MCDoItParser forDoit: aString) ifNotNilDo:
-		[:parser |
+	| parser |
+	(parser := MCDoItParser forDoit: aString) ifNotNil:
+		[
 		parser addDefinitionsTo: definitions]
 !
 
 categoryFromDoIt: aString
 	| tokens  |
-	tokens _ Scanner new scanTokens: aString.
+	tokens := Scanner new scanTokens: aString.
 	tokens size = 3 ifFalse: [self error: 'Unrecognized category definition'].
 	^ tokens at: 3
 !
 
 classDefinitionFrom: aPseudoClass
-	| tokens |
-	tokens _ Scanner new scanTokens: aPseudoClass definition.
-	tokens size = 11 ifFalse: [self error: 'Unrecognized class definition'].
+	| tokens traitCompositionString lastIndex classTraitCompositionString |
+	tokens := Scanner new scanTokens: aPseudoClass definition.
+	traitCompositionString := ((ReadStream on: aPseudoClass definition)
+		match: 'uses:';
+		upToAll: 'instanceVariableNames:') withBlanksTrimmed.
+	classTraitCompositionString := ((ReadStream on: aPseudoClass metaClass definition asString)
+		match: 'uses:';
+		upToAll: 'instanceVariableNames:') withBlanksTrimmed.
+	traitCompositionString isEmpty ifTrue: [traitCompositionString := '{}'].
+	classTraitCompositionString isEmpty ifTrue: [classTraitCompositionString := '{}'].
+	lastIndex := tokens size.
 	^ MCClassDefinition
 		name: (tokens at: 3)
 		superclassName: (tokens at: 1)
-		category: (tokens at: 11)
-		instVarNames: ((tokens at: 5) findTokens: ' ')
-		classVarNames: ((tokens at: 7) findTokens: ' ')
-		poolDictionaryNames: ((tokens at: 9) findTokens: ' ')
+		traitComposition: traitCompositionString
+		classTraitComposition: classTraitCompositionString
+		category: (tokens at: lastIndex)
+		instVarNames: ((tokens at: lastIndex - 6) findTokens: ' ')
+		classVarNames: ((tokens at: lastIndex - 4) findTokens: ' ')
+		poolDictionaryNames: ((tokens at: lastIndex - 2) findTokens: ' ')
 		classInstVarNames: (self classInstVarNamesFor: aPseudoClass)
 		type: (self typeOfSubclass: (tokens at: 2))
 		comment: (self commentFor: aPseudoClass)
@@ -48,16 +59,17 @@
 
 classInstVarNamesFor: aPseudoClass
 	| tokens |
+	
+	self flag: #traits.
 	aPseudoClass metaClass hasDefinition ifFalse: [^ #()].
-	
-	tokens _ Scanner new scanTokens: aPseudoClass metaClass definition.
-	tokens size = 4 ifFalse: [self error: 'Unrecognized metaclass definition'].
+	tokens := Scanner new scanTokens: aPseudoClass metaClass definition.
+	"tokens size = 4 ifFalse: [self error: 'Unrecognized metaclass definition']."
 	^ tokens last findTokens: ' '
 !
 
 commentFor: aPseudoClass
 	| comment |
-	comment _ aPseudoClass organization classComment.
+	comment := aPseudoClass organization classComment.
 	^ comment asString = ''
 		ifTrue: [comment]
 		ifFalse: [comment string]
@@ -65,7 +77,7 @@
 
 commentStampFor: aPseudoClass
 	| comment |
-	comment _ aPseudoClass organization classComment.
+	comment := aPseudoClass organization classComment.
 	^  [comment stamp] on: MessageNotUnderstood do: [nil]
 !
 
@@ -83,7 +95,7 @@
 
 systemOrganizationFromRecords: changeRecords
 	| categories |
-	categories _ changeRecords
+	categories := changeRecords
 					select: [:ea | 'SystemOrganization*' match: ea string]
 					thenCollect: [:ea | (self categoryFromDoIt: ea string)].
 	^ categories isEmpty ifFalse: [MCOrganizationDefinition categories: categories asArray]
@@ -104,11 +116,11 @@
 
 loadDefinitions
 	| filePackage |
-	filePackage _
+	filePackage :=
 		FilePackage new
 			fullName: 'ReadStream';
 			fileInFrom: self readStream.
-	definitions _ OrderedCollection new.
+	definitions := OrderedCollection new.
 	filePackage classes do:
 		[:pseudoClass |
 		pseudoClass hasDefinition
@@ -131,5 +143,13 @@
 !MCStReader class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCStReader.st,v 1.1 2006-11-22 13:06:33 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCStReader.st,v 1.2 2011-08-20 11:43:28 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCStReader.st,v 1.2 2011-08-20 11:43:28 cg Exp $'
+!
+
+version_SVN
+    ^ '§Id: MCStReader.st 17 2010-10-13 12:07:52Z vranyj1 §'
 ! !