occam-furtle 2.0.342 → 3.0.2

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 (116) hide show
  1. package/example.js +5905 -1786
  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.js +210 -0
  7. package/lib/element/assignment/array.js +116 -14
  8. package/lib/element/assignment/object.js +116 -14
  9. package/lib/element/assignment/variable.js +121 -14
  10. package/lib/element/assignments/variable.js +120 -13
  11. package/lib/element/declaration/procedure.js +120 -12
  12. package/lib/element/error.js +118 -13
  13. package/lib/element/every.js +116 -13
  14. package/lib/element/expression.js +127 -20
  15. package/lib/element/label.js +119 -12
  16. package/lib/element/nodeQuery.js +116 -14
  17. package/lib/element/nodesQuery.js +116 -14
  18. package/lib/element/parameter/named.js +117 -15
  19. package/lib/element/parameter.js +116 -14
  20. package/lib/element/parameters/named.js +116 -14
  21. package/lib/element/parameters.js +115 -13
  22. package/lib/element/primitive.js +115 -13
  23. package/lib/element/procedure/anonymous.js +118 -16
  24. package/lib/element/procedure.js +118 -16
  25. package/lib/element/procedureCall.js +116 -14
  26. package/lib/element/reduce.js +116 -14
  27. package/lib/element/reference.js +119 -12
  28. package/lib/element/returnBlock.js +116 -14
  29. package/lib/element/some.js +115 -13
  30. package/lib/element/statement/return.js +120 -13
  31. package/lib/element/step.js +121 -14
  32. package/lib/element/term/bracketed.js +120 -13
  33. package/lib/element/term/comparison.js +117 -15
  34. package/lib/element/term/logical.js +118 -16
  35. package/lib/element/term/negated.js +116 -14
  36. package/lib/element/term.js +127 -18
  37. package/lib/element/terms.js +125 -14
  38. package/lib/element/ternary.js +117 -15
  39. package/lib/element/variable.js +127 -19
  40. package/lib/element.js +1 -8
  41. package/lib/index.js +5 -5
  42. package/lib/log.js +13 -12
  43. package/lib/metaTypeNames.js +26 -0
  44. package/lib/metaTypes.js +66 -0
  45. package/lib/nodeProperties.js +17 -21
  46. package/lib/nodeProperty.js +4 -7
  47. package/lib/utilities/context.js +8 -37
  48. package/lib/utilities/customGrammar.js +49 -0
  49. package/lib/utilities/element.js +91 -37
  50. package/lib/utilities/lineIndex.js +26 -0
  51. package/lib/utilities/node.js +1 -8
  52. package/lib/utilities/primitive.js +14 -5
  53. package/lib/utilities/string.js +30 -19
  54. package/lib/utilities/term.js +14 -5
  55. package/lib/utilities/terms.js +7 -3
  56. package/package.json +2 -2
  57. package/src/context/block.js +20 -32
  58. package/src/context/file/furtle.js +141 -0
  59. package/src/context/file/nominal.js +946 -0
  60. package/src/context/file.js +32 -209
  61. package/src/context.js +74 -0
  62. package/src/element/assignment/array.js +6 -8
  63. package/src/element/assignment/object.js +6 -8
  64. package/src/element/assignment/variable.js +7 -8
  65. package/src/element/assignments/variable.js +7 -8
  66. package/src/element/declaration/procedure.js +6 -6
  67. package/src/element/error.js +4 -6
  68. package/src/element/every.js +5 -6
  69. package/src/element/expression.js +6 -7
  70. package/src/element/label.js +6 -7
  71. package/src/element/nodeQuery.js +6 -8
  72. package/src/element/nodesQuery.js +6 -8
  73. package/src/element/parameter/named.js +7 -8
  74. package/src/element/parameter.js +6 -8
  75. package/src/element/parameters/named.js +8 -9
  76. package/src/element/parameters.js +6 -8
  77. package/src/element/primitive.js +5 -7
  78. package/src/element/procedure/anonymous.js +7 -9
  79. package/src/element/procedure.js +6 -8
  80. package/src/element/procedureCall.js +6 -8
  81. package/src/element/reduce.js +5 -7
  82. package/src/element/reference.js +6 -7
  83. package/src/element/returnBlock.js +5 -7
  84. package/src/element/some.js +5 -7
  85. package/src/element/statement/return.js +7 -8
  86. package/src/element/step.js +6 -7
  87. package/src/element/term/bracketed.js +7 -8
  88. package/src/element/term/comparison.js +6 -8
  89. package/src/element/term/logical.js +6 -8
  90. package/src/element/term/negated.js +6 -8
  91. package/src/element/term.js +12 -9
  92. package/src/element/terms.js +16 -9
  93. package/src/element/ternary.js +6 -8
  94. package/src/element/variable.js +24 -14
  95. package/src/element.js +0 -8
  96. package/src/index.js +1 -1
  97. package/src/log.js +11 -11
  98. package/src/metaTypeNames.js +5 -0
  99. package/src/metaTypes.js +71 -0
  100. package/src/nodeProperties.js +23 -32
  101. package/src/nodeProperty.js +5 -10
  102. package/src/utilities/context.js +7 -45
  103. package/src/utilities/customGrammar.js +40 -0
  104. package/src/utilities/element.js +158 -64
  105. package/src/utilities/lineIndex.js +21 -0
  106. package/src/utilities/node.js +0 -5
  107. package/src/utilities/primitive.js +22 -5
  108. package/src/utilities/string.js +33 -19
  109. package/src/utilities/term.js +22 -5
  110. package/src/utilities/terms.js +12 -4
  111. package/test/context/release.js +477 -46
  112. package/test/helpers/furtle.js +1 -1
  113. package/test/helpers/nominal.js +2 -3
  114. package/test/main.js +1 -1
  115. package/test/context/file.js +0 -127
  116. package/test/helpers/constants.js +0 -17
