| 1 | SequenceableCollection extend [ |
| 2 | asDictionary [ |
| 3 | | dict assoc | |
| 4 | dict := Dictionary new. |
| 5 | 1 to: self size by: 2 do: |
| 6 | [ :i | dict add: (self at: i) -> (self at: i + 1) ]. |
| 7 | ^dict |
| 8 | ] |
| 9 | ] |
| 10 | |
| 11 | String extend [ |
| 12 | parse [ |
| 13 | |text| |
| 14 | text := self copyFrom: 2 to: self size - 1. |
| 15 | text := text copyReplaceAll: '\"' with: '"'. |
| 16 | text := text copyReplaceAll: '\n' with: ' |
| 17 | '. |
| 18 | text := text copyReplaceAll: '\\' with: '\'. |
| 19 | ^text |
| 20 | ] |
| 21 | |
| 22 | repr [ |
| 23 | |text| |
| 24 | text := self copyReplaceAll: '\' with: '\\'. |
| 25 | text := text copyReplaceAll: ' |
| 26 | ' with: '\n'. |
| 27 | text := text copyReplaceAll: '"' with: '\"'. |
| 28 | ^'"', text, '"' |
| 29 | ] |
| 30 | ] |
| 31 | |
| 32 | BlockClosure extend [ |
| 33 | valueWithExit [ |
| 34 | ^self value: [ ^nil ] |
| 35 | ] |
| 36 | ] |
| 37 | |
| 38 | Object extend [ |
| 39 | toMALValue [ |
| 40 | self = true ifTrue: [ ^MALObject True ]. |
| 41 | self = false ifTrue: [ ^MALObject False ]. |
| 42 | self = nil ifTrue: [ ^MALObject Nil ]. |
| 43 | self isNumber ifTrue: [ ^MALNumber new: self ]. |
| 44 | self isString ifTrue: [ ^MALString new: self ]. |
| 45 | self isSymbol ifTrue: [ ^MALSymbol new: self ]. |
| 46 | self isArray ifTrue: [ |
| 47 | ^MALVector new: (self asOrderedCollection collect: |
| 48 | [ :item | item toMALValue ]) |
| 49 | ]. |
| 50 | self isSequenceable ifTrue: [ |
| 51 | ^MALList new: (self asOrderedCollection collect: |
| 52 | [ :item | item toMALValue ]) |
| 53 | ]. |
| 54 | self class = Dictionary ifTrue: [ |
| 55 | | result | |
| 56 | result := Dictionary new. |
| 57 | self keysAndValuesDo: [ :key :value | |
| 58 | result at: key toMALValue put: value toMALValue |
| 59 | ]. |
| 60 | ^MALMap new: result |
| 61 | ] |
| 62 | ] |
| 63 | ] |
| 64 | |
| 65 | "NOTE: bugfix version from 3.2.91 for 3.2.4" |
| 66 | Namespace current: Kernel [ |
| 67 | |
| 68 | MatchingRegexResults extend [ |
| 69 | at: anIndex [ |
| 70 | <category: 'accessing'> |
| 71 | | reg text | |
| 72 | anIndex = 0 ifTrue: [^self match]. |
| 73 | cache isNil ifTrue: [cache := Array new: registers size]. |
| 74 | (cache at: anIndex) isNil |
| 75 | ifTrue: |
| 76 | [reg := registers at: anIndex. |
| 77 | text := reg isNil |
| 78 | ifTrue: [nil] |
| 79 | ifFalse: [ |
| 80 | reg isEmpty |
| 81 | ifTrue: [''] |
| 82 | ifFalse: [self subject copyFrom: reg first to: reg last]]. |
| 83 | cache at: anIndex put: text]. |
| 84 | ^cache at: anIndex |
| 85 | ] |
| 86 | ] |
| 87 | |
| 88 | ] |