@graffiticode/basis 1.5.14 → 1.5.15
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 +37 -22
package/package.json
CHANGED
package/src/compiler.js
CHANGED
|
@@ -97,9 +97,24 @@ export class Checker extends Visitor {
|
|
|
97
97
|
resume(err, data);
|
|
98
98
|
});
|
|
99
99
|
}
|
|
100
|
+
ERROR(node, options, resume) {
|
|
101
|
+
this.visit(node.elts[0], options, (e0, v0) => {
|
|
102
|
+
this.visit(node.elts[1], options, (e1, v1) => {
|
|
103
|
+
this.visit(node.elts[2], options, (e2, v2) => {
|
|
104
|
+
const err = [{
|
|
105
|
+
message: v0,
|
|
106
|
+
from: v1,
|
|
107
|
+
to: v2
|
|
108
|
+
}];
|
|
109
|
+
const val = node;
|
|
110
|
+
resume(err, val);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
100
115
|
PROG(node, options, resume) {
|
|
101
116
|
this.visit(node.elts[0], options, (e0, v0) => {
|
|
102
|
-
const err = [];
|
|
117
|
+
const err = [].concat(e0);
|
|
103
118
|
const val = node;
|
|
104
119
|
resume(err, val);
|
|
105
120
|
});
|
|
@@ -122,13 +137,15 @@ export class Checker extends Visitor {
|
|
|
122
137
|
}
|
|
123
138
|
NUM(node, options, resume) {
|
|
124
139
|
const err = [];
|
|
125
|
-
const val = node;
|
|
140
|
+
const val = +node.elts[0];
|
|
126
141
|
resume(err, val);
|
|
127
142
|
}
|
|
128
143
|
LAMBDA(node, options, resume) {
|
|
129
144
|
const err = [];
|
|
130
145
|
const val = node;
|
|
131
146
|
this.visit(node.elts[0], options, (e0, v0) => {
|
|
147
|
+
const err = [].concat(e0);
|
|
148
|
+
const val = node;
|
|
132
149
|
resume(err, val);
|
|
133
150
|
});
|
|
134
151
|
}
|
|
@@ -139,6 +156,8 @@ export class Checker extends Visitor {
|
|
|
139
156
|
resume(err, val);
|
|
140
157
|
} else {
|
|
141
158
|
this.visit(node.elts[0], options, (e0, v0) => {
|
|
159
|
+
const err = [].concat(e0);
|
|
160
|
+
const val = node;
|
|
142
161
|
resume(err, val);
|
|
143
162
|
});
|
|
144
163
|
}
|
|
@@ -150,7 +169,7 @@ export class Checker extends Visitor {
|
|
|
150
169
|
}
|
|
151
170
|
STR(node, options, resume) {
|
|
152
171
|
const err = [];
|
|
153
|
-
const val = node;
|
|
172
|
+
const val = node.elts[0];
|
|
154
173
|
resume(err, val);
|
|
155
174
|
}
|
|
156
175
|
JSON(node, options, resume) {
|
|
@@ -163,7 +182,7 @@ export class Checker extends Visitor {
|
|
|
163
182
|
}
|
|
164
183
|
CONCAT(node, options, resume) {
|
|
165
184
|
this.visit(node.elts[0], options, (e0, v0) => {
|
|
166
|
-
const err = [];
|
|
185
|
+
const err = [].concat(e0);
|
|
167
186
|
const val = node;
|
|
168
187
|
resume(err, val);
|
|
169
188
|
});
|
|
@@ -896,11 +915,6 @@ export class Transformer extends Visitor {
|
|
|
896
915
|
this.visit(node.elts[0], options, (e0, v0) => {
|
|
897
916
|
const type = typeof v0;
|
|
898
917
|
const val = `${v0}`;
|
|
899
|
-
console.log(
|
|
900
|
-
"CASE",
|
|
901
|
-
"type=" + type,
|
|
902
|
-
"val=" + val,
|
|
903
|
-
);
|
|
904
918
|
const expr = (
|
|
905
919
|
val === null && {tag: "NUL", elts: []} ||
|
|
906
920
|
type === "boolean" && {tag: "BOOL", elts: [val]} ||
|
|
@@ -1083,10 +1097,8 @@ export class Transformer extends Visitor {
|
|
|
1083
1097
|
resume([...err, 'Error in RANGE operation: step cannot be zero'], []);
|
|
1084
1098
|
return;
|
|
1085
1099
|
}
|
|
1086
|
-
|
|
1087
1100
|
const result = [];
|
|
1088
1101
|
let current = start;
|
|
1089
|
-
|
|
1090
1102
|
if (step.isPositive()) {
|
|
1091
1103
|
while (current.lessThan(end)) {
|
|
1092
1104
|
result.push(current.toNumber());
|
|
@@ -1098,7 +1110,6 @@ export class Transformer extends Visitor {
|
|
|
1098
1110
|
current = current.plus(step);
|
|
1099
1111
|
}
|
|
1100
1112
|
}
|
|
1101
|
-
|
|
1102
1113
|
resume(err, result);
|
|
1103
1114
|
} catch (e) {
|
|
1104
1115
|
resume([...err, `Error in RANGE operation: ${e.message}`], []);
|
|
@@ -1141,17 +1152,21 @@ export class Compiler {
|
|
|
1141
1152
|
};
|
|
1142
1153
|
const checker = new this.Checker(code);
|
|
1143
1154
|
checker.check(options, (err, val) => {
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
renderer.render(options, (err, val) => {
|
|
1155
|
+
if (err.length > 0) {
|
|
1156
|
+
resume(err);
|
|
1157
|
+
} else {
|
|
1158
|
+
const transformer = new this.Transformer(code);
|
|
1159
|
+
transformer.transform(options, (err, val) => {
|
|
1160
|
+
if (err && err.length) {
|
|
1151
1161
|
resume(err, val);
|
|
1152
|
-
}
|
|
1153
|
-
|
|
1154
|
-
|
|
1162
|
+
} else {
|
|
1163
|
+
const renderer = new this.Renderer(val);
|
|
1164
|
+
renderer.render(options, (err, val) => {
|
|
1165
|
+
resume(err, val);
|
|
1166
|
+
});
|
|
1167
|
+
}
|
|
1168
|
+
});
|
|
1169
|
+
}
|
|
1155
1170
|
});
|
|
1156
1171
|
} catch (x) {
|
|
1157
1172
|
console.log("ERROR with code");
|