resin 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. data/amber/css/amber-normalize.css +73 -73
  2. data/amber/css/amber-normalize.less +1 -1
  3. data/amber/css/amber.css +106 -106
  4. data/amber/css/helios.css +242 -0
  5. data/amber/images/hsplitter.png +0 -0
  6. data/amber/images/vsplitter.png +0 -0
  7. data/amber/js/Benchfib.deploy.js +116 -38
  8. data/amber/js/Benchfib.js +120 -42
  9. data/amber/js/Canvas.deploy.js +674 -403
  10. data/amber/js/Canvas.js +682 -411
  11. data/amber/js/Compiler-AST.deploy.js +1150 -0
  12. data/amber/js/Compiler-AST.js +1591 -0
  13. data/amber/js/Compiler-Core.deploy.js +1562 -0
  14. data/amber/js/Compiler-Core.js +1972 -0
  15. data/amber/js/Compiler-Exceptions.deploy.js +114 -0
  16. data/amber/js/Compiler-Exceptions.js +161 -0
  17. data/amber/js/Compiler-IR.deploy.js +2326 -0
  18. data/amber/js/Compiler-IR.js +3146 -0
  19. data/amber/js/Compiler-Inlining.deploy.js +1147 -0
  20. data/amber/js/Compiler-Inlining.js +1514 -0
  21. data/amber/js/Compiler-Semantic.deploy.js +1207 -0
  22. data/amber/js/Compiler-Semantic.js +1628 -0
  23. data/amber/js/Compiler-Tests.deploy.js +646 -60
  24. data/amber/js/Compiler-Tests.js +843 -82
  25. data/amber/js/Compiler.deploy.js +1097 -159
  26. data/amber/js/Compiler.js +1414 -161
  27. data/amber/js/Examples.deploy.js +31 -15
  28. data/amber/js/Examples.js +33 -17
  29. data/amber/js/Helios-Announcements.deploy.js +127 -0
  30. data/amber/js/Helios-Announcements.js +157 -0
  31. data/amber/js/Helios-Browser.deploy.js +1473 -0
  32. data/amber/js/Helios-Browser.js +1953 -0
  33. data/amber/js/Helios-Commands.deploy.js +403 -0
  34. data/amber/js/Helios-Commands.js +563 -0
  35. data/amber/js/Helios-Core.deploy.js +1070 -0
  36. data/amber/js/Helios-Core.js +1445 -0
  37. data/amber/js/Helios-Environments.deploy.js +132 -0
  38. data/amber/js/Helios-Environments.js +179 -0
  39. data/amber/js/Helios-Inspector.deploy.js +855 -0
  40. data/amber/js/Helios-Inspector.js +1155 -0
  41. data/amber/js/Helios-KeyBindings.deploy.js +753 -0
  42. data/amber/js/Helios-KeyBindings.js +1023 -0
  43. data/amber/js/Helios-Layout.deploy.js +383 -0
  44. data/amber/js/Helios-Layout.js +523 -0
  45. data/amber/js/Helios-Workspace.deploy.js +799 -0
  46. data/amber/js/Helios-Workspace.js +1074 -0
  47. data/amber/js/IDE.deploy.js +2541 -1490
  48. data/amber/js/IDE.js +2721 -1660
  49. data/amber/js/Importer-Exporter.deploy.js +671 -0
  50. data/amber/js/Importer-Exporter.js +816 -0
  51. data/amber/js/Kernel-Announcements.deploy.js +137 -20
  52. data/amber/js/Kernel-Announcements.js +176 -22
  53. data/amber/js/Kernel-Classes.deploy.js +555 -168
  54. data/amber/js/Kernel-Classes.js +662 -205
  55. data/amber/js/Kernel-Collections.deploy.js +1403 -618
  56. data/amber/js/Kernel-Collections.js +1545 -690
  57. data/amber/js/Kernel-Exceptions.deploy.js +109 -45
  58. data/amber/js/Kernel-Exceptions.js +123 -49
  59. data/amber/js/Kernel-Methods.deploy.js +196 -81
  60. data/amber/js/Kernel-Methods.js +214 -89
  61. data/amber/js/Kernel-Objects.deploy.js +1542 -1117
  62. data/amber/js/Kernel-Objects.js +1593 -1148
  63. data/amber/js/Kernel-Tests.deploy.js +1725 -772
  64. data/amber/js/Kernel-Tests.js +2301 -1123
  65. data/amber/js/Kernel-Transcript.deploy.js +23 -25
  66. data/amber/js/Kernel-Transcript.js +24 -26
  67. data/amber/js/SUnit.deploy.js +204 -131
  68. data/amber/js/SUnit.js +222 -139
  69. data/amber/js/Spaces.deploy.js +240 -0
  70. data/amber/js/Spaces.js +326 -0
  71. data/amber/js/amber.js +26 -7
  72. data/amber/js/boot.js +65 -47
  73. data/amber/js/init.js +1 -1
  74. data/amber/js/lib/CodeMirror/amber.css +21 -21
  75. data/amber/js/lib/CodeMirror/codemirror.css +119 -13
  76. data/amber/js/lib/CodeMirror/codemirror.js +2219 -1220
  77. data/amber/js/lib/CodeMirror/smalltalk.js +134 -129
  78. data/amber/js/lib/bootstrap/css/bootstrap.css +5837 -0
  79. data/amber/js/lib/bootstrap/css/bootstrap.min.css +841 -0
  80. data/amber/js/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
  81. data/amber/js/lib/bootstrap/img/glyphicons-halflings.png +0 -0
  82. data/amber/js/lib/bootstrap/js/bootstrap.js +2038 -0
  83. data/amber/js/lib/bootstrap/js/bootstrap.min.js +7 -0
  84. data/amber/js/lib/jQuery/jquery-1.8.2.min.js +2 -0
  85. data/amber/js/lib/jQuery/jquery-ui-1.8.24.custom.min.js +125 -0
  86. data/amber/st/Compiler-AST.st +505 -0
  87. data/amber/st/Compiler-Core.st +835 -0
  88. data/amber/st/Compiler-Exceptions.st +87 -0
  89. data/amber/st/Compiler-IR.st +1097 -0
  90. data/amber/st/Compiler-Inlining.st +650 -0
  91. data/amber/st/Compiler-Semantic.st +558 -0
  92. data/amber/st/Compiler-Tests.st +285 -381
  93. data/amber/st/Compiler.st +725 -2
  94. data/amber/st/Helios-Announcements.st +104 -0
  95. data/amber/st/Helios-Browser.st +708 -0
  96. data/amber/st/Helios-Commands.st +223 -0
  97. data/amber/st/Helios-Core.st +532 -0
  98. data/amber/st/Helios-Environments.st +98 -0
  99. data/amber/st/Helios-Inspector.st +367 -0
  100. data/amber/st/Helios-KeyBindings.st +337 -0
  101. data/amber/st/Helios-Layout.st +199 -0
  102. data/amber/st/Helios-Workspace.st +367 -0
  103. data/amber/st/IDE.st +75 -53
  104. data/amber/st/Importer-Exporter.st +386 -0
  105. data/amber/st/Kernel-Announcements.st +92 -0
  106. data/amber/st/Kernel-Classes.st +137 -15
  107. data/amber/st/Kernel-Collections.st +137 -47
  108. data/amber/st/Kernel-Exceptions.st +14 -0
  109. data/amber/st/Kernel-Methods.st +9 -1
  110. data/amber/st/Kernel-Objects.st +29 -5
  111. data/amber/st/Kernel-Tests.st +545 -199
  112. data/amber/st/SUnit.st +10 -0
  113. data/amber/st/Spaces.st +142 -0
  114. data/lib/resin/app.rb +1 -1
  115. metadata +86 -31
  116. data/amber/js/lib/jQuery/jquery-1.4.4.min.js +0 -167
  117. data/amber/js/lib/jQuery/jquery-1.6.4.min.js +0 -4
