occam-parsers 23.0.62 → 23.0.64

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.
@@ -42,21 +42,11 @@ export default class NonTerminalNode {
42
42
  }
43
43
 
44
44
  setChildNodes(childNodes) {
45
- let parentNode;
46
-
47
- parentNode = null;
48
-
49
- this.childNodes.forEach((childNode) => {
50
- childNode.setParentNode(parentNode);
51
- });
45
+ this.resetChildNodesParentNode();
52
46
 
53
47
  this.childNodes = childNodes;
54
48
 
55
- parentNode = this;
56
-
57
- this.childNodes.forEach((childNode) => {
58
- childNode.setParentNode(parentNode);
59
- });
49
+ this.setChildNodesParentNode();
60
50
  }
61
51
 
62
52
  setParentNode(parentNode) {
@@ -263,6 +253,17 @@ export default class NonTerminalNode {
263
253
  return rewrittenNonTerminalNode;
264
254
  }
265
255
 
256
+ cloneChildNodes() {
257
+ const parentNode = this, ///
258
+ childNodes = this.childNodes.map((childNode) => {
259
+ childNode = childNode.clone(parentNode); ///
260
+
261
+ return childNode;
262
+ });
263
+
264
+ return childNodes;
265
+ }
266
+
266
267
  replaceChildNodes(replacedChildNodes, replacementChildNodes) {
267
268
  const replacedChildNodesLength = replacedChildNodes.length,
268
269
  firstReplacedChildNode = first(replacedChildNodes),
@@ -272,18 +273,32 @@ export default class NonTerminalNode {
272
273
 
273
274
  this.childNodes.splice(start, deleteCount, ...replacementChildNodes);
274
275
 
275
- let parentNode;
276
+ this.resetChildNodesParentNode(replacedChildNodes);
276
277
 
277
- parentNode = null;
278
+ this.setChildNodesParentNode(replacementChildNodes);
279
+ }
280
+
281
+ setChildNodesParentNode(childNodes) {
282
+ if (childNodes === undefined) {
283
+ childNodes = this.childNodes;
284
+ }
278
285
 
279
- replacedChildNodes.forEach((replacedChildNode) => {
280
- replacedChildNode.setParentNode(parentNode);
286
+ const parentNode = this;
287
+
288
+ childNodes.forEach((childNode) => {
289
+ childNode.setParentNode(parentNode);
281
290
  });
291
+ }
292
+
293
+ resetChildNodesParentNode(childNodes) {
294
+ if (childNodes === undefined) {
295
+ childNodes = this.childNodes;
296
+ }
282
297
 
283
- parentNode = this;
298
+ const parentNode = null;
284
299
 
285
- replacementChildNodes.forEach((replacementChildNode) => {
286
- replacementChildNode.setParentNode(parentNode);
300
+ childNodes.forEach((childNode) => {
301
+ childNode.setParentNode(parentNode);
287
302
  });
288
303
  }
289
304
 
@@ -295,17 +310,6 @@ export default class NonTerminalNode {
295
310
  return parseTree;
296
311
  }
297
312
 
298
- cloneChildNodes() {
299
- const parentNode = this, ///
300
- childNodes = this.childNodes.map((childNode) => {
301
- childNode = childNode.clone(parentNode); ///
302
-
303
- return childNode;
304
- });
305
-
306
- return childNodes;
307
- }
308
-
309
313
  clone(parentNode = null) {
310
314
  const Class = this.constructor,
311
315
  ruleName = this.ruleName,
package/src/rule.js CHANGED
@@ -86,12 +86,16 @@ export default class Rule {
86
86
  callback = () => { ///
87
87
  let parsed;
88
88
 
89
- parsed = true;
90
-
91
89
  const precedence = state.getPrecedence();
92
90
 
93
91
  nonTerminalNode.setPrecedence(precedence);
94
92
 
93
+ parsed = true;
94
+
95
+ if (parsed) {
96
+ node.setChildNodesParentNode();
97
+ }
98
+
95
99
  const rewrittenNonTerminalNode = nonTerminalNode.rewrite();
96
100
 
97
101
  if (rewrittenNonTerminalNode !== null) {
@@ -138,6 +142,10 @@ export default class Rule {
138
142
  }
139
143
  }
140
144
 
145
+ if (!parsed) {
146
+ node.resetChildNodesParentNode();
147
+ }
148
+
141
149
  return parsed;
142
150
  };
143
151
 
@@ -150,13 +158,7 @@ export default class Rule {
150
158
  return parsed;
151
159
  });
152
160
 
153
- if (parsed) {
154
- const parentNode = node; ///
155
-
156
- childNodes.forEach((childNode) => {
157
- childNode.setParentNode(parentNode);
158
- });
159
- } else {
161
+ if (!parsed) {
160
162
  nodes.pop();
161
163
  }
162
164