@graffiticode/basis 1.5.14 → 1.5.16
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.
- package/package.json +1 -1
- package/src/compiler.js +53 -24
package/package.json
CHANGED
package/src/compiler.js
CHANGED
|
@@ -97,9 +97,29 @@ export class Checker extends Visitor {
|
|
|
97
97
|
resume(err, data);
|
|
98
98
|
});
|
|
99
99
|
}
|
|
100
|
+
CATCH_ALL(node, options, resume) {
|
|
101
|
+
const err = [];
|
|
102
|
+
const val = node;
|
|
103
|
+
resume(err, val);
|
|
104
|
+
}
|
|
105
|
+
ERROR(node, options, resume) {
|
|
106
|
+
this.visit(node.elts[0], options, (e0, v0) => {
|
|
107
|
+
this.visit(node.elts[1], options, (e1, v1) => {
|
|
108
|
+
this.visit(node.elts[2], options, (e2, v2) => {
|
|
109
|
+
const err = [{
|
|
110
|
+
message: v0,
|
|
111
|
+
from: v1,
|
|
112
|
+
to: v2
|
|
113
|
+
}];
|
|
114
|
+
const val = node;
|
|
115
|
+
resume(err, val);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
}
|
|
100
120
|
PROG(node, options, resume) {
|
|
101
121
|
this.visit(node.elts[0], options, (e0, v0) => {
|
|
102
|
-
const err = [];
|
|
122
|
+
const err = [].concat(e0);
|
|
103
123
|
const val = node;
|
|
104
124
|
resume(err, val);
|
|
105
125
|
});
|
|
@@ -122,13 +142,15 @@ export class Checker extends Visitor {
|
|
|
122
142
|
}
|
|
123
143
|
NUM(node, options, resume) {
|
|
124
144
|
const err = [];
|
|
125
|
-
const val = node;
|
|
145
|
+
const val = +node.elts[0];
|
|
126
146
|
resume(err, val);
|
|
127
147
|
}
|
|
128
148
|
LAMBDA(node, options, resume) {
|
|
129
149
|
const err = [];
|
|
130
150
|
const val = node;
|
|
131
151
|
this.visit(node.elts[0], options, (e0, v0) => {
|
|
152
|
+
const err = [].concat(e0);
|
|
153
|
+
const val = node;
|
|
132
154
|
resume(err, val);
|
|
133
155
|
});
|
|
134
156
|
}
|
|
@@ -139,6 +161,8 @@ export class Checker extends Visitor {
|
|
|
139
161
|
resume(err, val);
|
|
140
162
|
} else {
|
|
141
163
|
this.visit(node.elts[0], options, (e0, v0) => {
|
|
164
|
+
const err = [].concat(e0);
|
|
165
|
+
const val = node;
|
|
142
166
|
resume(err, val);
|
|
143
167
|
});
|
|
144
168
|
}
|
|
@@ -150,7 +174,7 @@ export class Checker extends Visitor {
|
|
|
150
174
|
}
|
|
151
175
|
STR(node, options, resume) {
|
|
152
176
|
const err = [];
|
|
153
|
-
const val = node;
|
|
177
|
+
const val = node.elts[0];
|
|
154
178
|
resume(err, val);
|
|
155
179
|
}
|
|
156
180
|
JSON(node, options, resume) {
|
|
@@ -163,7 +187,7 @@ export class Checker extends Visitor {
|
|
|
163
187
|
}
|
|
164
188
|
CONCAT(node, options, resume) {
|
|
165
189
|
this.visit(node.elts[0], options, (e0, v0) => {
|
|
166
|
-
const err = [];
|
|
190
|
+
const err = [].concat(e0);
|
|
167
191
|
const val = node;
|
|
168
192
|
resume(err, val);
|
|
169
193
|
});
|
|
@@ -517,7 +541,11 @@ export class Transformer extends Visitor {
|
|
|
517
541
|
// }
|
|
518
542
|
return matches;
|
|
519
543
|
}
|
|
520
|
-
|
|
544
|
+
CATCH_ALL(node, options, resume) {
|
|
545
|
+
const err = [];
|
|
546
|
+
const val = node; // Use the node as the tag value.
|
|
547
|
+
resume(err, val);
|
|
548
|
+
}
|
|
521
549
|
PROG(node, options, resume) {
|
|
522
550
|
if (!options) {
|
|
523
551
|
options = {};
|
|
@@ -823,6 +851,10 @@ export class Transformer extends Visitor {
|
|
|
823
851
|
this.visit(node.elts[1], options, (e1, v1) => {
|
|
824
852
|
let err = [];
|
|
825
853
|
let val = [];
|
|
854
|
+
console.log(
|
|
855
|
+
"MAP()",
|
|
856
|
+
"v1=" + JSON.stringify(v1),
|
|
857
|
+
);
|
|
826
858
|
v1.forEach(args => {
|
|
827
859
|
options.args = args;
|
|
828
860
|
options = JSON.parse(JSON.stringify(options)); // Copy option arg support async.
|
|
@@ -896,13 +928,9 @@ export class Transformer extends Visitor {
|
|
|
896
928
|
this.visit(node.elts[0], options, (e0, v0) => {
|
|
897
929
|
const type = typeof v0;
|
|
898
930
|
const val = `${v0}`;
|
|
899
|
-
console.log(
|
|
900
|
-
"CASE",
|
|
901
|
-
"type=" + type,
|
|
902
|
-
"val=" + val,
|
|
903
|
-
);
|
|
904
931
|
const expr = (
|
|
905
|
-
|
|
932
|
+
v0 === null && {tag: "NUL", elts: []} ||
|
|
933
|
+
v0.tag !== undefined && v0 || // We've got a tag value.
|
|
906
934
|
type === "boolean" && {tag: "BOOL", elts: [val]} ||
|
|
907
935
|
type === "number" && {tag: "NUM", elts: [val]} ||
|
|
908
936
|
{tag: "STR", elts: [val]}
|
|
@@ -1083,10 +1111,8 @@ export class Transformer extends Visitor {
|
|
|
1083
1111
|
resume([...err, 'Error in RANGE operation: step cannot be zero'], []);
|
|
1084
1112
|
return;
|
|
1085
1113
|
}
|
|
1086
|
-
|
|
1087
1114
|
const result = [];
|
|
1088
1115
|
let current = start;
|
|
1089
|
-
|
|
1090
1116
|
if (step.isPositive()) {
|
|
1091
1117
|
while (current.lessThan(end)) {
|
|
1092
1118
|
result.push(current.toNumber());
|
|
@@ -1098,7 +1124,6 @@ export class Transformer extends Visitor {
|
|
|
1098
1124
|
current = current.plus(step);
|
|
1099
1125
|
}
|
|
1100
1126
|
}
|
|
1101
|
-
|
|
1102
1127
|
resume(err, result);
|
|
1103
1128
|
} catch (e) {
|
|
1104
1129
|
resume([...err, `Error in RANGE operation: ${e.message}`], []);
|
|
@@ -1141,17 +1166,21 @@ export class Compiler {
|
|
|
1141
1166
|
};
|
|
1142
1167
|
const checker = new this.Checker(code);
|
|
1143
1168
|
checker.check(options, (err, val) => {
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
renderer.render(options, (err, val) => {
|
|
1169
|
+
if (err.length > 0) {
|
|
1170
|
+
resume(err);
|
|
1171
|
+
} else {
|
|
1172
|
+
const transformer = new this.Transformer(code);
|
|
1173
|
+
transformer.transform(options, (err, val) => {
|
|
1174
|
+
if (err && err.length) {
|
|
1151
1175
|
resume(err, val);
|
|
1152
|
-
}
|
|
1153
|
-
|
|
1154
|
-
|
|
1176
|
+
} else {
|
|
1177
|
+
const renderer = new this.Renderer(val);
|
|
1178
|
+
renderer.render(options, (err, val) => {
|
|
1179
|
+
resume(err, val);
|
|
1180
|
+
});
|
|
1181
|
+
}
|
|
1182
|
+
});
|
|
1183
|
+
}
|
|
1155
1184
|
});
|
|
1156
1185
|
} catch (x) {
|
|
1157
1186
|
console.log("ERROR with code");
|