@@ -7,8 +7,8 @@ import elements from "../elements";
7
7
  import { BOOLEAN_TYPE } from "../types";
8
8
  import { ternaryStringFromTerm,
9
9
  variableStringFromName,
10
+ termStringFromProperties,
10
11
  expressionStringFromProperties,
11
- termStringFromPrimitiveAndProperties,
12
12
  procedureDeclarationStringFromProcedure,
13
13
  returnBlockStringFromReturnStatementNode,
14
14
  variableAssignmentStringFromTypeAndVariable,
@@ -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,14 +257,18 @@ 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,
271
+ node = expressionNode, ///
218
272
  term = termFromExpressionNode(expressionNode, context),
219
273
  some = someFromExpressionNode(expressionNode, context),
220
274
  every = everyFromExpressionNode(expressionNode, context),
@@ -236,20 +290,27 @@ export function expressionFromExpressionNode(expressionNode, context) {
236
290
  procedureCall
237
291
  ],
238
292
  expressionString = expressionStringFromProperties(properties, context),
239
- string = expressionString, ///
240
- expression = new Expression(string, term, some, every, reduce, ternary, nodeQuery, nodesQuery, returnBlock, procedureCall);
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);
241
298
 
242
299
  return expression;
243
300
  }
244
301
 
245
302
  export function returnBlockFromReturnBlockNode(returnBlockNode, context) {
246
303
  const { ReturnBlock } = elements,
304
+ node = returnBlockNode, ///
247
305
  steps = stepsFromReturnBlockNode(returnBlockNode, context),
248
306
  nonsensical = nonsensicalFromReturnBlockNode(returnBlockNode, context),
249
307
  returnStatement = returnStatementFromReturnBlockNode(returnBlockNode, context),
250
308
  returnBlockString = returnBlockStringFromReturnStatementNode(returnStatement),
251
- string = returnBlockString, ///
252
- 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);
253
314
 
254
315
  return returnBlock;
255
316
  }
@@ -259,8 +320,11 @@ export function procedureCallFromProcedureCallNode(procedureCallNode, context) {
259
320
  node = procedureCallNode, ///
260
321
  string = context.nodeAsString(node),
261
322
  reference = referenceFromProcedureCallNode(procedureCallNode, context),
262
- terms = termsFromProcedureCallNode(procedureCallNode, context),
263
- 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);
264
328
 
265
329
  return procedureCall;
266
330
  }
@@ -271,8 +335,11 @@ export function namedParameterFromNamedParameterNode(namedParameterNode, context
271
335
  string = context.nodeAsString(node),
272
336
  type = typeFromNamedParameterNode(namedParameterNode, context),
273
337
  name = nameFromNamedParameterNode(namedParameterNode, context),
274
- alias = aliasFromNamedParameterNode(namedParameterNode, context),
275
- 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);
276
343
 
277
344
  return namedParameter;
