occam-furtle 2.0.340 → 3.0.1

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 (118) hide show
  1. package/example.js +6319 -2036
  2. package/lib/context/block.js +81 -41
  3. package/lib/context/file/furtle.js +260 -0
  4. package/lib/context/file/nominal.js +956 -0
  5. package/lib/context/file.js +146 -271
  6. package/lib/context/release.js +675 -0
  7. package/lib/context.js +210 -0
  8. package/lib/element/assignment/array.js +117 -15
  9. package/lib/element/assignment/object.js +119 -17
  10. package/lib/element/assignment/variable.js +121 -14
  11. package/lib/element/assignments/variable.js +120 -13
  12. package/lib/element/declaration/procedure.js +120 -12
  13. package/lib/element/error.js +118 -13
  14. package/lib/element/every.js +116 -13
  15. package/lib/element/expression.js +134 -68
  16. package/lib/element/label.js +119 -12
  17. package/lib/element/nodeQuery.js +120 -18
  18. package/lib/element/nodesQuery.js +120 -18
  19. package/lib/element/parameter/named.js +117 -15
  20. package/lib/element/parameter.js +116 -14
  21. package/lib/element/parameters/named.js +116 -14
  22. package/lib/element/parameters.js +115 -13
  23. package/lib/element/primitive.js +115 -63
  24. package/lib/element/procedure/anonymous.js +118 -16
  25. package/lib/element/procedure.js +118 -16
  26. package/lib/element/procedureCall.js +116 -14
  27. package/lib/element/reduce.js +116 -14
  28. package/lib/element/reference.js +119 -12
  29. package/lib/element/returnBlock.js +116 -14
  30. package/lib/element/some.js +117 -15
  31. package/lib/element/statement/return.js +120 -13
  32. package/lib/element/step.js +121 -14
  33. package/lib/element/term/bracketed.js +120 -13
  34. package/lib/element/term/comparison.js +117 -15
  35. package/lib/element/term/logical.js +119 -17
  36. package/lib/element/term/negated.js +119 -15
  37. package/lib/element/term.js +131 -45
  38. package/lib/element/terms.js +125 -14
  39. package/lib/element/ternary.js +118 -16
  40. package/lib/element/variable.js +127 -19
  41. package/lib/element.js +1 -8
  42. package/lib/index.js +9 -1
  43. package/lib/log.js +13 -12
  44. package/lib/metaTypeNames.js +26 -0
  45. package/lib/metaTypes.js +66 -0
  46. package/lib/node/expression.js +8 -15
  47. package/lib/nodeProperties.js +17 -21
  48. package/lib/nodeProperty.js +4 -7
  49. package/lib/utilities/context.js +8 -37
  50. package/lib/utilities/customGrammar.js +49 -0
  51. package/lib/utilities/element.js +110 -60
  52. package/lib/utilities/lineIndex.js +26 -0
  53. package/lib/utilities/primitive.js +14 -5
  54. package/lib/utilities/string.js +41 -37
  55. package/lib/utilities/term.js +14 -5
  56. package/lib/utilities/terms.js +7 -3
  57. package/package.json +2 -2
  58. package/src/context/block.js +20 -32
  59. package/src/context/file/furtle.js +141 -0
  60. package/src/context/file/nominal.js +946 -0
  61. package/src/context/file.js +32 -209
  62. package/src/context/release.js +653 -0
  63. package/src/context.js +74 -0
  64. package/src/element/assignment/array.js +8 -9
  65. package/src/element/assignment/object.js +12 -11
  66. package/src/element/assignment/variable.js +7 -8
  67. package/src/element/assignments/variable.js +7 -8
  68. package/src/element/declaration/procedure.js +6 -6
  69. package/src/element/error.js +4 -6
  70. package/src/element/every.js +5 -6
  71. package/src/element/expression.js +13 -33
  72. package/src/element/label.js +6 -7
  73. package/src/element/nodeQuery.js +12 -14
  74. package/src/element/nodesQuery.js +12 -14
  75. package/src/element/parameter/named.js +7 -8
  76. package/src/element/parameter.js +6 -8
  77. package/src/element/parameters/named.js +8 -9
  78. package/src/element/parameters.js +6 -8
  79. package/src/element/primitive.js +5 -57
  80. package/src/element/procedure/anonymous.js +7 -9
  81. package/src/element/procedure.js +6 -8
  82. package/src/element/procedureCall.js +6 -8
  83. package/src/element/reduce.js +5 -7
  84. package/src/element/reference.js +6 -7
  85. package/src/element/returnBlock.js +5 -7
  86. package/src/element/some.js +9 -9
  87. package/src/element/statement/return.js +7 -8
  88. package/src/element/step.js +6 -7
  89. package/src/element/term/bracketed.js +7 -8
  90. package/src/element/term/comparison.js +6 -8
  91. package/src/element/term/logical.js +12 -12
  92. package/src/element/term/negated.js +11 -9
  93. package/src/element/term.js +16 -17
  94. package/src/element/terms.js +16 -9
  95. package/src/element/ternary.js +8 -9
  96. package/src/element/variable.js +24 -14
  97. package/src/element.js +0 -8
  98. package/src/index.js +2 -0
  99. package/src/log.js +11 -11
  100. package/src/metaTypeNames.js +5 -0
  101. package/src/metaTypes.js +71 -0
  102. package/src/node/expression.js +9 -17
  103. package/src/nodeProperties.js +23 -32
  104. package/src/nodeProperty.js +5 -10
  105. package/src/utilities/context.js +7 -45
  106. package/src/utilities/customGrammar.js +40 -0
  107. package/src/utilities/element.js +181 -94
  108. package/src/utilities/lineIndex.js +21 -0
  109. package/src/utilities/primitive.js +22 -5
  110. package/src/utilities/string.js +42 -36
  111. package/src/utilities/term.js +22 -5
  112. package/src/utilities/terms.js +12 -4
  113. package/test/helpers/furtle.js +1 -1
  114. package/test/helpers/nominal.js +2 -3
  115. package/test/main.js +4 -3
  116. package/test/context/file.js +0 -127
  117. package/test/context/release.js +0 -151
  118. package/test/helpers/constants.js +0 -17
