resin 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +2 -0
- data/amber/bin/nodecompile.js +3 -3
- data/amber/css/amber.css +47 -23
- data/amber/images/off.amber.png +0 -0
- data/amber/images/offHover.amber.png +0 -0
- data/amber/images/sprite.amber.png +0 -0
- data/amber/images/tinylogo.amber.png +0 -0
- data/amber/js/Benchfib.deploy.js +34 -34
- data/amber/js/Benchfib.js +49 -49
- data/amber/js/Canvas.deploy.js +937 -937
- data/amber/js/Canvas.js +1622 -1622
- data/amber/js/Compiler-Tests.deploy.js +97 -0
- data/amber/js/Compiler-Tests.js +137 -0
- data/amber/js/Compiler.deploy.js +1030 -924
- data/amber/js/Compiler.js +1613 -1467
- data/amber/js/Documentation.deploy.js +417 -417
- data/amber/js/Documentation.js +728 -728
- data/amber/js/Examples.deploy.js +24 -13
- data/amber/js/Examples.js +36 -19
- data/amber/js/IDE.deploy.js +1583 -1527
- data/amber/js/IDE.js +2586 -2510
- data/amber/js/Kernel-Announcements.deploy.js +19 -19
- data/amber/js/Kernel-Announcements.js +28 -28
- data/amber/js/Kernel-Classes.deploy.js +332 -229
- data/amber/js/Kernel-Classes.js +532 -384
- data/amber/js/Kernel-Collections.deploy.js +1516 -1712
- data/amber/js/Kernel-Collections.js +2436 -2712
- data/amber/js/Kernel-Exceptions.deploy.js +85 -62
- data/amber/js/Kernel-Exceptions.js +131 -98
- data/amber/js/Kernel-Methods.deploy.js +326 -378
- data/amber/js/Kernel-Methods.js +473 -525
- data/amber/js/Kernel-Objects.deploy.js +1777 -2428
- data/amber/js/Kernel-Objects.js +2599 -3426
- data/amber/js/Kernel-Tests.deploy.js +871 -772
- data/amber/js/Kernel-Tests.js +1207 -1083
- data/amber/js/Kernel-Transcript.deploy.js +57 -57
- data/amber/js/Kernel-Transcript.js +94 -94
- data/amber/js/SUnit.deploy.js +116 -116
- data/amber/js/SUnit.js +211 -211
- data/amber/js/amber.js +10 -11
- data/amber/js/boot.js +132 -156
- data/amber/js/init.js +2 -2
- data/amber/js/parser.js +2095 -3014
- data/amber/js/parser.pegjs +1 -1
- data/amber/st/Benchfib.st +22 -22
- data/amber/st/Canvas.st +471 -471
- data/amber/st/Compiler-Tests.st +471 -0
- data/amber/st/Compiler.st +858 -794
- data/amber/st/Examples.st +22 -5
- data/amber/st/IDE.st +1326 -1291
- data/amber/st/Kernel-Announcements.st +2 -2
- data/amber/st/Kernel-Classes.st +148 -90
- data/amber/st/Kernel-Collections.st +950 -1061
- data/amber/st/Kernel-Exceptions.st +33 -25
- data/amber/st/Kernel-Methods.st +151 -151
- data/amber/st/Kernel-Objects.st +891 -1036
- data/amber/st/Kernel-Tests.st +622 -544
- data/amber/st/Kernel-Transcript.st +38 -38
- data/amber/st/SUnit.st +53 -53
- metadata +27 -20
@@ -1,30 +1,35 @@
|
|
1
1
|
Smalltalk current createPackage: 'Kernel-Exceptions' properties: #{}!
|
2
2
|
Object subclass: #Error
|
3
3
|
instanceVariableNames: 'messageText'
|
4
|
-
|
4
|
+
package: 'Kernel-Exceptions'!
|
5
5
|
|
6
6
|
!Error methodsFor: 'accessing'!
|
7
7
|
|
8
|
-
messageText
|
9
|
-
^messageText
|
10
|
-
!
|
11
|
-
|
12
|
-
messageText: aString
|
13
|
-
messageText := aString
|
14
|
-
!
|
15
|
-
|
16
8
|
context
|
17
9
|
<return self.context>
|
18
10
|
!
|
19
11
|
|
20
12
|
jsStack
|
21
13
|
<return self.stack>
|
14
|
+
!
|
15
|
+
|
16
|
+
messageText
|
17
|
+
^messageText
|
18
|
+
!
|
19
|
+
|
20
|
+
messageText: aString
|
21
|
+
messageText := aString
|
22
22
|
! !
|
23
23
|
|
24
24
|
!Error methodsFor: 'signaling'!
|
25
25
|
|
26
26
|
signal
|
27
27
|
<self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self)>
|
28
|
+
!
|
29
|
+
|
30
|
+
signal: aString
|
31
|
+
self messageText: aString.
|
32
|
+
self signal
|
28
33
|
! !
|
29
34
|
|
30
35
|
!Error methodsFor: 'testing'!
|
@@ -35,15 +40,18 @@ isSmalltalkError
|
|
35
40
|
|
36
41
|
!Error class methodsFor: 'instance creation'!
|
37
42
|
|
43
|
+
signal
|
44
|
+
^self new signal
|
45
|
+
!
|
46
|
+
|
38
47
|
signal: aString
|
39
48
|
^self new
|
40
|
-
|
41
|
-
signal
|
49
|
+
signal: aString
|
42
50
|
! !
|
43
51
|
|
44
52
|
Error subclass: #MessageNotUnderstood
|
45
53
|
instanceVariableNames: 'message receiver'
|
46
|
-
|
54
|
+
package: 'Kernel-Exceptions'!
|
47
55
|
|
48
56
|
!MessageNotUnderstood methodsFor: 'accessing'!
|
49
57
|
|
@@ -55,21 +63,21 @@ message: aMessage
|
|
55
63
|
message := aMessage
|
56
64
|
!
|
57
65
|
|
66
|
+
messageText
|
67
|
+
^self receiver asString, ' does not understand #', self message selector
|
68
|
+
!
|
69
|
+
|
58
70
|
receiver
|
59
71
|
^receiver
|
60
72
|
!
|
61
73
|
|
62
74
|
receiver: anObject
|
63
75
|
receiver := anObject
|
64
|
-
!
|
65
|
-
|
66
|
-
messageText
|
67
|
-
^self receiver asString, ' does not understand #', self message selector
|
68
76
|
! !
|
69
77
|
|
70
78
|
Object subclass: #ErrorHandler
|
71
79
|
instanceVariableNames: ''
|
72
|
-
|
80
|
+
package: 'Kernel-Exceptions'!
|
73
81
|
|
74
82
|
!ErrorHandler methodsFor: 'error handling'!
|
75
83
|
|
@@ -80,24 +88,24 @@ handleError: anError
|
|
80
88
|
|
81
89
|
!ErrorHandler methodsFor: 'private'!
|
82
90
|
|
91
|
+
log: aString
|
92
|
+
console log: aString
|
93
|
+
!
|
94
|
+
|
83
95
|
logContext: aContext
|
84
96
|
aContext home ifNotNil: [
|
85
97
|
self logContext: aContext home].
|
86
98
|
self log: aContext receiver asString, '>>', aContext selector
|
87
99
|
!
|
88
100
|
|
89
|
-
logErrorContext: aContext
|
90
|
-
aContext ifNotNil: [
|
91
|
-
aContext home ifNotNil: [
|
92
|
-
self logContext: aContext home]]
|
93
|
-
!
|
94
|
-
|
95
101
|
logError: anError
|
96
102
|
self log: anError messageText
|
97
103
|
!
|
98
104
|
|
99
|
-
|
100
|
-
|
105
|
+
logErrorContext: aContext
|
106
|
+
aContext ifNotNil: [
|
107
|
+
aContext home ifNotNil: [
|
108
|
+
self logContext: aContext home]]
|
101
109
|
! !
|
102
110
|
|
103
111
|
ErrorHandler class instanceVariableNames: 'current'!
|
data/amber/st/Kernel-Methods.st
CHANGED
@@ -1,95 +1,7 @@
|
|
1
1
|
Smalltalk current createPackage: 'Kernel-Methods' properties: #{}!
|
2
|
-
Object subclass: #Message
|
3
|
-
instanceVariableNames: 'selector arguments'
|
4
|
-
category: 'Kernel-Methods'!
|
5
|
-
!Message commentStamp!
|
6
|
-
Generally, the system does not use instances of Message for efficiency reasons.
|
7
|
-
However, when a message is not understood by its receiver, the interpreter will make up an instance of it in order to capture the information involved in an actual message transmission.
|
8
|
-
This instance is sent it as an argument with the message `doesNotUnderstand:` to the receiver.
|
9
|
-
|
10
|
-
See boot.js, `messageNotUnderstood` and its counterpart `Object>>doesNotUnderstand:`!
|
11
|
-
|
12
|
-
!Message methodsFor: 'accessing'!
|
13
|
-
|
14
|
-
selector
|
15
|
-
^selector
|
16
|
-
!
|
17
|
-
|
18
|
-
selector: aString
|
19
|
-
selector := aString
|
20
|
-
!
|
21
|
-
|
22
|
-
arguments: anArray
|
23
|
-
arguments := anArray
|
24
|
-
!
|
25
|
-
|
26
|
-
arguments
|
27
|
-
^arguments
|
28
|
-
! !
|
29
|
-
|
30
|
-
!Message methodsFor: 'printing'!
|
31
|
-
|
32
|
-
printString
|
33
|
-
^ String streamContents: [:aStream|
|
34
|
-
aStream
|
35
|
-
nextPutAll: super printString;
|
36
|
-
nextPutAll: '(';
|
37
|
-
nextPutAll: selector;
|
38
|
-
nextPutAll: ')' ]
|
39
|
-
!
|
40
|
-
|
41
|
-
sendTo: anObject
|
42
|
-
Smalltalk current send: self selector to: anObject arguments: self arguments
|
43
|
-
! !
|
44
|
-
|
45
|
-
!Message class methodsFor: 'instance creation'!
|
46
|
-
|
47
|
-
selector: aString arguments: anArray
|
48
|
-
^self new
|
49
|
-
selector: aString;
|
50
|
-
arguments: anArray;
|
51
|
-
yourself
|
52
|
-
! !
|
53
|
-
|
54
|
-
Object subclass: #MethodContext
|
55
|
-
instanceVariableNames: ''
|
56
|
-
category: 'Kernel-Methods'!
|
57
|
-
!MethodContext commentStamp!
|
58
|
-
MethodContext holds all the dynamic state associated with the execution of either a method activation resulting from a message send. That is used to build the call stack while debugging.
|
59
|
-
|
60
|
-
MethodContext instances are JavaScript `SmalltalkMethodContext` objects defined in boot.js
|
61
|
-
|
62
|
-
Current limitation: MethodContext instances are not created on Block evaluation. That means it's actually impossible to debug inside a Block.!
|
63
|
-
|
64
|
-
!MethodContext methodsFor: 'accessing'!
|
65
|
-
|
66
|
-
receiver
|
67
|
-
<return self.receiver>
|
68
|
-
!
|
69
|
-
|
70
|
-
selector
|
71
|
-
<return smalltalk.convertSelector(self.selector)>
|
72
|
-
!
|
73
|
-
|
74
|
-
home
|
75
|
-
<return self.homeContext>
|
76
|
-
!
|
77
|
-
|
78
|
-
temps
|
79
|
-
<return self.temps>
|
80
|
-
!
|
81
|
-
|
82
|
-
printString
|
83
|
-
^super printString, '(', self asString, ')'
|
84
|
-
!
|
85
|
-
|
86
|
-
asString
|
87
|
-
^self receiver class printString, ' >> ', self selector
|
88
|
-
! !
|
89
|
-
|
90
2
|
Object subclass: #BlockClosure
|
91
3
|
instanceVariableNames: ''
|
92
|
-
|
4
|
+
package: 'Kernel-Methods'!
|
93
5
|
!BlockClosure commentStamp!
|
94
6
|
A BlockClosure is a lexical closure.
|
95
7
|
The JavaScript representation is a function.
|
@@ -108,9 +20,9 @@ numArgs
|
|
108
20
|
|
109
21
|
!BlockClosure methodsFor: 'controlling'!
|
110
22
|
|
111
|
-
|
23
|
+
whileFalse
|
112
24
|
"inlined in the Compiler"
|
113
|
-
|
25
|
+
self whileFalse: []
|
114
26
|
!
|
115
27
|
|
116
28
|
whileFalse: aBlock
|
@@ -118,14 +30,14 @@ whileFalse: aBlock
|
|
118
30
|
<while(!!self()) {aBlock()}>
|
119
31
|
!
|
120
32
|
|
121
|
-
|
33
|
+
whileTrue
|
122
34
|
"inlined in the Compiler"
|
123
|
-
self
|
35
|
+
self whileTrue: []
|
124
36
|
!
|
125
37
|
|
126
|
-
whileTrue
|
38
|
+
whileTrue: aBlock
|
127
39
|
"inlined in the Compiler"
|
128
|
-
self
|
40
|
+
<while(self()) {aBlock()}>
|
129
41
|
! !
|
130
42
|
|
131
43
|
!BlockClosure methodsFor: 'error handling'!
|
@@ -139,46 +51,10 @@ on: anErrorClass do: aBlock
|
|
139
51
|
|
140
52
|
!BlockClosure methodsFor: 'evaluating'!
|
141
53
|
|
142
|
-
value
|
143
|
-
"inlined in the Compiler"
|
144
|
-
<return self();>
|
145
|
-
!
|
146
|
-
|
147
|
-
value: anArg
|
148
|
-
"inlined in the Compiler"
|
149
|
-
<return self(anArg);>
|
150
|
-
!
|
151
|
-
|
152
|
-
value: firstArg value: secondArg
|
153
|
-
"inlined in the Compiler"
|
154
|
-
<return self(firstArg, secondArg);>
|
155
|
-
!
|
156
|
-
|
157
|
-
value: firstArg value: secondArg value: thirdArg
|
158
|
-
"inlined in the Compiler"
|
159
|
-
<return self(firstArg, secondArg, thirdArg);>
|
160
|
-
!
|
161
|
-
|
162
|
-
valueWithPossibleArguments: aCollection
|
163
|
-
<return self.apply(null, aCollection);>
|
164
|
-
!
|
165
|
-
|
166
|
-
new
|
167
|
-
"Use the receiver as a JS constructor.
|
168
|
-
*Do not* use this method to instanciate Smalltalk objects!!"
|
169
|
-
<return new self()>
|
170
|
-
!
|
171
|
-
|
172
54
|
applyTo: anObject arguments: aCollection
|
173
55
|
<return self.apply(anObject, aCollection)>
|
174
56
|
!
|
175
57
|
|
176
|
-
timeToRun
|
177
|
-
"Answer the number of milliseconds taken to execute this block."
|
178
|
-
|
179
|
-
^ Date millisecondsToRun: self
|
180
|
-
!
|
181
|
-
|
182
58
|
ensure: aBlock
|
183
59
|
| success |
|
184
60
|
success := false.
|
@@ -189,6 +65,12 @@ ensure: aBlock
|
|
189
65
|
ex signal]
|
190
66
|
!
|
191
67
|
|
68
|
+
new
|
69
|
+
"Use the receiver as a JS constructor.
|
70
|
+
*Do not* use this method to instanciate Smalltalk objects!!"
|
71
|
+
<return new self()>
|
72
|
+
!
|
73
|
+
|
192
74
|
newValue: anObject
|
193
75
|
"Use the receiver as a JS constructor.
|
194
76
|
*Do not* use this method to instanciate Smalltalk objects!!"
|
@@ -205,21 +87,51 @@ newValue: anObject value: anObject2 value: anObject3
|
|
205
87
|
"Use the receiver as a JS constructor.
|
206
88
|
*Do not* use this method to instanciate Smalltalk objects!!"
|
207
89
|
<return new self(anObject, anObject2)>
|
208
|
-
!
|
90
|
+
!
|
209
91
|
|
210
|
-
|
92
|
+
timeToRun
|
93
|
+
"Answer the number of milliseconds taken to execute this block."
|
211
94
|
|
212
|
-
|
213
|
-
|
95
|
+
^ Date millisecondsToRun: self
|
96
|
+
!
|
97
|
+
|
98
|
+
value
|
99
|
+
"inlined in the Compiler"
|
100
|
+
<return self();>
|
214
101
|
!
|
215
102
|
|
103
|
+
value: anArg
|
104
|
+
"inlined in the Compiler"
|
105
|
+
<return self(anArg);>
|
106
|
+
!
|
107
|
+
|
108
|
+
value: firstArg value: secondArg
|
109
|
+
"inlined in the Compiler"
|
110
|
+
<return self(firstArg, secondArg);>
|
111
|
+
!
|
112
|
+
|
113
|
+
value: firstArg value: secondArg value: thirdArg
|
114
|
+
"inlined in the Compiler"
|
115
|
+
<return self(firstArg, secondArg, thirdArg);>
|
116
|
+
!
|
117
|
+
|
118
|
+
valueWithPossibleArguments: aCollection
|
119
|
+
<return self.apply(null, aCollection);>
|
120
|
+
! !
|
121
|
+
|
122
|
+
!BlockClosure methodsFor: 'timeout/interval'!
|
123
|
+
|
216
124
|
valueWithInterval: aNumber
|
217
125
|
<return setInterval(self, aNumber)>
|
126
|
+
!
|
127
|
+
|
128
|
+
valueWithTimeout: aNumber
|
129
|
+
<return setTimeout(self, aNumber)>
|
218
130
|
! !
|
219
131
|
|
220
132
|
Object subclass: #CompiledMethod
|
221
133
|
instanceVariableNames: ''
|
222
|
-
|
134
|
+
package: 'Kernel-Methods'!
|
223
135
|
!CompiledMethod commentStamp!
|
224
136
|
CompiledMethod hold the source and compiled code of a class method.
|
225
137
|
|
@@ -241,12 +153,8 @@ or messages sent from this method:
|
|
241
153
|
|
242
154
|
!CompiledMethod methodsFor: 'accessing'!
|
243
155
|
|
244
|
-
|
245
|
-
|
246
|
-
!
|
247
|
-
|
248
|
-
source: aString
|
249
|
-
self basicAt: 'source' put: aString
|
156
|
+
arguments
|
157
|
+
<return self.args || []>
|
250
158
|
!
|
251
159
|
|
252
160
|
category
|
@@ -257,14 +165,6 @@ category: aString
|
|
257
165
|
self basicAt: 'category' put: aString
|
258
166
|
!
|
259
167
|
|
260
|
-
selector
|
261
|
-
^self basicAt: 'selector'
|
262
|
-
!
|
263
|
-
|
264
|
-
selector: aString
|
265
|
-
self basicAt: 'selector' put: aString
|
266
|
-
!
|
267
|
-
|
268
168
|
fn
|
269
169
|
^self basicAt: 'fn'
|
270
170
|
!
|
@@ -285,7 +185,107 @@ referencedClasses
|
|
285
185
|
^self basicAt: 'referencedClasses'
|
286
186
|
!
|
287
187
|
|
188
|
+
selector
|
189
|
+
^self basicAt: 'selector'
|
190
|
+
!
|
191
|
+
|
192
|
+
selector: aString
|
193
|
+
self basicAt: 'selector' put: aString
|
194
|
+
!
|
195
|
+
|
196
|
+
source
|
197
|
+
^(self basicAt: 'source') ifNil: ['']
|
198
|
+
!
|
199
|
+
|
200
|
+
source: aString
|
201
|
+
self basicAt: 'source' put: aString
|
202
|
+
! !
|
203
|
+
|
204
|
+
Object subclass: #Message
|
205
|
+
instanceVariableNames: 'selector arguments'
|
206
|
+
package: 'Kernel-Methods'!
|
207
|
+
!Message commentStamp!
|
208
|
+
Generally, the system does not use instances of Message for efficiency reasons.
|
209
|
+
However, when a message is not understood by its receiver, the interpreter will make up an instance of it in order to capture the information involved in an actual message transmission.
|
210
|
+
This instance is sent it as an argument with the message `doesNotUnderstand:` to the receiver.
|
211
|
+
|
212
|
+
See boot.js, `messageNotUnderstood` and its counterpart `Object>>doesNotUnderstand:`!
|
213
|
+
|
214
|
+
!Message methodsFor: 'accessing'!
|
215
|
+
|
288
216
|
arguments
|
289
|
-
|
217
|
+
^arguments
|
218
|
+
!
|
219
|
+
|
220
|
+
arguments: anArray
|
221
|
+
arguments := anArray
|
222
|
+
!
|
223
|
+
|
224
|
+
selector
|
225
|
+
^selector
|
226
|
+
!
|
227
|
+
|
228
|
+
selector: aString
|
229
|
+
selector := aString
|
230
|
+
! !
|
231
|
+
|
232
|
+
!Message methodsFor: 'printing'!
|
233
|
+
|
234
|
+
printString
|
235
|
+
^ String streamContents: [:aStream|
|
236
|
+
aStream
|
237
|
+
nextPutAll: super printString;
|
238
|
+
nextPutAll: '(';
|
239
|
+
nextPutAll: selector;
|
240
|
+
nextPutAll: ')' ]
|
241
|
+
!
|
242
|
+
|
243
|
+
sendTo: anObject
|
244
|
+
Smalltalk current send: self selector to: anObject arguments: self arguments
|
245
|
+
! !
|
246
|
+
|
247
|
+
!Message class methodsFor: 'instance creation'!
|
248
|
+
|
249
|
+
selector: aString arguments: anArray
|
250
|
+
^self new
|
251
|
+
selector: aString;
|
252
|
+
arguments: anArray;
|
253
|
+
yourself
|
254
|
+
! !
|
255
|
+
|
256
|
+
Object subclass: #MethodContext
|
257
|
+
instanceVariableNames: ''
|
258
|
+
package: 'Kernel-Methods'!
|
259
|
+
!MethodContext commentStamp!
|
260
|
+
MethodContext holds all the dynamic state associated with the execution of either a method activation resulting from a message send. That is used to build the call stack while debugging.
|
261
|
+
|
262
|
+
MethodContext instances are JavaScript `SmalltalkMethodContext` objects defined in boot.js
|
263
|
+
|
264
|
+
Current limitation: MethodContext instances are not created on Block evaluation. That means it's actually impossible to debug inside a Block.!
|
265
|
+
|
266
|
+
!MethodContext methodsFor: 'accessing'!
|
267
|
+
|
268
|
+
asString
|
269
|
+
^self receiver class printString, ' >> ', self selector
|
270
|
+
!
|
271
|
+
|
272
|
+
home
|
273
|
+
<return self.homeContext>
|
274
|
+
!
|
275
|
+
|
276
|
+
printString
|
277
|
+
^super printString, '(', self asString, ')'
|
278
|
+
!
|
279
|
+
|
280
|
+
receiver
|
281
|
+
<return self.receiver>
|
282
|
+
!
|
283
|
+
|
284
|
+
selector
|
285
|
+
<return smalltalk.convertSelector(self.selector)>
|
286
|
+
!
|
287
|
+
|
288
|
+
temps
|
289
|
+
<return self.temps>
|
290
290
|
! !
|
291
291
|
|