278
345
  }
@@ -283,8 +350,11 @@ export function namedParametersFromNamedParametersNode(namedParametersNode, cont
283
350
  string = context.nodeAsString(node),
284
351
  namedParameterNodes = namedParametersNode.getNamedParameterNodes(),
285
352
  namedParametersArray = namedParamtersArrayFromNamedParameterNodes(namedParameterNodes, context),
286
- array = namedParametersArray, ///
287
- namedParameters = new NamedParameters(string, array);
353
+ array = namedParametersArray; ///
354
+
355
+ context = null;
356
+
357
+ const namedParameters = new NamedParameters(context, string, node, array);
288
358
 
289
359
  return namedParameters;
290
360
  }
@@ -294,8 +364,11 @@ export function arrayAssignmentFromArrayAssignmentNode(arrayAssignmentNode, cont
294
364
  node = arrayAssignmentNode, ///
295
365
  string = context.nodeAsString(node),
296
366
  variable = variableFromArrayAssignmentNode(arrayAssignmentNode, context),
297
- parameters = parametersFromArrayAssignmentNode(arrayAssignmentNode, context),
298
- 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);
299
372
 
300
373
  return arrayAssignment;
301
374
  }
@@ -304,8 +377,11 @@ export function returnStatementFromReturnStatementNode(returnStatementNode, cont
304
377
  const { ReturnStatement } = elements,
305
378
  node = returnStatementNode, ///
306
379
  string = context.nodeAsString(node),
307
- term = termFromReturnStatementNode(returnStatementNode, context),
308
- returnStatement = new ReturnStatement(string, term);
380
+ term = termFromReturnStatementNode(returnStatementNode, context);
381
+
382
+ context = null;
383
+
384
+ const returnStatement = new ReturnStatement(context, string, node, term);
309
385
 
310
386
  return returnStatement;
311
387
  }
@@ -322,42 +398,57 @@ export function objectAssignmentFromObjectAssignmentNode(objectAssignmentNode, c
322
398
  node = objectAssignmentNode, ///
323
399
  string = context.nodeAsString(node),
324
400
  variable = variableFromObjectAssignmentNode(objectAssignmentNode, context),
325
- namedParameters = namedParametersFromObjectAssignmentNode(objectAssignmentNode, context),
326
- 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);
327
406
 
328
407
  return objectAssignment;
329
408
  }
330
409
 
331
410
  export function anonymousProcedureFromAnonymousProcedureNode(anonymousProcedureNode, context) {
332
411
  const { AnonymousProcedure } = elements,
412
+ node = anonymousProcedureNode, ///
333
413
  type = typeFromProcedureAnonymousProcedureNode(anonymousProcedureNode, context),
334
414
  parameters = parametersFromAnonymousProcedureNode(anonymousProcedureNode, context),
335
415
  returnBlock = returnBlockFromAnonymousProcedureNode(anonymousProcedureNode, context),
336
416
  nonymousProcedureString = anonymousProcedureStringFromTypeParametersAndReturnBlock(type, parameters, returnBlock),
337
- string = nonymousProcedureString, ///
338
- 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);
339
422
 
340
423
  return anonymousProcedure;
341
424
  }
342
425
 
343
426
  export function variableAssignmentsFromVariableAssignmentsNode(variableAssignmentsNode, context) {
344
427
  const { VariableAssignments } = elements,
428
+ node = variableAssignmentsNode, ///
345
429
  type = typeFromVariableAssignmentsNode(variableAssignmentsNode, context),
346
430
  variableAssignmentsArray = variableAssignmentsArrayFromTypeAndVariableAssignmentsNode(type, variableAssignmentsNode, context),
347
431
  variableAssignmentString = variableAssignmentStringFromTypeAndVariableAssignmentsArray(type, variableAssignmentsArray),
348
432
  array = variableAssignmentsArray, ///
349
- string = variableAssignmentString, ///
350
- variableAssignments = new VariableAssignments(string, array);
433
+ string = variableAssignmentString; ///
434
+
435
+ context = null;
436
+
437
+ const variableAssignments = new VariableAssignments(context, string, node, array);
351
438
 
352
439
  return variableAssignments;
353
440
  }
354
441
 