@@ -7,10 +7,10 @@ import elements from "../elements";
7
7
  import { BOOLEAN_TYPE } from "../types";
8
8
  import { ternaryStringFromTerm,
9
9
  variableStringFromName,
10
- termStringFromPrimitiveAndProperties,
10
+ termStringFromProperties,
11
+ expressionStringFromProperties,
11
12
  procedureDeclarationStringFromProcedure,
12
13
  returnBlockStringFromReturnStatementNode,
13
- expressionStringFromPrimitiveAndProperties,
14
14
  variableAssignmentStringFromTypeAndVariable,
15
15
  someStringFromVariableAndAnonymousProcedure,
16
16
  everyStringFromVariableAndAnonymousProcedure,
@@ -25,25 +25,33 @@ export function stepFromStepNode(stepNode, context) {
25
25
  string = context.nodeAsString(node),
26
26
  arrayAssignment = arrayAssignmentFromStepNode(stepNode, context),
27
27
  objectAssigment = objectAssignmentFromStepNode(stepNode, context),
28
- variablesDeclaration = variableAssignmentsFromStepNode(stepNode, context),
29
- step = new Step(string, arrayAssignment, objectAssigment, variablesDeclaration);
28
+ variablesDeclaration = variableAssignmentsFromStepNode(stepNode, context);
29
+
30
+ context = null;
31
+
32
+ const step = new Step(context, string, node, arrayAssignment, objectAssigment, variablesDeclaration);
30
33
 
31
34
  return step;
32
35
  }
33
36
 
34
37
  export function someFromSomeNode(someNode, context) {
35
38
  const { Some } = elements,
39
+ node = someNode, ///
36
40
  variable = variableFromSomeNode(someNode, context),
37
41
  anonymousProcedure = anonymousProcedureFromSomeNode(someNode, context),
38
42
  someString = someStringFromVariableAndAnonymousProcedure(variable, anonymousProcedure),
39
- string = someString, ///
40
- some = new Some(string, variable, anonymousProcedure);
43
+ string = someString; ///
44
+
45
+ context = null;
46
+
47
+ const some = new Some(context, string, node, variable, anonymousProcedure);
41
48
 
42
49
  return some;
43
50
  }
44
51
 
45
52
  export function termFromTermNode(termNode, context) {
46
53
  const { Term } = elements,
54
+ node = termNode, ///
47
55
  variable = variableFromTermNode(termNode, context),
48
56
  primitive = primitiveFromTermNode(termNode, context),
49
57
  negatedTerm = negatedTermFromTermNode(termNode, context),
@@ -52,14 +60,18 @@ export function termFromTermNode(termNode, context) {
52
60
  comparisonTerm = comparisonTermFromTermNode(termNode, context),
53
61
  properties = [
54
62
  variable,
63
+ primitive,
55
64
  negatedTerm,
56
65
  logicalTerm,
57
66
  bracketedTerm,
58
67
  comparisonTerm
59
68
  ],
60
- termString = termStringFromPrimitiveAndProperties(primitive, properties, context),
61
- string = termString, ///
62
- term = new Term(string, variable, primitive, negatedTerm, logicalTerm, bracketedTerm, comparisonTerm);
69
+ termString = termStringFromProperties(properties, context),
70
+ string = termString; ///
71
+
72
+ context = null;
73
+
74
+ const term = new Term(context, string, node, variable, primitive, negatedTerm, logicalTerm, bracketedTerm, comparisonTerm);
63
75
 
64
76
  return term;
65
77
  }
@@ -70,8 +82,11 @@ export function termsFromTermsNode(termsNode, context) {
70
82
  string = context.nodeAsString(node),
71
83
  termNodes = termsNode.getTermNodes(),
72
84
  termsArray = termsArrayFromTermNodes(termNodes, context),
73
- array = termsArray, ///
74
- terms = new Terms(string, array);
85
+ array = termsArray; ///
86
+
87
+ context = null;
88
+
89
+ const terms = new Terms(context, string, node, array);
75
90
 
76
91
  return terms;
77
92
  }
@@ -79,19 +94,26 @@ export function termsFromTermsNode(termsNode, context) {
79
94
  export function errorFromErrorNode(errorNode, context) {
80
95
  const { Error } = elements,
81
96
  node = errorNode, ///
82
- string = context.nodeAsString(node),
83
- error = new Error(string);
97
+ string = context.nodeAsString(node);
98
+
99
+ context = null;
100
+
101
+ const error = new Error(context, string, node);
84
102
 
85
103
  return error;
86
104
  }
87
105
 
88
106
  export function everyFromEveryNode(everyNode, context) {
89
107
  const { Every } = elements,
108
+ node = everyNode, ///
90
109
  variable = variableFromEveryNode(everyNode, context),
91
110
  anonymousProcedure = anonymousProcedureFromEveryNode(everyNode, context),
92
111
  everyString = everyStringFromVariableAndAnonymousProcedure(variable, anonymousProcedure),
93
- string = everyString, ///
94
- every = new Every(string, variable, anonymousProcedure);
112
+ string = everyString; ///
113
+
114
+ context = null;
115
+
116
+ const every = new Every(context, string, node, variable, anonymousProcedure);
95
117
 
96
118
  return every;
97
119
  }
@@ -100,32 +122,43 @@ export function labelFromLabelNode(labelNode, context) {
100
122
  const { Label } = elements,
101
123
  node = labelNode,
102
124
  string = context.nodeAsString(node),
103
- name = nameFromLabelNode(labelNode, context),
104
- label = new Label(string, name);
125
+ name = nameFromLabelNode(labelNode, context);
126
+
127
+ context = null;
128
+
129
+ const label = new Label(context, string, node, name);
105
130
 
106
131
  return label;
107
132
  }
108
133
 
109
134
  export function reduceFromReduceNode(reduceNode, context) {
110
135
  const { Reduce } = elements,
136
+ node = reduceNode, ///
111
137
  variable = variableFromReduceNode(reduceNode, context),
112
138
  initialExpression = initialExpressionFromReduceNode(reduceNode, context),
113
139
  anonymousProcedure = anonymousProcedureFromReduceNode(reduceNode, context),
114
140
  reduceString = reduceStringFromVariableInitialExpressionAndAnonymousProcedure(variable, initialExpression, anonymousProcedure),
115
- string = reduceString, ///
116
- reduce = new Reduce(string, variable, initialExpression, anonymousProcedure);
141
+ string = reduceString; ///
142
+
143
+ context = null;
144
+
145
+ const reduce = new Reduce(context, string, node, variable, initialExpression, anonymousProcedure);
117
146
 
118
147
  return reduce;
119
148
  }
120
149
 
121
150
  export function ternaryFromTernaryNode(ternaryNode, context) {
122
151
  const { Ternary } = elements,
152
+ node = ternaryNode, ///
123
153
  term = termFromTernaryNode(ternaryNode, context),
124
154
  ifExpression = ifExpressionFromTernaryNode(ternaryNode, context),
125
155
  elseExpression = elseExpressionFromTernaryNode(ternaryNode, context),
126
156
  ternaryString = ternaryStringFromTerm(term),
127
- string = ternaryString, ///
128
- ternary = new Ternary(string, term, ifExpression, elseExpression);
157
+ string = ternaryString; ///
158
+
159
+ context = null;
160
+
161
+ const ternary = new Ternary(context, string, node, term, ifExpression, elseExpression);
129
162
 
130
163
  return ternary;
131
164
  }
@@ -136,8 +169,11 @@ export function variableFromVariableNode(variableNode, context) {
136
169
  string = context.nodeAsString(node),
137
170
  type = typeFromVariableNode(variableNode, context),
138
171
  name = nameFromVariableNode(variableNode, context),
139
- expression = expressionFromVariableNode(variableNode, context),
140
- variable = new Variable(string, type, name, expression);
172
+ expression = expressionFromVariableNode(variableNode, context);
173
+
174
+ context = null;
175
+
176
+ const variable = new Variable(context, string, node, type, name, expression);
141
177
 
142
178
  return variable;
143
179
  }
@@ -146,8 +182,11 @@ export function referenceFromReferenceNode(referenceNode, context) {
146
182
  const { Reference } = elements,
147
183
  node = referenceNode, ///
148
184
  string = context.nodeAsString(node),
149
- name = nameFromReferenceNode(referenceNode, context),
150
- reference = new Reference(string, name);
185
+ name = nameFromReferenceNode(referenceNode, context);
186
+
187
+ context = null;
188
+
189
+ const reference = new Reference(context, string, node, name);
151
190
 
152
191
  return reference;
153
192
  }
@@ -163,7 +202,9 @@ export function parameterFromParameterNode(parameterNode, context) {
163
202
  string = context.nodeAsString(node),
164
203
  name = nameFromParaneterNode(parameterNode, context);
165
204
 
166
- parameter = new Parameter(string, type, name);
205
+ context = null;
206
+
207
+ parameter = new Parameter(context, string, node, type, name);
167
208
  }
168
209
 
169
210
  return parameter;
@@ -174,19 +215,25 @@ export function nodeQueryFromNodeQueryNode(nodeQueryNode, context) {
174
215
  node = nodeQueryNode, ///
175
216
  string = context.nodeAsString(node),
176
217
  variable = variableFromNodeQueryNode(nodeQueryNode, context),
177
- query = queryFromNodeQueryNode(nodeQueryNode, context),
178
- nodeQuery = new NodeQuery(string, variable, query);
218
+ query = queryFromNodeQueryNode(nodeQueryNode, context);
219
+
220
+ context = null;
221
+
222
+ const nodeQuery = new NodeQuery(context, string, node, variable, query);
179
223
 
180
224
  return nodeQuery;
181
225
  }
182
226
 
183
227
  export function primitiveFromPrimitiveNode(primitiveNode, context) {
184
228
  const { Primitive } = elements,
185
- primitiveString = context.nodeAsString(primitiveNode),
186
- string = primitiveString, ///
229
+ node = primitiveNode, ///
230
+ string = context.nodeAsString(node),
187
231
  type = typeFromPrimitiveNode(primitiveNode, context),
188
- value = valueFromPrimitiveNode(primitiveNode, context),
189
- primitive = new Primitive(string, type, value);
232
+ value = valueFromPrimitiveNode(primitiveNode, context);
233
+
234
+ context = null;
235
+
236
+ const primitive = new Primitive(context, string, node, type, value);
190
237
 
191
238
  return primitive;
192
239
  }
@@ -196,8 +243,11 @@ export function nodesQueryFromNodesQueryNode(nodesQueryNode, context) {
196
243
  node = nodesQueryNode, ///
197
244
  string = context.nodeAsString(node),
198
245
  variable = variableFromNodesQueryNode(nodesQueryNode, context),
199
- query = queryFromNodesQueryNode(nodesQueryNode, context),
200
- nodesQuery = new NodesQuery(string, variable, query);
246
+ query = queryFromNodesQueryNode(nodesQueryNode, context);
247
+
248
+ context = null;
249
+
250
+ const nodesQuery = new NodesQuery(context, string, node, variable, query);
201
251
 
202
252
  return nodesQuery;
203
253
  }
@@ -207,16 +257,19 @@ export function parametersFromParametersNode(parametersNode, context) {
207
257
  node = parametersNode, ///
208
258
  string = context.nodeAsString(node),
209
259
  paramtersArray = paramtersArrayFromParametersNode(parametersNode, context),
210
- array = paramtersArray, ///
211
- parameters = new Parameters(string, array);
260
+ array = paramtersArray; ///
261
+
262
+ context = null;
263
+
264
+ const parameters = new Parameters(context, string, node, array);
212
265
 
213
266
  return parameters;
214
267
  }
215
268
 
216
269
  export function expressionFromExpressionNode(expressionNode, context) {
217
270
  const { Expression } = elements,
218
- variable = variableFromExpressionNode(expressionNode, context),
219
- primitive = primitiveFromExpressionNode(expressionNode, context),
271
+ node = expressionNode, ///
272
+ term = termFromExpressionNode(expressionNode, context),
220
273
  some = someFromExpressionNode(expressionNode, context),
221
274
  every = everyFromExpressionNode(expressionNode, context),
222
275
  reduce = reduceFromExpressionNode(expressionNode, context),
@@ -226,31 +279,38 @@ export function expressionFromExpressionNode(expressionNode, context) {
226
279
  returnBlock = returnBlockFromExpressionNode(expressionNode, context),
227
280
  procedureCall = procedureCallFromExpressionNode(expressionNode, context),
228
281
  properties = [
282
+ term,
229
283
  some,
230
284
  every,
231
285
  reduce,
232
286
  ternary,
233
- variable,
234
287
  nodeQuery,
235
288
  nodesQuery,
236
289
  returnBlock,
237
290
  procedureCall
238
291
  ],
239
- expressionString = expressionStringFromPrimitiveAndProperties(primitive, properties, context),
240
- string = expressionString, ///
241
- expression = new Expression(string, variable, primitive, some, every, reduce, ternary, nodeQuery, nodesQuery, returnBlock, procedureCall);
292
+ expressionString = expressionStringFromProperties(properties, context),
293
+ string = expressionString; ///
294
+
295
+ context = null;
296
+
297
+ const expression = new Expression(context, string, node, term, some, every, reduce, ternary, nodeQuery, nodesQuery, returnBlock, procedureCall);
242
298
 
243
299
  return expression;
244
300
  }
245
301
 
246
302
  export function returnBlockFromReturnBlockNode(returnBlockNode, context) {
247
303
  const { ReturnBlock } = elements,
304
+ node = returnBlockNode, ///
248
305
  steps = stepsFromReturnBlockNode(returnBlockNode, context),
249
306
  nonsensical = nonsensicalFromReturnBlockNode(returnBlockNode, context),
250
307
  returnStatement = returnStatementFromReturnBlockNode(returnBlockNode, context),
251
308
  returnBlockString = returnBlockStringFromReturnStatementNode(returnStatement),
252
- string = returnBlockString, ///
253
- returnBlock = new ReturnBlock(string, steps, nonsensical, returnStatement);
309
+ string = returnBlockString; ///
310
+
311
+ context = null;
312
+
313
+ const returnBlock = new ReturnBlock(context, string, node, steps, nonsensical, returnStatement);
254
314
 
255
315
  return returnBlock;
256
316
  }
@@ -260,8 +320,11 @@ export function procedureCallFromProcedureCallNode(procedureCallNode, context) {
260
320
  node = procedureCallNode, ///
261
321
  string = context.nodeAsString(node),
262
322
  reference = referenceFromProcedureCallNode(procedureCallNode, context),
263
- terms = termsFromProcedureCallNode(procedureCallNode, context),
264
- procedureCall = new ProcedureCall(string, reference, terms);
323
+ terms = termsFromProcedureCallNode(procedureCallNode, context);
324
+
325
+ context = null;
326
+
327
+ const procedureCall = new ProcedureCall(context, string, node, reference, terms);
265
328
 
266
329
  return procedureCall;
267
330
  }
@@ -272,8 +335,11 @@ export function namedParameterFromNamedParameterNode(namedParameterNode, context
272
335
  string = context.nodeAsString(node),
273
336
  type = typeFromNamedParameterNode(namedParameterNode, context),
274
337
  name = nameFromNamedParameterNode(namedParameterNode, context),
275
- alias = aliasFromNamedParameterNode(namedParameterNode, context),
276
- namedParameter = new NamedParameter(string, type, name, alias);
338
+ alias = aliasFromNamedParameterNode(namedParameterNode, context);
339
+
340
+ context = null;
341
+
342
+ const namedParameter = new NamedParameter(context, string, node, type, name, alias);
277
343
 
278
344
  return namedParameter;
279
345
  }
@@ -284,8 +350,11 @@ export function namedParametersFromNamedParametersNode(namedParametersNode, cont
284
350
  string = context.nodeAsString(node),
285
351
  namedParameterNodes = namedParametersNode.getNamedParameterNodes(),
286
352
  namedParametersArray = namedParamtersArrayFromNamedParameterNodes(namedParameterNodes, context),
287
- array = namedParametersArray, ///
288
- namedParameters = new NamedParameters(string, array);
353
+ array = namedParametersArray; ///
354
+
355
+ context = null;
356
+
357
+ const namedParameters = new NamedParameters(context, string, node, array);
289
358
 
290
359
  return namedParameters;
291
360
  }
@@ -295,8 +364,11 @@ export function arrayAssignmentFromArrayAssignmentNode(arrayAssignmentNode, cont
295
364
  node = arrayAssignmentNode, ///
296
365
  string = context.nodeAsString(node),
297
366
  variable = variableFromArrayAssignmentNode(arrayAssignmentNode, context),
298
- parameters = parametersFromArrayAssignmentNode(arrayAssignmentNode, context),
299
- arrayAssignment = new ArrayAssignment(string, variable, parameters);
367
+ parameters = parametersFromArrayAssignmentNode(arrayAssignmentNode, context);
368
+
369
+ context = null;
370
+
371
+ const arrayAssignment = new ArrayAssignment(context, string, node, variable, parameters);
300
372
 
301
373
  return arrayAssignment;
302
374
  }
@@ -305,8 +377,11 @@ export function returnStatementFromReturnStatementNode(returnStatementNode, cont
305
377
  const { ReturnStatement } = elements,
306
378
  node = returnStatementNode, ///
307
379
  string = context.nodeAsString(node),
308
- term = termFromReturnStatementNode(returnStatementNode, context),
309
- returnStatement = new ReturnStatement(string, term);
380
+ term = termFromReturnStatementNode(returnStatementNode, context);
381
+
382
+ context = null;
383
+
384
+ const returnStatement = new ReturnStatement(context, string, node, term);
310
385
 
311
386
  return returnStatement;
312
387
  }
@@ -323,42 +398,57 @@ export function objectAssignmentFromObjectAssignmentNode(objectAssignmentNode, c
323
398
  node = objectAssignmentNode, ///
324
399
  string = context.nodeAsString(node),
325
400
  variable = variableFromObjectAssignmentNode(objectAssignmentNode, context),
326
- namedParameters = namedParametersFromObjectAssignmentNode(objectAssignmentNode, context),
327
- objectAssignment = new ObjectAssigment(string, variable, namedParameters);
401
+ namedParameters = namedParametersFromObjectAssignmentNode(objectAssignmentNode, context);
402
+
403
+ context = null;
404
+
405
+ const objectAssignment = new ObjectAssigment(context, string, node, variable, namedParameters);
328
406
 
329
407
  return objectAssignment;
330
408
  }
331
409
 
332
410
  export function anonymousProcedureFromAnonymousProcedureNode(anonymousProcedureNode, context) {
333
411
  const { AnonymousProcedure } = elements,
412
+ node = anonymousProcedureNode, ///
334
413
  type = typeFromProcedureAnonymousProcedureNode(anonymousProcedureNode, context),
335
414
  parameters = parametersFromAnonymousProcedureNode(anonymousProcedureNode, context),
336
415
  returnBlock = returnBlockFromAnonymousProcedureNode(anonymousProcedureNode, context),
337
416
  nonymousProcedureString = anonymousProcedureStringFromTypeParametersAndReturnBlock(type, parameters, returnBlock),
338
- string = nonymousProcedureString, ///
339
- anonymousProcedure = new AnonymousProcedure(string, type, parameters, returnBlock);
417
+ string = nonymousProcedureString; ///
418
+
419
+ context = null;
420
+
421
+ const anonymousProcedure = new AnonymousProcedure(context, string, node, type, parameters, returnBlock);
340
422
 
341
423
  return anonymousProcedure;
342
424
  }
343
425
 
344
426
  export function variableAssignmentsFromVariableAssignmentsNode(variableAssignmentsNode, context) {
345
427
  const { VariableAssignments } = elements,
428
+ node = variableAssignmentsNode, ///
346
429
  type = typeFromVariableAssignmentsNode(variableAssignmentsNode, context),
347
430
  variableAssignmentsArray = variableAssignmentsArrayFromTypeAndVariableAssignmentsNode(type, variableAssignmentsNode, context),
348
431
  variableAssignmentString = variableAssignmentStringFromTypeAndVariableAssignmentsArray(type, variableAssignmentsArray),
349
432
  array = variableAssignmentsArray, ///
350
- string = variableAssignmentString, ///
351
- variableAssignments = new VariableAssignments(string, array);
433
+ string = variableAssignmentString; ///
434
+
435
+ context = null;
436
+
437
+ const variableAssignments = new VariableAssignments(context, string, node, array);
352
438
 
353
439
  return variableAssignments;
354
440
  }
355
441
 
356
442
  export function procedureDeclarationFromProcedureDeclarationNode(procedureDeclarationNode, context) {
357
443
  const { ProcedureDeclaration } = elements,
444
+ node = procedureDeclarationNode, ///
358
445
  procedure = procedureFromProcedureDeclarationNode(procedureDeclarationNode, context),
359
446
  procedureDeclarationString = procedureDeclarationStringFromProcedure(procedure),
360
- string = procedureDeclarationString, ///
361
- procedureDeclaration = new ProcedureDeclaration(string, procedure);
447
+ string = procedureDeclarationString; ///
448
+
449
+ context = null;
450
+
451
+ const procedureDeclaration = new ProcedureDeclaration(context, string, node, procedure);
362
452
 
363
453
  return procedureDeclaration;
364
454
  }
@@ -457,6 +547,18 @@ export function variableFromReduceNode(reduceNode, context) {
457
547
  return variable;
458
548
  }
459
549
 
550
+ export function termFromExpressionNode(expressionNode, context) {
551
+ let term = null;
552
+
553
+ const termNode = expressionNode.getTermNode();
554
+
555
+ if (termNode !== null) {
556
+ term = termFromTermNode(termNode, context);
557
+ }
558
+
559
+ return term;
560
+ }
561
+
460
562
  export function someFromExpressionNode(expressionNode, context) {
461
563
  let some = null;
462
564
 
@@ -533,9 +635,15 @@ export function typeFromLogicalTermNode(logicalTermNode, context) {
533
635
  return type;
534
636
  }
535
637
 
638
+ export function typeFromNegatedTermNode(logicalTermNode, context) {
639
+ const type = BOOLEAN_TYPE;
640
+
641
+ return type;
642
+ }
643
+
536
644
  export function termFromNegatedTermNode(negatedTermNode, context) {
537
645
  const termNode = negatedTermNode.getTermNode(),
538
- term = termFromTermNode(termNode, context);
646
+ term = termFromTermNode(termNode, context);
539
647
 
540
648
  return term;
541
649
  }
@@ -633,18 +741,6 @@ export function variableFromNodesQueryNode(nodesQueryNode, context) {
633
741
  return variable;
634
742
  }
635
743
 
636
- export function variableFromExpressionNode(expressionNode, context) {
637
- let variable = null;
638
-
639
- const variableNode = expressionNode.getVariableNode();
640
-
641
- if (variableNode !== null) {
642
- variable = variableFromVariableNode(variableNode, context);
643
- }
644
-
645
- return variable;
646
- }
647
-
648
744
  export function termsFromProcedureCallNode(procedureCallNode, context) {
649
745
  const termsNode = procedureCallNode.getTermsNode(),
650
746
  terms = termsFromTermsNode(termsNode, context);
@@ -690,18 +786,6 @@ export function ifExpressionFromTernaryNode(ternaryNode, context) {
690
786
  return ifExpression;
691
787
  }
692
788
 
693
- export function primitiveFromExpressionNode(expressionNode, context) {
694
- let primitive = null;
695
-
696
- const primitiveNode = expressionNode.getPrimitiveNode();
697
-
698
- if (primitiveNode !== null) {
699
- primitive = primitiveFromPrimitiveNode(primitiveNode, context);
700
- }
701
-
702
- return primitive;
703
- }
704
-
705
789
  export function nodeQueryFromExpressionNode(expressionNode, context) {
706
790
  let nodeQuery = null;
707
791
 
@@ -823,7 +907,7 @@ export function negatedTermFromNegatedTermNode(negatedTermNode, context) {
823
907
  termNode = negatedTermNode.getTermNode(),
824
908
  type = typeFromNegatedTermNode(termNode, context),
825
909
  term = termFromNegatedTermNode(negatedTermNode, context),
826
- negatedTerm = new NegatedTerm(string, type, term);
910
+ negatedTerm = new NegatedTerm(context, string, node, type, term);
827
911
 
828
912
  return negatedTerm;
829
913
  }
@@ -836,18 +920,19 @@ export function logicalTermFromLogicalTermNode(logicalTermNode, context) {
836
920
  disjunction = disjunctionFromLogicalTermNode(logicalTermNode, context),
837
921
  leftTerm = leftTermFromLogicalTermNode(logicalTermNode, context),
838
922
  rightTerm = rightTermFromLogicalTermNode(logicalTermNode, context),
839
- logicalTerm = new LogicalTerm(string, type, disjunction, leftTerm, rightTerm);
923
+ logicalTerm = new LogicalTerm(context, string, node, type, disjunction, leftTerm, rightTerm);
840
924
 
841
925
  return logicalTerm;
842
926
  }
843
927
 
844
928
  export function variableFromTypeAndVariableNode(type, variableNode, context) {
845
929
  const { Variable } = elements,
930
+ node = variableNode, ///
846
931
  name = nameFromVariableNode(variableNode),
847
932
  expression = expressionFromTypeAndVariableNode(type, variableNode, context),
848
933
  variableString = variableStringFromName(name),
849
934
  string = variableString, ///
850
- variable = new Variable(string, type, name, expression);
935
+ variable = new Variable(context, string, node, type, name, expression);
851
936
 
852
937
  return variable;
853
938
  }
@@ -962,7 +1047,7 @@ export function bracketedTermFromBracketedTermNode(bracketedTermNode, context) {
962
1047
  node = bracketedTermNode, ///
963
1048
  string = context.nodeAsString(node), ///
964
1049
  term = termFromBracketedTermNode(bracketedTermNode, context),
965
- bracketedTerm = new BracketedTerm(string, term);
1050
+ bracketedTerm = new BracketedTerm(context, string, node, term);
966
1051
 
967
1052
  return bracketedTerm;
968
1053
  }
@@ -988,7 +1073,7 @@ export function comparisonTermFromComparisonTermNode(comparisonTermNode, context
988
1073
  negated = negatedFromComparisonTermNode(comparisonTermNode, context),
989
1074
  leftTerm = leftTermFromCompzrisonTermNode(comparisonTermNode, context),
990
1075
  rightTerm = rightTermFromCompzrisonTermNode(comparisonTermNode, context),
991
- comparisonTerm = new ComparisonTerm(string, negated, leftTerm, rightTerm);
1076
+ comparisonTerm = new ComparisonTerm(context, string, node, negated, leftTerm, rightTerm);
992
1077
 
993
1078
  return comparisonTerm;
994
1079
  }
@@ -1002,13 +1087,14 @@ export function returnBlockFromAnonymousProcedureNode(anonymousProcedureNode, co
1002
1087
 
1003
1088
  export function procedureFromProcedureDeclarationNode(procedureDeclarationNode, context) {
1004
1089
  const { Procedure } = elements,
1090
+ node = procedureDeclarationNode, ///
1005
1091
  type = typeFromProcedureDeclarationNode(procedureDeclarationNode, context),
1006
1092
  label = labelFromProcedureDeclarationNode(procedureDeclarationNode, context),
1007
1093
  parameters = parametersFromProcedureDeclarationNode(procedureDeclarationNode, context),
1008
1094
  returnBlock = returnBlockFromProcedureDeclarationNode(procedureDeclarationNode, context),
1009
1095
  procedureString = procedureStringFromTypeLabelParametersAndReturnBlock(type, label, parameters, returnBlock),
1010
1096
  string = procedureString, ///
1011
- procedure = new Procedure(string, type, label, parameters, returnBlock);
1097
+ procedure = new Procedure(context, string, node, type, label, parameters, returnBlock);
1012
1098
 
1013
1099
  return procedure;
1014
1100
  }
@@ -1042,11 +1128,12 @@ export function variableFromTypeAndVariableAssignmentNode(type, variableAssignme
1042
1128
 
1043
1129
  export function variableAssignmentFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context) {
1044
1130
  const { VariableAssignment } = elements,
1131
+ node = variableAssignmentNode, ///
1045
1132
  variable = variableFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context),
1046
1133
  expression = expressionFromVariableAssignmentNode(variableAssignmentNode, context),
1047
1134
  variableAssignmentString = variableAssignmentStringFromTypeAndVariable(type, variable, context),
1048
1135
  string = variableAssignmentString, ///
1049
- assignment = new VariableAssignment(string, variable, expression);
1136
+ assignment = new VariableAssignment(context, string, node, variable, expression);
1050
1137
 
1051
1138
  return assignment;
1052
1139
  }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ export function lineIndexFromNodeAndTokens(node, tokens) {
4
+ let lineIndex = 0;
5
+
6
+ const firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens);
7
+
8
+ tokens.some((token, tokenIndex) => {
9
+ const tokenEndOfLineToken = token.isEndOfLineToken();
10
+
11
+ if (tokenEndOfLineToken) {
12
+ lineIndex += 1;
13
+ }
14
+
15
+ if (tokenIndex === firstSignificantTokenIndex) {
16
+ return true;
17
+ }
18
+ });
19
+
20
+ return lineIndex;
21
+ }
@@ -10,8 +10,13 @@ export function primitiveFromNode(node, context) {
10
10
  primitiveString = primtiveStringFromNode(node, context),
11
11
  string = primitiveString, ///
12
12
  type = NODE_TYPE,
13
- value = node, ///
14
- primitive = new Primitive(string, type, value);
13
+ value = node; ///
14
+
15
+ node = null;
16
+
17
+ context = null;
18
+
19
+ const primitive = new Primitive(context, string, node, type, value);
15
20
 
16
21
  return primitive;
17
22
  }
@@ -22,7 +27,11 @@ export function primitiveFromNodes(nodes, context) {
22
27
  string = primitiveString, ///
23
28
  type = NODES_TYPE,
24
29
  value = nodes, ///
25
- primitive = new Primitive(string, type, value);
30
+ node = null;
31
+
32
+ context = null;
33
+
34
+ const primitive = new Primitive(context, string, node, type, value);
26
35
 
27
36
  return primitive;
28
37
  }
@@ -33,7 +42,11 @@ export function primitiveFromBoolean(boolean, context) {
33
42
  string = primitiveString, ///
34
43
  type = BOOLEAN_TYPE,
35
44
  value = boolean, ///
36
- primitive = new Primitive(string, type, value);
45
+ node = null;
46
+
47
+ context = null;
48
+
49
+ const primitive = new Primitive(context, string, node, type, value);
37
50
 
38
51
  return primitive;
39
52
  }
@@ -44,7 +57,11 @@ export function primitiveFromStringLiteral(stringLiteral, context) {
44
57
  string = primitiveString, ///
45
58
  type = STRING_TYPE,
46
59
  value = stringLiteral, ///
47
- primitive = new Primitive(string, type, value);
60
+ node = null;
61
+
62
+ context = null;
63
+
64
+ const primitive = new Primitive(context, string, node, type, value);
48
65
 
49
66
  return primitive;
50
67
  }