resin 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
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