@bikky/replication 1.0.2 → 1.0.4

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 (236) hide show
  1. package/.idea/Replication.iml +12 -0
  2. package/.idea/compiler.xml +6 -0
  3. package/.idea/encodings.xml +4 -0
  4. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/vcs.xml +6 -0
  7. package/Constants/Errors.js +1 -0
  8. package/Constants/Errors.js.map +1 -0
  9. package/Constants/Logging.d.ts +1 -0
  10. package/Constants/Logging.js +2 -2
  11. package/Constants/Logging.js.map +1 -0
  12. package/Constants/ReplicableRegistry.d.ts +4 -3
  13. package/Constants/ReplicableRegistry.js +7 -8
  14. package/Constants/ReplicableRegistry.js.map +1 -0
  15. package/Constants/SerialisationTypes.js +4 -4
  16. package/Constants/SerialisationTypes.js.map +1 -0
  17. package/Constants/SourceMaps.js +1 -0
  18. package/Constants/SourceMaps.js.map +1 -0
  19. package/Constants/TraversalStep.js +1 -0
  20. package/Constants/TraversalStep.js.map +1 -0
  21. package/Constants/Versions.d.ts +2 -1
  22. package/Constants/Versions.js +1 -0
  23. package/Constants/Versions.js.map +1 -0
  24. package/Expressions/Compiler/BuiltinGrammar.js +1 -0
  25. package/Expressions/Compiler/BuiltinGrammar.js.map +1 -0
  26. package/Expressions/Compiler/ExpressionGrammar.js +1 -0
  27. package/Expressions/Compiler/ExpressionGrammar.js.map +1 -0
  28. package/Expressions/Compiler/Grammar/Accessors.d.ts +32 -0
  29. package/Expressions/Compiler/Grammar/Accessors.js +227 -0
  30. package/Expressions/Compiler/Grammar/Accessors.js.map +1 -0
  31. package/Expressions/Compiler/Grammar/ControlFlow.d.ts +38 -0
  32. package/Expressions/Compiler/Grammar/ControlFlow.js +178 -0
  33. package/Expressions/Compiler/Grammar/ControlFlow.js.map +1 -0
  34. package/Expressions/Compiler/Grammar/Declarations.d.ts +22 -0
  35. package/Expressions/Compiler/Grammar/Declarations.js +84 -0
  36. package/Expressions/Compiler/Grammar/Declarations.js.map +1 -0
  37. package/Expressions/Compiler/Grammar/Function.d.ts +30 -0
  38. package/Expressions/Compiler/Grammar/Function.js +292 -0
  39. package/Expressions/Compiler/Grammar/Function.js.map +1 -0
  40. package/Expressions/Compiler/Grammar/General.d.ts +55 -0
  41. package/Expressions/Compiler/Grammar/General.js +248 -0
  42. package/Expressions/Compiler/Grammar/General.js.map +1 -0
  43. package/Expressions/Compiler/Grammar/Maths.d.ts +26 -0
  44. package/Expressions/Compiler/Grammar/Maths.js +164 -0
  45. package/Expressions/Compiler/Grammar/Maths.js.map +1 -0
  46. package/Expressions/Compiler/Grammar/Misc.d.ts +20 -0
  47. package/Expressions/Compiler/Grammar/Misc.js +50 -0
  48. package/Expressions/Compiler/Grammar/Misc.js.map +1 -0
  49. package/Expressions/Compiler/Grammar/Preprocessors.d.ts +18 -0
  50. package/Expressions/Compiler/Grammar/Preprocessors.js +43 -0
  51. package/Expressions/Compiler/Grammar/Preprocessors.js.map +1 -0
  52. package/Expressions/Compiler/Grammar/Struct.d.ts +21 -0
  53. package/Expressions/Compiler/Grammar/Struct.js +42 -0
  54. package/Expressions/Compiler/Grammar/Struct.js.map +1 -0
  55. package/Expressions/Compiler/Grammar/Tokens.d.ts +7 -0
  56. package/Expressions/Compiler/Grammar/Tokens.js +270 -0
  57. package/Expressions/Compiler/Grammar/Tokens.js.map +1 -0
  58. package/Expressions/Compiler/Grammar/Types.d.ts +35 -0
  59. package/Expressions/Compiler/Grammar/Types.js +230 -0
  60. package/Expressions/Compiler/Grammar/Types.js.map +1 -0
  61. package/Expressions/Compiler/GrammarRegistry.d.ts +20 -0
  62. package/Expressions/Compiler/GrammarRegistry.js +51 -0
  63. package/Expressions/Compiler/GrammarRegistry.js.map +1 -0
  64. package/Expressions/Compiler/Parser/Checks.d.ts +8 -0
  65. package/Expressions/Compiler/Parser/Checks.js +40 -0
  66. package/Expressions/Compiler/Parser/Checks.js.map +1 -0
  67. package/Expressions/Compiler/Parser/Enums.d.ts +73 -0
  68. package/Expressions/Compiler/Parser/Enums.js +77 -0
  69. package/Expressions/Compiler/Parser/Enums.js.map +1 -0
  70. package/Expressions/Compiler/Parser/Interfaces.d.ts +118 -0
  71. package/Expressions/Compiler/Parser/Interfaces.js +112 -0
  72. package/Expressions/Compiler/Parser/Interfaces.js.map +1 -0
  73. package/Expressions/Compiler/Parser/MatchGrammar.d.ts +15 -0
  74. package/Expressions/Compiler/Parser/MatchGrammar.js +128 -0
  75. package/Expressions/Compiler/Parser/MatchGrammar.js.map +1 -0
  76. package/Expressions/Compiler/Parser/MatchRepeatingRule.d.ts +4 -0
  77. package/Expressions/Compiler/Parser/MatchRepeatingRule.js +51 -0
  78. package/Expressions/Compiler/Parser/MatchRepeatingRule.js.map +1 -0
  79. package/Expressions/Compiler/Parser/MatchRule.d.ts +4 -0
  80. package/Expressions/Compiler/Parser/MatchRule.js +57 -0
  81. package/Expressions/Compiler/Parser/MatchRule.js.map +1 -0
  82. package/Expressions/Compiler/Parser/Parser.d.ts +26 -0
  83. package/Expressions/Compiler/Parser/Parser.js +67 -0
  84. package/Expressions/Compiler/Parser/Parser.js.map +1 -0
  85. package/Expressions/Compiler/Parser/Tokenizer.d.ts +12 -0
  86. package/Expressions/Compiler/Parser/Tokenizer.js +138 -0
  87. package/Expressions/Compiler/Parser/Tokenizer.js.map +1 -0
  88. package/Expressions/Compiler/Parser/TypesAndPrint.d.ts +29 -0
  89. package/Expressions/Compiler/Parser/TypesAndPrint.js +15 -0
  90. package/Expressions/Compiler/Parser/TypesAndPrint.js.map +1 -0
  91. package/Expressions/Compiler/Parser/Updates.d.ts +10 -0
  92. package/Expressions/Compiler/Parser/Updates.js +79 -0
  93. package/Expressions/Compiler/Parser/Updates.js.map +1 -0
  94. package/Expressions/Compiler/Parser.js +27 -18
  95. package/Expressions/Compiler/Parser.js.map +1 -0
  96. package/Expressions/Compiler/Tokenizer.js +1 -0
  97. package/Expressions/Compiler/Tokenizer.js.map +1 -0
  98. package/Expressions/Compiler/__tests__/Replicable.Expressions.Parser.test.js +1 -0
  99. package/Expressions/Compiler/__tests__/Replicable.Expressions.Parser.test.js.map +1 -0
  100. package/Expressions/Compiler/__tests__/Replicable.Expressions.Tokenizer.test.js +1 -0
  101. package/Expressions/Compiler/__tests__/Replicable.Expressions.Tokenizer.test.js.map +1 -0
  102. package/Expressions/CreateEvaluator.js +1 -0
  103. package/Expressions/CreateEvaluator.js.map +1 -0
  104. package/Expressions/EvaluatorChain.js +6 -1
  105. package/Expressions/EvaluatorChain.js.map +1 -0
  106. package/Expressions/EvaluatorSteps.js +1 -0
  107. package/Expressions/EvaluatorSteps.js.map +1 -0
  108. package/Expressions/EvaluatorString.js +1 -0
  109. package/Expressions/EvaluatorString.js.map +1 -0
  110. package/Expressions/Expression.js +10 -3
  111. package/Expressions/Expression.js.map +1 -0
  112. package/Expressions/Traverser.js +2 -2
  113. package/Expressions/Traverser.js.map +1 -0
  114. package/Expressions/TypeRegistry/Accessors.js +1 -0
  115. package/Expressions/TypeRegistry/Accessors.js.map +1 -0
  116. package/Expressions/TypeRegistry/ChainCollections.js +1 -0
  117. package/Expressions/TypeRegistry/ChainCollections.js.map +1 -0
  118. package/Expressions/TypeRegistry/ChainTypes.js +1 -0
  119. package/Expressions/TypeRegistry/ChainTypes.js.map +1 -0
  120. package/Expressions/TypeRegistry/CustomAPI.d.ts +6 -4
  121. package/Expressions/TypeRegistry/CustomAPI.js +16 -34
  122. package/Expressions/TypeRegistry/CustomAPI.js.map +1 -0
  123. package/Expressions/TypeRegistry/Primitive.js +1 -0
  124. package/Expressions/TypeRegistry/Primitive.js.map +1 -0
  125. package/Expressions/TypeRegistry/Registry.js +6 -6
  126. package/Expressions/TypeRegistry/Registry.js.map +1 -0
  127. package/Expressions/TypeRegistry/ReplAPI.d.ts +7 -5
  128. package/Expressions/TypeRegistry/ReplAPI.js +9 -22
  129. package/Expressions/TypeRegistry/ReplAPI.js.map +1 -0
  130. package/Expressions/TypeRegistry/Scope.js +1 -0
  131. package/Expressions/TypeRegistry/Scope.js.map +1 -0
  132. package/Expressions/TypeRegistry/Types.js +1 -0
  133. package/Expressions/TypeRegistry/Types.js.map +1 -0
  134. package/Expressions/TypeRegistry/__tests__/Replicable.Expressions.Accessors.test.js +1 -0
  135. package/Expressions/TypeRegistry/__tests__/Replicable.Expressions.Accessors.test.js.map +1 -0
  136. package/Expressions/__tests__/ExpressionExamples.js +1 -0
  137. package/Expressions/__tests__/ExpressionExamples.js.map +1 -0
  138. package/Expressions/__tests__/Replicable.Expressions.Expressions.test.js +4 -3
  139. package/Expressions/__tests__/Replicable.Expressions.Expressions.test.js.map +1 -0
  140. package/IDPool.data.d.ts +2 -0
  141. package/IDPool.js +1 -0
  142. package/IDPool.js.map +1 -0
  143. package/Main.js +1 -0
  144. package/Main.js.map +1 -0
  145. package/Networking.d.ts +3 -0
  146. package/Networking.js +22 -9
  147. package/Networking.js.map +1 -0
  148. package/Replicatable.js +5 -6
  149. package/Replicatable.js.map +1 -0
  150. package/Tracking/Buffable.d.ts +3 -2
  151. package/Tracking/Buffable.js +1 -0
  152. package/Tracking/Buffable.js.map +1 -0
  153. package/Tracking/Class.d.ts +6 -4
  154. package/Tracking/Class.js +37 -19
  155. package/Tracking/Class.js.map +1 -0
  156. package/Tracking/Functions.js +3 -2
  157. package/Tracking/Functions.js.map +1 -0
  158. package/Tracking/GlobalGroup.js +2 -2
  159. package/Tracking/GlobalGroup.js.map +1 -0
  160. package/Tracking/Property.d.ts +3 -2
  161. package/Tracking/Property.js +9 -5
  162. package/Tracking/Property.js.map +1 -0
  163. package/Tracking/Types.js +1 -0
  164. package/Tracking/Types.js.map +1 -0
  165. package/Tracking/__tests__/Replicable.Tracking.Decorator.test.js +1 -0
  166. package/Tracking/__tests__/Replicable.Tracking.Decorator.test.js.map +1 -0
  167. package/Tracking/__tests__/Replicable.Tracking.Deserialisation.test.js +1 -0
  168. package/Tracking/__tests__/Replicable.Tracking.Deserialisation.test.js.map +1 -0
  169. package/Tracking/__tests__/Replicable.Tracking.MixinSchemaGeneration.test.js +1 -0
  170. package/Tracking/__tests__/Replicable.Tracking.MixinSchemaGeneration.test.js.map +1 -0
  171. package/Tracking/__tests__/Replicable.Tracking.Struct.test.js +1 -0
  172. package/Tracking/__tests__/Replicable.Tracking.Struct.test.js.map +1 -0
  173. package/Tracking/__tests__/Replicable.Tracking.Type.test.js +1 -0
  174. package/Tracking/__tests__/Replicable.Tracking.Type.test.js.map +1 -0
  175. package/Transformers/Configurer.d.ts +15 -1
  176. package/Transformers/Configurer.js +130 -21
  177. package/Transformers/Configurer.js.map +1 -0
  178. package/Transformers/Constructor.js +1 -0
  179. package/Transformers/Constructor.js.map +1 -0
  180. package/Transformers/Definitions.d.ts +3 -3
  181. package/Transformers/Definitions.js +41 -21
  182. package/Transformers/Definitions.js.map +1 -0
  183. package/Transformers/Loader.js +21 -11
  184. package/Transformers/Loader.js.map +1 -0
  185. package/Transformers/Progress.js +19 -13
  186. package/Transformers/Progress.js.map +1 -0
  187. package/Transformers/Reference.js +3 -2
  188. package/Transformers/Reference.js.map +1 -0
  189. package/Transformers/SchemaGenerator.d.ts +2 -2
  190. package/Transformers/SchemaGenerator.js +89 -7
  191. package/Transformers/SchemaGenerator.js.map +1 -0
  192. package/Transformers/Serialiser.js +1 -0
  193. package/Transformers/Serialiser.js.map +1 -0
  194. package/Transformers/Utils.d.ts +1 -1
  195. package/Transformers/Utils.js +43 -26
  196. package/Transformers/Utils.js.map +1 -0
  197. package/Transformers/__tests__/Examples.d.ts +36 -0
  198. package/Transformers/__tests__/Examples.js +40 -0
  199. package/Transformers/__tests__/Examples.js.map +1 -0
  200. package/Transformers/__tests__/Replicable.Transformers.Definitions.test.js +18 -16
  201. package/Transformers/__tests__/Replicable.Transformers.Definitions.test.js.map +1 -0
  202. package/Transformers/__tests__/Replicable.Transformers.Loader.test.js +2 -0
  203. package/Transformers/__tests__/Replicable.Transformers.Loader.test.js.map +1 -0
  204. package/Transformers/__tests__/Replicable.Transformers.Progress.test.js +1 -0
  205. package/Transformers/__tests__/Replicable.Transformers.Progress.test.js.map +1 -0
  206. package/Transformers/__tests__/Replicable.Transformers.Reference.test.js +1 -0
  207. package/Transformers/__tests__/Replicable.Transformers.Reference.test.js.map +1 -0
  208. package/Transformers/__tests__/Replicable.Transformers.SchemaGenerator.test.js +14 -2
  209. package/Transformers/__tests__/Replicable.Transformers.SchemaGenerator.test.js.map +1 -0
  210. package/Transformers/__tests__/Replicable.Transformers.SchemaGeneratorOutput.test.js +1 -0
  211. package/Transformers/__tests__/Replicable.Transformers.SchemaGeneratorOutput.test.js.map +1 -0
  212. package/Transformers/__tests__/Replicable.Transformers.Serialiser.test.js +11 -2
  213. package/Transformers/__tests__/Replicable.Transformers.Serialiser.test.js.map +1 -0
  214. package/Transformers/__tests__/Replicable.Transformers.Utils.test.js +95 -82
  215. package/Transformers/__tests__/Replicable.Transformers.Utils.test.js.map +1 -0
  216. package/__tests__/Configuration/Mocks.d.ts +2 -0
  217. package/__tests__/Configuration/Mocks.js +98 -0
  218. package/__tests__/Configuration/Mocks.js.map +1 -0
  219. package/__tests__/Configuration/Setup.d.ts +1 -0
  220. package/__tests__/Configuration/Setup.js +14 -0
  221. package/__tests__/Configuration/Setup.js.map +1 -0
  222. package/__tests__/Configuration/TestTypes.d.ts +33 -0
  223. package/__tests__/Replicable.Expressions.test.js +1 -0
  224. package/__tests__/Replicable.Expressions.test.js.map +1 -0
  225. package/__tests__/Replicable.IDPool.test.js +1 -0
  226. package/__tests__/Replicable.IDPool.test.js.map +1 -0
  227. package/__tests__/Replicable.ReplicableRegistry.test.js +23 -13
  228. package/__tests__/Replicable.ReplicableRegistry.test.js.map +1 -0
  229. package/__tests__/Replicable.Serialisation.test.js +1 -0
  230. package/__tests__/Replicable.Serialisation.test.js.map +1 -0
  231. package/package.json +28 -18
  232. package/tsconfig.json +7 -4
  233. package/tsconfig.tsbuildinfo +1 -0
  234. package/vitest.config.d.ts +2 -0
  235. package/vitest.config.js +32 -0
  236. package/vitest.config.js.map +1 -0