355
442
  export function procedureDeclarationFromProcedureDeclarationNode(procedureDeclarationNode, context) {
356
443
  const { ProcedureDeclaration } = elements,
444
+ node = procedureDeclarationNode, ///
357
445
  procedure = procedureFromProcedureDeclarationNode(procedureDeclarationNode, context),
358
446
  procedureDeclarationString = procedureDeclarationStringFromProcedure(procedure),
359
- string = procedureDeclarationString, ///
360
- procedureDeclaration = new ProcedureDeclaration(string, procedure);
447
+ string = procedureDeclarationString; ///
448
+
449
+ context = null;
450
+
451
+ const procedureDeclaration = new ProcedureDeclaration(context, string, node, procedure);
361
452
 
362
453
  return procedureDeclaration;
363
454
  }
@@ -816,7 +907,7 @@ export function negatedTermFromNegatedTermNode(negatedTermNode, context) {
816
907
  termNode = negatedTermNode.getTermNode(),
817
908
  type = typeFromNegatedTermNode(termNode, context),
818
909
  term = termFromNegatedTermNode(negatedTermNode, context),
819
- negatedTerm = new NegatedTerm(string, type, term);
910
+ negatedTerm = new NegatedTerm(context, string, node, type, term);
820
911
 
821
912
  return negatedTerm;
822
913
  }
@@ -829,18 +920,19 @@ export function logicalTermFromLogicalTermNode(logicalTermNode, context) {
829
920
  disjunction = disjunctionFromLogicalTermNode(logicalTermNode, context),
830
921
  leftTerm = leftTermFromLogicalTermNode(logicalTermNode, context),
831
922
  rightTerm = rightTermFromLogicalTermNode(logicalTermNode, context),
832
- logicalTerm = new LogicalTerm(string, type, disjunction, leftTerm, rightTerm);
923
+ logicalTerm = new LogicalTerm(context, string, node, type, disjunction, leftTerm, rightTerm);
833
924
 
834
925
  return logicalTerm;
835
926
  }
836
927
 
837
928
  export function variableFromTypeAndVariableNode(type, variableNode, context) {
838
929
  const { Variable } = elements,
930
+ node = variableNode, ///
839
931
  name = nameFromVariableNode(variableNode),
840
932
  expression = expressionFromTypeAndVariableNode(type, variableNode, context),
841
933
  variableString = variableStringFromName(name),
842
934
  string = variableString, ///
843
- variable = new Variable(string, type, name, expression);
935
+ variable = new Variable(context, string, node, type, name, expression);
844
936
 
845
937
  return variable;
846
938
  }
@@ -955,7 +1047,7 @@ export function bracketedTermFromBracketedTermNode(bracketedTermNode, context) {
955
1047
  node = bracketedTermNode, ///
956
1048
  string = context.nodeAsString(node), ///
957
1049
  term = termFromBracketedTermNode(bracketedTermNode, context),
958
- bracketedTerm = new BracketedTerm(string, term);
1050
+ bracketedTerm = new BracketedTerm(context, string, node, term);
959
1051
 
960
1052
  return bracketedTerm;
961
1053
  }
@@ -981,7 +1073,7 @@ export function comparisonTermFromComparisonTermNode(comparisonTermNode, context
981
1073
  negated = negatedFromComparisonTermNode(comparisonTermNode, context),
982
1074
  leftTerm = leftTermFromCompzrisonTermNode(comparisonTermNode, context),
983
1075
  rightTerm = rightTermFromCompzrisonTermNode(comparisonTermNode, context),
984
- comparisonTerm = new ComparisonTerm(string, negated, leftTerm, rightTerm);
1076
+ comparisonTerm = new ComparisonTerm(context, string, node, negated, leftTerm, rightTerm);
985
1077
 
986
1078
  return comparisonTerm;
987
1079
  }
