@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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/compiler.js +37 -22
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@graffiticode/basis",
3
3
  "type": "module",
4
- "version": "1.5.14",
4
+ "version": "1.5.15",
5
5
  "description": "The basis library for creating Graffiticode languages",
6
6
  "main": "index.js",
7
7
  "scripts": {
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
- const transformer = new this.Transformer(code);
1145
- transformer.transform(options, (err, val) => {
1146
- if (err && err.length) {
1147
- resume(err, val);
1148
- } else {
1149
- const renderer = new this.Renderer(val);
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");