Spaces:
Running
Running
File size: 716 Bytes
8f3f8db |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
transformations
extractSharedCase
"Scan the top-level statements for an shared case directive of the form:
self sharedCodeNamed: <sharedLabel> inCase: <sharedCase>.
and remove the directive from the method body."
| newStatements |
newStatements := OrderedCollection new: parseTree statements size.
parseTree statements do: [ :stmt |
(stmt isSend and: [stmt selector = #sharedCodeNamed:inCase:]) ifTrue: [
sharedLabel := stmt args first value.
sharedCase := stmt args last value
] ifFalse: [
newStatements add: stmt.
].
].
parseTree setStatements: newStatements asArray.
sharedCase ifNotNil:[
args isEmpty ifFalse:[self error: 'Cannot share code sections in methods with arguments'].
]. |