MCStReader.st
author Claus Gittinger <cg@exept.de>
Wed, 22 Nov 2006 14:06:33 +0100
changeset 41 7bf947de2da2
child 209 780f37190c97
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
MCSnapshotReader subclass:#MCStReader
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:''
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'Monticello-Chunk Format'
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!MCStReader class methodsFor:'as yet unclassified'!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
extension
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	^ 'st'
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
! !
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!MCStReader methodsFor:'as yet unclassified'!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
addDefinitionsFromDoit: aString
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	(MCDoItParser forDoit: aString) ifNotNilDo:
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
		[:parser |
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
		parser addDefinitionsTo: definitions]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
categoryFromDoIt: aString
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	| tokens  |
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	tokens _ Scanner new scanTokens: aString.
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	tokens size = 3 ifFalse: [self error: 'Unrecognized category definition'].
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
	^ tokens at: 3
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
classDefinitionFrom: aPseudoClass
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
	| tokens |
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
	tokens _ Scanner new scanTokens: aPseudoClass definition.
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	tokens size = 11 ifFalse: [self error: 'Unrecognized class definition'].
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	^ MCClassDefinition
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
		name: (tokens at: 3)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
		superclassName: (tokens at: 1)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
		category: (tokens at: 11)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
		instVarNames: ((tokens at: 5) findTokens: ' ')
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
		classVarNames: ((tokens at: 7) findTokens: ' ')
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
		poolDictionaryNames: ((tokens at: 9) findTokens: ' ')
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
		classInstVarNames: (self classInstVarNamesFor: aPseudoClass)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
		type: (self typeOfSubclass: (tokens at: 2))
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
		comment: (self commentFor: aPseudoClass)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
		commentStamp: (self commentStampFor: aPseudoClass)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
classInstVarNamesFor: aPseudoClass
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
	| tokens |
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
	aPseudoClass metaClass hasDefinition ifFalse: [^ #()].
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
	
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
	tokens _ Scanner new scanTokens: aPseudoClass metaClass definition.
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
	tokens size = 4 ifFalse: [self error: 'Unrecognized metaclass definition'].
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
	^ tokens last findTokens: ' '
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
commentFor: aPseudoClass
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
	| comment |
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
	comment _ aPseudoClass organization classComment.
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
	^ comment asString = ''
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
		ifTrue: [comment]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
		ifFalse: [comment string]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
commentStampFor: aPseudoClass
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
	| comment |
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
	comment _ aPseudoClass organization classComment.
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
	^  [comment stamp] on: MessageNotUnderstood do: [nil]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
methodDefinitionsFor: aPseudoClass
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
	^ aPseudoClass selectors collect: 
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
		[:ea |
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
		 MCMethodDefinition
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
			className: aPseudoClass name
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
			classIsMeta: aPseudoClass isMeta
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
			selector: ea
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
			category: (aPseudoClass organization categoryOfElement: ea)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
			timeStamp: (aPseudoClass stampAt: ea)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
			source: (aPseudoClass sourceCodeAt: ea)]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
systemOrganizationFromRecords: changeRecords
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
	| categories |
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
	categories _ changeRecords
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
					select: [:ea | 'SystemOrganization*' match: ea string]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
					thenCollect: [:ea | (self categoryFromDoIt: ea string)].
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
	^ categories isEmpty ifFalse: [MCOrganizationDefinition categories: categories asArray]
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
typeOfSubclass: aSymbol
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
	#(
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
		(subclass: normal)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
		(variableSubclass: variable)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
		(variableByteSubclass: bytes)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
		(variableWordSubclass: words)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
		(weakSubclass: weak)
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
		) do: [:ea | ea first = aSymbol ifTrue: [^ ea second]].
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
	self error: 'Unrecognized class definition'
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
! !
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
!MCStReader methodsFor:'evaluating'!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
loadDefinitions
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
	| filePackage |
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
	filePackage _
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
		FilePackage new
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
			fullName: 'ReadStream';
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
			fileInFrom: self readStream.
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
	definitions _ OrderedCollection new.
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
	filePackage classes do:
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
		[:pseudoClass |
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
		pseudoClass hasDefinition
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
			ifTrue: [definitions add:
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
					(self classDefinitionFrom: pseudoClass)].
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
		definitions addAll: (self methodDefinitionsFor: pseudoClass).
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
		definitions addAll: (self methodDefinitionsFor: pseudoClass metaClass)].
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
	filePackage doIts do:
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
		[:ea |
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
		self addDefinitionsFromDoit: ea string].
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
	
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
readStream
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
	^ ('!!!!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
', stream contents) readStream
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
! !
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
!MCStReader class methodsFor:'documentation'!
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
version
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCStReader.st,v 1.1 2006-11-22 13:06:33 cg Exp $'
7bf947de2da2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
! !