9 ^write: pkgName to: fileName [
11 (pkg := Package find: pkgName) ifNil: [ self error: 'no package: ' + (pkgName asString) ].
12 fl := File openWrite: fileName.
14 self in: obj at: 1 put: fl.
15 self in: obj at: 2 put: pkg.
16 self in: obj at: 3 put: nil.
22 visited := Dictionary new.
27 ^pkg classes includes: cls asString asSymbol
31 file write: 'Package [\n'.
33 file write: pkg name asString.
35 file write: ']\n\n\n'.
36 pkg classes do: [:cls | self writeClass: cls ].
40 ((cls isKindOf: Class) and: [ cls isMeta not ]) ifTrue: [
41 (visited includes: cls asString asSymbol) ifFalse: [
42 visited at: cls asString asSymbol put: true.
43 (self inPackage: cls super) ifTrue: [
44 self writeClass: cls super.
46 'writing ' print. cls asString printNl.
47 self writeOneClass: cls.
55 file write: parent asString + ' subclass: ' + cls asString + ' '.
56 vars := cls class variables.
57 ((vars notNil) and: [ vars size > 0 ]) ifTrue: [
59 vars do: [:v | file write: ' ' + v asString ].
63 vars := cls variables.
64 ((vars notNil) and: [ vars size > 0 ]) ifTrue: [
66 vars do: [:v | file write: ' ' + v asString ].
69 self writeMethodsOf: cls class asMeta: true.
70 self writeMethodsOf: cls asMeta: false.
74 writeMethodsOf: cls asMeta: isMeta [
76 methods := cls methods.
77 methods ifNil: [ ^nil ].
78 methods do: [:m | self writeMethod: m of: cls asMeta: isMeta ]
81 "FIXME: skip method name"
82 writeMethod: meth of: cls asMeta: isMeta [
85 isMeta ifTrue: [ file write: '^' ].
86 txt := meth text asString.
87 c := txt indexOf: String newline.
88 file write: (txt from: 1 to: c-1) removeTrailingBlanks.
90 file write: (txt from: c+1) removeTrailingBlanks.
91 "Verify if txt ends with a newline"