@@ -29,12 +29,25 @@ allSubclasses
29
29
  ^result
30
30
  !
31
31
 
32
+ allSuperclasses
33
+
34
+ self superclass ifNil: [ ^ #() ].
35
+
36
+ ^ (OrderedCollection with: self superclass)
37
+ addAll: self superclass allSuperclasses;
38
+ yourself
39
+ !
40
+
32
41
  comment
33
42
  ^(self basicAt: 'comment') ifNil: ['']
34
43
  !
35
44
 
36
45
  comment: aString
37
- self basicAt: 'comment' put: aString
46
+ self basicAt: 'comment' put: aString.
47
+ SystemAnnouncer current
48
+ announce: (ClassCommentChanged new
49
+ theClass: self;
50
+ yourself)
38
51
  !
39
52
 
40
53
  commentStamp
@@ -47,12 +60,16 @@ commentStamp: aStamp prior: prior
47
60
  ^self commentStamp
48
61
  !
49
62
 
63
+ definition
64
+ ^ ''
65
+ !
66
+
50
67
  instanceVariableNames
51
68
  <return self.iVarNames>
52
69
  !
53
70
 
54
- methodAt: aString
55
- <return smalltalk.methods(self)[aString]>
71
+ methodAt: aSymbol
72
+ <return smalltalk.methods(self)[aSymbol._asString()]>
56
73
  !
57
74
 
58
75
  methodDictionary
@@ -66,6 +83,10 @@ methodDictionary
66
83
  return dict>
67
84
  !
68
85
 
86
+ methods
87
+ ^ self methodDictionary values
88
+ !
89
+
69
90
  methodsFor: aString
70
91
  ^ClassCategoryReader new
71
92
  class: self category: aString;
@@ -77,6 +98,10 @@ methodsFor: aString stamp: aStamp
77
98
  ^self methodsFor: aString
78
99
  !
79
100
 
101
+ methodsInProtocol: aString
102
+ ^ self methodDictionary values select: [ :each | each protocol = aString ]
103
+ !
104
+
80
105
  name
81
106
  <return self.className || nil>
82
107
  !
@@ -107,6 +132,10 @@ prototype
107
132
  <return self.fn.prototype>
108
133
  !
109
134
 
135
+ selectors
136
+ ^ self methodDictionary keys
137
+ !
138
+
110
139
  subclasses
111
140
  <return smalltalk.subclasses(self)>
112
141
  !
@@ -115,6 +144,14 @@ superclass
115
144
  <return self.superclass || nil>
116
145
  !
117
146
 
147
+ theMetaClass
148
+ ^ self class
149
+ !
150
+
151
+ theNonMetaClass
152
+ ^ self
153
+ !
154
+
118
155
  withAllSubclasses
119
156
  ^(Array with: self) addAll: self allSubclasses; yourself
120
157
  ! !
@@ -122,7 +159,13 @@ withAllSubclasses
122
159
  !Behavior methodsFor: 'compiling'!
123
160
 
124
161
  addCompiledMethod: aMethod
125
- <smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self)>
162
+ <smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self)>.
163
+
164
+ SystemAnnouncer current
165
+ announce: (MethodAdded new
166
+ theClass: self;
167
+ method: aMethod;
168
+ yourself)
126
169
  !