@@ -0,0 +1,230 @@
1
+ import { GrammarInterfaces } from "../Parser/Interfaces.js";
2
+ import { CollectionType, NodeType, TokenType } from "../Parser/Enums.js";
3
+ import { GrammarRegistry } from "../GrammarRegistry.js";
4
+ import { Versions } from "../../../Constants/Versions.js";
5
+ import { ValidExpressionTypes } from "../../TypeRegistry/Registry.js";
6
+ var GetTypeChain = ValidExpressionTypes.GetTypeChain;
7
+ var ExpressionSyntaxError = GrammarRegistry.ExpressionSyntaxError;
8
+ var assertIsAssignable = GrammarInterfaces.isAssignableCompile;
9
+ var isAssignableCompile = GrammarInterfaces.isAssignableCompile;
10
+ import { ErrorStack } from "../../../Constants/Errors.js";
11
+ var collapseTypeLive = GrammarInterfaces.collapseTypeLive;
12
+ export function IsDeclarationTypeNode(node) {
13
+ return node.type === NodeType.TYPE_DEFINITION;
14
+ }
15
+ //TODO: Support intersection compile-time values.
16
+ GrammarRegistry.AddRule(Versions.v1_0_0, NodeType.TYPE_DEFINITION, [
17
+ [
18
+ { type: TokenType.IDENTIFIER, value: "Map" },
19
+ { type: TokenType.OPERATOR, value: "<" },
20
+ { type: TokenType.IDENTIFIER, name: "mapKey" },
21
+ { type: TokenType.OPERATOR, value: "," },
22
+ { type: TokenType.IDENTIFIER, name: "type" },
23
+ { type: TokenType.OPERATOR, value: ">" },
24
+ ],
25
+ [
26
+ { type: TokenType.IDENTIFIER, name: "type" },
27
+ { type: TokenType.OPERATOR, value: "[]", repeat: [0, 2], name: "array" },
28
+ ],
29
+ [
30
+ { type: TokenType.OPERATOR, value: "{" },
31
+ { type: TokenType.OPERATOR, value: "[" },
32
+ { type: TokenType.IDENTIFIER, name: "dictKey" },
33
+ { type: TokenType.OPERATOR, value: "]" },
34
+ { type: TokenType.OPERATOR, value: ":" },
35
+ { type: TokenType.IDENTIFIER, name: "type" },
36
+ { type: TokenType.OPERATOR, value: "}" },
37
+ ],
38
+ ], {
39
+ runtimeExecute(scope, currentNode, outputType) {
40
+ var style = CollectionType.Single;
41
+ if (currentNode.values.array) {
42
+ style = currentNode.values.array.length == 2 ? CollectionType.Array2 : CollectionType.Array;
43
+ }
44
+ if (currentNode.values.dictKey) {
45
+ style = CollectionType.Dict;
46
+ }
47
+ if (currentNode.values.mapKey) {
48
+ style = CollectionType.Map;
49
+ }
50
+ const type = GetTypeChain(currentNode.values.type.data, style);
51
+ if (!type) {
52
+ throw new ExpressionSyntaxError(`Unknown type '${currentNode.values.type.data}'`, currentNode);
53
+ }
54
+ return {
55
+ castType: [type],
56
+ type: null,
57
+ value: null,
58
+ };
59
+ },
60
+ compileTimeTraversal(scope, currentNode, outputType) {
61
+ var style = CollectionType.Single;
62
+ if (currentNode.values.array) {
63
+ style = currentNode.values.array.length == 2 ? CollectionType.Array2 : CollectionType.Array;
64
+ }
65
+ if (currentNode.values.dictKey) {
66
+ style = CollectionType.Dict;
67
+ }
68
+ if (currentNode.values.mapKey) {
69
+ style = CollectionType.Map;
70
+ }
71
+ const type = GetTypeChain(currentNode.values.type.data, style);
72
+ if (!type) {
73
+ throw new ExpressionSyntaxError(`Unknown type '${currentNode.values.type.data}'`, currentNode);
74
+ }
75
+ let stack = new ErrorStack({ Version: scope.version, SourceFile: currentNode.file.sourceLocation });
76
+ if (outputType && !assertIsAssignable(scope.version, outputType, [type], currentNode, stack)) {
77
+ throw new ExpressionSyntaxError(`Type '${currentNode.values.type.data}' does not match expected type.\n\n` + stack.toString(`GT_CAST_TD_01`), currentNode);
78
+ }
79
+ return {
80
+ castType: [type],
81
+ type: null
82
+ };
83
+ }
84
+ });
85
+ export function IsTypeIntersectionNode(node) {
86
+ return node.type === NodeType.TYPE_UNION;
87
+ }
88
+ GrammarRegistry.AddRule(Versions.v1_0_0, NodeType.TYPE_UNION, [
89
+ [{ type: NodeType.TYPE_DEFINITION, name: "lhs" }],
90
+ [{ type: TokenType.OPERATOR, value: "|" }],
91
+ [{ type: [NodeType.TYPE_UNION, NodeType.TYPE_DEFINITION], name: "rhs" }],
92
+ ], {
93
+ runtimeExecute(scope, currentNode, outputType) {
94
+ const lhs = currentNode.values.lhs.execute.runtimeExecute(scope, currentNode.values.lhs, outputType);
95
+ const rhs = currentNode.values.rhs.execute.runtimeExecute(scope, currentNode.values.rhs, outputType);
96
+ if (!lhs.castType || !rhs.castType) {
97
+ throw new ExpressionSyntaxError(`Cannot intersect types`, currentNode);
98
+ }
99
+ let castType = [...lhs.castType, ...rhs.castType];
100
+ let stack = new ErrorStack({ Version: scope.version, SourceFile: currentNode.file.sourceLocation });
101
+ if (outputType && assertIsAssignable(scope.version, outputType, castType, currentNode, stack)) {
102
+ throw new ExpressionSyntaxError(`Type does not match expected type.\n\n` + stack.toString(`GT_CAST_UN_01`), currentNode);
103
+ }
104
+ return {
105
+ castType,
106
+ type: null,
107
+ value: null,
108
+ };
109
+ },
110
+ compileTimeTraversal(scope, currentNode, outputType) {
111
+ const lhs = currentNode.values.lhs.execute.compileTimeTraversal(scope, currentNode.values.lhs, outputType);
112
+ const rhs = currentNode.values.rhs.execute.compileTimeTraversal(scope, currentNode.values.rhs, outputType);
113
+ if (!lhs?.castType || !rhs?.castType) {
114
+ throw new ExpressionSyntaxError(`Cannot intersect types`, currentNode);
115
+ }
116
+ let castType = [...lhs.castType, ...rhs.castType];
117
+ let stack = new ErrorStack({ Version: scope.version, SourceFile: currentNode.file.sourceLocation });
118
+ if (outputType && assertIsAssignable(scope.version, outputType, castType, currentNode, stack)) {
119
+ throw new ExpressionSyntaxError(`Type does not match expected type.\n\n` + stack.toString(`GT_CAST_UN_02`), currentNode);
120
+ }
121
+ return {
122
+ castType,
123
+ type: null
124
+ };
125
+ }
126
+ });
127
+ export function IsCastNode(node) {
128
+ return node.type === NodeType.CAST;
129
+ }
130
+ GrammarRegistry.AddRule(Versions.v1_0_0, NodeType.CAST, [[
131
+ {
132
+ type: [
133
+ NodeType.ARRAY_ACCESS_SEQUENCE,
134
+ NodeType.FUNCTION_CALL,
135
+ NodeType.PARENTHETISED_EXPRESSION,
136
+ TokenType.BUILTIN,
137
+ NodeType.LITERAL,
138
+ TokenType.IDENTIFIER,
139
+ ],
140
+ name: "expression"
141
+ },
142
+ { type: TokenType.OPERATOR, value: ":" },
143
+ { type: [NodeType.TYPE_DEFINITION, NodeType.TYPE_UNION], name: "castType" }
144
+ ]], {
145
+ runtimeExecute(scope, node, outputType) {
146
+ const castTypes = node.values.castType.execute.runtimeExecute(scope, node, null);
147
+ if (!castTypes.castType) {
148
+ throw new ExpressionSyntaxError(`Cannot cast to invalid cast sequence`, node);
149
+ }
150
+ let stack = new ErrorStack({ Version: scope.version, SourceFile: node.file.sourceLocation });
151
+ if (outputType && !isAssignableCompile(scope.version, outputType, castTypes.castType, node, stack)) {
152
+ throw new ExpressionSyntaxError(`Type does not match expected type.\n\n` + stack.toString(`GT_CAST_CAST_01`), node);
153
+ }
154
+ let value = node.values.expression.execute.runtimeExecute(scope, node.values.expression, castTypes.castType);
155
+ let finalType = collapseTypeLive(scope, node, value.value, castTypes.castType);
156
+ if (!finalType) {
157
+ throw new ExpressionSyntaxError(`Value is not castable to type.`, node);
158
+ }
159
+ return {
160
+ type: finalType,
161
+ value: value.value
162
+ };
163
+ },
164
+ compileTimeTraversal(scope, node, outputType) {
165
+ const castTypes = node.values.castType.execute.compileTimeTraversal(scope, node, null);
166
+ if (!castTypes?.castType) {
167
+ throw new ExpressionSyntaxError(`Cannot cast to invalid cast sequence`, node);
168
+ }
169
+ let stack = new ErrorStack({ Version: scope.version, SourceFile: node.file.sourceLocation });
170
+ if (outputType && !isAssignableCompile(scope.version, outputType, castTypes.castType, node, stack)) {
171
+ throw new ExpressionSyntaxError(`Type does not match expected type.\n\n` + stack.toString(`GT_CAST_CAST_02`), node);
172
+ }
173
+ let value = node.values.expression.execute.compileTimeTraversal(scope, node.values.expression, castTypes.castType);
174
+ if (!value?.type) {
175
+ throw new ExpressionSyntaxError(`Cannot cast expression that returns void to a value.`, node);
176
+ }
177
+ let valid = false;
178
+ for (let type of value.type) {
179
+ if (isAssignableCompile(scope.version, castTypes.castType, [type], node, stack)) {
180
+ valid = true;
181
+ break;
182
+ }
183
+ }
184
+ if (!valid) {
185
+ throw new ExpressionSyntaxError(`Cannot cast value to type, there is no overlap between the operands.`, node);
186
+ }
187
+ return {
188
+ type: castTypes.castType,
189
+ };
190
+ }
191
+ });
192
+ //-------------------------------------------------FORCE CAST-----------------------------------------------
193
+ //Disabled for now - might be supplanted but the newly fixed cast operator above.
194
+ // export interface ForceCastNode extends EAST_Complex_Node {
195
+ // type: NodeType.FORCE_CAST;
196
+ // values: {
197
+ // expression:
198
+ // | ArrayAccessSequenceNode
199
+ // | FunctionCallNode
200
+ // | ParenthetisedExpressionNode
201
+ // | EAST_Token
202
+ // | LiteralNode
203
+ // | MemberAccessNode;
204
+ // castType: EAST_Token;
205
+ // };
206
+ // }
207
+ //
208
+ // export function IsForceCastNode(node: Node): node is ForceCastNode {
209
+ // return node.type === NodeType.FORCE_CAST;
210
+ // }
211
+ //
212
+ // GrammarRegistry.AddRule(Versions.v1_0_0, NodeType.FORCE_CAST, [
213
+ // {
214
+ // type: [
215
+ // NodeType.ARRAY_ACCESS_SEQUENCE,
216
+ // NodeType.FUNCTION_CALL,
217
+ // NodeType.PARENTHETISED_EXPRESSION,
218
+ // TokenType.BUILTIN,
219
+ // NodeType.LITERAL,
220
+ // TokenType.IDENTIFIER
221
+ // ],
222
+ // name: "expression"
223
+ // },
224
+ // { type: TokenType.OPERATOR, value: ":" },
225
+ // { type: TokenType.OPERATOR, value: "=" },
226
+ // { type: [ TokenType.IDENTIFIER ],
227
+ // name: "castType"
228
+ // }
229
+ // ]);
230
+ //# sourceMappingURL=Types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Types.js","sourceRoot":"","sources":["Types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { NodeNames, NodeType } from "./Parser/Enums.js";
2
+ import { GrammarInterfaces } from "./Parser/Interfaces.js";
3
+ import { ExpressionNode } from "./Grammar/General.js";
4
+ export declare namespace GrammarRegistry {
5
+ import ExpressionSource = GrammarInterfaces.ExpressionSource;
6
+ import EAST_Token = GrammarInterfaces.EAST_Token;
7
+ import Node = GrammarInterfaces.Node;
8
+ import Rule = GrammarInterfaces.Rule;
9
+ import NodeExecution = GrammarInterfaces.NodeExecution;
10
+ import EAST_Complex_Node = GrammarInterfaces.EAST_Complex_Node;
11
+ function AddRule<NodeTokenType extends EAST_Complex_Node>(version: string, name: (typeof NodeType)[NodeNames], rules: Rule[][], execute: NodeExecution<NodeTokenType>): void;
12
+ function getRule(versionIdx: number, name: (typeof NodeType)[NodeNames]): GrammarInterfaces.NodeDefinition;
13
+ function MarkIncidentLocation(source: ExpressionSource, location: number): string;
14
+ class ExpressionSyntaxError extends Error {
15
+ source: ExpressionSource;
16
+ location: number;
17
+ constructor(msg: string, source: ExpressionSource, location: number);
18
+ constructor(msg: string, node: EAST_Token | ExpressionNode | Node);
19
+ }
20
+ }
@@ -0,0 +1,51 @@
1
+ import { GetVersionIndex } from "../../Constants/Versions.js";
2
+ import { NodeType } from "./Parser/Enums.js";
3
+ const grammar = [];
4
+ export var GrammarRegistry;
5
+ (function (GrammarRegistry) {
6
+ function AddRule(version, name, rules, execute) {
7
+ let index = GetVersionIndex(version);
8
+ if (index < 0)
9
+ throw new Error(`Can't add grammar rule for syntax version that hasn't been defined ${version}.`);
10
+ if (!grammar[index])
11
+ grammar[index] = {};
12
+ grammar[index][name] = {
13
+ ID: name,
14
+ debugName: NodeType[name],
15
+ rules,
16
+ execute: execute,
17
+ };
18
+ }
19
+ GrammarRegistry.AddRule = AddRule;
20
+ function getRule(versionIdx, name) {
21
+ return grammar[versionIdx][name];
22
+ }
23
+ GrammarRegistry.getRule = getRule;
24
+ function MarkIncidentLocation(source, location) {
25
+ return ` ---> ${source.text}\n ${"".padStart(location, " ")}^^\nFound in file ${source.file} on line ${source.line} at ${location}.\n`;
26
+ }
27
+ GrammarRegistry.MarkIncidentLocation = MarkIncidentLocation;
28
+ class ExpressionSyntaxError extends Error {
29
+ constructor(msg, source, location) {
30
+ if (location) {
31
+ super(msg + `\n${MarkIncidentLocation(source, location)}`);
32
+ this.source = source;
33
+ this.location = location;
34
+ }
35
+ else {
36
+ let node = source;
37
+ let sourceDetails = {
38
+ file: node.file.sourceLocation,
39
+ version: node.file.version,
40
+ text: node.file.text,
41
+ line: node.line
42
+ };
43
+ super(msg + `\n${MarkIncidentLocation(sourceDetails, node.column)}`);
44
+ this.source = sourceDetails;
45
+ this.location = node.column;
46
+ }
47
+ }
48
+ }
49
+ GrammarRegistry.ExpressionSyntaxError = ExpressionSyntaxError;
50
+ })(GrammarRegistry || (GrammarRegistry = {}));
51
+ //# sourceMappingURL=GrammarRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrammarRegistry.js","sourceRoot":"","sources":["GrammarRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAa,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIxD,MAAM,OAAO,GAEP,EAAE,CAAC;AAET,MAAM,KAAQ,eAAe,CA4D5B;AA5DD,WAAc,eAAe;IAUzB,SAAgB,OAAO,CAClB,OAAe,EAAE,IAAkC,EAAE,KAAe,EAAE,OAAqC;QAC5G,IAAI,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,KAAK,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sEAAsE,OAAO,GAAG,CAAC,CAAC;QACjH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG;YACnB,EAAE,EAAE,IAAgB;YACpB,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC;YACzB,KAAK;YACL,OAAO,EAAE,OAA2C;SACvD,CAAC;IACN,CAAC;IAXe,uBAAO,UAWtB,CAAA;IAED,SAAgB,OAAO,CAAC,UAAkB,EAAE,IAAkC;QAC1E,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAFe,uBAAO,UAEtB,CAAA;IAED,SAAgB,oBAAoB,CAAC,MAAwB,EAAE,QAAgB;QAC3E,OAAO,SAAS,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,QAAQ,CAC7C,QAAQ,EACR,GAAG,CACN,qBAAqB,MAAM,CAAC,IAAI,YAAY,MAAM,CAAC,IAAI,OAAO,QAAQ,KAAK,CAAC;IACjF,CAAC;IALe,oCAAoB,uBAKnC,CAAA;IAED,MAAa,qBAAsB,SAAQ,KAAK;QAM5C,YAAY,GAAW,EAAE,MAAwD,EAAE,QAAiB;YAChG,IAAI,QAAQ,EAAE,CAAC;gBACX,KAAK,CAAC,GAAG,GAAG,KAAK,oBAAoB,CAAC,MAA0B,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC/E,IAAI,CAAC,MAAM,GAAG,MAA0B,CAAC;gBACzC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACJ,IAAI,IAAI,GAAG,MAAqC,CAAC;gBACjD,IAAI,aAAa,GAAG;oBAChB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc;oBAC9B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAc;oBACjC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;oBACpB,IAAI,EAAE,IAAI,CAAC,IAAI;iBAClB,CAAC;gBACF,KAAK,CAAC,GAAG,GAAG,KAAK,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACrE,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;gBAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;YAChC,CAAC;QACL,CAAC;KACJ;IAxBY,qCAAqB,wBAwBjC,CAAA;AAEL,CAAC,EA5Da,eAAe,KAAf,eAAe,QA4D5B"}
@@ -0,0 +1,8 @@
1
+ import { Versions } from "../../../Main.js";
2
+ import { GrammarInterfaces } from "./Interfaces.js";
3
+ import NodeDefinition = GrammarInterfaces.NodeDefinition;
4
+ import Token = GrammarInterfaces.Token;
5
+ import Rule = GrammarInterfaces.Rule;
6
+ export declare function CheckRuleDone(grammar: NodeDefinition, rules: Rule[], currentRuleIndex: number): boolean;
7
+ export declare function IsRuleSkippable(rule: GrammarInterfaces.Rule, previousRuleMatched: boolean): boolean;
8
+ export declare function TokenDataMatchesRule(version: Versions | string, gram: GrammarInterfaces.Rule, token: Token): boolean;
@@ -0,0 +1,40 @@
1
+ import { getEASTTokenValues } from "./Tokenizer.js";
2
+ export function CheckRuleDone(grammar, rules, currentRuleIndex) {
3
+ //Ran out of input to iterate over but still need to match more parts of this rule.
4
+ for (let remainingRule = currentRuleIndex; remainingRule < rules.length; remainingRule++) {
5
+ if (!rules[remainingRule].optional || (rules[remainingRule].repeat?.[0] ?? 1) > 0) {
6
+ return false;
7
+ }
8
+ }
9
+ //Ran out of input but finished matching or everything else is optional.
10
+ return true;
11
+ }
12
+ export function IsRuleSkippable(rule, previousRuleMatched) {
13
+ let skippable = !!rule.optional || (rule.repeat && rule.repeat[0] == 0);
14
+ //This must exist if the previous rule existed but must not match if the previous rule didn't exist.
15
+ if (rule.optional == "previous") {
16
+ if (!previousRuleMatched) {
17
+ return true;
18
+ }
19
+ else {
20
+ skippable = false;
21
+ }
22
+ }
23
+ return !!skippable;
24
+ }
25
+ export function TokenDataMatchesRule(version, gram, token) {
26
+ if (gram.value) {
27
+ return gram.value == token.data;
28
+ }
29
+ if (gram.values) {
30
+ if (Array.isArray(gram.values)) {
31
+ return gram.values.includes(token.data);
32
+ }
33
+ else {
34
+ let vals = getEASTTokenValues(version, gram.values);
35
+ return vals.has(token.data);
36
+ }
37
+ }
38
+ return !gram.excludeValues?.includes(token.data);
39
+ }
40
+ //# sourceMappingURL=Checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checks.js","sourceRoot":"","sources":["Checks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAMpD,MAAM,UAAU,aAAa,CAAC,OAAuB,EAAE,KAAa,EAAE,gBAAwB;IAC7F,mFAAmF;IACnF,KAAK,IAAI,aAAa,GAAG,gBAAgB,EAAE,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC;QAC1F,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACnF,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IACD,wEAAwE;IACxE,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAA4B,EAAE,mBAA4B;IACzF,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,oGAAoG;IACpG,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,EAAE,CAAC;QACjC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACb,CAAC;aACI,CAAC;YACL,SAAS,GAAG,KAAK,CAAC;QACnB,CAAC;IACF,CAAC;IACD,OAAO,CAAC,CAAC,SAAS,CAAC;AACpB,CAAC;AAGD,MAAM,UAAU,oBAAoB,CAAC,OAA0B,EAAE,IAA4B,EAAE,KAAY;IAC1G,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;IACjC,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;aACI,CAAC;YACL,IAAI,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,73 @@
1
+ export declare enum TokenPrecedence {
2
+ Important = 0,
3
+ Block = 1,
4
+ Line = 2,
5
+ Intricate_Builtins = 4,
6
+ Standard_Builtins = 6,
7
+ Operators = 8,
8
+ User_Identifiers = 10,
9
+ LeastImportant = 11
10
+ }
11
+ export declare enum CollectionType {
12
+ Single = 0,
13
+ Array = 1,
14
+ Array2 = 2,
15
+ Map = 3,
16
+ Dict = 4
17
+ }
18
+ export declare enum TokenType {
19
+ BLOCK_COMMENT = 0,
20
+ LINE_COMMENT = 1,
21
+ PREPROCESSOR = 2,
22
+ BLOCK_STRING = 3,
23
+ LINE_STRING = 4,
24
+ OPERATOR = 5,
25
+ INTEGER = 6,
26
+ FLOAT = 7,
27
+ IDENTIFIER = 8,
28
+ BUILTIN = 9,
29
+ KEYWORD = 10,
30
+ WHITESPACE = 11,
31
+ HEX = 12
32
+ }
33
+ export declare enum NodeType {
34
+ COMMENT = 100,
35
+ PREPROCESSOR_COMMAND = 101,
36
+ PRECISION_STATEMENT = 102,
37
+ IDENTIFIER = 110,
38
+ LITERAL = 111,
39
+ DECLARATION = 112,
40
+ DECLARATION_ENTRY = 113,
41
+ TYPE_DEFINITION = 114,
42
+ TYPE_UNION = 115,
43
+ DECLARATION_TYPE_QUALIFIER_LIST = 116,
44
+ STRUCT = 120,
45
+ PROPERTY_SIGNATURE = 121,
46
+ CAST = 122,
47
+ FORCE_CAST = 123,
48
+ MEMBER_ACCESS = 124,
49
+ FUNCTION_DECLARATION = 130,
50
+ FUNCTION_PARAMETER = 131,
51
+ FUNCTION_CALL = 132,
52
+ FUNCTION_ARGUMENT = 133,
53
+ FOR_LOOP = 140,
54
+ WHILE_LOOP = 141,
55
+ DOWHILE_LOOP = 142,
56
+ IF = 143,
57
+ ARRAY_TYPE = 150,
58
+ ARRAY_ACCESS_SEQUENCE = 151,
59
+ ARRAY_ACCESSOR = 152,
60
+ RETURN = 153,
61
+ BREAK = 154,
62
+ CONTINUE = 155,
63
+ DISCARD = 156,
64
+ EXPRESSION = 157,
65
+ STATEMENT = 158,
66
+ PARENTHETISED_EXPRESSION = 159,
67
+ BINARY_EXPRESSION = 160,
68
+ UNARY_EXPRESSION = 161,
69
+ ASSIGNMENT = 162,
70
+ BLOCK = 163,
71
+ FILE = 400
72
+ }
73
+ export type NodeNames = keyof typeof NodeType;
@@ -0,0 +1,77 @@
1
+ export var TokenPrecedence;
2
+ (function (TokenPrecedence) {
3
+ TokenPrecedence[TokenPrecedence["Important"] = 0] = "Important";
4
+ TokenPrecedence[TokenPrecedence["Block"] = 1] = "Block";
5
+ TokenPrecedence[TokenPrecedence["Line"] = 2] = "Line";
6
+ TokenPrecedence[TokenPrecedence["Intricate_Builtins"] = 4] = "Intricate_Builtins";
7
+ TokenPrecedence[TokenPrecedence["Standard_Builtins"] = 6] = "Standard_Builtins";
8
+ TokenPrecedence[TokenPrecedence["Operators"] = 8] = "Operators";
9
+ TokenPrecedence[TokenPrecedence["User_Identifiers"] = 10] = "User_Identifiers";
10
+ TokenPrecedence[TokenPrecedence["LeastImportant"] = 11] = "LeastImportant";
11
+ })(TokenPrecedence || (TokenPrecedence = {}));
12
+ export var CollectionType;
13
+ (function (CollectionType) {
14
+ CollectionType[CollectionType["Single"] = 0] = "Single";
15
+ CollectionType[CollectionType["Array"] = 1] = "Array";
16
+ CollectionType[CollectionType["Array2"] = 2] = "Array2";
17
+ CollectionType[CollectionType["Map"] = 3] = "Map";
18
+ CollectionType[CollectionType["Dict"] = 4] = "Dict";
19
+ })(CollectionType || (CollectionType = {}));
20
+ export var TokenType;
21
+ (function (TokenType) {
22
+ TokenType[TokenType["BLOCK_COMMENT"] = 0] = "BLOCK_COMMENT";
23
+ TokenType[TokenType["LINE_COMMENT"] = 1] = "LINE_COMMENT";
24
+ TokenType[TokenType["PREPROCESSOR"] = 2] = "PREPROCESSOR";
25
+ TokenType[TokenType["BLOCK_STRING"] = 3] = "BLOCK_STRING";
26
+ TokenType[TokenType["LINE_STRING"] = 4] = "LINE_STRING";
27
+ TokenType[TokenType["OPERATOR"] = 5] = "OPERATOR";
28
+ TokenType[TokenType["INTEGER"] = 6] = "INTEGER";
29
+ TokenType[TokenType["FLOAT"] = 7] = "FLOAT";
30
+ TokenType[TokenType["IDENTIFIER"] = 8] = "IDENTIFIER";
31
+ TokenType[TokenType["BUILTIN"] = 9] = "BUILTIN";
32
+ TokenType[TokenType["KEYWORD"] = 10] = "KEYWORD";
33
+ TokenType[TokenType["WHITESPACE"] = 11] = "WHITESPACE";
34
+ TokenType[TokenType["HEX"] = 12] = "HEX";
35
+ })(TokenType || (TokenType = {}));
36
+ export var NodeType;
37
+ (function (NodeType) {
38
+ NodeType[NodeType["COMMENT"] = 100] = "COMMENT";
39
+ NodeType[NodeType["PREPROCESSOR_COMMAND"] = 101] = "PREPROCESSOR_COMMAND";
40
+ NodeType[NodeType["PRECISION_STATEMENT"] = 102] = "PRECISION_STATEMENT";
41
+ NodeType[NodeType["IDENTIFIER"] = 110] = "IDENTIFIER";
42
+ NodeType[NodeType["LITERAL"] = 111] = "LITERAL";
43
+ NodeType[NodeType["DECLARATION"] = 112] = "DECLARATION";
44
+ NodeType[NodeType["DECLARATION_ENTRY"] = 113] = "DECLARATION_ENTRY";
45
+ NodeType[NodeType["TYPE_DEFINITION"] = 114] = "TYPE_DEFINITION";
46
+ NodeType[NodeType["TYPE_UNION"] = 115] = "TYPE_UNION";
47
+ NodeType[NodeType["DECLARATION_TYPE_QUALIFIER_LIST"] = 116] = "DECLARATION_TYPE_QUALIFIER_LIST";
48
+ NodeType[NodeType["STRUCT"] = 120] = "STRUCT";
49
+ NodeType[NodeType["PROPERTY_SIGNATURE"] = 121] = "PROPERTY_SIGNATURE";
50
+ NodeType[NodeType["CAST"] = 122] = "CAST";
51
+ NodeType[NodeType["FORCE_CAST"] = 123] = "FORCE_CAST";
52
+ NodeType[NodeType["MEMBER_ACCESS"] = 124] = "MEMBER_ACCESS";
53
+ NodeType[NodeType["FUNCTION_DECLARATION"] = 130] = "FUNCTION_DECLARATION";
54
+ NodeType[NodeType["FUNCTION_PARAMETER"] = 131] = "FUNCTION_PARAMETER";
55
+ NodeType[NodeType["FUNCTION_CALL"] = 132] = "FUNCTION_CALL";
56
+ NodeType[NodeType["FUNCTION_ARGUMENT"] = 133] = "FUNCTION_ARGUMENT";
57
+ NodeType[NodeType["FOR_LOOP"] = 140] = "FOR_LOOP";
58
+ NodeType[NodeType["WHILE_LOOP"] = 141] = "WHILE_LOOP";
59
+ NodeType[NodeType["DOWHILE_LOOP"] = 142] = "DOWHILE_LOOP";
60
+ NodeType[NodeType["IF"] = 143] = "IF";
61
+ NodeType[NodeType["ARRAY_TYPE"] = 150] = "ARRAY_TYPE";
62
+ NodeType[NodeType["ARRAY_ACCESS_SEQUENCE"] = 151] = "ARRAY_ACCESS_SEQUENCE";
63
+ NodeType[NodeType["ARRAY_ACCESSOR"] = 152] = "ARRAY_ACCESSOR";
64
+ NodeType[NodeType["RETURN"] = 153] = "RETURN";
65
+ NodeType[NodeType["BREAK"] = 154] = "BREAK";
66
+ NodeType[NodeType["CONTINUE"] = 155] = "CONTINUE";
67
+ NodeType[NodeType["DISCARD"] = 156] = "DISCARD";
68
+ NodeType[NodeType["EXPRESSION"] = 157] = "EXPRESSION";
69
+ NodeType[NodeType["STATEMENT"] = 158] = "STATEMENT";
70
+ NodeType[NodeType["PARENTHETISED_EXPRESSION"] = 159] = "PARENTHETISED_EXPRESSION";
71
+ NodeType[NodeType["BINARY_EXPRESSION"] = 160] = "BINARY_EXPRESSION";
72
+ NodeType[NodeType["UNARY_EXPRESSION"] = 161] = "UNARY_EXPRESSION";
73
+ NodeType[NodeType["ASSIGNMENT"] = 162] = "ASSIGNMENT";
74
+ NodeType[NodeType["BLOCK"] = 163] = "BLOCK";
75
+ NodeType[NodeType["FILE"] = 400] = "FILE";
76
+ })(NodeType || (NodeType = {}));
77
+ //# sourceMappingURL=Enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Enums.js","sourceRoot":"","sources":["Enums.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,eASX;AATD,WAAY,eAAe;IAC1B,+DAAS,CAAA;IACT,uDAAK,CAAA;IACL,qDAAI,CAAA;IACJ,iFAAsB,CAAA;IACtB,+EAAqB,CAAA;IACrB,+DAAa,CAAA;IACb,8EAAqB,CAAA;IACrB,0EAAc,CAAA;AACf,CAAC,EATW,eAAe,KAAf,eAAe,QAS1B;AAED,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACzB,uDAAM,CAAA;IACN,qDAAK,CAAA;IACL,uDAAM,CAAA;IACN,iDAAG,CAAA;IACH,mDAAI,CAAA;AACL,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB;AAED,MAAM,CAAN,IAAY,SAcX;AAdD,WAAY,SAAS;IACpB,2DAAa,CAAA;IACb,yDAAY,CAAA;IACZ,yDAAY,CAAA;IACZ,yDAAY,CAAA;IACZ,uDAAW,CAAA;IACX,iDAAQ,CAAA;IACR,+CAAO,CAAA;IACP,2CAAK,CAAA;IACL,qDAAU,CAAA;IACV,+CAAO,CAAA;IACP,gDAAO,CAAA;IACP,sDAAU,CAAA;IACV,wCAAG,CAAA;AACJ,CAAC,EAdW,SAAS,KAAT,SAAS,QAcpB;AAGD,MAAM,CAAN,IAAY,QAgDX;AAhDD,WAAY,QAAQ;IACnB,+CAAa,CAAA;IACb,yEAAoB,CAAA;IACpB,uEAAmB,CAAA;IAEnB,qDAAgB,CAAA;IAChB,+CAAO,CAAA;IACP,uDAAW,CAAA;IACX,mEAAiB,CAAA;IACjB,+DAAe,CAAA;IACf,qDAAU,CAAA;IACV,+FAA+B,CAAA;IAE/B,6CAAY,CAAA;IACZ,qEAAkB,CAAA;IAClB,yCAAI,CAAA;IACJ,qDAAU,CAAA;IACV,2DAAa,CAAA;IAEb,yEAA0B,CAAA;IAC1B,qEAAkB,CAAA;IAClB,2DAAa,CAAA;IACb,mEAAiB,CAAA;IAEjB,iDAAc,CAAA;IACd,qDAAU,CAAA;IACV,yDAAY,CAAA;IACZ,qCAAE,CAAA;IAEF,qDAAgB,CAAA;IAChB,2EAAqB,CAAA;IACrB,6DAAc,CAAA;IAEd,6CAAM,CAAA;IACN,2CAAK,CAAA;IACL,iDAAQ,CAAA;IAER,+CAAO,CAAA;IAEP,qDAAU,CAAA;IACV,mDAAS,CAAA;IACT,iFAAwB,CAAA;IACxB,mEAAiB,CAAA;IACjB,iEAAgB,CAAA;IAChB,qDAAU,CAAA;IAEV,2CAAK,CAAA;IACL,yCAAU,CAAA;AACX,CAAC,EAhDW,QAAQ,KAAR,QAAQ,QAgDnB"}
@@ -0,0 +1,118 @@
1
+ import { NodeType, TokenType } from "./Enums.js";
2
+ import { ChainType } from "../../TypeRegistry/ChainTypes.js";
3
+ import { StaticTraversalScope, TraversalScope } from "../../TypeRegistry/Types.js";
4
+ import { FileNode } from "../Grammar/General.js";
5
+ import { Versions } from "../../../Constants/Versions.js";
6
+ import { ErrorStack } from "../../../Constants/Errors.js";
7
+ export declare namespace GrammarInterfaces {
8
+ interface FunctionOutputType {
9
+ kind: "function";
10
+ parameters: {
11
+ type: NodeOutputType[];
12
+ assignmentName?: string;
13
+ }[];
14
+ returnType: NodeOutputType[] | null;
15
+ }
16
+ type NodeOutputType = ChainType | FunctionOutputType;
17
+ function isFunctionOutputType(type: NodeOutputType): type is FunctionOutputType;
18
+ function isAssignableCompile(version: Versions, to: NodeOutputType[] | null, from: NodeOutputType[] | null, node: EAST_Complex_Node | EAST_Token, stack: ErrorStack): boolean;
19
+ function collapseTypeLive(scope: TraversalScope, node: EAST_Complex_Node | EAST_Token, value: any, types: NodeOutputType[] | null): NodeOutputType | null;
20
+ function dedupeTypes(types: NodeOutputType[]): NodeOutputType[];
21
+ /**
22
+ * How the node gets executed at runtime.
23
+ */
24
+ interface NodeExecution<NodeType extends EAST_Token | EAST_Complex_Node = EAST_Token | EAST_Complex_Node> {
25
+ runtimeExecute(scope: TraversalScope, currentNode: NodeType, outputType: NodeOutputType[] | null): {
26
+ interrupt?: "continue" | "break" | "return" | "throw";
27
+ type: NodeOutputType | null;
28
+ value: any;
29
+ castType?: NodeOutputType[];
30
+ };
31
+ runtimeExecuteWithValidation?: (scope: TraversalScope, currentNode: NodeType, expectedOutput: NodeOutputType[] | null) => {
32
+ interrupt?: "continue" | "break" | "return" | "throw";
33
+ type: NodeOutputType | null;
34
+ value: any;
35
+ castType?: NodeOutputType[];
36
+ };
37
+ compileTimeTraversal: (scope: StaticTraversalScope, currentNode: NodeType, outputType: NodeOutputType[] | null) => {
38
+ interrupt?: "return" | "throw";
39
+ type: NodeOutputType[] | null;
40
+ assignmentName?: string;
41
+ castType?: NodeOutputType[];
42
+ } | null;
43
+ }
44
+ interface RawToken {
45
+ type: TokenType;
46
+ execute: NodeExecution<any>;
47
+ data: string;
48
+ position: number;
49
+ length: number;
50
+ precedence: number;
51
+ }
52
+ interface Token {
53
+ type: TokenType;
54
+ data: string;
55
+ position: number;
56
+ length: number;
57
+ line: number;
58
+ column: number;
59
+ execute: NodeExecution;
60
+ }
61
+ interface EAST_Token extends Token {
62
+ file: FileNode;
63
+ }
64
+ interface TokenCategoryRule {
65
+ versions: [Set<string> | RegExp];
66
+ type: number;
67
+ debug_name: string;
68
+ precedence: number;
69
+ execution: NodeExecution<EAST_Token>;
70
+ }
71
+ /**
72
+ * EAST = Expression AST.
73
+ */
74
+ interface EAST_Complex_Node {
75
+ type: NodeType;
76
+ file: FileNode;
77
+ position: number;
78
+ length: number;
79
+ line: number;
80
+ column: number;
81
+ execute: NodeExecution;
82
+ values?: {
83
+ [name: string]: EAST_Token | EAST_Complex_Node | (EAST_Token | EAST_Complex_Node)[];
84
+ } | EAST_Token | EAST_Complex_Node | (Token | EAST_Complex_Node)[];
85
+ }
86
+ type Node = EAST_Complex_Node | EAST_Token;
87
+ enum SpecialType {
88
+ /**
89
+ * Allow extra types to be input by the parent. Used as a placeholder for blocks so that the expression
90
+ * lines from the parent are used in the evaluation of this grammar rule.
91
+ **/
92
+ INPUT_TYPES = 1000
93
+ }
94
+ interface Rule {
95
+ type: TokenType | NodeType | SpecialType | (TokenType | NodeType | SpecialType)[];
96
+ debug_name?: string;
97
+ value?: string;
98
+ values?: (TokenCategoryRule | string)[];
99
+ name?: string;
100
+ excludeValues?: string[];
101
+ input?: (TokenType | NodeType | SpecialType)[];
102
+ repeat?: [number, number];
103
+ repeatSeparator?: Rule;
104
+ unroll?: boolean;
105
+ optional?: boolean | "previous";
106
+ }
107
+ type NodeDefinition = {
108
+ ID: NodeType;
109
+ debugName: string;
110
+ execute: NodeExecution<EAST_Complex_Node>;
111
+ rules: Rule[][];
112
+ };
113
+ interface ExpressionSource {
114
+ text: string;
115
+ file: string;
116
+ line: number;
117
+ }
118
+ }