@@ -995,13 +1087,14 @@ export function returnBlockFromAnonymousProcedureNode(anonymousProcedureNode, co
995
1087
 
996
1088
  export function procedureFromProcedureDeclarationNode(procedureDeclarationNode, context) {
997
1089
  const { Procedure } = elements,
1090
+ node = procedureDeclarationNode, ///
998
1091
  type = typeFromProcedureDeclarationNode(procedureDeclarationNode, context),
999
1092
  label = labelFromProcedureDeclarationNode(procedureDeclarationNode, context),
1000
1093
  parameters = parametersFromProcedureDeclarationNode(procedureDeclarationNode, context),
1001
1094
  returnBlock = returnBlockFromProcedureDeclarationNode(procedureDeclarationNode, context),
1002
1095
  procedureString = procedureStringFromTypeLabelParametersAndReturnBlock(type, label, parameters, returnBlock),
1003
1096
  string = procedureString, ///
1004
- procedure = new Procedure(string, type, label, parameters, returnBlock);
1097
+ procedure = new Procedure(context, string, node, type, label, parameters, returnBlock);
1005
1098
 
1006
1099
  return procedure;
1007
1100
  }
@@ -1035,11 +1128,12 @@ export function variableFromTypeAndVariableAssignmentNode(type, variableAssignme
1035
1128
 
1036
1129
  export function variableAssignmentFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context) {
1037
1130
  const { VariableAssignment } = elements,
1131
+ node = variableAssignmentNode, ///
1038
1132
  variable = variableFromTypeAndVariableAssignmentNode(type, variableAssignmentNode, context),
1039
1133
  expression = expressionFromVariableAssignmentNode(variableAssignmentNode, context),
1040
1134
  variableAssignmentString = variableAssignmentStringFromTypeAndVariable(type, variable, context),
1041
1135
  string = variableAssignmentString, ///
1042
- assignment = new VariableAssignment(string, variable, expression);
1136
+ assignment = new VariableAssignment(context, string, node, variable, expression);
1043
1137
 
1044
1138
  return assignment;
1045
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
+ }
@@ -28,11 +28,6 @@ export function nodesAsString(nodes, tokens) {
28
28
  return string;
29
29
  }
30
30
 
31
- export default {
32
- nodeAsString,
33
- nodesAsString,
34
- };
35
-
36
31
  function trimString(string) {
37
32
  string = string.replace(/\s+$/, EMPTY_STRING); ///
38
33
 
@@ -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
  }
@@ -33,6 +33,20 @@ export function primtiveStringFromNodes(nodes, context) {
33
33
  return primtiveString;
34
34
  }
35
35
 
36
+ export function termStringFromProperties(properties) {
37
+ let termString;
38
+
39
+ properties.forEach((property) => {
40
+ if (property !== null) {
41
+ const propertyString = property.getString();
42
+
43
+ termString = propertyString; ///
44
+ }
45
+ });
46
+
47
+ return termString;
48
+ }
49
+
36
50
  export function primtiveStringFromBoolean(boolean) {
37
51
  const expresssionString = `${boolean}`;
38
52
 
@@ -74,26 +88,12 @@ export function primtiveStringFromStringLiteral(stringLiteral) {
74
88
  return primtiveString;
75
89
  }
76
90
 
77
- export function termStringFromPrimitiveAndProperties(primitive, properties) {
78
- let termString;
79
-
80
- if (false) {
81
- ///
82
- } else if (primitive !== null) {
83
- const primitiveString = primitive.getString();
84
-
85
- termString = primitiveString; ///
86
- } else {
87
- properties.forEach((property) => {
88
- if (property !== null) {
89
- const propertyString = property.getString();
90
-
91
- termString = propertyString; ///
92
- }
93
- });
94
- }
91
+ export function nodePropertyStringFromNameAndType(name, type) {
92
+ const typeString = type, ///
93
+ nameString = name, ///
94
+ nodePropertyString = `${typeString} ${nameString}`;
95
95
 
96
- return termString;
96
+ return nodePropertyString;
97
97
  }
98
98
 
99
99
  export function procedureDeclarationStringFromProcedure(procedure) {
@@ -116,6 +116,20 @@ export function returnBlockStringFromReturnStatementNode(returnStatement) {
116
116
  return returnBlockString;
117
117
  }
118
118
 
119
+ export function nodePropertiesStringFromNodePropertiesArray(nodePropertiesArray) {
120
+ const nodePropertiesString = nodePropertiesArray.reduce((nodePropertiesString, nodeProperty) => {
121
+ const nodePropertyString = nodeProperty.getString();
122
+
123
+ nodePropertiesString = (nodePropertiesString === null) ?
124
+ nodePropertyString :
125
+ `${nodePropertiesString}, ${nodePropertyString}`;
126
+
127
+ return nodePropertiesString;
128
+ }, null);
129
+
130
+ return nodePropertiesString;
131
+ }
132
+
119
133
  export function variableAssignmentStringFromTypeAndVariable(type, variable) {
120
134
  const variableString = variable.getString(),
121
135
  variableAssignmentString = `${type} ${variableString} = ... ;`;