resin 0.0.1 → 0.0.2
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/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
|
}
|