127
170
 
128
171
  compile: aString
@@ -131,14 +174,21 @@ compile: aString
131
174
 
132
175
  compile: aString category: anotherString
133
176
  Compiler new
134
- install: aString forClass: self category: anotherString;
135
- setupClass: self
177
+ install: aString
178
+ forClass: self
179
+ category: anotherString
136
180
  !
137
181
 
138
182
  removeCompiledMethod: aMethod
139
183
  <delete self.fn.prototype[aMethod.selector._asSelector()];
140
184
  delete self.fn.prototype.methods[aMethod.selector];
141
- smalltalk.init(self);>
185
+ smalltalk.init(self);>.
186
+
187
+ SystemAnnouncer current
188
+ announce: (MethodRemoved new
189
+ theClass: self;
190
+ method: aMethod;
191
+ yourself)
142
192
  ! !
143
193
 
144
194
  !Behavior methodsFor: 'instance creation'!
@@ -177,6 +227,24 @@ category
177
227
  ^self package ifNil: ['Unclassified'] ifNotNil: [self package name]
178
228
  !
179
229
 
230
+ definition
231
+ ^ String streamContents: [ :stream |
232
+ stream
233
+ nextPutAll: self superclass asString;
234
+ nextPutAll: ' subclass: #';
235
+ nextPutAll: self name;
236
+ nextPutAll: String lf, String tab;
237
+ nextPutAll: 'instanceVariableNames: '''.
238
+ self instanceVariableNames
239
+ do: [ :each | stream nextPutAll: each ]
240
+ separatedBy: [ stream nextPutAll: ' ' ].
241
+ stream
242
+ nextPutAll: '''', String lf, String tab;
243
+ nextPutAll: 'package: ''';
244
+ nextPutAll: self category;
245
+ nextPutAll: '''' ]
246
+ !
247
+
180
248
  package
181
249
  <return self.pkg>
182
250
  !
@@ -186,11 +254,7 @@ package: aPackage
186
254
  !
187
255
 
188
256
  rename: aString
189
- <
190
- smalltalk[aString] = self;
191
- delete smalltalk[self.className];
192
- self.className = aString;
193
- >
257
+ ClassBuilder new renameClass: self to: aString
194
258
  ! !
195
259
 
196
260
  !Class methodsFor: 'class creation'!
@@ -216,6 +280,12 @@ subclass: aString instanceVariableNames: aString2 package: aString3
216
280
  superclass: self subclass: aString asString instanceVariableNames: aString2 package: aString3
217
281
  ! !
218
282
 
283
+ !Class methodsFor: 'converting'!
284
+
285
+ asJavascript
286
+ ^ 'smalltalk.', self name
287
+ ! !
288
+
219
289
  !Class methodsFor: 'printing'!
220
290
 
221
291
  printString
@@ -239,6 +309,18 @@ Metaclass instances have a single instance, which they hold onto, which is the c
239
309
 
240
310
  !Metaclass methodsFor: 'accessing'!
241
311
 
312
+ definition
313
+ ^ String streamContents: [ :stream |
314
+ stream
315
+ nextPutAll: self asString;
316
+ nextPutAll: ' class ';
317
+ nextPutAll: 'instanceVariableNames: '''.
318
+ self instanceVariableNames
319
+ do: [ :each | stream nextPutAll: each ]
320
+ separatedBy: [ stream nextPutAll: ' ' ].
321
+ stream nextPutAll: '''' ]
322
+ !
323
+
242
324
  instanceClass
243
325
  <return self.instanceClass>
244
326
  !
@@ -246,6 +328,20 @@ instanceClass
246
328
  instanceVariableNames: aCollection
247
329
  ClassBuilder new
248
330
  class: self instanceVariableNames: aCollection
331
+ !
332
+
333
+ theMetaClass
334
+ ^ self
335
+ !
336
+
337
+ theNonMetaClass
338
+ ^ self instanceClass
339
+ ! !
340
+
341
+ !Metaclass methodsFor: 'converting'!
342
+
343
+ asJavascript
344
+ ^ 'smalltalk.', self instanceClass name, '.klass'
249
345
  ! !
250
346
 
251
347
  !Metaclass methodsFor: 'printing'!
@@ -273,19 +369,45 @@ Rather than using ClassBuilder directly to compile a class, use `Class >> subcla
273
369
  class: aClass instanceVariableNames: aString
274
370
  aClass isMetaclass ifFalse: [self error: aClass name, ' is not a metaclass'].
275
371
  aClass basicAt: 'iVarNames' put: (self instanceVariableNamesFor: aString).
372
+
373
+ SystemAnnouncer current
374
+ announce: (ClassDefinitionChanged new
375
+ theClass: aClass;
376
+ yourself).
377
+
276
378
  self setupClass: aClass
277
379
  !
278
380
 
381
+ renameClass: aClass to: aString
382
+ <
383
+ smalltalk[aString] = aClass;
384
+ delete smalltalk[aClass.className];
385
+ aClass.className = aString;
386
+ >.
387
+
388
+ SystemAnnouncer current
389
+ announce: (ClassRenamed new
390
+ theClass: aClass;
391
+ yourself)
392
+ !
393
+
279
394
  superclass: aClass subclass: aString
280
395
  ^self superclass: aClass subclass: aString instanceVariableNames: '' package: nil
281
396
  !
282
397
 
283
398
  superclass: aClass subclass: aString instanceVariableNames: aString2 package: aString3
284
399
  | newClass |
285
- newClass := self addSubclassOf: aClass
286
- named: aString instanceVariableNames: (self instanceVariableNamesFor: aString2)
287
- package: (aString3 ifNil: ['unclassified']).
400
+
401
+ newClass := self addSubclassOf: aClass
402
+ named: aString instanceVariableNames: (self instanceVariableNamesFor: aString2)
403
+ package: (aString3 ifNil: ['unclassified']).
288
404
  self setupClass: newClass.
405
+
406
+ SystemAnnouncer current
407
+ announce: (ClassAdded new
408
+ theClass: newClass;
409
+ yourself).
410
+
289
411
  ^newClass
290
412
  ! !
291
413
 
@@ -27,16 +27,22 @@ value: aValue
27
27
  ^self class = anAssociation class and: [
28
28
  self key = anAssociation key and: [
29
29
  self value = anAssociation value]]
30
+ ! !
31
+
32
+ !Association methodsFor: 'printing'!
33
+
34
+ printString
35
+ "print the contents of the Association into a string and return the string"
36
+ ^String streamContents: [:aStream |
37
+ self storeOn: aStream]
30
38
  !
31
39
 
32
40
  storeOn: aStream
33
- "Store in the format (key->value)"
41
+ "Store in the format: key->value"
34
42
 
35
- "aStream nextPutAll: '('."
36
43
  key storeOn: aStream.
37
44
  aStream nextPutAll: '->'.
38
45
  value storeOn: aStream.
39
- "aStream nextPutAll: ')'"
40
46
  ! !
41
47
 
42
48
  !Association class methodsFor: 'instance creation'!
@@ -54,6 +60,15 @@ Object subclass: #Collection
54
60
 
55
61
  !Collection methodsFor: 'accessing'!
56
62
 
63
+ occurrencesOf: anObject
64
+ "Answer how many of the receiver's elements are equal to anObject."
65
+
66
+ | tally |
67
+ tally := 0.
68
+ self do: [:each | anObject = each ifTrue: [tally := tally + 1]].
69
+ ^tally
70
+ !
71
+
57
72
  readStream
58
73
  ^self stream
59
74
  !
@@ -138,11 +153,11 @@ copyWithoutAll: aCollection
138
153
  !Collection methodsFor: 'enumerating'!
139
154
 
140
155
  collect: aBlock
141
- | newCollection |
142
- newCollection := self class new.
143
- self do: [:each |
144
- newCollection add: (aBlock value: each)].
145
- ^newCollection
156
+ | stream |
157
+ stream := self class new writeStream.
158
+ self do: [ :each |
159
+ stream nextPut: (aBlock value: each) ].
160
+ ^stream contents
146
161
  !
147
162
 
148
163
  detect: aBlock
@@ -180,6 +195,22 @@ inject: anObject into: aBlock
180
195
  ^result
181
196
  !
182
197
 
198
+ intersection: aCollection
199
+ "Answer the set theoretic intersection of two collections."
200
+
201
+ | set outputSet |
202
+
203
+ set := self asSet.
204
+ outputSet := Set new.
205
+
206
+ aCollection do: [ :each |
207
+ ((set includes: each) and: [(outputSet includes: each) not])
208
+ ifTrue: [
209
+ outputSet add: each]].
210
+
211
+ ^ self class withAll: outputSet asArray
212
+ !
213
+
183
214
  reject: aBlock
184
215
  ^self select: [:each | (aBlock value: each) = false]
185
216
  !
@@ -199,6 +230,18 @@ errorNotFound
199
230
  self error: 'Object is not in the collection'
200
231
  ! !
201
232
 
233
+ !Collection methodsFor: 'printing'!
234
+
235
+ printString
236
+ "print the contents of the Collection into a string and return it"
237
+ ^String streamContents: [:aStream |
238
+ aStream
239
+ nextPutAll: super printString, ' ('.
240
+ self do: [:each | aStream nextPutAll: each printString]
241
+ separatedBy: [aStream nextPutAll: ' '].
242
+ aStream nextPutAll: ')']
243
+ ! !
244
+
202
245
  !Collection methodsFor: 'testing'!
203
246
 
204
247
  ifEmpty: aBlock
@@ -304,13 +347,21 @@ at: aKey ifAbsentPut: aBlock
304
347
  !
305
348
 
306
349
  at: aKey ifPresent: aBlock
307
- ^(self basicAt: aKey) ifNotNil: [aBlock value: (self at: aKey)]
350
+ "Lookup the given key in the receiver.
351
+ If it is present, answer the value of evaluating the given block with the value associated with the key.
352
+ Otherwise, answer nil."
353
+ ^(self includesKey: aKey)
354
+ ifTrue: [ aBlock value: (self at: aKey) ]
355
+ ifFalse: [ nil ]
308
356
  !
309
357
 
310
358
  at: aKey ifPresent: aBlock ifAbsent: anotherBlock
311
- ^(self basicAt: aKey)
312
- ifNil: anotherBlock
313
- ifNotNil: [aBlock value: (self at: aKey)]
359
+ "Lookup the given key in the receiver.
360
+ If it is present, answer the value of evaluating the oneArgBlock with the value associated with the key,
361
+ otherwise answer the value of absentBlock."
362
+ ^(self includesKey: aKey)
363
+ ifTrue: [ aBlock value: (self at: aKey) ]
364
+ ifFalse: anotherBlock
314
365
  !
315
366
 
316
367
  at: aKey put: aValue
@@ -453,18 +504,13 @@ select: aBlock
453
504
  !HashedCollection methodsFor: 'printing'!
454
505
 
455
506
  printString
456
- ^String streamContents: [:aStream|
457
- aStream
458
- nextPutAll: super printString;
459
- nextPutAll: '('.
460
- self associations
461
- do: [:anAssociation|
462
- aStream
463
- nextPutAll: anAssociation key printString;
464
- nextPutAll: ' -> ';
465
- nextPutAll: anAssociation value printString]
466
- separatedBy: [aStream nextPutAll: ' , '].
467
- aStream nextPutAll: ')']
507
+ "print the contents of the HashedCollection into a string and return the string"
508
+ ^String streamContents: [:aStream |
509
+ aStream nextPutAll: 'a ', self class name, '('.
510
+ self associations
511
+ do: [:each | each storeOn: aStream]
512
+ separatedBy: [ aStream nextPutAll: ' , '].
513
+ aStream nextPutAll: ')']
468
514
  !
469
515
 
470
516
  storeOn: aStream
@@ -524,10 +570,22 @@ at: aKey put: aValue
524
570
  >
525
571
  !
526
572
 
573
+ keyAtValue: anObject
574
+
575
+ ^ (self associations
576
+ detect:[:k :v| v == anObject]
577
+ ifNone:[self error: 'Not found']) key
578
+ !
579
+
527
580
  keys
528
581
  ^keys copy
529
582
  !
530
583
 
584
+ valueAt: anObject
585
+
586
+ ^ self associationsDo:2
587
+ !
588
+
531
589
  values
532
590
  ^values copy
533
591
  ! !
@@ -624,9 +682,9 @@ indexOf: anObject
624
682
 
625
683
  indexOf: anObject ifAbsent: aBlock
626
684
  <
627
- for(var i=0;i<self.length;i++){
628
- if(self[i].__eq(anObject)) {return i+1}
629
- }
685
+ for(var i=0;i<self.length;i++) {
686
+ if(smalltalk.send(self[i], '__eq', [anObject])) {return i+1}
687
+ };
630
688
  return aBlock();
631
689
  >
632
690
  !
@@ -718,19 +776,6 @@ withIndexDo: aBlock
718
776
  <for(var i=0;i<self.length;i++){aBlock(self[i], i+1);}>
719
777
  ! !
720
778
 
721
- !SequenceableCollection methodsFor: 'printing'!
722
-
723
- printString
724
- | str |
725
- str := '' writeStream.
726
- str nextPutAll: super printString, ' ('.
727
- self
728
- do: [:each | str nextPutAll: each printString]
729
- separatedBy: [str nextPutAll: ' '].
730
- str nextPutAll: ')'.
731
- ^str contents
732
- ! !
733
-
734
779
  SequenceableCollection subclass: #Array
735
780
  instanceVariableNames: ''
736
781
  package: 'Kernel-Collections'!
@@ -758,15 +803,16 @@ add: anObject
758
803
  <self.push(anObject); return anObject;>
759
804
  !
760
805
 
761
- remove: anObject
806
+ remove: anObject ifAbsent: aBlock
762
807
  <
763
808
  for(var i=0;i<self.length;i++) {
764
809
  if(self[i] == anObject) {
765
810
  self.splice(i,1);
766
- break;
811
+ return self;
767
812
  }
768
813
  }
769
- >
814
+ >.
815
+ aBlock value
770
816
  !
771
817
 
772
818
  removeFrom: aNumber to: anotherNumber
@@ -837,10 +883,12 @@ with: anObject with: anObject2 with: anObject3
837
883
  !
838
884
 
839
885
  withAll: aCollection
840
- | instance |
886
+ | instance index |
887
+ index := 1.
841
888
  instance := self new: aCollection size.
842
- aCollection withIndexDo: [:each :index |
843
- instance at: index put: each].
889
+ aCollection do: [:each |
890
+ instance at: index put: each.
891
+ index := index + 1].
844
892
  ^instance
845
893
  ! !
846
894
 
@@ -921,7 +969,7 @@ asciiValue
921
969
  !
922
970
 
923
971
  at: anIndex ifAbsent: aBlock
924
- <return self[anIndex - 1] || aBlock()>
972
+ <return String(self).charAt(anIndex - 1) || aBlock()>
925
973
  !
926
974
 
927
975
  escaped
@@ -1046,6 +1094,16 @@ shallowCopy
1046
1094
  ^self class fromString: self
1047
1095
  ! !
1048
1096
 
1097
+ !String methodsFor: 'enumerating'!
1098
+
1099
+ do: aBlock
1100
+ <for(var i=0;i<self.length;i++){aBlock(self.charAt(i));}>
1101
+ !
1102
+
1103
+ withIndexDo: aBlock
1104
+ <for(var i=0;i<self.length;i++){aBlock(self.charAt(i), i+1);}>
1105
+ ! !
1106
+
1049
1107
  !String methodsFor: 'printing'!
1050
1108
 
1051
1109
  printNl
@@ -1210,6 +1268,10 @@ tab
1210
1268
 
1211
1269
  !String class methodsFor: 'instance creation'!
1212
1270
 
1271
+ fromCharCode: anInteger
1272
+ <return String.fromCharCode(anInteger)>
1273
+ !
1274
+
1213
1275
  fromString: aString
1214
1276
  <return new self.fn(aString)>
1215
1277
  !
@@ -1299,6 +1361,34 @@ shallowCopy
1299
1361
  ^self
1300
1362
  ! !
1301
1363
 
1364
+ !Symbol methodsFor: 'enumerating'!
1365
+
1366
+ collect: aBlock
1367
+ ^ (self asString collect: aBlock) asSymbol
1368
+ !
1369
+
1370
+ detect: aBlock
1371
+ ^ self asString detect: aBlock
1372
+ !
1373
+
1374
+ do: aBlock
1375
+ self asString do: aBlock
1376
+ !
1377
+
1378
+ select: aBlock
1379
+ ^ (self asString select: aBlock) asSymbol
1380
+ !
1381
+
1382
+ withIndexDo: aBlock
1383
+ self asString withIndexDo: aBlock
1384
+ ! !
1385
+
1386
+ !Symbol methodsFor: 'evaluating'!
1387
+
1388
+ value: anObject
1389
+ ^anObject perform: self
1390
+ ! !
1391
+
1302
1392
  !Symbol methodsFor: 'printing'!
1303
1393
 
1304
1394
  isSymbol