Add code for example
This commit is contained in:
@@ -8,6 +8,46 @@ Class {
|
|||||||
#category : #'Carp-IDE'
|
#category : #'Carp-IDE'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{ #category : #example }
|
||||||
|
CarpFile class >> coreLoadStatements [
|
||||||
|
|
||||||
|
<gtExample>
|
||||||
|
| loadStatements files carpFiles cFiles aDict nodes loadNodes s contents |
|
||||||
|
"the load statements in carp"
|
||||||
|
loadStatements := { 'load'. 'load-once'. 'system-include' }.
|
||||||
|
|
||||||
|
"get all the carp and c files in the standard library (assumes that there is a carp directory in the home folder"
|
||||||
|
files := (FileLocator home / 'carp/core') children.
|
||||||
|
carpFiles := files select: [ :aFile | aFile extension = 'carp' ].
|
||||||
|
cFiles := files select: [ :aFile | aFile extension = 'h' ].
|
||||||
|
|
||||||
|
"get a mapping from all files to all the files they load"
|
||||||
|
aDict := Dictionary new.
|
||||||
|
|
||||||
|
carpFiles do: [ :aCarpFile |
|
||||||
|
contents := CarpParser parse: aCarpFile contents.
|
||||||
|
|
||||||
|
nodes := OrderedCollection new.
|
||||||
|
contents allNodesOfType: CarpListNode do: [ :c | nodes add: c ].
|
||||||
|
|
||||||
|
loadNodes := nodes select: [ :aNode |
|
||||||
|
(aNode expressions size > 0 and: [
|
||||||
|
aNode expressions first isKindOf: CarpVariableNode ])
|
||||||
|
and: [
|
||||||
|
loadStatements includes:
|
||||||
|
aNode expressions first value value ] ].
|
||||||
|
|
||||||
|
aDict at: aCarpFile basename put: (loadNodes collect: [ :aNode |
|
||||||
|
s := aNode expressions second value value.
|
||||||
|
s copyFrom: 2 to: s size - 1 ]) ].
|
||||||
|
|
||||||
|
cFiles do: [ :aCFile |
|
||||||
|
aDict at: aCFile basename put: OrderedCollection new ].
|
||||||
|
|
||||||
|
^ aDict
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
{ #category : #'instance creation' }
|
{ #category : #'instance creation' }
|
||||||
CarpFile class >> for: aFileName [
|
CarpFile class >> for: aFileName [
|
||||||
^ self new for: aFileName
|
^ self new for: aFileName
|
||||||
|
Reference in New Issue
Block a user