resin 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/amber/images/amber.svg +706 -0
- data/amber/js/Canvas.deploy.js +1311 -400
- data/amber/js/Canvas.js +1750 -424
- data/amber/js/Compiler.deploy.js +615 -615
- data/amber/js/Compiler.js +1367 -1367
- data/amber/js/IDE.deploy.js +1381 -1345
- data/amber/js/IDE.js +1949 -1903
- data/amber/js/Kernel-Announcements.deploy.js +37 -37
- data/amber/js/Kernel-Announcements.js +52 -52
- data/amber/js/Kernel-Collections.deploy.js +961 -950
- data/amber/js/Kernel-Collections.js +2064 -2053
- data/amber/js/Kernel-Methods.deploy.js +323 -260
- data/amber/js/Kernel-Methods.js +395 -327
- data/amber/js/Kernel-Objects.deploy.js +1846 -1104
- data/amber/js/Kernel-Objects.js +2142 -1194
- data/amber/js/boot.js +44 -29
- data/amber/js/parser.js +234 -17
- data/amber/js/parser.pegjs +9 -6
- data/amber/st/Canvas.st +474 -146
- data/amber/st/Compiler.st +418 -417
- data/amber/st/IDE.st +803 -772
- data/amber/st/Kernel-Announcements.st +27 -27
- data/amber/st/Kernel-Collections.st +289 -268
- data/amber/st/Kernel-Methods.st +104 -100
- data/amber/st/Kernel-Objects.st +277 -80
- metadata +18 -17
data/amber/js/boot.js
CHANGED
@@ -48,9 +48,9 @@ if (typeof console === "undefined") {
|
|
48
48
|
|
49
49
|
/* Smalltalk constructors definition */
|
50
50
|
|
51
|
-
function SmalltalkObject(){}
|
51
|
+
function SmalltalkObject(){}
|
52
52
|
function SmalltalkBehavior(){};
|
53
|
-
function SmalltalkClass(){}
|
53
|
+
function SmalltalkClass(){}
|
54
54
|
function SmalltalkPackage(){};
|
55
55
|
function SmalltalkMetaclass(){
|
56
56
|
this.meta = true;
|
@@ -133,6 +133,7 @@ function Smalltalk(){
|
|
133
133
|
that.fn = spec.fn || function(){};
|
134
134
|
that.superclass = spec.superclass;
|
135
135
|
that.iVarNames = spec.iVarNames || [];
|
136
|
+
that.toString = function() {return 'Smalltalk ' + that.className};
|
136
137
|
if(that.superclass) {
|
137
138
|
that.klass.superclass = that.superclass.klass;
|
138
139
|
}
|
@@ -246,7 +247,7 @@ function Smalltalk(){
|
|
246
247
|
/* Create a new class wrapping a JavaScript constructor, and add it to the
|
247
248
|
global smalltalk object. Package is lazily created if it does not exist with given name. */
|
248
249
|
|
249
|
-
st.
|
250
|
+
st.wrapClassName = function(className, pkgName, fn, superclass) {
|
250
251
|
var pkg = st.addPackage(pkgName);
|
251
252
|
st[className] = klass({
|
252
253
|
className: className,
|
@@ -256,6 +257,11 @@ function Smalltalk(){
|
|
256
257
|
});
|
257
258
|
};
|
258
259
|
|
260
|
+
/* Create an alias for an existing class */
|
261
|
+
st.alias = function(klass, alias) {
|
262
|
+
st[alias] = klass;
|
263
|
+
}
|
264
|
+
|
259
265
|
/* Add a package to the smalltalk.packages object, creating a new one if needed.
|
260
266
|
If pkgName is null or empty we return nil, which is an allowed package for a class.
|
261
267
|
If package already exists we still update the properties of it. */
|
@@ -390,6 +396,10 @@ function Smalltalk(){
|
|
390
396
|
/* Call a method of a JS object, or answer a property if it exists.
|
391
397
|
Else try wrapping a JSObjectProxy around the receiver.
|
392
398
|
|
399
|
+
If the object property is a function, then call it, except if it starts with
|
400
|
+
an uppercase character (we probably want to answer the function itself in this
|
401
|
+
case and send it #new from Amber).
|
402
|
+
|
393
403
|
Converts keyword-based selectors by using the first
|
394
404
|
keyword only, but keeping all message arguments.
|
395
405
|
|
@@ -399,14 +409,14 @@ function Smalltalk(){
|
|
399
409
|
function callJavaScriptMethod(receiver, selector, args) {
|
400
410
|
var jsSelector = selector._asJavaScriptSelector();
|
401
411
|
var jsProperty = receiver[jsSelector];
|
402
|
-
if(typeof jsProperty === "function") {
|
412
|
+
if(typeof jsProperty === "function" && !/^[A-Z]/.test(jsSelector)) {
|
403
413
|
return jsProperty.apply(receiver, args);
|
404
414
|
} else if(jsProperty !== undefined) {
|
405
415
|
if(args[0]) {
|
406
416
|
receiver[jsSelector] = args[0];
|
407
417
|
return nil;
|
408
418
|
} else {
|
409
|
-
return jsProperty
|
419
|
+
return jsProperty;
|
410
420
|
}
|
411
421
|
}
|
412
422
|
|
@@ -556,32 +566,37 @@ if(this.jQuery) {
|
|
556
566
|
/****************************************************************************************/
|
557
567
|
|
558
568
|
|
559
|
-
/* Base classes
|
569
|
+
/* Base classes wrapping. If you edit this part, do not forget to set the superclass of the
|
560
570
|
object metaclass to Class after the definition of Object */
|
561
571
|
|
562
|
-
smalltalk.
|
563
|
-
smalltalk.
|
564
|
-
smalltalk.
|
565
|
-
smalltalk.
|
566
|
-
smalltalk.
|
567
|
-
smalltalk.
|
568
|
-
smalltalk.
|
572
|
+
smalltalk.wrapClassName("Object", "Kernel", SmalltalkObject);
|
573
|
+
smalltalk.wrapClassName("Smalltalk", "Kernel", Smalltalk, smalltalk.Object);
|
574
|
+
smalltalk.wrapClassName("Package", "Kernel", SmalltalkPackage, smalltalk.Object);
|
575
|
+
smalltalk.wrapClassName("Behavior", "Kernel", SmalltalkBehavior, smalltalk.Object);
|
576
|
+
smalltalk.wrapClassName("Class", "Kernel", SmalltalkClass, smalltalk.Behavior);
|
577
|
+
smalltalk.wrapClassName("Metaclass", "Kernel", SmalltalkMetaclass, smalltalk.Behavior);
|
578
|
+
smalltalk.wrapClassName("CompiledMethod", "Kernel", SmalltalkMethod, smalltalk.Object);
|
569
579
|
|
570
580
|
smalltalk.Object.klass.superclass = smalltalk.Class;
|
571
581
|
|
572
|
-
smalltalk.
|
573
|
-
smalltalk.
|
574
|
-
smalltalk.
|
575
|
-
smalltalk.
|
576
|
-
smalltalk.
|
577
|
-
|
578
|
-
smalltalk.
|
579
|
-
smalltalk.
|
580
|
-
smalltalk.
|
581
|
-
smalltalk.
|
582
|
-
smalltalk.
|
583
|
-
smalltalk.
|
584
|
-
smalltalk.
|
585
|
-
|
586
|
-
smalltalk.
|
587
|
-
smalltalk.
|
582
|
+
smalltalk.wrapClassName("Number", "Kernel", Number, smalltalk.Object);
|
583
|
+
smalltalk.wrapClassName("BlockClosure", "Kernel", Function, smalltalk.Object);
|
584
|
+
smalltalk.wrapClassName("Boolean", "Kernel", Boolean, smalltalk.Object);
|
585
|
+
smalltalk.wrapClassName("Date", "Kernel", Date, smalltalk.Object);
|
586
|
+
smalltalk.wrapClassName("UndefinedObject", "Kernel", SmalltalkNil, smalltalk.Object);
|
587
|
+
|
588
|
+
smalltalk.wrapClassName("Collection", "Kernel", null, smalltalk.Object);
|
589
|
+
smalltalk.wrapClassName("SequenceableCollection", "Kernel", null, smalltalk.Collection);
|
590
|
+
smalltalk.wrapClassName("CharacterArray", "Kernel", null, smalltalk.SequenceableCollection);
|
591
|
+
smalltalk.wrapClassName("String", "Kernel", String, smalltalk.CharacterArray);
|
592
|
+
smalltalk.wrapClassName("Symbol", "Kernel", SmalltalkSymbol, smalltalk.CharacterArray);
|
593
|
+
smalltalk.wrapClassName("Array", "Kernel", Array, smalltalk.SequenceableCollection);
|
594
|
+
smalltalk.wrapClassName("RegularExpression", "Kernel", RegExp, smalltalk.String);
|
595
|
+
|
596
|
+
smalltalk.wrapClassName("Error", "Kernel", Error, smalltalk.Object);
|
597
|
+
smalltalk.wrapClassName("MethodContext", "Kernel", SmalltalkMethodContext, smalltalk.Object);
|
598
|
+
|
599
|
+
/* Alias definitions */
|
600
|
+
|
601
|
+
smalltalk.alias(smalltalk.Array, "OrderedCollection");
|
602
|
+
smalltalk.alias(smalltalk.Date, "Time");
|
data/amber/js/parser.js
CHANGED
@@ -56,6 +56,7 @@ smalltalk.parser = (function(){
|
|
56
56
|
"unaryPattern": parse_unaryPattern,
|
57
57
|
"unarySend": parse_unarySend,
|
58
58
|
"unaryTail": parse_unaryTail,
|
59
|
+
"varIdentifier": parse_varIdentifier,
|
59
60
|
"variable": parse_variable,
|
60
61
|
"ws": parse_ws
|
61
62
|
};
|
@@ -368,6 +369,78 @@ smalltalk.parser = (function(){
|
|
368
369
|
}
|
369
370
|
|
370
371
|
|
372
|
+
var savedPos0 = pos;
|
373
|
+
var savedPos1 = pos;
|
374
|
+
if (input.substr(pos).match(/^[a-zA-Z]/) !== null) {
|
375
|
+
var result3 = input.charAt(pos);
|
376
|
+
pos++;
|
377
|
+
} else {
|
378
|
+
var result3 = null;
|
379
|
+
if (reportMatchFailures) {
|
380
|
+
matchFailed("[a-zA-Z]");
|
381
|
+
}
|
382
|
+
}
|
383
|
+
if (result3 !== null) {
|
384
|
+
var result4 = [];
|
385
|
+
if (input.substr(pos).match(/^[a-zA-Z0-9]/) !== null) {
|
386
|
+
var result5 = input.charAt(pos);
|
387
|
+
pos++;
|
388
|
+
} else {
|
389
|
+
var result5 = null;
|
390
|
+
if (reportMatchFailures) {
|
391
|
+
matchFailed("[a-zA-Z0-9]");
|
392
|
+
}
|
393
|
+
}
|
394
|
+
while (result5 !== null) {
|
395
|
+
result4.push(result5);
|
396
|
+
if (input.substr(pos).match(/^[a-zA-Z0-9]/) !== null) {
|
397
|
+
var result5 = input.charAt(pos);
|
398
|
+
pos++;
|
399
|
+
} else {
|
400
|
+
var result5 = null;
|
401
|
+
if (reportMatchFailures) {
|
402
|
+
matchFailed("[a-zA-Z0-9]");
|
403
|
+
}
|
404
|
+
}
|
405
|
+
}
|
406
|
+
if (result4 !== null) {
|
407
|
+
var result1 = [result3, result4];
|
408
|
+
} else {
|
409
|
+
var result1 = null;
|
410
|
+
pos = savedPos1;
|
411
|
+
}
|
412
|
+
} else {
|
413
|
+
var result1 = null;
|
414
|
+
pos = savedPos1;
|
415
|
+
}
|
416
|
+
var result2 = result1 !== null
|
417
|
+
? (function(first, others) {return first + others.join("")})(result1[0], result1[1])
|
418
|
+
: null;
|
419
|
+
if (result2 !== null) {
|
420
|
+
var result0 = result2;
|
421
|
+
} else {
|
422
|
+
var result0 = null;
|
423
|
+
pos = savedPos0;
|
424
|
+
}
|
425
|
+
|
426
|
+
|
427
|
+
|
428
|
+
cache[cacheKey] = {
|
429
|
+
nextPos: pos,
|
430
|
+
result: result0
|
431
|
+
};
|
432
|
+
return result0;
|
433
|
+
}
|
434
|
+
|
435
|
+
function parse_varIdentifier() {
|
436
|
+
var cacheKey = 'varIdentifier@' + pos;
|
437
|
+
var cachedResult = cache[cacheKey];
|
438
|
+
if (cachedResult) {
|
439
|
+
pos = cachedResult.nextPos;
|
440
|
+
return cachedResult.result;
|
441
|
+
}
|
442
|
+
|
443
|
+
|
371
444
|
var savedPos0 = pos;
|
372
445
|
var savedPos1 = pos;
|
373
446
|
if (input.substr(pos).match(/^[a-z]/) !== null) {
|
@@ -721,25 +794,119 @@ smalltalk.parser = (function(){
|
|
721
794
|
}
|
722
795
|
if (result3 !== null) {
|
723
796
|
var result4 = [];
|
724
|
-
|
725
|
-
|
797
|
+
var savedPos3 = pos;
|
798
|
+
if (input.substr(pos).match(/^[a-zA-Z0-9:]/) !== null) {
|
799
|
+
var result12 = input.charAt(pos);
|
726
800
|
pos++;
|
727
801
|
} else {
|
728
|
-
var
|
802
|
+
var result12 = null;
|
729
803
|
if (reportMatchFailures) {
|
730
|
-
matchFailed("[a-zA-Z0-9]");
|
804
|
+
matchFailed("[a-zA-Z0-9:]");
|
731
805
|
}
|
732
806
|
}
|
807
|
+
if (result12 !== null) {
|
808
|
+
var result10 = [];
|
809
|
+
while (result12 !== null) {
|
810
|
+
result10.push(result12);
|
811
|
+
if (input.substr(pos).match(/^[a-zA-Z0-9:]/) !== null) {
|
812
|
+
var result12 = input.charAt(pos);
|
813
|
+
pos++;
|
814
|
+
} else {
|
815
|
+
var result12 = null;
|
816
|
+
if (reportMatchFailures) {
|
817
|
+
matchFailed("[a-zA-Z0-9:]");
|
818
|
+
}
|
819
|
+
}
|
820
|
+
}
|
821
|
+
} else {
|
822
|
+
var result10 = null;
|
823
|
+
}
|
824
|
+
var result11 = result10 !== null
|
825
|
+
? (function(digits) {return digits.join("")})(result10)
|
826
|
+
: null;
|
827
|
+
if (result11 !== null) {
|
828
|
+
var result9 = result11;
|
829
|
+
} else {
|
830
|
+
var result9 = null;
|
831
|
+
pos = savedPos3;
|
832
|
+
}
|
833
|
+
if (result9 !== null) {
|
834
|
+
var result5 = result9;
|
835
|
+
} else {
|
836
|
+
var savedPos2 = pos;
|
837
|
+
var result7 = parse_string();
|
838
|
+
var result8 = result7 !== null
|
839
|
+
? (function(node) {return node._value()})(result7)
|
840
|
+
: null;
|
841
|
+
if (result8 !== null) {
|
842
|
+
var result6 = result8;
|
843
|
+
} else {
|
844
|
+
var result6 = null;
|
845
|
+
pos = savedPos2;
|
846
|
+
}
|
847
|
+
if (result6 !== null) {
|
848
|
+
var result5 = result6;
|
849
|
+
} else {
|
850
|
+
var result5 = null;;
|
851
|
+
};
|
852
|
+
}
|
733
853
|
while (result5 !== null) {
|
734
854
|
result4.push(result5);
|
735
|
-
|
736
|
-
|
855
|
+
var savedPos3 = pos;
|
856
|
+
if (input.substr(pos).match(/^[a-zA-Z0-9:]/) !== null) {
|
857
|
+
var result12 = input.charAt(pos);
|
737
858
|
pos++;
|
738
859
|
} else {
|
739
|
-
var
|
860
|
+
var result12 = null;
|
740
861
|
if (reportMatchFailures) {
|
741
|
-
matchFailed("[a-zA-Z0-9]");
|
862
|
+
matchFailed("[a-zA-Z0-9:]");
|
863
|
+
}
|
864
|
+
}
|
865
|
+
if (result12 !== null) {
|
866
|
+
var result10 = [];
|
867
|
+
while (result12 !== null) {
|
868
|
+
result10.push(result12);
|
869
|
+
if (input.substr(pos).match(/^[a-zA-Z0-9:]/) !== null) {
|
870
|
+
var result12 = input.charAt(pos);
|
871
|
+
pos++;
|
872
|
+
} else {
|
873
|
+
var result12 = null;
|
874
|
+
if (reportMatchFailures) {
|
875
|
+
matchFailed("[a-zA-Z0-9:]");
|
876
|
+
}
|
877
|
+
}
|
742
878
|
}
|
879
|
+
} else {
|
880
|
+
var result10 = null;
|
881
|
+
}
|
882
|
+
var result11 = result10 !== null
|
883
|
+
? (function(digits) {return digits.join("")})(result10)
|
884
|
+
: null;
|
885
|
+
if (result11 !== null) {
|
886
|
+
var result9 = result11;
|
887
|
+
} else {
|
888
|
+
var result9 = null;
|
889
|
+
pos = savedPos3;
|
890
|
+
}
|
891
|
+
if (result9 !== null) {
|
892
|
+
var result5 = result9;
|
893
|
+
} else {
|
894
|
+
var savedPos2 = pos;
|
895
|
+
var result7 = parse_string();
|
896
|
+
var result8 = result7 !== null
|
897
|
+
? (function(node) {return node._value()})(result7)
|
898
|
+
: null;
|
899
|
+
if (result8 !== null) {
|
900
|
+
var result6 = result8;
|
901
|
+
} else {
|
902
|
+
var result6 = null;
|
903
|
+
pos = savedPos2;
|
904
|
+
}
|
905
|
+
if (result6 !== null) {
|
906
|
+
var result5 = result6;
|
907
|
+
} else {
|
908
|
+
var result5 = null;;
|
909
|
+
};
|
743
910
|
}
|
744
911
|
}
|
745
912
|
if (result4 !== null) {
|
@@ -754,8 +921,8 @@ smalltalk.parser = (function(){
|
|
754
921
|
}
|
755
922
|
var result2 = result1 !== null
|
756
923
|
? (function(val) {
|
757
|
-
|
758
|
-
|
924
|
+
return smalltalk.ValueNode._new()
|
925
|
+
._value_(smalltalk.symbolFor(val.join("").replace(/\"/ig, '"')))
|
759
926
|
})(result1[1])
|
760
927
|
: null;
|
761
928
|
if (result2 !== null) {
|
@@ -829,17 +996,42 @@ smalltalk.parser = (function(){
|
|
829
996
|
var savedPos0 = pos;
|
830
997
|
var savedPos1 = pos;
|
831
998
|
if (input.substr(pos).match(/^[\-]/) !== null) {
|
832
|
-
var
|
999
|
+
var result9 = input.charAt(pos);
|
833
1000
|
pos++;
|
834
1001
|
} else {
|
835
|
-
var
|
1002
|
+
var result9 = null;
|
836
1003
|
if (reportMatchFailures) {
|
837
1004
|
matchFailed("[\\-]");
|
838
1005
|
}
|
839
1006
|
}
|
840
|
-
var result3 =
|
1007
|
+
var result3 = result9 !== null ? result9 : '';
|
841
1008
|
if (result3 !== null) {
|
842
|
-
|
1009
|
+
if (input.substr(pos).match(/^[0-9]/) !== null) {
|
1010
|
+
var result8 = input.charAt(pos);
|
1011
|
+
pos++;
|
1012
|
+
} else {
|
1013
|
+
var result8 = null;
|
1014
|
+
if (reportMatchFailures) {
|
1015
|
+
matchFailed("[0-9]");
|
1016
|
+
}
|
1017
|
+
}
|
1018
|
+
if (result8 !== null) {
|
1019
|
+
var result4 = [];
|
1020
|
+
while (result8 !== null) {
|
1021
|
+
result4.push(result8);
|
1022
|
+
if (input.substr(pos).match(/^[0-9]/) !== null) {
|
1023
|
+
var result8 = input.charAt(pos);
|
1024
|
+
pos++;
|
1025
|
+
} else {
|
1026
|
+
var result8 = null;
|
1027
|
+
if (reportMatchFailures) {
|
1028
|
+
matchFailed("[0-9]");
|
1029
|
+
}
|
1030
|
+
}
|
1031
|
+
}
|
1032
|
+
} else {
|
1033
|
+
var result4 = null;
|
1034
|
+
}
|
843
1035
|
if (result4 !== null) {
|
844
1036
|
if (input.substr(pos, 1) === ".") {
|
845
1037
|
var result5 = ".";
|
@@ -851,7 +1043,32 @@ smalltalk.parser = (function(){
|
|
851
1043
|
}
|
852
1044
|
}
|
853
1045
|
if (result5 !== null) {
|
854
|
-
|
1046
|
+
if (input.substr(pos).match(/^[0-9]/) !== null) {
|
1047
|
+
var result7 = input.charAt(pos);
|
1048
|
+
pos++;
|
1049
|
+
} else {
|
1050
|
+
var result7 = null;
|
1051
|
+
if (reportMatchFailures) {
|
1052
|
+
matchFailed("[0-9]");
|
1053
|
+
}
|
1054
|
+
}
|
1055
|
+
if (result7 !== null) {
|
1056
|
+
var result6 = [];
|
1057
|
+
while (result7 !== null) {
|
1058
|
+
result6.push(result7);
|
1059
|
+
if (input.substr(pos).match(/^[0-9]/) !== null) {
|
1060
|
+
var result7 = input.charAt(pos);
|
1061
|
+
pos++;
|
1062
|
+
} else {
|
1063
|
+
var result7 = null;
|
1064
|
+
if (reportMatchFailures) {
|
1065
|
+
matchFailed("[0-9]");
|
1066
|
+
}
|
1067
|
+
}
|
1068
|
+
}
|
1069
|
+
} else {
|
1070
|
+
var result6 = null;
|
1071
|
+
}
|
855
1072
|
if (result6 !== null) {
|
856
1073
|
var result1 = [result3, result4, result5, result6];
|
857
1074
|
} else {
|
@@ -871,7 +1088,7 @@ smalltalk.parser = (function(){
|
|
871
1088
|
pos = savedPos1;
|
872
1089
|
}
|
873
1090
|
var result2 = result1 !== null
|
874
|
-
? (function(neg, int, dec) {return parseFloat((neg+int+"."+dec), 10)})(result1[0], result1[1], result1[3])
|
1091
|
+
? (function(neg, int, dec) {return parseFloat((neg + int.join("") + "." + dec.join("")), 10)})(result1[0], result1[1], result1[3])
|
875
1092
|
: null;
|
876
1093
|
if (result2 !== null) {
|
877
1094
|
var result0 = result2;
|
@@ -1430,7 +1647,7 @@ smalltalk.parser = (function(){
|
|
1430
1647
|
|
1431
1648
|
|
1432
1649
|
var savedPos0 = pos;
|
1433
|
-
var result1 =
|
1650
|
+
var result1 = parse_varIdentifier();
|
1434
1651
|
var result2 = result1 !== null
|
1435
1652
|
? (function(identifier) {
|
1436
1653
|
return smalltalk.VariableNode._new()
|
data/amber/js/parser.pegjs
CHANGED
@@ -3,7 +3,8 @@ start = method
|
|
3
3
|
separator = [ \t\v\f\u00A0\uFEFF\n\r\u2028\u2029]+
|
4
4
|
comments = (["][^"]*["])+
|
5
5
|
ws = (separator / comments)*
|
6
|
-
identifier = first:[a-
|
6
|
+
identifier = first:[a-zA-Z] others:[a-zA-Z0-9]* {return first + others.join("")}
|
7
|
+
varIdentifier = first:[a-z] others:[a-zA-Z0-9]* {return first + others.join("")}
|
7
8
|
keyword = first:identifier last:[:] {return first + last}
|
8
9
|
className = first:[A-Z] others:[a-zA-Z0-9]* {return first + others.join("")}
|
9
10
|
string = ['] val:(("''" {return "'"} / [^'])*) ['] {
|
@@ -11,15 +12,17 @@ string = ['] val:(("''" {return "'"} / [^'])*) ['] {
|
|
11
12
|
._value_(val.join("").replace(/\"/ig, '"'))
|
12
13
|
}
|
13
14
|
|
14
|
-
symbol = "#"val:
|
15
|
-
|
16
|
-
|
15
|
+
symbol = "#"val:(
|
16
|
+
digits:[a-zA-Z0-9\:]+ {return digits.join("")} /
|
17
|
+
node:string {return node._value()})* {
|
18
|
+
return smalltalk.ValueNode._new()
|
19
|
+
._value_(smalltalk.symbolFor(val.join("").replace(/\"/ig, '"')))
|
17
20
|
}
|
18
21
|
number = n:(float / integer) {
|
19
22
|
return smalltalk.ValueNode._new()
|
20
23
|
._value_(n)
|
21
24
|
}
|
22
|
-
float = neg:[-]?int:
|
25
|
+
float = neg:[-]?int:[0-9]+ "." dec:[0-9]+ {return parseFloat((neg + int.join("") + "." + dec.join("")), 10)}
|
23
26
|
integer = neg:[-]?digits:[0-9]+ {return (parseInt(neg+digits.join(""), 10))}
|
24
27
|
literalArray = "#(" ws lits:(lit:literal ws {return lit._value()})* ws ")" {
|
25
28
|
return smalltalk.ValueNode._new()
|
@@ -42,7 +45,7 @@ pseudoVariable = val:(
|
|
42
45
|
literal = pseudoVariable / number / literalArray / dynamicDictionary / dynamicArray / string / symbol / block
|
43
46
|
|
44
47
|
|
45
|
-
variable = identifier:
|
48
|
+
variable = identifier:varIdentifier {
|
46
49
|
return smalltalk.VariableNode._new()
|
47
50
|
._value_(identifier)
|
48
51
|
}
|