resin 0.3.1 → 0.4.0
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.
- data/amber/bin/amberc +10 -350
- data/amber/js/Benchfib.deploy.js +80 -89
- data/amber/js/Benchfib.js +80 -89
- data/amber/js/Canvas.deploy.js +558 -545
- data/amber/js/Canvas.js +563 -545
- data/amber/js/Compiler-AST.deploy.js +431 -243
- data/amber/js/Compiler-AST.js +487 -244
- data/amber/js/Compiler-Core.deploy.js +201 -1045
- data/amber/js/Compiler-Core.js +208 -1207
- data/amber/js/Compiler-Exceptions.deploy.js +37 -18
- data/amber/js/Compiler-Exceptions.js +42 -18
- data/amber/js/Compiler-IR.deploy.js +1071 -774
- data/amber/js/Compiler-IR.js +1194 -848
- data/amber/js/Compiler-Inlining.deploy.js +395 -373
- data/amber/js/Compiler-Inlining.js +395 -373
- data/amber/js/Compiler-Interpreter.deploy.js +1202 -0
- data/amber/js/Compiler-Interpreter.js +1631 -0
- data/amber/js/Compiler-Semantic.deploy.js +695 -600
- data/amber/js/Compiler-Semantic.js +721 -611
- data/amber/js/Compiler-Tests.deploy.js +699 -376
- data/amber/js/Compiler-Tests.js +834 -381
- data/amber/js/Compiler.deploy.js +8563 -1805
- data/amber/js/Compiler.js +11476 -2633
- data/amber/js/Examples.deploy.js +29 -29
- data/amber/js/Examples.js +29 -29
- data/amber/js/IDE.deploy.js +3292 -2649
- data/amber/js/IDE.js +3318 -2710
- data/amber/js/Importer-Exporter.deploy.js +393 -349
- data/amber/js/Importer-Exporter.js +398 -354
- data/amber/js/Kernel-Announcements.deploy.js +53 -44
- data/amber/js/Kernel-Announcements.js +55 -44
- data/amber/js/Kernel-Classes.deploy.js +566 -368
- data/amber/js/Kernel-Classes.js +660 -402
- data/amber/js/Kernel-Collections.deploy.js +1149 -1098
- data/amber/js/Kernel-Collections.js +1183 -1116
- data/amber/js/Kernel-Exceptions.deploy.js +173 -75
- data/amber/js/Kernel-Exceptions.js +215 -77
- data/amber/js/Kernel-Methods.deploy.js +530 -313
- data/amber/js/Kernel-Methods.js +632 -338
- data/amber/js/Kernel-Objects.deploy.js +1734 -1577
- data/amber/js/Kernel-Objects.js +1867 -1654
- data/amber/js/Kernel-Tests.deploy.js +1416 -973
- data/amber/js/Kernel-Tests.js +1495 -981
- data/amber/js/Kernel-Transcript.deploy.js +23 -24
- data/amber/js/Kernel-Transcript.js +25 -26
- data/amber/js/SUnit-Tests.deploy.js +402 -0
- data/amber/js/SUnit-Tests.js +518 -0
- data/amber/js/SUnit.deploy.js +535 -237
- data/amber/js/SUnit.js +634 -246
- data/amber/js/amber.js +90 -53
- data/amber/js/boot.js +441 -255
- data/amber/js/init.js +1 -3
- data/amber/js/lib/CodeMirror/codemirror.css +3 -0
- data/amber/js/lib/CodeMirror/codemirror.js +104 -55
- data/amber/js/lib/peg-0.7.0.min.js +9 -0
- data/amber/js/parser.js +1504 -802
- data/amber/js/parser.pegjs +170 -165
- data/amber/st/Canvas.st +6 -0
- data/amber/st/Compiler-AST.st +54 -3
- data/amber/st/Compiler-Core.st +6 -551
- data/amber/st/Compiler-Exceptions.st +4 -0
- data/amber/st/Compiler-IR.st +205 -87
- data/amber/st/Compiler-Interpreter.st +597 -0
- data/amber/st/Compiler-Semantic.st +46 -21
- data/amber/st/Compiler-Tests.st +254 -7
- data/amber/st/Compiler.st +3172 -1541
- data/amber/st/IDE.st +57 -93
- data/amber/st/Importer-Exporter.st +4 -7
- data/amber/st/Kernel-Announcements.st +8 -0
- data/amber/st/Kernel-Classes.st +149 -40
- data/amber/st/Kernel-Collections.st +43 -32
- data/amber/st/Kernel-Exceptions.st +70 -1
- data/amber/st/Kernel-Methods.st +165 -27
- data/amber/st/Kernel-Objects.st +215 -140
- data/amber/st/Kernel-Tests.st +195 -10
- data/amber/st/Kernel-Transcript.st +1 -3
- data/amber/st/SUnit-Tests.st +186 -0
- data/amber/st/SUnit.st +186 -14
- data/bin/resin +6 -0
- data/lib/resin/cli.rb +19 -0
- metadata +41 -25
- data/amber/js/lib/peg-0.6.2.min.js +0 -2
- data/bin/resin-compile +0 -6
- data/bin/runresin +0 -12
data/amber/st/Kernel-Objects.st
CHANGED
@@ -68,15 +68,11 @@ identityHash
|
|
68
68
|
!
|
69
69
|
|
70
70
|
instVarAt: aSymbol
|
71
|
-
|
72
|
-
varname := aSymbol asString.
|
73
|
-
<return self['@'+varname]>
|
71
|
+
<return self['@'+aSymbol._asString()]>
|
74
72
|
!
|
75
73
|
|
76
74
|
instVarAt: aSymbol put: anObject
|
77
|
-
|
78
|
-
varname := aSymbol asString.
|
79
|
-
<self['@' + varname] = anObject>
|
75
|
+
<self['@' + aSymbol._asString()] = anObject>
|
80
76
|
!
|
81
77
|
|
82
78
|
size
|
@@ -84,7 +80,7 @@ size
|
|
84
80
|
!
|
85
81
|
|
86
82
|
value
|
87
|
-
|
83
|
+
<return self.valueOf()>
|
88
84
|
!
|
89
85
|
|
90
86
|
yourself
|
@@ -133,6 +129,12 @@ asJavascript
|
|
133
129
|
|
134
130
|
asString
|
135
131
|
^self printString
|
132
|
+
!
|
133
|
+
|
134
|
+
test
|
135
|
+
| a |
|
136
|
+
a := 1.
|
137
|
+
self halt
|
136
138
|
! !
|
137
139
|
|
138
140
|
!Object methodsFor: 'copying'!
|
@@ -205,8 +207,7 @@ throw: anObject
|
|
205
207
|
!
|
206
208
|
|
207
209
|
try: aBlock catch: anotherBlock
|
208
|
-
<try{
|
209
|
-
return result;>
|
210
|
+
<try{return aBlock()} catch(e) {return anotherBlock(e)}>
|
210
211
|
! !
|
211
212
|
|
212
213
|
!Object methodsFor: 'initialization'!
|
@@ -229,9 +230,7 @@ perform: aSymbol
|
|
229
230
|
!
|
230
231
|
|
231
232
|
perform: aSymbol withArguments: aCollection
|
232
|
-
|
233
|
-
selector := aSymbol asSelector.
|
234
|
-
<return smalltalk.send(self, selector, aCollection)>
|
233
|
+
<return smalltalk.send(self, aSymbol._asSelector(), aCollection)>
|
235
234
|
! !
|
236
235
|
|
237
236
|
!Object methodsFor: 'printing'!
|
@@ -284,6 +283,10 @@ ifNotNil: aBlock ifNil: anotherBlock
|
|
284
283
|
^aBlock value
|
285
284
|
!
|
286
285
|
|
286
|
+
isBoolean
|
287
|
+
^ false
|
288
|
+
!
|
289
|
+
|
287
290
|
isClass
|
288
291
|
^false
|
289
292
|
!
|
@@ -348,8 +351,12 @@ Boolean instances are weither `true` or `false`.!
|
|
348
351
|
!Boolean methodsFor: 'comparing'!
|
349
352
|
|
350
353
|
= aBoolean
|
351
|
-
|
352
|
-
|
354
|
+
<
|
355
|
+
if(!! aBoolean._isBoolean || !! aBoolean._isBoolean()) {
|
356
|
+
return false;
|
357
|
+
}
|
358
|
+
return Boolean(self == true) == aBoolean
|
359
|
+
>
|
353
360
|
!
|
354
361
|
|
355
362
|
== aBoolean
|
@@ -442,6 +449,12 @@ printString
|
|
442
449
|
<return self.toString()>
|
443
450
|
! !
|
444
451
|
|
452
|
+
!Boolean methodsFor: 'testing'!
|
453
|
+
|
454
|
+
isBoolean
|
455
|
+
^ true
|
456
|
+
! !
|
457
|
+
|
445
458
|
Object subclass: #Date
|
446
459
|
instanceVariableNames: ''
|
447
460
|
package: 'Kernel-Objects'!
|
@@ -656,15 +669,11 @@ __Note:__ For keyword-based messages, only the first keyword is kept: `window fo
|
|
656
669
|
!JSObjectProxy methodsFor: 'accessing'!
|
657
670
|
|
658
671
|
at: aSymbol
|
659
|
-
|
660
|
-
attr := aSymbol asString.
|
661
|
-
<return self['@jsObject'][attr]>
|
672
|
+
<return self['@jsObject'][aSymbol._asString()]>
|
662
673
|
!
|
663
674
|
|
664
675
|
at: aSymbol put: anObject
|
665
|
-
|
666
|
-
attr := aSymbol asString.
|
667
|
-
<self['@jsObject'][attr] = anObject>
|
676
|
+
<self['@jsObject'][aSymbol._asString()] = anObject>
|
668
677
|
!
|
669
678
|
|
670
679
|
jsObject
|
@@ -675,16 +684,38 @@ jsObject: aJSObject
|
|
675
684
|
jsObject := aJSObject
|
676
685
|
! !
|
677
686
|
|
687
|
+
!JSObjectProxy methodsFor: 'enumerating'!
|
688
|
+
|
689
|
+
keysAndValuesDo: aBlock
|
690
|
+
<
|
691
|
+
var o = self['@jsObject'];
|
692
|
+
for(var i in o) {
|
693
|
+
aBlock(i, o[i]);
|
694
|
+
}
|
695
|
+
>
|
696
|
+
! !
|
697
|
+
|
678
698
|
!JSObjectProxy methodsFor: 'proxy'!
|
679
699
|
|
700
|
+
addObjectVariablesTo: aDictionary
|
701
|
+
<
|
702
|
+
for(var i in self['@jsObject']) {
|
703
|
+
aDictionary._at_put_(i, self['@jsObject'][i]);
|
704
|
+
}
|
705
|
+
>
|
706
|
+
!
|
707
|
+
|
680
708
|
doesNotUnderstand: aMessage
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
709
|
+
|
710
|
+
^ (self canForwardMessage: aMessage)
|
711
|
+
ifTrue: [ self forwardMessage: aMessage ]
|
712
|
+
ifFalse: [ ^ super doesNotUnderstand: aMessage ]
|
713
|
+
!
|
714
|
+
|
715
|
+
forwardMessage: aMessage
|
716
|
+
<
|
717
|
+
return smalltalk.send(self._jsObject(), aMessage._selector()._asJavaScriptSelector(), aMessage._arguments());
|
718
|
+
>
|
688
719
|
!
|
689
720
|
|
690
721
|
inspectOn: anInspector
|
@@ -692,9 +723,7 @@ inspectOn: anInspector
|
|
692
723
|
variables := Dictionary new.
|
693
724
|
variables at: '#self' put: self jsObject.
|
694
725
|
anInspector setLabel: self printString.
|
695
|
-
|
696
|
-
variables._at_put_(i, self['@jsObject'][i]);
|
697
|
-
}>.
|
726
|
+
self addObjectVariablesTo: variables.
|
698
727
|
anInspector setVariables: variables
|
699
728
|
!
|
700
729
|
|
@@ -702,6 +731,19 @@ printString
|
|
702
731
|
^self jsObject toString
|
703
732
|
! !
|
704
733
|
|
734
|
+
!JSObjectProxy methodsFor: 'testing'!
|
735
|
+
|
736
|
+
canForwardMessage: aMessage
|
737
|
+
<
|
738
|
+
var jsSelector = aMessage._selector()._asJavaScriptSelector();
|
739
|
+
if(jsSelector in self._jsObject()) {
|
740
|
+
return true
|
741
|
+
} else {
|
742
|
+
return false;
|
743
|
+
}
|
744
|
+
>
|
745
|
+
! !
|
746
|
+
|
705
747
|
!JSObjectProxy class methodsFor: 'instance creation'!
|
706
748
|
|
707
749
|
on: aJSObject
|
@@ -760,8 +802,12 @@ identityHash
|
|
760
802
|
<return self % aNumber>
|
761
803
|
!
|
762
804
|
|
805
|
+
\\ aNumber
|
806
|
+
<return self % aNumber>
|
807
|
+
!
|
808
|
+
|
763
809
|
abs
|
764
|
-
|
810
|
+
<return Math.abs(self);>
|
765
811
|
!
|
766
812
|
|
767
813
|
max: aNumber
|
@@ -797,8 +843,12 @@ squared
|
|
797
843
|
!
|
798
844
|
|
799
845
|
= aNumber
|
800
|
-
|
801
|
-
|
846
|
+
<
|
847
|
+
if(!! aNumber._isNumber || !! aNumber._isNumber()) {
|
848
|
+
return false;
|
849
|
+
}
|
850
|
+
return Number(self) == aNumber
|
851
|
+
>
|
802
852
|
!
|
803
853
|
|
804
854
|
> aNumber
|
@@ -877,13 +927,13 @@ to: stop by: step
|
|
877
927
|
!
|
878
928
|
|
879
929
|
truncated
|
880
|
-
|
881
|
-
|
882
|
-
|
883
|
-
|
884
|
-
|
885
|
-
|
886
|
-
|
930
|
+
<
|
931
|
+
if(self >>= 0) {
|
932
|
+
return Math.floor(self);
|
933
|
+
} else {
|
934
|
+
return Math.floor(self * (-1)) * (-1);
|
935
|
+
};
|
936
|
+
>
|
887
937
|
!
|
888
938
|
|
889
939
|
| aNumber
|
@@ -903,8 +953,7 @@ deepCopy
|
|
903
953
|
!Number methodsFor: 'enumerating'!
|
904
954
|
|
905
955
|
timesRepeat: aBlock
|
906
|
-
|
|
907
|
-
integer := self truncated.
|
956
|
+
| count |
|
908
957
|
count := 1.
|
909
958
|
[count > self] whileFalse: [
|
910
959
|
aBlock value.
|
@@ -974,16 +1023,6 @@ positive
|
|
974
1023
|
^ self >= 0
|
975
1024
|
! !
|
976
1025
|
|
977
|
-
!Number methodsFor: 'timeouts/intervals'!
|
978
|
-
|
979
|
-
clearInterval
|
980
|
-
<clearInterval(Number(self))>
|
981
|
-
!
|
982
|
-
|
983
|
-
clearTimeout
|
984
|
-
<clearTimeout(Number(self))>
|
985
|
-
! !
|
986
|
-
|
987
1026
|
!Number class methodsFor: 'instance creation'!
|
988
1027
|
|
989
1028
|
pi
|
@@ -997,7 +1036,7 @@ Object subclass: #Organizer
|
|
997
1036
|
!Organizer methodsFor: 'accessing'!
|
998
1037
|
|
999
1038
|
addElement: anObject
|
1000
|
-
<self.addElement(anObject)>
|
1039
|
+
<self.elements.addElement(anObject)>
|
1001
1040
|
!
|
1002
1041
|
|
1003
1042
|
elements
|
@@ -1005,7 +1044,7 @@ elements
|
|
1005
1044
|
!
|
1006
1045
|
|
1007
1046
|
removeElement: anObject
|
1008
|
-
<self.removeElement(anObject)>
|
1047
|
+
<self.elements.removeElement(anObject)>
|
1009
1048
|
! !
|
1010
1049
|
|
1011
1050
|
Object subclass: #Package
|
@@ -1071,17 +1110,6 @@ organization
|
|
1071
1110
|
|
1072
1111
|
properties
|
1073
1112
|
^Smalltalk current readJSObject: (self basicAt: 'properties')
|
1074
|
-
!
|
1075
|
-
|
1076
|
-
properties: aDict
|
1077
|
-
"We store it as a javascript object."
|
1078
|
-
|
1079
|
-
| object |
|
1080
|
-
<object = {};>.
|
1081
|
-
aDict keysAndValuesDo: [:key :value |
|
1082
|
-
<object[key] = value>.
|
1083
|
-
].
|
1084
|
-
<return self.properties = object>
|
1085
1113
|
! !
|
1086
1114
|
|
1087
1115
|
!Package methodsFor: 'classes'!
|
@@ -1090,6 +1118,12 @@ classes
|
|
1090
1118
|
^ self organization elements
|
1091
1119
|
!
|
1092
1120
|
|
1121
|
+
setupClasses
|
1122
|
+
self classes
|
1123
|
+
do: [ :each | ClassBuilder new setupClass: each ];
|
1124
|
+
do: [ :each | each initialize ]
|
1125
|
+
!
|
1126
|
+
|
1093
1127
|
sortedClasses
|
1094
1128
|
"Answer all classes in the receiver, sorted by superclass/subclasses and by class name for common subclasses (Issue #143)."
|
1095
1129
|
|
@@ -1135,8 +1169,29 @@ propertyAt: key put: value
|
|
1135
1169
|
|
1136
1170
|
Package class instanceVariableNames: 'defaultCommitPathJs defaultCommitPathSt'!
|
1137
1171
|
|
1172
|
+
!Package class methodsFor: 'accessing'!
|
1173
|
+
|
1174
|
+
named: aPackageName
|
1175
|
+
|
1176
|
+
^Smalltalk current packageAt: aPackageName
|
1177
|
+
!
|
1178
|
+
|
1179
|
+
named: aPackageName ifAbsent: aBlock
|
1180
|
+
|
1181
|
+
^Smalltalk current packageAt: aPackageName ifAbsent: aBlock
|
1182
|
+
! !
|
1183
|
+
|
1138
1184
|
!Package class methodsFor: 'commit paths'!
|
1139
1185
|
|
1186
|
+
commitPathsFromLoader
|
1187
|
+
<
|
1188
|
+
var cp = smalltalk['@@commitPath'];
|
1189
|
+
if (!!cp) return;
|
1190
|
+
if (cp.js) self._defaultCommitPathJs_(cp.js);
|
1191
|
+
if (cp.st) self._defaultCommitPathSt_(cp.st);
|
1192
|
+
>
|
1193
|
+
!
|
1194
|
+
|
1140
1195
|
defaultCommitPathJs
|
1141
1196
|
^ defaultCommitPathJs ifNil: [ defaultCommitPathJs := 'js']
|
1142
1197
|
!
|
@@ -1158,39 +1213,24 @@ resetCommitPaths
|
|
1158
1213
|
defaultCommitPathSt := nil.
|
1159
1214
|
! !
|
1160
1215
|
|
1161
|
-
!Package class methodsFor: '
|
1216
|
+
!Package class methodsFor: 'initialization'!
|
1162
1217
|
|
1163
|
-
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
!
|
1218
|
+
initialize
|
1219
|
+
super initialize.
|
1220
|
+
self commitPathsFromLoader
|
1221
|
+
! !
|
1222
|
+
|
1223
|
+
!Package class methodsFor: 'loading-storing'!
|
1169
1224
|
|
1170
1225
|
fetch: aPackageName
|
1171
1226
|
self fetch: aPackageName prefix: self defaultCommitPathJs, '/'
|
1172
1227
|
!
|
1173
1228
|
|
1174
1229
|
fetch: aPackageName prefix: aPrefix
|
1175
|
-
jQuery
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
(smalltalk classes select: [ :each | <each.pkg.pkgName == aPackageName> ])
|
1180
|
-
do: [ :each | <smalltalk.init(each)> ];
|
1181
|
-
do: [ :each | each initialize ]
|
1182
|
-
! !
|
1183
|
-
|
1184
|
-
!Package class methodsFor: 'not yet classified'!
|
1185
|
-
|
1186
|
-
named: aPackageName
|
1187
|
-
|
1188
|
-
^Smalltalk current packageAt: aPackageName
|
1189
|
-
!
|
1190
|
-
|
1191
|
-
named: aPackageName ifAbsent: aBlock
|
1192
|
-
|
1193
|
-
^Smalltalk current packageAt: aPackageName ifAbsent: aBlock
|
1230
|
+
jQuery
|
1231
|
+
getScript: (aPrefix , aPackageName , '.js')
|
1232
|
+
onSuccess: [
|
1233
|
+
(Package named: aPackageName) setupClasses ]
|
1194
1234
|
! !
|
1195
1235
|
|
1196
1236
|
!Package class methodsFor: 'sorting'!
|
@@ -1390,31 +1430,12 @@ at: aSymbol
|
|
1390
1430
|
<return self[aSymbol._asString()]>
|
1391
1431
|
!
|
1392
1432
|
|
1393
|
-
basicParse: aString
|
1394
|
-
<return smalltalk.parser.parse(aString)>
|
1395
|
-
!
|
1396
|
-
|
1397
1433
|
parse: aString
|
1398
1434
|
| result |
|
1399
1435
|
self try: [result := self basicParse: aString] catch: [:ex | (self parseError: ex parsing: aString) signal].
|
1400
1436
|
^result
|
1401
1437
|
!
|
1402
1438
|
|
1403
|
-
parseError: anException parsing: aString
|
1404
|
-
| row col message lines badLine code |
|
1405
|
-
<row = anException.line;
|
1406
|
-
col = anException.column;
|
1407
|
-
message = anException.message;>.
|
1408
|
-
lines := aString lines.
|
1409
|
-
badLine := lines at: row.
|
1410
|
-
badLine := (badLine copyFrom: 1 to: col - 1), ' ===>', (badLine copyFrom: col to: badLine size).
|
1411
|
-
lines at: row put: badLine.
|
1412
|
-
code := String streamContents: [:s |
|
1413
|
-
lines withIndexDo: [:l :i |
|
1414
|
-
s nextPutAll: i asString, ': ', l, String lf]].
|
1415
|
-
^ ParseError new messageText: ('Parse error on line ' , row , ' column ' , col , ' : ' , message , ' Below is code with line numbers and ===> marker inserted:' , String lf, code)
|
1416
|
-
!
|
1417
|
-
|
1418
1439
|
readJSObject: anObject
|
1419
1440
|
<return self.readJSObject(anObject)>
|
1420
1441
|
!
|
@@ -1422,12 +1443,6 @@ readJSObject: anObject
|
|
1422
1443
|
reservedWords
|
1423
1444
|
"JavaScript reserved words"
|
1424
1445
|
<return self.reservedWords>
|
1425
|
-
!
|
1426
|
-
|
1427
|
-
send: aSelector to: anObject arguments: aCollection
|
1428
|
-
| selector |
|
1429
|
-
selector := aSelector asString asSelector.
|
1430
|
-
<return self.send(anObject, selector, aCollection)>
|
1431
1446
|
! !
|
1432
1447
|
|
1433
1448
|
!Smalltalk methodsFor: 'classes'!
|
@@ -1436,6 +1451,12 @@ classes
|
|
1436
1451
|
<return self.classes()>
|
1437
1452
|
!
|
1438
1453
|
|
1454
|
+
deleteClass: aClass
|
1455
|
+
"Deletes a class by deleting its binding only. Use #removeClass instead"
|
1456
|
+
|
1457
|
+
<self.removeClass(aClass)>
|
1458
|
+
!
|
1459
|
+
|
1439
1460
|
removeClass: aClass
|
1440
1461
|
aClass isMetaclass ifTrue: [self error: aClass asString, ' is a Metaclass and cannot be removed!!'].
|
1441
1462
|
|
@@ -1453,8 +1474,35 @@ removeClass: aClass
|
|
1453
1474
|
yourself)
|
1454
1475
|
! !
|
1455
1476
|
|
1477
|
+
!Smalltalk methodsFor: 'error handling'!
|
1478
|
+
|
1479
|
+
asSmalltalkException: anObject
|
1480
|
+
"A JavaScript exception may be thrown.
|
1481
|
+
We then need to convert it back to a Smalltalk object"
|
1482
|
+
|
1483
|
+
^ ((self isSmalltalkObject: anObject) and: [ anObject isKindOf: Error ])
|
1484
|
+
ifTrue: [ anObject ]
|
1485
|
+
ifFalse: [ JavaScriptException on: anObject ]
|
1486
|
+
!
|
1487
|
+
|
1488
|
+
parseError: anException parsing: aString
|
1489
|
+
^ ParseError new messageText: 'Parse error on line ', (anException basicAt: 'line') ,' column ' , (anException basicAt: 'column') ,' : Unexpected character ', (anException basicAt: 'found')
|
1490
|
+
! !
|
1491
|
+
|
1456
1492
|
!Smalltalk methodsFor: 'packages'!
|
1457
1493
|
|
1494
|
+
createPackage: packageName
|
1495
|
+
"Create and bind a new package with given name and return it."
|
1496
|
+
<return smalltalk.addPackage(packageName)>
|
1497
|
+
!
|
1498
|
+
|
1499
|
+
deletePackage: packageName
|
1500
|
+
"Deletes a package by deleting its binding, but does not check if it contains classes etc.
|
1501
|
+
To remove a package, use #removePackage instead."
|
1502
|
+
|
1503
|
+
<delete smalltalk.packages[packageName]>
|
1504
|
+
!
|
1505
|
+
|
1458
1506
|
packageAt: packageName
|
1459
1507
|
<return self.packages[packageName]>
|
1460
1508
|
!
|
@@ -1489,41 +1537,32 @@ renamePackage: packageName to: newName
|
|
1489
1537
|
| pkg |
|
1490
1538
|
pkg := self packageAt: packageName ifAbsent: [self error: 'Missing package: ', packageName].
|
1491
1539
|
(self packageAt: newName) ifNotNil: [self error: 'Already exists a package called: ', newName].
|
1492
|
-
|
1540
|
+
(self basicAt: 'packages') at: newName put: pkg.
|
1493
1541
|
pkg name: newName.
|
1494
1542
|
self deletePackage: packageName.
|
1495
1543
|
! !
|
1496
1544
|
|
1497
1545
|
!Smalltalk methodsFor: 'private'!
|
1498
1546
|
|
1499
|
-
|
1500
|
-
|
1501
|
-
|
1502
|
-
<return smalltalk.addPackage(packageName, nil)>
|
1547
|
+
basicParse: aString
|
1548
|
+
<return smalltalk.parser.parse(aString)>
|
1503
1549
|
!
|
1504
1550
|
|
1505
1551
|
createPackage: packageName properties: aDict
|
1506
|
-
|
1507
|
-
|
1508
|
-
| object |
|
1509
|
-
<object = {};>.
|
1510
|
-
aDict keysAndValuesDo: [:key :value |
|
1511
|
-
<object[key] = value>.
|
1512
|
-
].
|
1513
|
-
<return smalltalk.addPackage(packageName, object)>
|
1514
|
-
!
|
1515
|
-
|
1516
|
-
deleteClass: aClass
|
1517
|
-
"Deletes a class by deleting its binding only. Use #removeClass instead"
|
1552
|
+
"Needed to import .st files: they begin with this call."
|
1553
|
+
self deprecatedAPI.
|
1518
1554
|
|
1519
|
-
|
1520
|
-
|
1555
|
+
aDict isEmpty ifFalse: [ self error: 'createPackage:properties: called with nonempty properties' ].
|
1556
|
+
^ self createPackage: packageName
|
1557
|
+
! !
|
1521
1558
|
|
1522
|
-
|
1523
|
-
"Deletes a package by deleting its binding, but does not check if it contains classes etc.
|
1524
|
-
To remove a package, use #removePackage instead."
|
1559
|
+
!Smalltalk methodsFor: 'testing'!
|
1525
1560
|
|
1526
|
-
|
1561
|
+
isSmalltalkObject: anObject
|
1562
|
+
"Consider anObject a Smalltalk object if it has a 'klass' property.
|
1563
|
+
Note that this may be unaccurate"
|
1564
|
+
|
1565
|
+
<return typeof anObject.klass !!== 'undefined'>
|
1527
1566
|
! !
|
1528
1567
|
|
1529
1568
|
Smalltalk class instanceVariableNames: 'current'!
|
@@ -1534,6 +1573,42 @@ current
|
|
1534
1573
|
<return smalltalk>
|
1535
1574
|
! !
|
1536
1575
|
|
1576
|
+
Object subclass: #Timeout
|
1577
|
+
instanceVariableNames: 'rawTimeout'
|
1578
|
+
package: 'Kernel-Objects'!
|
1579
|
+
!Timeout commentStamp!
|
1580
|
+
I am wrapping the returns from set{Timeout,Interval}.
|
1581
|
+
|
1582
|
+
Number suffices in browsers, but node.js returns an object.!
|
1583
|
+
|
1584
|
+
!Timeout methodsFor: 'accessing'!
|
1585
|
+
|
1586
|
+
rawTimeout: anObject
|
1587
|
+
rawTimeout := anObject
|
1588
|
+
! !
|
1589
|
+
|
1590
|
+
!Timeout methodsFor: 'timeout/interval'!
|
1591
|
+
|
1592
|
+
clearInterval
|
1593
|
+
<
|
1594
|
+
var interval = self["@rawTimeout"];
|
1595
|
+
clearInterval(interval);
|
1596
|
+
>
|
1597
|
+
!
|
1598
|
+
|
1599
|
+
clearTimeout
|
1600
|
+
<
|
1601
|
+
var timeout = self["@rawTimeout"];
|
1602
|
+
clearTimeout(timeout);
|
1603
|
+
>
|
1604
|
+
! !
|
1605
|
+
|
1606
|
+
!Timeout class methodsFor: 'instance creation'!
|
1607
|
+
|
1608
|
+
on: anObject
|
1609
|
+
^self new rawTimeout: anObject; yourself
|
1610
|
+
! !
|
1611
|
+
|
1537
1612
|
Object subclass: #UndefinedObject
|
1538
1613
|
instanceVariableNames: ''
|
1539
1614
|
package: 'Kernel-Objects'!
|
@@ -1556,7 +1631,7 @@ subclass: aString instanceVariableNames: aString2 category: aString3
|
|
1556
1631
|
|
1557
1632
|
subclass: aString instanceVariableNames: aString2 package: aString3
|
1558
1633
|
^ClassBuilder new
|
1559
|
-
superclass: self subclass: aString instanceVariableNames: aString2 package: aString3
|
1634
|
+
superclass: self subclass: aString asString instanceVariableNames: aString2 package: aString3
|
1560
1635
|
! !
|
1561
1636
|
|
1562
1637
|
!UndefinedObject methodsFor: 'converting'!
|