ifc-expressions 2.3.0 → 3.0.0-beta.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 (185) hide show
  1. package/README.md +255 -30
  2. package/dist/IfcExpression.d.ts +24 -26
  3. package/dist/IfcExpressionErrorListener.d.ts +3 -3
  4. package/dist/IfcExpressionOptions.d.ts +4 -0
  5. package/dist/autocomplete/CompletionItem.d.ts +24 -0
  6. package/dist/autocomplete/IfcExpressionAutocomplete.d.ts +11 -0
  7. package/dist/builtin/BuiltinRuntimeValueConverter.d.ts +7 -0
  8. package/dist/builtin/BuiltinVariableRegistry.d.ts +50 -0
  9. package/dist/cjs/IfcExpression.js +112 -37
  10. package/dist/cjs/IfcExpression.js.map +1 -1
  11. package/dist/cjs/IfcExpressionErrorListener.js +3 -8
  12. package/dist/cjs/IfcExpressionErrorListener.js.map +1 -1
  13. package/dist/cjs/IfcExpressionOptions.js +3 -0
  14. package/dist/cjs/IfcExpressionOptions.js.map +1 -0
  15. package/dist/cjs/autocomplete/CompletionItem.js +3 -0
  16. package/dist/cjs/autocomplete/CompletionItem.js.map +1 -0
  17. package/dist/cjs/autocomplete/IfcExpressionAutocomplete.js +654 -0
  18. package/dist/cjs/autocomplete/IfcExpressionAutocomplete.js.map +1 -0
  19. package/dist/cjs/builtin/BuiltinRuntimeValueConverter.js +124 -0
  20. package/dist/cjs/builtin/BuiltinRuntimeValueConverter.js.map +1 -0
  21. package/dist/cjs/builtin/BuiltinVariableRegistry.js +405 -0
  22. package/dist/cjs/builtin/BuiltinVariableRegistry.js.map +1 -0
  23. package/dist/cjs/compiler/ExprCompiler.js +44 -41
  24. package/dist/cjs/compiler/ExprCompiler.js.map +1 -1
  25. package/dist/cjs/compiler/ExprManager.js.map +1 -1
  26. package/dist/cjs/compiler/IfcExpressionValidationListener.js +85 -25
  27. package/dist/cjs/compiler/IfcExpressionValidationListener.js.map +1 -1
  28. package/dist/cjs/compiler/TypeManager.js.map +1 -1
  29. package/dist/cjs/context/IfcExpressionContext.js.map +1 -1
  30. package/dist/cjs/context/NopContext.js +3 -0
  31. package/dist/cjs/context/NopContext.js.map +1 -1
  32. package/dist/cjs/documentation/Documentation.js +11 -0
  33. package/dist/cjs/documentation/Documentation.js.map +1 -0
  34. package/dist/cjs/error/ExpressionTypeError.js.map +1 -1
  35. package/dist/cjs/error/IfcExpressionBuiltinConfigException.js +10 -0
  36. package/dist/cjs/error/IfcExpressionBuiltinConfigException.js.map +1 -0
  37. package/dist/cjs/error/InvalidSyntaxException.js.map +1 -1
  38. package/dist/cjs/error/NoSuchFunctionException.js.map +1 -1
  39. package/dist/cjs/error/NoSuchMemberException.js +13 -0
  40. package/dist/cjs/error/NoSuchMemberException.js.map +1 -0
  41. package/dist/cjs/error/ValidationException.js.map +1 -1
  42. package/dist/cjs/error/WrongFunctionArgumentTypeException.js.map +1 -1
  43. package/dist/cjs/expression/ExprKind.js +3 -0
  44. package/dist/cjs/expression/ExprKind.js.map +1 -1
  45. package/dist/cjs/expression/function/Func.js +18 -14
  46. package/dist/cjs/expression/function/Func.js.map +1 -1
  47. package/dist/cjs/expression/function/FuncArg.js +11 -5
  48. package/dist/cjs/expression/function/FuncArg.js.map +1 -1
  49. package/dist/cjs/expression/function/IfcExpressionFunctions.js +198 -42
  50. package/dist/cjs/expression/function/IfcExpressionFunctions.js.map +1 -1
  51. package/dist/cjs/expression/function/impl/CHOOSE.js.map +1 -1
  52. package/dist/cjs/expression/function/impl/IF.js.map +1 -1
  53. package/dist/cjs/expression/function/impl/MAP.js.map +1 -1
  54. package/dist/cjs/expression/function/impl/ReplacePattern.js +20 -2
  55. package/dist/cjs/expression/function/impl/ReplacePattern.js.map +1 -1
  56. package/dist/cjs/expression/reference/BuiltinFunctionCallExpr.js +59 -0
  57. package/dist/cjs/expression/reference/BuiltinFunctionCallExpr.js.map +1 -0
  58. package/dist/cjs/expression/reference/BuiltinPropertyAccessExpr.js +34 -0
  59. package/dist/cjs/expression/reference/BuiltinPropertyAccessExpr.js.map +1 -0
  60. package/dist/cjs/expression/reference/BuiltinRootReferenceExpr.js +29 -0
  61. package/dist/cjs/expression/reference/BuiltinRootReferenceExpr.js.map +1 -0
  62. package/dist/cjs/gen/parser/IfcExpressionLexer.js +126 -104
  63. package/dist/cjs/gen/parser/IfcExpressionLexer.js.map +1 -1
  64. package/dist/cjs/gen/parser/IfcExpressionListener.js +7 -4
  65. package/dist/cjs/gen/parser/IfcExpressionListener.js.map +1 -1
  66. package/dist/cjs/gen/parser/IfcExpressionParser.js +739 -682
  67. package/dist/cjs/gen/parser/IfcExpressionParser.js.map +1 -1
  68. package/dist/cjs/gen/parser/IfcExpressionVisitor.js +4 -4
  69. package/dist/cjs/gen/parser/IfcExpressionVisitor.js.map +1 -1
  70. package/dist/cjs/index.js +4 -1
  71. package/dist/cjs/index.js.map +1 -1
  72. package/dist/cjs/type/ContextObjectType.js +45 -0
  73. package/dist/cjs/type/ContextObjectType.js.map +1 -0
  74. package/dist/cjs/type/Types.js +4 -6
  75. package/dist/cjs/type/Types.js.map +1 -1
  76. package/dist/cjs/value/ContextObjectValue.js +23 -0
  77. package/dist/cjs/value/ContextObjectValue.js.map +1 -0
  78. package/dist/cjs/value/ExpressionValue.js.map +1 -1
  79. package/dist/cjs/value/Value.js.map +1 -1
  80. package/dist/compiler/ExprCompiler.d.ts +8 -3
  81. package/dist/compiler/ExprManager.d.ts +1 -1
  82. package/dist/compiler/IfcExpressionValidationListener.d.ts +9 -3
  83. package/dist/compiler/TypeManager.d.ts +1 -1
  84. package/dist/context/IfcExpressionContext.d.ts +3 -4
  85. package/dist/context/NopContext.d.ts +1 -0
  86. package/dist/documentation/Documentation.d.ts +12 -0
  87. package/dist/error/ExpressionTypeError.d.ts +1 -1
  88. package/dist/error/IfcExpressionBuiltinConfigException.d.ts +3 -0
  89. package/dist/error/InvalidSyntaxException.d.ts +1 -1
  90. package/dist/error/NoSuchFunctionException.d.ts +1 -1
  91. package/dist/error/NoSuchMemberException.d.ts +6 -0
  92. package/dist/error/ValidationException.d.ts +1 -1
  93. package/dist/error/WrongFunctionArgumentTypeException.d.ts +1 -1
  94. package/dist/expression/ExprKind.d.ts +3 -0
  95. package/dist/expression/function/Func.d.ts +7 -21
  96. package/dist/expression/function/FuncArg.d.ts +6 -5
  97. package/dist/expression/function/IfcExpressionFunctions.d.ts +1 -0
  98. package/dist/expression/function/impl/CHOOSE.d.ts +1 -1
  99. package/dist/expression/function/impl/IF.d.ts +1 -1
  100. package/dist/expression/function/impl/MAP.d.ts +1 -1
  101. package/dist/expression/reference/BuiltinFunctionCallExpr.d.ts +19 -0
  102. package/dist/expression/reference/BuiltinPropertyAccessExpr.d.ts +15 -0
  103. package/dist/expression/reference/BuiltinRootReferenceExpr.d.ts +14 -0
  104. package/dist/gen/parser/IfcExpressionLexer.d.ts +9 -8
  105. package/dist/gen/parser/IfcExpressionListener.d.ts +89 -59
  106. package/dist/gen/parser/IfcExpressionParser.d.ts +192 -169
  107. package/dist/gen/parser/IfcExpressionVisitor.d.ts +51 -35
  108. package/dist/index.d.ts +2 -2
  109. package/dist/mjs/IfcExpression.js +104 -32
  110. package/dist/mjs/IfcExpression.js.map +1 -1
  111. package/dist/mjs/IfcExpressionErrorListener.js +3 -8
  112. package/dist/mjs/IfcExpressionErrorListener.js.map +1 -1
  113. package/dist/mjs/IfcExpressionOptions.js +2 -0
  114. package/dist/mjs/IfcExpressionOptions.js.map +1 -0
  115. package/dist/mjs/autocomplete/CompletionItem.js +2 -0
  116. package/dist/mjs/autocomplete/CompletionItem.js.map +1 -0
  117. package/dist/mjs/autocomplete/IfcExpressionAutocomplete.js +650 -0
  118. package/dist/mjs/autocomplete/IfcExpressionAutocomplete.js.map +1 -0
  119. package/dist/mjs/builtin/BuiltinRuntimeValueConverter.js +117 -0
  120. package/dist/mjs/builtin/BuiltinRuntimeValueConverter.js.map +1 -0
  121. package/dist/mjs/builtin/BuiltinVariableRegistry.js +399 -0
  122. package/dist/mjs/builtin/BuiltinVariableRegistry.js.map +1 -0
  123. package/dist/mjs/compiler/ExprCompiler.js +43 -40
  124. package/dist/mjs/compiler/ExprCompiler.js.map +1 -1
  125. package/dist/mjs/compiler/ExprManager.js.map +1 -1
  126. package/dist/mjs/compiler/IfcExpressionValidationListener.js +85 -22
  127. package/dist/mjs/compiler/IfcExpressionValidationListener.js.map +1 -1
  128. package/dist/mjs/compiler/TypeManager.js.map +1 -1
  129. package/dist/mjs/context/IfcExpressionContext.js.map +1 -1
  130. package/dist/mjs/context/NopContext.js +3 -0
  131. package/dist/mjs/context/NopContext.js.map +1 -1
  132. package/dist/mjs/documentation/Documentation.js +7 -0
  133. package/dist/mjs/documentation/Documentation.js.map +1 -0
  134. package/dist/mjs/error/ExpressionTypeError.js.map +1 -1
  135. package/dist/mjs/error/IfcExpressionBuiltinConfigException.js +6 -0
  136. package/dist/mjs/error/IfcExpressionBuiltinConfigException.js.map +1 -0
  137. package/dist/mjs/error/InvalidSyntaxException.js.map +1 -1
  138. package/dist/mjs/error/NoSuchFunctionException.js.map +1 -1
  139. package/dist/mjs/error/NoSuchMemberException.js +9 -0
  140. package/dist/mjs/error/NoSuchMemberException.js.map +1 -0
  141. package/dist/mjs/error/ValidationException.js.map +1 -1
  142. package/dist/mjs/error/WrongFunctionArgumentTypeException.js.map +1 -1
  143. package/dist/mjs/expression/ExprKind.js +3 -0
  144. package/dist/mjs/expression/ExprKind.js.map +1 -1
  145. package/dist/mjs/expression/function/Func.js +18 -14
  146. package/dist/mjs/expression/function/Func.js.map +1 -1
  147. package/dist/mjs/expression/function/FuncArg.js +11 -5
  148. package/dist/mjs/expression/function/FuncArg.js.map +1 -1
  149. package/dist/mjs/expression/function/IfcExpressionFunctions.js +198 -42
  150. package/dist/mjs/expression/function/IfcExpressionFunctions.js.map +1 -1
  151. package/dist/mjs/expression/function/impl/CHOOSE.js.map +1 -1
  152. package/dist/mjs/expression/function/impl/IF.js.map +1 -1
  153. package/dist/mjs/expression/function/impl/MAP.js.map +1 -1
  154. package/dist/mjs/expression/function/impl/ReplacePattern.js +20 -2
  155. package/dist/mjs/expression/function/impl/ReplacePattern.js.map +1 -1
  156. package/dist/mjs/expression/reference/BuiltinFunctionCallExpr.js +55 -0
  157. package/dist/mjs/expression/reference/BuiltinFunctionCallExpr.js.map +1 -0
  158. package/dist/mjs/expression/reference/BuiltinPropertyAccessExpr.js +30 -0
  159. package/dist/mjs/expression/reference/BuiltinPropertyAccessExpr.js.map +1 -0
  160. package/dist/mjs/expression/reference/BuiltinRootReferenceExpr.js +25 -0
  161. package/dist/mjs/expression/reference/BuiltinRootReferenceExpr.js.map +1 -0
  162. package/dist/mjs/gen/parser/IfcExpressionLexer.js +101 -104
  163. package/dist/mjs/gen/parser/IfcExpressionLexer.js.map +1 -1
  164. package/dist/mjs/gen/parser/IfcExpressionListener.js +5 -3
  165. package/dist/mjs/gen/parser/IfcExpressionListener.js.map +1 -1
  166. package/dist/mjs/gen/parser/IfcExpressionParser.js +700 -670
  167. package/dist/mjs/gen/parser/IfcExpressionParser.js.map +1 -1
  168. package/dist/mjs/gen/parser/IfcExpressionVisitor.js +2 -3
  169. package/dist/mjs/gen/parser/IfcExpressionVisitor.js.map +1 -1
  170. package/dist/mjs/index.js +1 -1
  171. package/dist/mjs/index.js.map +1 -1
  172. package/dist/mjs/type/ContextObjectType.js +41 -0
  173. package/dist/mjs/type/ContextObjectType.js.map +1 -0
  174. package/dist/mjs/type/Types.js +4 -6
  175. package/dist/mjs/type/Types.js.map +1 -1
  176. package/dist/mjs/value/ContextObjectValue.js +19 -0
  177. package/dist/mjs/value/ContextObjectValue.js.map +1 -0
  178. package/dist/mjs/value/ExpressionValue.js.map +1 -1
  179. package/dist/mjs/value/Value.js.map +1 -1
  180. package/dist/type/ContextObjectType.d.ts +17 -0
  181. package/dist/type/Types.d.ts +2 -6
  182. package/dist/value/ContextObjectValue.d.ts +11 -0
  183. package/dist/value/ExpressionValue.d.ts +2 -1
  184. package/dist/value/Value.d.ts +1 -1
  185. package/package.json +5 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/compiler/ExprCompiler.ts"],"names":[],"mappings":"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","file":"compiler/ExprCompiler.js","sourcesContent":["import IfcExpressionVisitor from \"../gen/parser/IfcExpressionVisitor.js\";\nimport { NumericLiteralExpr } from \"../expression/numeric/NumericLiteralExpr.js\";\nimport {\n ArrayElementListContext,\n ArrayExprContext,\n BooleanLiteralContext,\n ExprContext,\n ExprListContext,\n FunctionCallContext,\n LiteralContext,\n LogicalLiteralContext,\n MethodCallChainEndContext,\n MethodCallChainInnerContext,\n NumLiteralContext,\n SEAddSubContext,\n SEArrayExprContext,\n SEBooleanBinaryOpContext,\n SEComparisonContext,\n SEFunctionCallContext,\n SELiteralContext,\n SEMethodCallContext,\n SEMulDivContext,\n SENotContext,\n SEParenthesisContext,\n SEPowerContext,\n SEUnaryMinusContext,\n SEUnaryMultipleMinusContext,\n SEVariableRefContext,\n StringLiteralContext,\n VariableRefContext,\n} from \"../gen/parser/IfcExpressionParser.js\";\nimport { Expr } from \"../expression/Expr.js\";\nimport { isNullish, isPresent } from \"../util/IfcExpressionUtils.js\";\nimport Decimal from \"decimal.js\";\nimport { PlusExpr } from \"../expression/numeric/PlusExpr.js\";\nimport { MinusExpr } from \"../expression/numeric/MinusExpr.js\";\nimport { ParserRuleContext } from \"antlr4\";\nimport { MultiplyExpr } from \"../expression/numeric/MultiplyExpr.js\";\nimport { DivideExpr } from \"../expression/numeric/DivideExpr.js\";\nimport { PropObjectReferenceExpr } from \"../expression/reference/PropObjectReferenceExpr.js\";\nimport { ElemObjectReferenceExpr } from \"../expression/reference/ElemObjectReferenceExpr.js\";\nimport { StringLiteralExpr } from \"../expression/string/StringLiteralExpr.js\";\nimport { ArrayExpr } from \"../expression/structure/ArrayExpr.js\";\nimport { FunctionExpr } from \"../expression/function/FunctionExpr.js\";\nimport { PowerExpr } from \"../expression/numeric/PowerExpr.js\";\nimport { UnaryMinusExpr } from \"../expression/numeric/UnaryMinusExpr.js\";\nimport { AndExpr } from \"../expression/boolean/AndExpr.js\";\nimport { BooleanLiteralExpr } from \"../expression/boolean/BooleanLiteralExpr.js\";\nimport { OrExpr } from \"../expression/boolean/OrExpr.js\";\nimport { XorExpr } from \"../expression/boolean/XorExpr.js\";\nimport { SyntaxErrorException } from \"../error/SyntaxErrorException.js\";\nimport { NotExpr } from \"../expression/boolean/NotExpr.js\";\nimport { ParenthesisExpr } from \"../expression/structure/ParenthesisExpr.js\";\nimport { EqualsExpr } from \"../expression/comparison/EqualsExpr.js\";\nimport { NotEqualsExpr } from \"../expression/comparison/NotEqualsExpr.js\";\nimport { TypeManager } from \"./TypeManager.js\";\nimport { StringConcatExpr } from \"../expression/string/StringConcatExpr.js\";\nimport { PlusOrConcatExpr } from \"../expression/poly/PlusOrConcatExpr.js\";\nimport { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { GreaterThan } from \"../expression/comparison/GreaterThan.js\";\nimport { GreaterThanOrEqual } from \"../expression/comparison/GreaterThanOrEqual.js\";\nimport { LessThan } from \"../expression/comparison/LessThan.js\";\nimport { LessThanOrEqual } from \"../expression/comparison/LessThanOrEqual.js\";\nimport { ExprManager } from \"./ExprManager.js\";\nimport { LogicalValue } from \"../value/LogicalValue.js\";\nimport { LogicalLiteralExpr } from \"../expression/boolean/LogicalLiteralExpr.js\";\n\nexport class ExprCompiler extends IfcExpressionVisitor<Expr<any>> {\n private readonly methodCallTargetStack = [];\n private readonly typeManager: TypeManager;\n private readonly exprManager: ExprManager;\n\n constructor(typeManager: TypeManager) {\n super();\n this.typeManager = typeManager;\n this.exprManager = new ExprManager();\n }\n\n public getExprManager(): ExprManager {\n return this.exprManager;\n }\n\n visitExpr: (ctx: ExprContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.singleExpr());\n };\n\n /*================================================\n * VariableRef\n *==============================================*/\n\n private associateContextAndReturn(expr: Expr<any>, ctx: ParserRuleContext) {\n this.exprManager.registerExprWithContext(expr, ctx);\n return expr;\n }\n\n visitVariableRef: (ctx: VariableRefContext) => Expr<any> = (ctx) => {\n if (ctx.IDENTIFIER().getText().toUpperCase() === \"PROPERTY\") {\n return this.associateContextAndReturn(new PropObjectReferenceExpr(), ctx);\n } else if (ctx.IDENTIFIER().getText().toUpperCase() === \"ELEMENT\") {\n return this.associateContextAndReturn(new ElemObjectReferenceExpr(), ctx);\n }\n throw new Error(`Parsing error: No variable '${ctx.getText()}' found `);\n };\n\n visitSEComparison: (ctx: SEComparisonContext) => Expr<any> = (ctx) => {\n const left = this.visit(ctx.singleExpr(0));\n const right = this.visit(ctx.singleExpr(1));\n switch (ctx.CMP_OP().getText()) {\n case \"==\":\n return this.associateContextAndReturn(new EqualsExpr(left, right), ctx);\n case \"!=\":\n return this.associateContextAndReturn(\n new NotEqualsExpr(left, right),\n ctx\n );\n case \">\":\n return this.associateContextAndReturn(\n new GreaterThan(left, right),\n ctx\n );\n case \">=\":\n return this.associateContextAndReturn(\n new GreaterThanOrEqual(left, right),\n ctx\n );\n case \"<\":\n return this.associateContextAndReturn(new LessThan(left, right), ctx);\n case \"<=\":\n return this.associateContextAndReturn(\n new LessThanOrEqual(left, right),\n ctx\n );\n }\n throw new Error(\n `Parsing error: comparison operator '${ctx\n .CMP_OP()\n .getText()}' not supported`\n );\n };\n\n visitSEMethodCall: (ctx: SEMethodCallContext) => Expr<any> = (ctx) => {\n this.methodCallTargetStack.push(this.visit(ctx.singleExpr()));\n return this.visit(ctx.methodCallChain());\n };\n\n visitSELiteral: (ctx: SELiteralContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.literal());\n };\n\n visitSEVariableRef: (ctx: SEVariableRefContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.variableRef());\n };\n visitSEArrayExpr: (ctx: SEArrayExprContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.arrayExpr());\n };\n visitSEFunctionCall: (ctx: SEFunctionCallContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.functionCall());\n };\n visitSEParenthesis: (ctx: SEParenthesisContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new ParenthesisExpr(this.visit(ctx._sub)),\n ctx\n );\n };\n\n /*================================================\n * MethodCallChain\n *==============================================*/\n\n visitMethodCallChainInner: (ctx: MethodCallChainInnerContext) => Expr<any> = (\n ctx\n ) => {\n const functionExpr = new FunctionExpr(\n ctx.functionCall().IDENTIFIER().getText(),\n this.collectFunctionArguments(ctx.functionCall().exprList(), [\n this.methodCallTargetStack.pop(),\n ])\n );\n this.associateContextAndReturn(functionExpr, ctx.functionCall());\n this.methodCallTargetStack.push(functionExpr);\n return this.visit(ctx.methodCallChain());\n };\n\n visitMethodCallChainEnd: (ctx: MethodCallChainEndContext) => Expr<any> = (\n ctx\n ) => {\n return this.associateContextAndReturn(\n new FunctionExpr(\n ctx.functionCall().IDENTIFIER().getText(),\n this.collectFunctionArguments(ctx.functionCall().exprList(), [\n this.methodCallTargetStack.pop(),\n ])\n ),\n ctx.functionCall()\n );\n };\n\n visitSEAddSub: (ctx: SEAddSubContext) => Expr<any> = (ctx) => {\n this.typeManager.requireTypesOverlap(ctx._left, ctx._right);\n switch (ctx._op.text) {\n case \"+\":\n return this.makePlusExpr(ctx);\n case \"-\":\n return this.associateContextAndReturn(\n new MinusExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n default:\n ExprCompiler.failNode(ctx);\n }\n };\n\n private makePlusExpr(ctx: SEAddSubContext) {\n if (this.typeManager.isNumeric(ctx._left, ctx._right)) {\n return this.associateContextAndReturn(\n new PlusExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n }\n if (this.typeManager.isString(ctx._left, ctx._right)) {\n return this.associateContextAndReturn(\n new StringConcatExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n }\n if (\n this.typeManager.overlapsWithString(ctx._left, ctx._right) ||\n this.typeManager.overlapsWithNumeric(ctx._left, ctx._right)\n ) {\n return this.associateContextAndReturn(\n new PlusOrConcatExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n }\n throw new ExpressionTypeError(\n \"Operator '+' requires the operands to be either both of type numeric or both of type string, but they are not.\",\n ctx\n );\n }\n\n visitSEMulDiv: (ctx: SEMulDivContext) => Expr<any> = (ctx) => {\n switch (ctx._op.text) {\n case \"*\":\n return this.associateContextAndReturn(\n new MultiplyExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n ),\n ctx\n );\n case \"/\":\n return this.associateContextAndReturn(\n new DivideExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n ),\n ctx\n );\n default:\n ExprCompiler.failNode(ctx);\n }\n };\n\n /*================================================\n * StringExpr\n *===============================================*/\n\n visitStringLiteral: (ctx: StringLiteralContext) => Expr<any> = (ctx) => {\n const quotedString = ctx.QUOTED_STRING().getText();\n const text = quotedString.substring(1, quotedString.length - 1);\n return this.associateContextAndReturn(new StringLiteralExpr(text), ctx);\n };\n\n /*================================================\n * NumExpr\n *===============================================*/\n\n visitNumLiteral: (ctx: NumLiteralContext) => Expr<any> = (ctx) => {\n let val = ctx.INT();\n if (isPresent(val)) {\n return this.associateContextAndReturn(\n new NumericLiteralExpr(new Decimal(ctx.getText())),\n ctx\n );\n }\n val = ctx.FLOAT();\n if (isPresent(val)) {\n return this.associateContextAndReturn(\n new NumericLiteralExpr(new Decimal(ctx.getText())),\n ctx\n );\n }\n ExprCompiler.failNode(ctx);\n };\n\n visitSEUnaryMultipleMinus: (ctx: SEUnaryMultipleMinusContext) => Expr<any> = (\n ctx\n ) => {\n return this.visit(ctx.singleExpr());\n };\n visitSEPower: (ctx: SEPowerContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new PowerExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n };\n visitSEUnaryMinus: (ctx: SEUnaryMinusContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new UnaryMinusExpr(this.visit(ctx.singleExpr())),\n ctx\n );\n };\n\n /*================================================\n * BooleanExpr\n *===============================================*/\n\n visitSEBooleanBinaryOp: (ctx: SEBooleanBinaryOpContext) => Expr<any> = (\n ctx\n ) => {\n switch (ctx._op.text) {\n case \"&&\":\n return this.associateContextAndReturn(\n new AndExpr(\n this.visit(ctx.singleExpr(0)),\n this.visit(ctx.singleExpr(1))\n ),\n ctx\n );\n case \"||\":\n return this.associateContextAndReturn(\n new OrExpr(\n this.visit(ctx.singleExpr(0)),\n this.visit(ctx.singleExpr(1))\n ),\n ctx\n );\n case \"><\":\n return this.associateContextAndReturn(\n new XorExpr(\n this.visit(ctx.singleExpr(0)),\n this.visit(ctx.singleExpr(1))\n ),\n ctx\n );\n }\n throw new SyntaxErrorException(\n ctx._op.text,\n ctx._op.line,\n ctx._op.column,\n `Unknown boolean operator ${ctx._op.text}`\n );\n };\n\n visitBooleanLiteral: (ctx: BooleanLiteralContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new BooleanLiteralExpr(ctx.BOOLEAN().getText().toUpperCase() === \"TRUE\"),\n ctx\n );\n };\n\n visitLogicalLiteral: (ctx: LogicalLiteralContext) => Expr<any> = (ctx) => {\n // the only literal we recognize is 'UNKNOWN' (true and false are boolean literals)\n return this.associateContextAndReturn(\n new LogicalLiteralExpr(LogicalValue.UNKNOWN_VALUE),\n ctx\n );\n };\n\n visitSENot: (ctx: SENotContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new NotExpr(this.visit(ctx.singleExpr())),\n ctx\n );\n };\n\n /*================================================\n * ArrayExpr\n *===============================================*/\n\n visitArrayExpr: (ctx: ArrayExprContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new ArrayExpr(this.collectArrayElements(ctx.arrayElementList())),\n ctx\n );\n };\n\n collectArrayElements: (ctx: ArrayElementListContext) => Array<Expr<any>> = (\n ctx\n ) => {\n if (!isNullish(ctx)) {\n const first = this.visit(ctx.singleExpr());\n const rest = ctx.arrayElementList();\n if (!isNullish(rest)) {\n const arr = this.collectArrayElements(rest);\n arr.unshift(first);\n return arr;\n }\n return [first];\n }\n return [];\n };\n\n /*================================================\n * FuncExpr\n *===============================================*/\n\n visitFunctionCall: (ctx: FunctionCallContext) => Expr<any> = (ctx) => {\n const args = isNullish(ctx.exprList())\n ? []\n : this.collectFunctionArguments(ctx.exprList());\n return this.associateContextAndReturn(\n new FunctionExpr(ctx.IDENTIFIER().getText(), args),\n ctx\n );\n };\n\n collectFunctionArguments: (\n ctx: ExprListContext,\n resultSoFar?: Array<Expr<any>>\n ) => Array<Expr<any>> = (ctx, resultSoFar?: Array<Expr<any>>) => {\n if (isNullish(resultSoFar)) {\n resultSoFar = [];\n }\n if (!isNullish(ctx)) {\n resultSoFar.push(this.visit(ctx.singleExpr()));\n const rest = ctx.exprList();\n if (!isNullish(rest)) {\n return this.collectFunctionArguments(rest, resultSoFar);\n }\n }\n return resultSoFar;\n };\n\n private static failNode(ctx: ParserRuleContext) {\n throw new Error(`Cannot parse (sub)expression ${ctx.getText()}`);\n }\n\n visitLiteral: (ctx: LiteralContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/compiler/ExprCompiler.ts"],"names":[],"mappings":"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","file":"compiler/ExprCompiler.js","sourcesContent":["import { IfcExpressionVisitor } from \"../gen/parser/IfcExpressionVisitor.js\";\nimport { NumericLiteralExpr } from \"../expression/numeric/NumericLiteralExpr.js\";\nimport {\n ArrayElementListContext,\n ArrayExprContext,\n BooleanLiteralContext,\n ExprContext,\n ExprListContext,\n FunctionCallContext,\n LiteralContext,\n LogicalLiteralContext,\n MethodCallChainEndContext,\n MethodCallChainInnerContext,\n MethodFunctionCallContext,\n MethodPropertyAccessContext,\n NumLiteralContext,\n SEAddSubContext,\n SEArrayExprContext,\n SEBooleanBinaryOpContext,\n SEComparisonContext,\n SEFunctionCallContext,\n SELiteralContext,\n SEMethodCallContext,\n SEMulDivContext,\n SENotContext,\n SEParenthesisContext,\n SEPowerContext,\n SEUnaryMinusContext,\n SEUnaryMultipleMinusContext,\n SEVariableRefContext,\n StringLiteralContext,\n VariableRefContext,\n} from \"../gen/parser/IfcExpressionParser.js\";\nimport { Expr } from \"../expression/Expr.js\";\nimport { isNullish, isPresent } from \"../util/IfcExpressionUtils.js\";\nimport Decimal from \"decimal.js\";\nimport { PlusExpr } from \"../expression/numeric/PlusExpr.js\";\nimport { MinusExpr } from \"../expression/numeric/MinusExpr.js\";\nimport { ParserRuleContext } from \"antlr4ng\";\nimport { MultiplyExpr } from \"../expression/numeric/MultiplyExpr.js\";\nimport { DivideExpr } from \"../expression/numeric/DivideExpr.js\";\nimport { StringLiteralExpr } from \"../expression/string/StringLiteralExpr.js\";\nimport { ArrayExpr } from \"../expression/structure/ArrayExpr.js\";\nimport { FunctionExpr } from \"../expression/function/FunctionExpr.js\";\nimport { PowerExpr } from \"../expression/numeric/PowerExpr.js\";\nimport { UnaryMinusExpr } from \"../expression/numeric/UnaryMinusExpr.js\";\nimport { AndExpr } from \"../expression/boolean/AndExpr.js\";\nimport { BooleanLiteralExpr } from \"../expression/boolean/BooleanLiteralExpr.js\";\nimport { OrExpr } from \"../expression/boolean/OrExpr.js\";\nimport { XorExpr } from \"../expression/boolean/XorExpr.js\";\nimport { SyntaxErrorException } from \"../error/SyntaxErrorException.js\";\nimport { NotExpr } from \"../expression/boolean/NotExpr.js\";\nimport { ParenthesisExpr } from \"../expression/structure/ParenthesisExpr.js\";\nimport { EqualsExpr } from \"../expression/comparison/EqualsExpr.js\";\nimport { NotEqualsExpr } from \"../expression/comparison/NotEqualsExpr.js\";\nimport { TypeManager } from \"./TypeManager.js\";\nimport { StringConcatExpr } from \"../expression/string/StringConcatExpr.js\";\nimport { PlusOrConcatExpr } from \"../expression/poly/PlusOrConcatExpr.js\";\nimport { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { GreaterThan } from \"../expression/comparison/GreaterThan.js\";\nimport { GreaterThanOrEqual } from \"../expression/comparison/GreaterThanOrEqual.js\";\nimport { LessThan } from \"../expression/comparison/LessThan.js\";\nimport { LessThanOrEqual } from \"../expression/comparison/LessThanOrEqual.js\";\nimport { ExprManager } from \"./ExprManager.js\";\nimport { LogicalValue } from \"../value/LogicalValue.js\";\nimport { LogicalLiteralExpr } from \"../expression/boolean/LogicalLiteralExpr.js\";\nimport {\n BuiltinVariableRegistry,\n isBuiltinFunctionDefinition,\n isBuiltinPropertyDefinition,\n} from \"../builtin/BuiltinVariableRegistry.js\";\nimport { ContextObjectType } from \"../type/ContextObjectType.js\";\nimport { BuiltinPropertyAccessExpr } from \"../expression/reference/BuiltinPropertyAccessExpr.js\";\nimport { BuiltinFunctionCallExpr } from \"../expression/reference/BuiltinFunctionCallExpr.js\";\n\nexport class ExprCompiler extends IfcExpressionVisitor<Expr<any>> {\n protected defaultResult(): Expr<any> | null {\n return null;\n }\n private readonly methodCallTargetStack: Array<Expr<any>> = [];\n private readonly typeManager: TypeManager;\n private readonly exprManager: ExprManager;\n private readonly builtinVariableRegistry: BuiltinVariableRegistry;\n\n constructor(\n typeManager: TypeManager,\n builtinVariableRegistry: BuiltinVariableRegistry = BuiltinVariableRegistry.getDefaultRegistry()\n ) {\n super();\n this.typeManager = typeManager;\n this.exprManager = new ExprManager();\n this.builtinVariableRegistry = builtinVariableRegistry;\n }\n\n public getExprManager(): ExprManager {\n return this.exprManager;\n }\n\n visitExpr: (ctx: ExprContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.singleExpr());\n };\n\n private associateContextAndReturn(expr: Expr<any>, ctx: ParserRuleContext) {\n this.exprManager.registerExprWithContext(expr, ctx);\n return expr;\n }\n\n visitVariableRef: (ctx: VariableRefContext) => Expr<any> = (ctx) => {\n const builtin = this.builtinVariableRegistry.getDefinition(\n ctx.IDENTIFIER().getText()\n );\n if (!isNullish(builtin)) {\n return this.associateContextAndReturn(builtin.createReferenceExpr(), ctx);\n }\n throw new Error(`Parsing error: No variable '${ctx.getText()}' found `);\n };\n\n visitSEComparison: (ctx: SEComparisonContext) => Expr<any> = (ctx) => {\n const left = this.visit(ctx.singleExpr(0));\n const right = this.visit(ctx.singleExpr(1));\n switch (ctx.CMP_OP().getText()) {\n case \"==\":\n return this.associateContextAndReturn(new EqualsExpr(left, right), ctx);\n case \"!=\":\n return this.associateContextAndReturn(\n new NotEqualsExpr(left, right),\n ctx\n );\n case \">\":\n return this.associateContextAndReturn(\n new GreaterThan(left, right),\n ctx\n );\n case \">=\":\n return this.associateContextAndReturn(\n new GreaterThanOrEqual(left, right),\n ctx\n );\n case \"<\":\n return this.associateContextAndReturn(new LessThan(left, right), ctx);\n case \"<=\":\n return this.associateContextAndReturn(\n new LessThanOrEqual(left, right),\n ctx\n );\n }\n throw new Error(\n `Parsing error: comparison operator '${ctx\n .CMP_OP()\n .getText()}' not supported`\n );\n };\n\n visitSEMethodCall: (ctx: SEMethodCallContext) => Expr<any> = (ctx) => {\n this.methodCallTargetStack.push(this.visit(ctx.singleExpr()));\n return this.visit(ctx.methodCallChain());\n };\n\n visitSELiteral: (ctx: SELiteralContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.literal());\n };\n\n visitSEVariableRef: (ctx: SEVariableRefContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.variableRef());\n };\n visitSEArrayExpr: (ctx: SEArrayExprContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.arrayExpr());\n };\n visitSEFunctionCall: (ctx: SEFunctionCallContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.functionCall());\n };\n visitSEParenthesis: (ctx: SEParenthesisContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new ParenthesisExpr(this.visit(ctx._sub)),\n ctx\n );\n };\n\n visitMethodCallChainInner: (ctx: MethodCallChainInnerContext) => Expr<any> = (\n ctx\n ) => {\n const accessExpr = this.visit(ctx._target);\n this.methodCallTargetStack.push(accessExpr);\n return this.visit(ctx._call);\n };\n\n visitMethodCallChainEnd: (ctx: MethodCallChainEndContext) => Expr<any> = (\n ctx\n ) => {\n return this.visit(ctx._call);\n };\n\n visitMethodFunctionCall: (ctx: MethodFunctionCallContext) => Expr<any> = (\n ctx\n ) => {\n const targetExpr = this.methodCallTargetStack.pop();\n const functionName = ctx.functionCall().IDENTIFIER().getText();\n const args = isNullish(ctx.functionCall().exprList())\n ? []\n : this.collectFunctionArguments(ctx.functionCall().exprList());\n const targetType = targetExpr.getType();\n if (targetType instanceof ContextObjectType) {\n const member = targetType.getMemberDefinition(functionName);\n if (isBuiltinFunctionDefinition(member)) {\n return this.associateContextAndReturn(\n new BuiltinFunctionCallExpr(\n targetExpr,\n member.name,\n args,\n member.returnType,\n targetType.getName()\n ),\n ctx\n );\n }\n }\n return this.associateContextAndReturn(\n new FunctionExpr(functionName, [targetExpr, ...args]),\n ctx.functionCall()\n );\n };\n\n visitMethodPropertyAccess: (ctx: MethodPropertyAccessContext) => Expr<any> = (\n ctx\n ) => {\n const targetExpr = this.methodCallTargetStack.pop();\n const targetType = targetExpr.getType();\n if (targetType instanceof ContextObjectType) {\n const member = targetType.getMemberDefinition(ctx.IDENTIFIER().getText());\n if (isBuiltinPropertyDefinition(member)) {\n return this.associateContextAndReturn(\n new BuiltinPropertyAccessExpr(\n targetExpr,\n member.name,\n member.valueType,\n targetType.getName()\n ),\n ctx\n );\n }\n }\n throw new Error(\n `Parsing error: No property '${ctx.getText()}' found for type '${targetType.getName()}'`\n );\n };\n\n visitSEAddSub: (ctx: SEAddSubContext) => Expr<any> = (ctx) => {\n this.typeManager.requireTypesOverlap(ctx._left, ctx._right);\n switch (ctx._op.text) {\n case \"+\":\n return this.makePlusExpr(ctx);\n case \"-\":\n return this.associateContextAndReturn(\n new MinusExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n default:\n ExprCompiler.failNode(ctx);\n }\n };\n\n private makePlusExpr(ctx: SEAddSubContext) {\n if (this.typeManager.isNumeric(ctx._left, ctx._right)) {\n return this.associateContextAndReturn(\n new PlusExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n }\n if (this.typeManager.isString(ctx._left, ctx._right)) {\n return this.associateContextAndReturn(\n new StringConcatExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n }\n if (\n this.typeManager.overlapsWithString(ctx._left, ctx._right) ||\n this.typeManager.overlapsWithNumeric(ctx._left, ctx._right)\n ) {\n return this.associateContextAndReturn(\n new PlusOrConcatExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n }\n throw new ExpressionTypeError(\n \"Operator '+' requires the operands to be either both of type numeric or both of type string, but they are not.\",\n ctx\n );\n }\n\n visitSEMulDiv: (ctx: SEMulDivContext) => Expr<any> = (ctx) => {\n switch (ctx._op.text) {\n case \"*\":\n return this.associateContextAndReturn(\n new MultiplyExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n ),\n ctx\n );\n case \"/\":\n return this.associateContextAndReturn(\n new DivideExpr(\n this.visit(ctx.getChild(0)),\n this.visit(ctx.getChild(2))\n ),\n ctx\n );\n default:\n ExprCompiler.failNode(ctx);\n }\n };\n\n visitStringLiteral: (ctx: StringLiteralContext) => Expr<any> = (ctx) => {\n const quotedString = ctx.QUOTED_STRING().getText();\n const text = quotedString.substring(1, quotedString.length - 1);\n return this.associateContextAndReturn(new StringLiteralExpr(text), ctx);\n };\n\n visitNumLiteral: (ctx: NumLiteralContext) => Expr<any> = (ctx) => {\n let val = ctx.INT();\n if (isPresent(val)) {\n return this.associateContextAndReturn(\n new NumericLiteralExpr(new Decimal(ctx.getText())),\n ctx\n );\n }\n val = ctx.FLOAT();\n if (isPresent(val)) {\n return this.associateContextAndReturn(\n new NumericLiteralExpr(new Decimal(ctx.getText())),\n ctx\n );\n }\n ExprCompiler.failNode(ctx);\n };\n\n visitSEUnaryMultipleMinus: (ctx: SEUnaryMultipleMinusContext) => Expr<any> = (\n ctx\n ) => {\n return this.visit(ctx.singleExpr());\n };\n visitSEPower: (ctx: SEPowerContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new PowerExpr(this.visit(ctx._left), this.visit(ctx._right)),\n ctx\n );\n };\n visitSEUnaryMinus: (ctx: SEUnaryMinusContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new UnaryMinusExpr(this.visit(ctx.singleExpr())),\n ctx\n );\n };\n\n visitSEBooleanBinaryOp: (ctx: SEBooleanBinaryOpContext) => Expr<any> = (\n ctx\n ) => {\n switch (ctx._op.text) {\n case \"&&\":\n return this.associateContextAndReturn(\n new AndExpr(\n this.visit(ctx.singleExpr(0)),\n this.visit(ctx.singleExpr(1))\n ),\n ctx\n );\n case \"||\":\n return this.associateContextAndReturn(\n new OrExpr(\n this.visit(ctx.singleExpr(0)),\n this.visit(ctx.singleExpr(1))\n ),\n ctx\n );\n case \"><\":\n return this.associateContextAndReturn(\n new XorExpr(\n this.visit(ctx.singleExpr(0)),\n this.visit(ctx.singleExpr(1))\n ),\n ctx\n );\n }\n throw new SyntaxErrorException(\n ctx._op.text,\n ctx._op.line,\n ctx._op.column,\n `Unknown boolean operator ${ctx._op.text}`\n );\n };\n\n visitBooleanLiteral: (ctx: BooleanLiteralContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new BooleanLiteralExpr(ctx.BOOLEAN().getText().toUpperCase() === \"TRUE\"),\n ctx\n );\n };\n\n visitLogicalLiteral: (ctx: LogicalLiteralContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new LogicalLiteralExpr(LogicalValue.UNKNOWN_VALUE),\n ctx\n );\n };\n\n visitSENot: (ctx: SENotContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new NotExpr(this.visit(ctx.singleExpr())),\n ctx\n );\n };\n\n visitArrayExpr: (ctx: ArrayExprContext) => Expr<any> = (ctx) => {\n return this.associateContextAndReturn(\n new ArrayExpr(this.collectArrayElements(ctx.arrayElementList())),\n ctx\n );\n };\n\n collectArrayElements: (ctx: ArrayElementListContext) => Array<Expr<any>> = (\n ctx\n ) => {\n if (!isNullish(ctx)) {\n const first = this.visit(ctx.singleExpr());\n const rest = ctx.arrayElementList();\n if (!isNullish(rest)) {\n const arr = this.collectArrayElements(rest);\n arr.unshift(first);\n return arr;\n }\n return [first];\n }\n return [];\n };\n\n visitFunctionCall: (ctx: FunctionCallContext) => Expr<any> = (ctx) => {\n const args = isNullish(ctx.exprList())\n ? []\n : this.collectFunctionArguments(ctx.exprList());\n return this.associateContextAndReturn(\n new FunctionExpr(ctx.IDENTIFIER().getText(), args),\n ctx\n );\n };\n\n collectFunctionArguments: (\n ctx: ExprListContext,\n resultSoFar?: Array<Expr<any>>\n ) => Array<Expr<any>> = (ctx, resultSoFar?: Array<Expr<any>>) => {\n if (isNullish(resultSoFar)) {\n resultSoFar = [];\n }\n if (!isNullish(ctx)) {\n resultSoFar.push(this.visit(ctx.singleExpr()));\n const rest = ctx.exprList();\n if (!isNullish(rest)) {\n return this.collectFunctionArguments(rest, resultSoFar);\n }\n }\n return resultSoFar;\n };\n\n private static failNode(ctx: ParserRuleContext): never {\n throw new Error(`Cannot parse (sub)expression ${ctx.getText()}`);\n }\n\n visitLiteral: (ctx: LiteralContext) => Expr<any> = (ctx) => {\n return this.visit(ctx.getChild(0));\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/compiler/ExprManager.ts"],"names":[],"mappings":";;;AAEA,4EAAsE;AACtE,yEAA0D;AAE1D,MAAa,WAAW;IAGtB;QAFiB,kBAAa,GAAG,IAAI,GAAG,EAAgC,CAAC;IAE1D,CAAC;IAET,uBAAuB,CAAC,IAAe,EAAE,GAAG;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAA,iCAAS,EAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,GAAG,EAAE;YAC5C,MAAM,IAAI,4CAAmB,CAC3B,wBAAwB,IAAI,CAAC,OAAO,cAAc,GAAG,CAAC,KAAK,CAAC,IAAI,YAAY,GAAG,CAAC,KAAK,CAAC,KAAK,2DAA2D,QAAQ,CAAC,WAAW,CAAC,IAAI,2CAA2C,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAC1R,GAAG,CACJ,CAAC;SACH;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,IAAe;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CACF;AAnBD,kCAmBC","file":"compiler/ExprManager.js","sourcesContent":["import { ParserRuleContext } from \"antlr4\";\nimport { Expr } from \"../expression/Expr.js\";\nimport { ValidationException } from \"../error/ValidationException.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\n\nexport class ExprManager {\n private readonly contextToExpr = new Map<Expr<any>, ParserRuleContext>();\n\n constructor() {}\n\n public registerExprWithContext(expr: Expr<any>, ctx) {\n const otherCtx = this.contextToExpr.get(expr);\n if (!isNullish(otherCtx) && otherCtx !== ctx) {\n throw new ValidationException(\n `Expression (of kind '${expr.getKind}') at line ${ctx.start.line}, column ${ctx.start.start} is already associated with a ParserRuleContext of type ${otherCtx.constructor.name}' cannot associate it with another one (${ctx.constructor.name} at ${ctx.start.line}:${ctx.start.start}')`,\n ctx\n );\n }\n this.contextToExpr.set(expr, ctx);\n }\n\n getContext(expr: Expr<any>) {\n return this.contextToExpr.get(expr);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/compiler/ExprManager.ts"],"names":[],"mappings":";;;AAEA,4EAAsE;AACtE,yEAA0D;AAE1D,MAAa,WAAW;IAGtB;QAFiB,kBAAa,GAAG,IAAI,GAAG,EAAgC,CAAC;IAE1D,CAAC;IAET,uBAAuB,CAAC,IAAe,EAAE,GAAG;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAA,iCAAS,EAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,GAAG,EAAE;YAC5C,MAAM,IAAI,4CAAmB,CAC3B,wBAAwB,IAAI,CAAC,OAAO,cAAc,GAAG,CAAC,KAAK,CAAC,IAAI,YAAY,GAAG,CAAC,KAAK,CAAC,KAAK,2DAA2D,QAAQ,CAAC,WAAW,CAAC,IAAI,2CAA2C,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAC1R,GAAG,CACJ,CAAC;SACH;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,IAAe;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CACF;AAnBD,kCAmBC","file":"compiler/ExprManager.js","sourcesContent":["import { ParserRuleContext } from \"antlr4ng\";\nimport { Expr } from \"../expression/Expr.js\";\nimport { ValidationException } from \"../error/ValidationException.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\n\nexport class ExprManager {\n private readonly contextToExpr = new Map<Expr<any>, ParserRuleContext>();\n\n constructor() {}\n\n public registerExprWithContext(expr: Expr<any>, ctx) {\n const otherCtx = this.contextToExpr.get(expr);\n if (!isNullish(otherCtx) && otherCtx !== ctx) {\n throw new ValidationException(\n `Expression (of kind '${expr.getKind}') at line ${ctx.start.line}, column ${ctx.start.start} is already associated with a ParserRuleContext of type ${otherCtx.constructor.name}' cannot associate it with another one (${ctx.constructor.name} at ${ctx.start.line}:${ctx.start.start}')`,\n ctx\n );\n }\n this.contextToExpr.set(expr, ctx);\n }\n\n getContext(expr: Expr<any>) {\n return this.contextToExpr.get(expr);\n }\n}\n"]}
@@ -1,10 +1,7 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.IfcExpressionValidationListener = void 0;
7
- const IfcExpressionListener_js_1 = __importDefault(require("../gen/parser/IfcExpressionListener.js"));
4
+ const IfcExpressionListener_js_1 = require("../gen/parser/IfcExpressionListener.js");
8
5
  const IfcExpressionParser_js_1 = require("../gen/parser/IfcExpressionParser.js");
9
6
  const IfcExpressionFunctions_js_1 = require("../expression/function/IfcExpressionFunctions.js");
10
7
  const NoSuchFunctionException_js_1 = require("../error/NoSuchFunctionException.js");
@@ -14,13 +11,27 @@ const TypeManager_js_1 = require("./TypeManager.js");
14
11
  const ExpressionTypeError_js_1 = require("../error/ExpressionTypeError.js");
15
12
  const IfcExpressionUtils_js_1 = require("../util/IfcExpressionUtils.js");
16
13
  const ValidationException_js_1 = require("../error/ValidationException.js");
17
- class IfcExpressionValidationListener extends IfcExpressionListener_js_1.default {
18
- constructor() {
14
+ const BuiltinVariableRegistry_js_1 = require("../builtin/BuiltinVariableRegistry.js");
15
+ const ContextObjectType_js_1 = require("../type/ContextObjectType.js");
16
+ const NoSuchMemberException_js_1 = require("../error/NoSuchMemberException.js");
17
+ const NoSuchMethodException_js_1 = require("../error/NoSuchMethodException.js");
18
+ const WrongFunctionArgumentTypeException_js_1 = require("../error/WrongFunctionArgumentTypeException.js");
19
+ const MissingFunctionArgumentException_js_1 = require("../error/MissingFunctionArgumentException.js");
20
+ const SpuriousFunctionArgumentException_js_1 = require("../error/SpuriousFunctionArgumentException.js");
21
+ class IfcExpressionValidationListener extends IfcExpressionListener_js_1.IfcExpressionListener {
22
+ constructor(builtinVariableRegistry = BuiltinVariableRegistry_js_1.BuiltinVariableRegistry.getDefaultRegistry()) {
19
23
  super();
20
24
  this.methodCallTargetStack = [];
21
25
  this.enterFunctionCall = (ctx) => {
22
26
  if (!IfcExpressionFunctions_js_1.IfcExpressionFunctions.isBuiltinFunction(ctx.IDENTIFIER().getText())) {
23
- throw new NoSuchFunctionException_js_1.NoSuchFunctionException(ctx.IDENTIFIER().getText(), ctx);
27
+ const parent = ctx.parent;
28
+ const grandParent = parent?.parent;
29
+ const isMethodAccessor = parent instanceof IfcExpressionParser_js_1.MethodFunctionCallContext &&
30
+ (grandParent instanceof IfcExpressionParser_js_1.MethodCallChainInnerContext ||
31
+ grandParent instanceof IfcExpressionParser_js_1.MethodCallChainEndContext);
32
+ if (!isMethodAccessor) {
33
+ throw new NoSuchFunctionException_js_1.NoSuchFunctionException(ctx.IDENTIFIER().getText(), ctx);
34
+ }
24
35
  }
25
36
  };
26
37
  this.enterSEUnaryMultipleMinus = (ctx) => {
@@ -80,15 +91,12 @@ class IfcExpressionValidationListener extends IfcExpressionListener_js_1.default
80
91
  this.typeManager.setType(ctx, Types_js_1.Types.boolean());
81
92
  };
82
93
  this.exitSEVariableRef = (ctx) => {
83
- switch (ctx._sub.IDENTIFIER().getText()) {
84
- case "property":
85
- this.typeManager.setType(ctx, Types_js_1.Type.IFC_PROPERTY_REF);
86
- return;
87
- case "element":
88
- this.typeManager.setType(ctx, Types_js_1.Type.IFC_ELEMENT_REF);
89
- return;
94
+ const builtin = this.builtinVariableRegistry.getDefinition(ctx._sub.IDENTIFIER().getText());
95
+ if (builtin) {
96
+ this.typeManager.setType(ctx, builtin.type);
97
+ return;
90
98
  }
91
- throw new ValidationException_js_1.ValidationException(`Encountered Variable ref that was neither $property nor $element`, ctx);
99
+ throw new ValidationException_js_1.ValidationException(`Encountered Variable ref that was neither a built-in variable nor a configured client builtin`, ctx);
92
100
  };
93
101
  this.exitSEUnaryMinus = (ctx) => {
94
102
  this.typeManager.requireNumeric(ctx._sub);
@@ -122,16 +130,45 @@ class IfcExpressionValidationListener extends IfcExpressionListener_js_1.default
122
130
  this.pushMethodCallTarget(ctx);
123
131
  };
124
132
  this.exitMethodCallChainEnd = (ctx) => {
133
+ this.typeManager.copyTypeFrom(ctx, ctx._call);
134
+ };
135
+ this.exitMethodFunctionCall = (ctx) => {
125
136
  this.typeManager.copyTypeFrom(ctx, ctx.functionCall());
126
137
  };
138
+ this.exitMethodPropertyAccess = (ctx) => {
139
+ const [_, targetType] = this.popMethodCallTarget(ctx);
140
+ if (!(targetType instanceof ContextObjectType_js_1.ContextObjectType)) {
141
+ throw new NoSuchMemberException_js_1.NoSuchMemberException(ctx.IDENTIFIER().getText(), targetType.getName(), ctx);
142
+ }
143
+ const member = targetType.getMemberDefinition(ctx.IDENTIFIER().getText());
144
+ if (!(0, BuiltinVariableRegistry_js_1.isBuiltinPropertyDefinition)(member)) {
145
+ throw new NoSuchMemberException_js_1.NoSuchMemberException(ctx.IDENTIFIER().getText(), targetType.getName(), ctx);
146
+ }
147
+ this.typeManager.setType(ctx, member.valueType);
148
+ };
127
149
  this.exitFunctionCall = (ctx) => {
128
- const func = IfcExpressionFunctions_js_1.IfcExpressionFunctions.getFunction(ctx.IDENTIFIER().getText());
129
150
  const argumentTypes = this.collectArgumentTypes(ctx.exprList());
130
- const parent = ctx.parentCtx;
131
- if (parent instanceof IfcExpressionParser_js_1.MethodCallChainInnerContext ||
132
- parent instanceof IfcExpressionParser_js_1.MethodCallChainEndContext ||
133
- parent instanceof IfcExpressionParser_js_1.SEMethodCallContext) {
134
- argumentTypes.unshift(this.methodCallTargetStack.pop());
151
+ const parent = ctx.parent;
152
+ const grandParent = parent?.parent;
153
+ const isMethodAccessor = parent instanceof IfcExpressionParser_js_1.MethodFunctionCallContext &&
154
+ (grandParent instanceof IfcExpressionParser_js_1.MethodCallChainInnerContext ||
155
+ grandParent instanceof IfcExpressionParser_js_1.MethodCallChainEndContext);
156
+ if (isMethodAccessor) {
157
+ const [targetCtx, targetType] = this.popMethodCallTarget(ctx);
158
+ if (targetType instanceof ContextObjectType_js_1.ContextObjectType) {
159
+ const member = targetType.getMemberDefinition(ctx.IDENTIFIER().getText());
160
+ if (!(0, BuiltinVariableRegistry_js_1.isBuiltinFunctionDefinition)(member)) {
161
+ throw new NoSuchMethodException_js_1.NoSuchMethodException(ctx.IDENTIFIER().getText(), targetType.getName(), ctx);
162
+ }
163
+ this.checkBuiltinFunctionArguments(ctx.IDENTIFIER().getText(), member.argumentTypes, argumentTypes, ctx);
164
+ this.typeManager.setType(ctx, member.returnType);
165
+ return;
166
+ }
167
+ argumentTypes.unshift([targetCtx, targetType]);
168
+ }
169
+ const func = IfcExpressionFunctions_js_1.IfcExpressionFunctions.getFunction(ctx.IDENTIFIER().getText());
170
+ if ((0, IfcExpressionUtils_js_1.isNullish)(func)) {
171
+ throw new NoSuchFunctionException_js_1.NoSuchFunctionException(ctx.IDENTIFIER().getText(), ctx);
135
172
  }
136
173
  const returnType = func.checkArgumentsAndGetReturnType(argumentTypes, ctx);
137
174
  this.typeManager.setType(ctx, returnType);
@@ -169,22 +206,45 @@ class IfcExpressionValidationListener extends IfcExpressionListener_js_1.default
169
206
  return resultSoFar;
170
207
  };
171
208
  this.exitVariableRef = (ctx) => {
172
- this.typeManager.setType(ctx, Types_js_1.Types.or(Types_js_1.Type.IFC_PROPERTY_REF, Types_js_1.Type.IFC_ELEMENT_REF));
209
+ const builtinTypes = [Types_js_1.Type.IFC_PROPERTY_REF, Types_js_1.Type.IFC_ELEMENT_REF];
210
+ const otherBuiltinDefinitions = ["property", "element"]
211
+ .map((name) => this.builtinVariableRegistry.getDefinition(name)?.type)
212
+ .filter((type) => !(0, IfcExpressionUtils_js_1.isNullish)(type));
213
+ this.typeManager.setType(ctx, Types_js_1.Types.or(...builtinTypes, ...otherBuiltinDefinitions));
173
214
  };
174
215
  this.typeManager = new TypeManager_js_1.TypeManager();
216
+ this.builtinVariableRegistry = builtinVariableRegistry;
175
217
  }
176
218
  getTypeManager() {
177
219
  return this.typeManager;
178
220
  }
179
221
  pushMethodCallTarget(ctx) {
180
- if (ctx.parentCtx["_target"]) {
181
- const targetType = this.typeManager.getType(ctx.parentCtx["_target"]);
182
- this.methodCallTargetStack.push([ctx, targetType]);
222
+ if (ctx.parent["_target"]) {
223
+ const targetType = this.typeManager.getType(ctx.parent["_target"]);
224
+ this.methodCallTargetStack.push([ctx.parent["_target"], targetType]);
183
225
  }
184
226
  else {
185
227
  throw new ValidationException_js_1.ValidationException("Did not find expected context attribute 'target' in parent rule context", ctx);
186
228
  }
187
229
  }
230
+ checkBuiltinFunctionArguments(functionName, expectedArgumentTypes, providedArgumentTypes, ctx) {
231
+ if (providedArgumentTypes.length > expectedArgumentTypes.length) {
232
+ throw new SpuriousFunctionArgumentException_js_1.SpuriousFunctionArgumentException(functionName, "[unexpected argument]", expectedArgumentTypes.length, ctx, `Function expects (at most) ${expectedArgumentTypes.length} arguments`);
233
+ }
234
+ for (let i = 0; i < expectedArgumentTypes.length; i++) {
235
+ if (providedArgumentTypes.length <= i) {
236
+ throw new MissingFunctionArgumentException_js_1.MissingFunctionArgumentException(functionName, `[arg${i}]`, i, ctx);
237
+ }
238
+ Types_js_1.Types.requireWeakIsAssignableFrom(expectedArgumentTypes[i], providedArgumentTypes[i][1], () => new WrongFunctionArgumentTypeException_js_1.WrongFunctionArgumentTypeException(functionName, `[arg${i}]`, expectedArgumentTypes[i], providedArgumentTypes[i][1], i, providedArgumentTypes[i][0]));
239
+ }
240
+ }
241
+ popMethodCallTarget(ctx) {
242
+ const target = this.methodCallTargetStack.pop();
243
+ if ((0, IfcExpressionUtils_js_1.isNullish)(target)) {
244
+ throw new ValidationException_js_1.ValidationException("Did not find expected method call target on stack", ctx);
245
+ }
246
+ return target;
247
+ }
188
248
  }
189
249
  exports.IfcExpressionValidationListener = IfcExpressionValidationListener;
190
250
  //# sourceMappingURL=IfcExpressionValidationListener.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/compiler/IfcExpressionValidationListener.ts"],"names":[],"mappings":"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","file":"compiler/IfcExpressionValidationListener.js","sourcesContent":["import IfcExpressionListener from \"../gen/parser/IfcExpressionListener.js\";\nimport {\n ArrayElementListContext,\n ArrayExprContext,\n BooleanLiteralContext,\n ExprContext,\n ExprListContext,\n FunctionCallContext,\n LiteralContext,\n LogicalLiteralContext,\n MethodCallChainEndContext,\n MethodCallChainInnerContext,\n NumLiteralContext,\n SEAddSubContext,\n SEArrayExprContext,\n SEBooleanBinaryOpContext,\n SEComparisonContext,\n SEFunctionCallContext,\n SELiteralContext,\n SEMethodCallContext,\n SEMulDivContext,\n SENotContext,\n SEParenthesisContext,\n SEPowerContext,\n SEUnaryMinusContext,\n SEUnaryMultipleMinusContext,\n SEVariableRefContext,\n StringLiteralContext,\n VariableRefContext,\n} from \"../gen/parser/IfcExpressionParser.js\";\nimport { IfcExpressionFunctions } from \"../expression/function/IfcExpressionFunctions.js\";\nimport { NoSuchFunctionException } from \"../error/NoSuchFunctionException.js\";\nimport { InvalidSyntaxException } from \"../error/InvalidSyntaxException.js\";\nimport { Type, Types } from \"../type/Types.js\";\nimport { ParserRuleContext } from \"antlr4\";\nimport { TypeManager } from \"./TypeManager.js\";\nimport { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { ValidationException } from \"../error/ValidationException.js\";\nimport { ExprType } from \"../type/ExprType.js\";\n\nexport class IfcExpressionValidationListener extends IfcExpressionListener {\n private readonly typeManager: TypeManager;\n private methodCallTargetStack = [];\n constructor() {\n super();\n this.typeManager = new TypeManager();\n }\n\n public getTypeManager(): TypeManager {\n return this.typeManager;\n }\n\n enterFunctionCall: (ctx: FunctionCallContext) => void = (ctx) => {\n if (!IfcExpressionFunctions.isBuiltinFunction(ctx.IDENTIFIER().getText())) {\n throw new NoSuchFunctionException(ctx.IDENTIFIER().getText(), ctx);\n }\n };\n\n enterSEUnaryMultipleMinus: (ctx: SEUnaryMultipleMinusContext) => void = (\n ctx\n ) => {\n throw new InvalidSyntaxException(\"--\", ctx);\n };\n\n exitSEBooleanBinaryOp: (ctx: SEBooleanBinaryOpContext) => void = (ctx) => {\n this.typeManager.requireLogicalOrBoolean(ctx._left);\n this.typeManager.requireLogicalOrBoolean(ctx._right);\n this.typeManager.setType(ctx, Types.boolean());\n };\n\n exitSEComparison: (ctx: SEComparisonContext) => void = (ctx) => {\n this.typeManager.requireTypesOverlap(ctx._left, ctx._right);\n this.typeManager.setType(ctx, Types.boolean());\n };\n\n exitSEParenthesis: (ctx: SEParenthesisContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx._sub);\n };\n\n exitSELiteral: (ctx: SELiteralContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx._sub);\n };\n exitLiteral: (ctx: LiteralContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx.getChild(0) as ParserRuleContext);\n };\n exitNumLiteral: (ctx: NumLiteralContext) => void = (ctx) => {\n this.typeManager.setType(ctx, Types.numeric());\n };\n exitStringLiteral: (ctx: StringLiteralContext) => void = (ctx) => {\n this.typeManager.setType(ctx, Types.string());\n };\n\n exitBooleanLiteral: (ctx: BooleanLiteralContext) => void = (ctx) => {\n this.typeManager.setType(ctx, Types.boolean());\n };\n\n exitLogicalLiteral: (ctx: LogicalLiteralContext) => void = (ctx) => {\n this.typeManager.setType(ctx, Types.logical());\n };\n\n exitExpr: (ctx: ExprContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx.singleExpr());\n };\n\n exitSEMulDiv: (ctx: SEMulDivContext) => void = (ctx) => {\n this.typeManager.requireNumeric(ctx._left);\n this.typeManager.requireNumeric(ctx._right);\n this.typeManager.setType(ctx, Types.numeric());\n };\n\n exitSEPower: (ctx: SEPowerContext) => void = (ctx) => {\n this.typeManager.requireNumeric(ctx._left);\n this.typeManager.requireNumeric(ctx._right);\n this.typeManager.setType(ctx, Types.numeric());\n };\n exitSEFunctionCall: (ctx: SEFunctionCallContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx._sub);\n };\n exitSEArrayExpr: (ctx: SEArrayExprContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx._sub);\n };\n\n exitSENot: (ctx: SENotContext) => void = (ctx) => {\n this.typeManager.requireLogicalOrBoolean(ctx._sub);\n this.typeManager.setType(ctx, Types.boolean());\n };\n\n exitSEVariableRef: (ctx: SEVariableRefContext) => void = (ctx) => {\n switch (ctx._sub.IDENTIFIER().getText()) {\n case \"property\":\n this.typeManager.setType(ctx, Type.IFC_PROPERTY_REF);\n return;\n case \"element\":\n this.typeManager.setType(ctx, Type.IFC_ELEMENT_REF);\n return;\n }\n throw new ValidationException(\n `Encountered Variable ref that was neither $property nor $element`,\n ctx\n );\n };\n\n exitSEUnaryMinus: (ctx: SEUnaryMinusContext) => void = (ctx) => {\n this.typeManager.requireNumeric(ctx._sub);\n this.typeManager.setType(ctx, Types.numeric());\n };\n exitSEAddSub: (ctx: SEAddSubContext) => void = (ctx) => {\n if (this.typeManager.overlapsWithString(ctx._left, ctx._right)) {\n this.typeManager.setType(ctx, Types.string());\n } else if (this.typeManager.overlapsWithNumeric(ctx._left, ctx._right)) {\n this.typeManager.setType(ctx, Types.numeric());\n } else {\n throw new ExpressionTypeError(\n `Operator '+' does not allow provided operand types ${this.typeManager\n .getType(ctx._left)\n .getName()}(left operand) and ${this.typeManager\n .getType(ctx._right)\n .getName()}(right operand). Operands must be both string or both numeric.`,\n ctx\n );\n }\n };\n\n exitSEMethodCall: (ctx: SEMethodCallContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx._call);\n };\n\n enterMethodCallChainInner: (ctx: MethodCallChainInnerContext) => void = (\n ctx\n ) => {\n this.pushMethodCallTarget(ctx);\n };\n exitMethodCallChainInner: (ctx: MethodCallChainInnerContext) => void = (\n ctx\n ) => {\n this.typeManager.copyTypeFrom(ctx, ctx._call);\n };\n\n enterMethodCallChainEnd: (ctx: MethodCallChainEndContext) => void = (ctx) => {\n this.pushMethodCallTarget(ctx);\n };\n\n private pushMethodCallTarget(ctx: ParserRuleContext) {\n if (ctx.parentCtx[\"_target\"]) {\n const targetType = this.typeManager.getType(ctx.parentCtx[\"_target\"]);\n this.methodCallTargetStack.push([ctx, targetType]);\n } else {\n throw new ValidationException(\n \"Did not find expected context attribute 'target' in parent rule context\",\n ctx\n );\n }\n }\n\n exitMethodCallChainEnd: (ctx: MethodCallChainEndContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx.functionCall());\n };\n\n exitFunctionCall: (ctx: FunctionCallContext) => void = (ctx) => {\n const func = IfcExpressionFunctions.getFunction(ctx.IDENTIFIER().getText());\n const argumentTypes = this.collectArgumentTypes(ctx.exprList());\n const parent = ctx.parentCtx;\n if (\n parent instanceof MethodCallChainInnerContext ||\n parent instanceof MethodCallChainEndContext ||\n parent instanceof SEMethodCallContext\n ) {\n argumentTypes.unshift(this.methodCallTargetStack.pop());\n }\n const returnType = func.checkArgumentsAndGetReturnType(argumentTypes, ctx);\n this.typeManager.setType(ctx, returnType);\n };\n\n private collectArgumentTypes: (\n ctx: ExprListContext,\n resultSoFar?: Array<[ParserRuleContext, ExprType]>\n ) => Array<[ParserRuleContext, ExprType]> = (\n ctx,\n resultSoFar?: Array<[ParserRuleContext, ExprType]>\n ) => {\n if (isNullish(resultSoFar)) {\n resultSoFar = [];\n }\n if (!isNullish(ctx)) {\n resultSoFar.push([\n ctx.singleExpr(),\n this.typeManager.getType(ctx.singleExpr()),\n ]);\n const rest = ctx.exprList();\n if (!isNullish(rest)) {\n return this.collectArgumentTypes(rest, resultSoFar);\n }\n }\n return resultSoFar;\n };\n\n exitExprList: (ctx: ExprListContext) => void;\n\n exitArrayExpr: (ctx: ArrayExprContext) => void = (ctx) => {\n this.typeManager.setType(\n ctx,\n Types.tuple(...this.collectArrayElementTypes(ctx.arrayElementList()))\n );\n };\n\n private collectArrayElementTypes: (\n ctx: ArrayElementListContext,\n resultSoFar?: Array<ExprType>\n ) => Array<ExprType> = (ctx, resultSoFar?: Array<ExprType>) => {\n if (isNullish(resultSoFar)) {\n resultSoFar = [];\n }\n if (!isNullish(ctx)) {\n resultSoFar.push(this.typeManager.getType(ctx.singleExpr()));\n const rest = ctx.arrayElementList();\n if (!isNullish(rest)) {\n return this.collectArrayElementTypes(rest, resultSoFar);\n }\n }\n return resultSoFar;\n };\n\n exitArrayElementList: (ctx: ArrayElementListContext) => void;\n exitVariableRef: (ctx: VariableRefContext) => void = (ctx) => {\n this.typeManager.setType(\n ctx,\n Types.or(Type.IFC_PROPERTY_REF, Type.IFC_ELEMENT_REF)\n );\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/compiler/IfcExpressionValidationListener.ts"],"names":[],"mappings":"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","file":"compiler/IfcExpressionValidationListener.js","sourcesContent":["import { IfcExpressionListener } from \"../gen/parser/IfcExpressionListener.js\";\nimport {\n ArrayElementListContext,\n ArrayExprContext,\n BooleanLiteralContext,\n ExprContext,\n ExprListContext,\n FunctionCallContext,\n LiteralContext,\n LogicalLiteralContext,\n MethodCallChainEndContext,\n MethodCallChainInnerContext,\n MethodFunctionCallContext,\n MethodPropertyAccessContext,\n NumLiteralContext,\n SEAddSubContext,\n SEArrayExprContext,\n SEBooleanBinaryOpContext,\n SEComparisonContext,\n SEFunctionCallContext,\n SELiteralContext,\n SEMethodCallContext,\n SEMulDivContext,\n SENotContext,\n SEParenthesisContext,\n SEPowerContext,\n SEUnaryMinusContext,\n SEUnaryMultipleMinusContext,\n SEVariableRefContext,\n StringLiteralContext,\n VariableRefContext,\n} from \"../gen/parser/IfcExpressionParser.js\";\nimport { IfcExpressionFunctions } from \"../expression/function/IfcExpressionFunctions.js\";\nimport { NoSuchFunctionException } from \"../error/NoSuchFunctionException.js\";\nimport { InvalidSyntaxException } from \"../error/InvalidSyntaxException.js\";\nimport { Type, Types } from \"../type/Types.js\";\nimport { ParserRuleContext } from \"antlr4ng\";\nimport { TypeManager } from \"./TypeManager.js\";\nimport { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { ValidationException } from \"../error/ValidationException.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport {\n BuiltinVariableRegistry,\n isBuiltinFunctionDefinition,\n isBuiltinPropertyDefinition,\n} from \"../builtin/BuiltinVariableRegistry.js\";\nimport { ContextObjectType } from \"../type/ContextObjectType.js\";\nimport { NoSuchMemberException } from \"../error/NoSuchMemberException.js\";\nimport { NoSuchMethodException } from \"../error/NoSuchMethodException.js\";\nimport { WrongFunctionArgumentTypeException } from \"../error/WrongFunctionArgumentTypeException.js\";\nimport { MissingFunctionArgumentException } from \"../error/MissingFunctionArgumentException.js\";\nimport { SpuriousFunctionArgumentException } from \"../error/SpuriousFunctionArgumentException.js\";\n\nexport class IfcExpressionValidationListener extends IfcExpressionListener {\n private readonly typeManager: TypeManager;\n private methodCallTargetStack: Array<[ParserRuleContext, ExprType]> = [];\n private readonly builtinVariableRegistry: BuiltinVariableRegistry;\n\n constructor(\n builtinVariableRegistry: BuiltinVariableRegistry = BuiltinVariableRegistry.getDefaultRegistry()\n ) {\n super();\n this.typeManager = new TypeManager();\n this.builtinVariableRegistry = builtinVariableRegistry;\n }\n\n public getTypeManager(): TypeManager {\n return this.typeManager;\n }\n\n enterFunctionCall: (ctx: FunctionCallContext) => void = (ctx) => {\n if (!IfcExpressionFunctions.isBuiltinFunction(ctx.IDENTIFIER().getText())) {\n const parent = ctx.parent;\n const grandParent = parent?.parent;\n const isMethodAccessor =\n parent instanceof MethodFunctionCallContext &&\n (grandParent instanceof MethodCallChainInnerContext ||\n grandParent instanceof MethodCallChainEndContext);\n if (!isMethodAccessor) {\n throw new NoSuchFunctionException(ctx.IDENTIFIER().getText(), ctx);\n }\n }\n };\n\n enterSEUnaryMultipleMinus: (ctx: SEUnaryMultipleMinusContext) => void = (\n ctx\n ) => {\n throw new InvalidSyntaxException(\"--\", ctx);\n };\n\n exitSEBooleanBinaryOp: (ctx: SEBooleanBinaryOpContext) => void = (ctx) => {\n this.typeManager.requireLogicalOrBoolean(ctx._left);\n this.typeManager.requireLogicalOrBoolean(ctx._right);\n this.typeManager.setType(ctx, Types.boolean());\n };\n\n exitSEComparison: (ctx: SEComparisonContext) => void = (ctx) => {\n this.typeManager.requireTypesOverlap(ctx._left, ctx._right);\n this.typeManager.setType(ctx, Types.boolean());\n };\n\n exitSEParenthesis: (ctx: SEParenthesisContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx._sub);\n };\n\n exitSELiteral: (ctx: SELiteralContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx._sub);\n };\n exitLiteral: (ctx: LiteralContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx.getChild(0) as ParserRuleContext);\n };\n exitNumLiteral: (ctx: NumLiteralContext) => void = (ctx) => {\n this.typeManager.setType(ctx, Types.numeric());\n };\n exitStringLiteral: (ctx: StringLiteralContext) => void = (ctx) => {\n this.typeManager.setType(ctx, Types.string());\n };\n\n exitBooleanLiteral: (ctx: BooleanLiteralContext) => void = (ctx) => {\n this.typeManager.setType(ctx, Types.boolean());\n };\n\n exitLogicalLiteral: (ctx: LogicalLiteralContext) => void = (ctx) => {\n this.typeManager.setType(ctx, Types.logical());\n };\n\n exitExpr: (ctx: ExprContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx.singleExpr());\n };\n\n exitSEMulDiv: (ctx: SEMulDivContext) => void = (ctx) => {\n this.typeManager.requireNumeric(ctx._left);\n this.typeManager.requireNumeric(ctx._right);\n this.typeManager.setType(ctx, Types.numeric());\n };\n\n exitSEPower: (ctx: SEPowerContext) => void = (ctx) => {\n this.typeManager.requireNumeric(ctx._left);\n this.typeManager.requireNumeric(ctx._right);\n this.typeManager.setType(ctx, Types.numeric());\n };\n exitSEFunctionCall: (ctx: SEFunctionCallContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx._sub);\n };\n exitSEArrayExpr: (ctx: SEArrayExprContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx._sub);\n };\n\n exitSENot: (ctx: SENotContext) => void = (ctx) => {\n this.typeManager.requireLogicalOrBoolean(ctx._sub);\n this.typeManager.setType(ctx, Types.boolean());\n };\n\n exitSEVariableRef: (ctx: SEVariableRefContext) => void = (ctx) => {\n const builtin = this.builtinVariableRegistry.getDefinition(\n ctx._sub.IDENTIFIER().getText()\n );\n if (builtin) {\n this.typeManager.setType(ctx, builtin.type);\n return;\n }\n throw new ValidationException(\n `Encountered Variable ref that was neither a built-in variable nor a configured client builtin`,\n ctx\n );\n };\n\n exitSEUnaryMinus: (ctx: SEUnaryMinusContext) => void = (ctx) => {\n this.typeManager.requireNumeric(ctx._sub);\n this.typeManager.setType(ctx, Types.numeric());\n };\n exitSEAddSub: (ctx: SEAddSubContext) => void = (ctx) => {\n if (this.typeManager.overlapsWithString(ctx._left, ctx._right)) {\n this.typeManager.setType(ctx, Types.string());\n } else if (this.typeManager.overlapsWithNumeric(ctx._left, ctx._right)) {\n this.typeManager.setType(ctx, Types.numeric());\n } else {\n throw new ExpressionTypeError(\n `Operator '+' does not allow provided operand types ${this.typeManager\n .getType(ctx._left)\n .getName()}(left operand) and ${this.typeManager\n .getType(ctx._right)\n .getName()}(right operand). Operands must be both string or both numeric.`,\n ctx\n );\n }\n };\n\n exitSEMethodCall: (ctx: SEMethodCallContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx._call);\n };\n\n enterMethodCallChainInner: (ctx: MethodCallChainInnerContext) => void = (\n ctx\n ) => {\n this.pushMethodCallTarget(ctx);\n };\n exitMethodCallChainInner: (ctx: MethodCallChainInnerContext) => void = (\n ctx\n ) => {\n this.typeManager.copyTypeFrom(ctx, ctx._call);\n };\n\n enterMethodCallChainEnd: (ctx: MethodCallChainEndContext) => void = (ctx) => {\n this.pushMethodCallTarget(ctx);\n };\n\n private pushMethodCallTarget(ctx: ParserRuleContext) {\n if (ctx.parent[\"_target\"]) {\n const targetType = this.typeManager.getType(ctx.parent[\"_target\"]);\n this.methodCallTargetStack.push([ctx.parent[\"_target\"], targetType]);\n } else {\n throw new ValidationException(\n \"Did not find expected context attribute 'target' in parent rule context\",\n ctx\n );\n }\n }\n\n exitMethodCallChainEnd: (ctx: MethodCallChainEndContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx._call);\n };\n\n exitMethodFunctionCall: (ctx: MethodFunctionCallContext) => void = (ctx) => {\n this.typeManager.copyTypeFrom(ctx, ctx.functionCall());\n };\n\n exitMethodPropertyAccess: (ctx: MethodPropertyAccessContext) => void = (\n ctx\n ) => {\n const [_, targetType] = this.popMethodCallTarget(ctx);\n if (!(targetType instanceof ContextObjectType)) {\n throw new NoSuchMemberException(\n ctx.IDENTIFIER().getText(),\n targetType.getName(),\n ctx\n );\n }\n const member = targetType.getMemberDefinition(ctx.IDENTIFIER().getText());\n if (!isBuiltinPropertyDefinition(member)) {\n throw new NoSuchMemberException(\n ctx.IDENTIFIER().getText(),\n targetType.getName(),\n ctx\n );\n }\n this.typeManager.setType(ctx, member.valueType);\n };\n\n exitFunctionCall: (ctx: FunctionCallContext) => void = (ctx) => {\n const argumentTypes = this.collectArgumentTypes(ctx.exprList());\n const parent = ctx.parent;\n const grandParent = parent?.parent;\n const isMethodAccessor =\n parent instanceof MethodFunctionCallContext &&\n (grandParent instanceof MethodCallChainInnerContext ||\n grandParent instanceof MethodCallChainEndContext);\n\n if (isMethodAccessor) {\n const [targetCtx, targetType] = this.popMethodCallTarget(ctx);\n if (targetType instanceof ContextObjectType) {\n const member = targetType.getMemberDefinition(\n ctx.IDENTIFIER().getText()\n );\n if (!isBuiltinFunctionDefinition(member)) {\n throw new NoSuchMethodException(\n ctx.IDENTIFIER().getText(),\n targetType.getName(),\n ctx\n );\n }\n this.checkBuiltinFunctionArguments(\n ctx.IDENTIFIER().getText(),\n member.argumentTypes,\n argumentTypes,\n ctx\n );\n this.typeManager.setType(ctx, member.returnType);\n return;\n }\n argumentTypes.unshift([targetCtx, targetType]);\n }\n\n const func = IfcExpressionFunctions.getFunction(ctx.IDENTIFIER().getText());\n if (isNullish(func)) {\n throw new NoSuchFunctionException(ctx.IDENTIFIER().getText(), ctx);\n }\n const returnType = func.checkArgumentsAndGetReturnType(argumentTypes, ctx);\n this.typeManager.setType(ctx, returnType);\n };\n\n private checkBuiltinFunctionArguments(\n functionName: string,\n expectedArgumentTypes: Array<ExprType>,\n providedArgumentTypes: Array<[ParserRuleContext, ExprType]>,\n ctx: ParserRuleContext\n ) {\n if (providedArgumentTypes.length > expectedArgumentTypes.length) {\n throw new SpuriousFunctionArgumentException(\n functionName,\n \"[unexpected argument]\",\n expectedArgumentTypes.length,\n ctx,\n `Function expects (at most) ${expectedArgumentTypes.length} arguments`\n );\n }\n for (let i = 0; i < expectedArgumentTypes.length; i++) {\n if (providedArgumentTypes.length <= i) {\n throw new MissingFunctionArgumentException(\n functionName,\n `[arg${i}]`,\n i,\n ctx\n );\n }\n Types.requireWeakIsAssignableFrom(\n expectedArgumentTypes[i],\n providedArgumentTypes[i][1],\n () =>\n new WrongFunctionArgumentTypeException(\n functionName,\n `[arg${i}]`,\n expectedArgumentTypes[i],\n providedArgumentTypes[i][1],\n i,\n providedArgumentTypes[i][0]\n )\n );\n }\n }\n\n private popMethodCallTarget(\n ctx: ParserRuleContext\n ): [ParserRuleContext, ExprType] {\n const target = this.methodCallTargetStack.pop();\n if (isNullish(target)) {\n throw new ValidationException(\n \"Did not find expected method call target on stack\",\n ctx\n );\n }\n return target;\n }\n\n private collectArgumentTypes: (\n ctx: ExprListContext,\n resultSoFar?: Array<[ParserRuleContext, ExprType]>\n ) => Array<[ParserRuleContext, ExprType]> = (\n ctx,\n resultSoFar?: Array<[ParserRuleContext, ExprType]>\n ) => {\n if (isNullish(resultSoFar)) {\n resultSoFar = [];\n }\n if (!isNullish(ctx)) {\n resultSoFar.push([\n ctx.singleExpr(),\n this.typeManager.getType(ctx.singleExpr()),\n ]);\n const rest = ctx.exprList();\n if (!isNullish(rest)) {\n return this.collectArgumentTypes(rest, resultSoFar);\n }\n }\n return resultSoFar;\n };\n\n exitExprList: (ctx: ExprListContext) => void;\n\n exitArrayExpr: (ctx: ArrayExprContext) => void = (ctx) => {\n this.typeManager.setType(\n ctx,\n Types.tuple(...this.collectArrayElementTypes(ctx.arrayElementList()))\n );\n };\n\n private collectArrayElementTypes: (\n ctx: ArrayElementListContext,\n resultSoFar?: Array<ExprType>\n ) => Array<ExprType> = (ctx, resultSoFar?: Array<ExprType>) => {\n if (isNullish(resultSoFar)) {\n resultSoFar = [];\n }\n if (!isNullish(ctx)) {\n resultSoFar.push(this.typeManager.getType(ctx.singleExpr()));\n const rest = ctx.arrayElementList();\n if (!isNullish(rest)) {\n return this.collectArrayElementTypes(rest, resultSoFar);\n }\n }\n return resultSoFar;\n };\n\n exitArrayElementList: (ctx: ArrayElementListContext) => void;\n exitVariableRef: (ctx: VariableRefContext) => void = (ctx) => {\n const builtinTypes = [Type.IFC_PROPERTY_REF, Type.IFC_ELEMENT_REF];\n const otherBuiltinDefinitions = [\"property\", \"element\"]\n .map((name) => this.builtinVariableRegistry.getDefinition(name)?.type)\n .filter((type) => !isNullish(type));\n this.typeManager.setType(\n ctx,\n Types.or(...builtinTypes, ...otherBuiltinDefinitions)\n );\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/compiler/TypeManager.ts"],"names":[],"mappings":"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","file":"compiler/TypeManager.js","sourcesContent":["import { ParserRuleContext } from \"antlr4\";\nimport { Type, Types } from \"../type/Types.js\";\nimport { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { ExprType } from \"../type/ExprType.js\";\n\nexport class TypeManager {\n private readonly types = new Map<ParserRuleContext, ExprType>();\n\n constructor() {}\n\n public setType(parserRuleContext: ParserRuleContext, type: ExprType) {\n this.types.set(parserRuleContext, type);\n }\n\n public getType(parserRuleContext: ParserRuleContext): ExprType {\n return this.types.get(parserRuleContext);\n }\n\n public copyTypeFrom(ctx: ParserRuleContext, from: ParserRuleContext) {\n const theType = this.types.get(from as ParserRuleContext);\n this.types.set(ctx, theType);\n }\n\n public requireString(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.STRING,\n this.types.get(ctx as ParserRuleContext),\n () =>\n new ExpressionTypeError(\n `expected type string, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireBoolean(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.BOOLEAN,\n this.types.get(ctx as ParserRuleContext),\n () =>\n new ExpressionTypeError(\n `expected type boolean, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireLogicalOrBoolean(ctx: ParserRuleContext) {\n return this.requireOneOf(ctx, Type.BOOLEAN, Type.LOGICAL);\n }\n\n public requireOneOf(ctx: ParserRuleContext, ...types: Array<ExprType>) {\n const requiredType = Types.or(...types);\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n requiredType,\n this.types.get(ctx as ParserRuleContext),\n () =>\n new ExpressionTypeError(\n `expected type ${requiredType}, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireNumeric(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.NUMERIC,\n actualType,\n () =>\n new ExpressionTypeError(\n `expected type numeric, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireTypesOverlap(ctxA: ParserRuleContext, ctxB: ParserRuleContext) {\n Types.requireTypesOverlap(\n this.types.get(ctxA),\n this.types.get(ctxB),\n () =>\n new ExpressionTypeError(\n `Types ${this.types.get(ctxA).getName()} and ${this.types\n .get(ctxB)\n .getName()} are required to overlap but they don't.`,\n ctxA\n )\n );\n }\n\n public isType(type: ExprType, ...ctxs) {\n return ctxs.every((ctx) => Types.isType(this.types.get(ctx), type));\n }\n\n public overlapsWith(type: ExprType, ...ctxs) {\n return ctxs.every((ctx) => type.overlapsWith(this.types.get(ctx)));\n }\n\n public isString(...ctxs) {\n return this.isType(Type.STRING, ...ctxs);\n }\n\n public overlapsWithString(...ctxs) {\n return this.overlapsWith(Type.STRING, ...ctxs);\n }\n\n public isBoolean(...ctxs) {\n return this.isType(Type.BOOLEAN, ...ctxs);\n }\n\n public isLogical(...ctxs) {\n return this.isType(Type.LOGICAL, ...ctxs);\n }\n\n public overlapsWithBoolean(...ctxs) {\n return this.overlapsWith(Type.BOOLEAN, ...ctxs);\n }\n\n public overlapsWithLogical(...ctxs) {\n return this.overlapsWith(Type.LOGICAL, ...ctxs);\n }\n\n public isNumeric(...ctxs) {\n return this.isType(Type.NUMERIC, ...ctxs);\n }\n\n public overlapsWithNumeric(...ctxs) {\n return this.overlapsWith(Type.NUMERIC, ...ctxs);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/compiler/TypeManager.ts"],"names":[],"mappings":"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","file":"compiler/TypeManager.js","sourcesContent":["import { ParserRuleContext } from \"antlr4ng\";\nimport { Type, Types } from \"../type/Types.js\";\nimport { ExpressionTypeError } from \"../error/ExpressionTypeError.js\";\nimport { ExprType } from \"../type/ExprType.js\";\n\nexport class TypeManager {\n private readonly types = new Map<ParserRuleContext, ExprType>();\n\n constructor() {}\n\n public setType(parserRuleContext: ParserRuleContext, type: ExprType) {\n this.types.set(parserRuleContext, type);\n }\n\n public getType(parserRuleContext: ParserRuleContext): ExprType {\n return this.types.get(parserRuleContext);\n }\n\n public copyTypeFrom(ctx: ParserRuleContext, from: ParserRuleContext) {\n const theType = this.types.get(from as ParserRuleContext);\n this.types.set(ctx, theType);\n }\n\n public requireString(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.STRING,\n this.types.get(ctx as ParserRuleContext),\n () =>\n new ExpressionTypeError(\n `expected type string, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireBoolean(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.BOOLEAN,\n this.types.get(ctx as ParserRuleContext),\n () =>\n new ExpressionTypeError(\n `expected type boolean, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireLogicalOrBoolean(ctx: ParserRuleContext) {\n return this.requireOneOf(ctx, Type.BOOLEAN, Type.LOGICAL);\n }\n\n public requireOneOf(ctx: ParserRuleContext, ...types: Array<ExprType>) {\n const requiredType = Types.or(...types);\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n requiredType,\n this.types.get(ctx as ParserRuleContext),\n () =>\n new ExpressionTypeError(\n `expected type ${requiredType}, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireNumeric(ctx: ParserRuleContext) {\n const actualType = this.types.get(ctx as ParserRuleContext);\n Types.requireWeakIsAssignableFrom(\n Type.NUMERIC,\n actualType,\n () =>\n new ExpressionTypeError(\n `expected type numeric, actual type is ${actualType.getName()}`,\n ctx\n )\n );\n }\n\n public requireTypesOverlap(ctxA: ParserRuleContext, ctxB: ParserRuleContext) {\n Types.requireTypesOverlap(\n this.types.get(ctxA),\n this.types.get(ctxB),\n () =>\n new ExpressionTypeError(\n `Types ${this.types.get(ctxA).getName()} and ${this.types\n .get(ctxB)\n .getName()} are required to overlap but they don't.`,\n ctxA\n )\n );\n }\n\n public isType(type: ExprType, ...ctxs) {\n return ctxs.every((ctx) => Types.isType(this.types.get(ctx), type));\n }\n\n public overlapsWith(type: ExprType, ...ctxs) {\n return ctxs.every((ctx) => type.overlapsWith(this.types.get(ctx)));\n }\n\n public isString(...ctxs) {\n return this.isType(Type.STRING, ...ctxs);\n }\n\n public overlapsWithString(...ctxs) {\n return this.overlapsWith(Type.STRING, ...ctxs);\n }\n\n public isBoolean(...ctxs) {\n return this.isType(Type.BOOLEAN, ...ctxs);\n }\n\n public isLogical(...ctxs) {\n return this.isType(Type.LOGICAL, ...ctxs);\n }\n\n public overlapsWithBoolean(...ctxs) {\n return this.overlapsWith(Type.BOOLEAN, ...ctxs);\n }\n\n public overlapsWithLogical(...ctxs) {\n return this.overlapsWith(Type.LOGICAL, ...ctxs);\n }\n\n public isNumeric(...ctxs) {\n return this.isType(Type.NUMERIC, ...ctxs);\n }\n\n public overlapsWithNumeric(...ctxs) {\n return this.overlapsWith(Type.NUMERIC, ...ctxs);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context/IfcExpressionContext.ts"],"names":[],"mappings":"","file":"context/IfcExpressionContext.js","sourcesContent":["import { IfcPropertyAccessor } from \"./IfcPropertyAccessor.js\";\nimport { IfcElementAccessor } from \"./IfcElementAccessor.js\";\n\nexport interface IfcExpressionContext {\n resolvePropRef(): IfcPropertyAccessor;\n\n resolveElemRef(): IfcElementAccessor;\n}\n"]}
1
+ {"version":3,"sources":["../../src/context/IfcExpressionContext.ts"],"names":[],"mappings":"","file":"context/IfcExpressionContext.js","sourcesContent":["import { ExprType } from \"../type/ExprType.js\";\n\nexport interface IfcExpressionContext {\n resolvePropRef();\n\n resolveElemRef();\n\n resolveBuiltinVariable(name: string): unknown;\n}\n"]}
@@ -8,6 +8,9 @@ class NopContext {
8
8
  resolvePropRef() {
9
9
  throw new Error("No IfcExpressionContext implementation provided - cannot resolve property reference");
10
10
  }
11
+ resolveBuiltinVariable(name) {
12
+ throw new Error(`No IfcExpressionContext implementation provided - cannot resolve builtin variable '${name}'`);
13
+ }
11
14
  }
12
15
  exports.NopContext = NopContext;
13
16
  //# sourceMappingURL=NopContext.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context/NopContext.ts"],"names":[],"mappings":";;;AAMA,MAAa,UAAU;IACrB,cAAc;QACZ,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;CACF;AAZD,gCAYC","file":"context/NopContext.js","sourcesContent":["import {\n IfcElementAccessor,\n IfcExpressionContext,\n IfcPropertyAccessor,\n} from \"../IfcExpression.js\";\n\nexport class NopContext implements IfcExpressionContext {\n resolveElemRef(): IfcElementAccessor {\n throw new Error(\n \"No IfcExpressionContext implementation provided - cannot resolve element reference\"\n );\n }\n\n resolvePropRef(): IfcPropertyAccessor {\n throw new Error(\n \"No IfcExpressionContext implementation provided - cannot resolve property reference\"\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/context/NopContext.ts"],"names":[],"mappings":";;;AAMA,MAAa,UAAU;IACrB,cAAc;QACZ,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,IAAY;QACjC,MAAM,IAAI,KAAK,CACb,sFAAsF,IAAI,GAAG,CAC9F,CAAC;IACJ,CAAC;CACF;AAlBD,gCAkBC","file":"context/NopContext.js","sourcesContent":["import {\n IfcElementAccessor,\n IfcExpressionContext,\n IfcPropertyAccessor,\n} from \"../IfcExpression.js\";\n\nexport class NopContext implements IfcExpressionContext {\n resolveElemRef(): IfcElementAccessor {\n throw new Error(\n \"No IfcExpressionContext implementation provided - cannot resolve element reference\"\n );\n }\n\n resolvePropRef(): IfcPropertyAccessor {\n throw new Error(\n \"No IfcExpressionContext implementation provided - cannot resolve property reference\"\n );\n }\n\n resolveBuiltinVariable(name: string): unknown {\n throw new Error(\n `No IfcExpressionContext implementation provided - cannot resolve builtin variable '${name}'`\n );\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveLocalizedText = void 0;
4
+ function resolveLocalizedText(text, localizer) {
5
+ if (!text) {
6
+ return undefined;
7
+ }
8
+ return localizer ? localizer.t(text.key, text.fallback) : text.fallback;
9
+ }
10
+ exports.resolveLocalizedText = resolveLocalizedText;
11
+ //# sourceMappingURL=Documentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/documentation/Documentation.ts"],"names":[],"mappings":";;;AAcA,SAAgB,oBAAoB,CAClC,IAA+B,EAC/B,SAAkC;IAElC,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,SAAS,CAAC;KAClB;IAED,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1E,CAAC;AATD,oDASC","file":"documentation/Documentation.js","sourcesContent":["export type LocalizedText = {\n key: string;\n fallback: string;\n};\n\nexport type DocumentationLocalizer = {\n t(key: string, fallback: string): string;\n};\n\nexport type ArgumentDocumentation = {\n label: LocalizedText;\n documentation: LocalizedText;\n};\n\nexport function resolveLocalizedText(\n text: LocalizedText | undefined,\n localizer?: DocumentationLocalizer\n): string | undefined {\n if (!text) {\n return undefined;\n }\n\n return localizer ? localizer.t(text.key, text.fallback) : text.fallback;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/error/ExpressionTypeError.ts"],"names":[],"mappings":";;;AACA,qEAA+D;AAE/D,MAAa,mBAAoB,SAAQ,4CAAmB;IAC1D,YAAY,OAAe,EAAE,GAAsB;QACjD,KAAK,CAAC,eAAe,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;CACF;AAJD,kDAIC","file":"error/ExpressionTypeError.js","sourcesContent":["import { ParserRuleContext } from \"antlr4\";\nimport { ValidationException } from \"./ValidationException.js\";\n\nexport class ExpressionTypeError extends ValidationException {\n constructor(message: string, ctx: ParserRuleContext) {\n super(`Type error: ${message}`, ctx);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/error/ExpressionTypeError.ts"],"names":[],"mappings":";;;AACA,qEAA+D;AAE/D,MAAa,mBAAoB,SAAQ,4CAAmB;IAC1D,YAAY,OAAe,EAAE,GAAsB;QACjD,KAAK,CAAC,eAAe,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;CACF;AAJD,kDAIC","file":"error/ExpressionTypeError.js","sourcesContent":["import { ParserRuleContext } from \"antlr4ng\";\nimport { ValidationException } from \"./ValidationException.js\";\n\nexport class ExpressionTypeError extends ValidationException {\n constructor(message: string, ctx: ParserRuleContext) {\n super(`Type error: ${message}`, ctx);\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IfcExpressionBuiltinConfigException = void 0;
4
+ class IfcExpressionBuiltinConfigException extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ }
8
+ }
9
+ exports.IfcExpressionBuiltinConfigException = IfcExpressionBuiltinConfigException;
10
+ //# sourceMappingURL=IfcExpressionBuiltinConfigException.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/error/IfcExpressionBuiltinConfigException.ts"],"names":[],"mappings":";;;AAAA,MAAa,mCAAoC,SAAQ,KAAK;IAC5D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,kFAIC","file":"error/IfcExpressionBuiltinConfigException.js","sourcesContent":["export class IfcExpressionBuiltinConfigException extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/error/InvalidSyntaxException.ts"],"names":[],"mappings":";;;AACA,qEAA+D;AAE/D,MAAa,sBAAuB,SAAQ,4CAAmB;IAE7D,YAAY,cAAsB,EAAE,GAAsB;QACxD,KAAK,CAAC,mBAAmB,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;CACF;AAND,wDAMC","file":"error/InvalidSyntaxException.js","sourcesContent":["import { ParserRuleContext } from \"antlr4\";\nimport { ValidationException } from \"./ValidationException.js\";\n\nexport class InvalidSyntaxException extends ValidationException {\n readonly offendingInput: string;\n constructor(offendingInput: string, ctx: ParserRuleContext) {\n super(`Invalid syntax: ${offendingInput}`, ctx);\n this.offendingInput = offendingInput;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/error/InvalidSyntaxException.ts"],"names":[],"mappings":";;;AACA,qEAA+D;AAE/D,MAAa,sBAAuB,SAAQ,4CAAmB;IAE7D,YAAY,cAAsB,EAAE,GAAsB;QACxD,KAAK,CAAC,mBAAmB,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;CACF;AAND,wDAMC","file":"error/InvalidSyntaxException.js","sourcesContent":["import { ParserRuleContext } from \"antlr4ng\";\nimport { ValidationException } from \"./ValidationException.js\";\n\nexport class InvalidSyntaxException extends ValidationException {\n readonly offendingInput: string;\n constructor(offendingInput: string, ctx: ParserRuleContext) {\n super(`Invalid syntax: ${offendingInput}`, ctx);\n this.offendingInput = offendingInput;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/error/NoSuchFunctionException.ts"],"names":[],"mappings":";;;AACA,qEAA+D;AAE/D,MAAa,uBAAwB,SAAQ,4CAAmB;IAE9D,YAAY,YAAoB,EAAE,GAAsB;QACtD,KAAK,CAAC,kCAAkC,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AAND,0DAMC","file":"error/NoSuchFunctionException.js","sourcesContent":["import { ParserRuleContext } from \"antlr4\";\nimport { ValidationException } from \"./ValidationException.js\";\n\nexport class NoSuchFunctionException extends ValidationException {\n readonly functionName: string;\n constructor(functionName: string, ctx: ParserRuleContext) {\n super(`Not a IFC Expression Function: ${functionName}`, ctx);\n this.functionName = functionName;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/error/NoSuchFunctionException.ts"],"names":[],"mappings":";;;AACA,qEAA+D;AAE/D,MAAa,uBAAwB,SAAQ,4CAAmB;IAE9D,YAAY,YAAoB,EAAE,GAAsB;QACtD,KAAK,CAAC,kCAAkC,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AAND,0DAMC","file":"error/NoSuchFunctionException.js","sourcesContent":["import { ParserRuleContext } from \"antlr4ng\";\nimport { ValidationException } from \"./ValidationException.js\";\n\nexport class NoSuchFunctionException extends ValidationException {\n readonly functionName: string;\n constructor(functionName: string, ctx: ParserRuleContext) {\n super(`Not a IFC Expression Function: ${functionName}`, ctx);\n this.functionName = functionName;\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoSuchMemberException = void 0;
4
+ const ValidationException_js_1 = require("./ValidationException.js");
5
+ class NoSuchMemberException extends ValidationException_js_1.ValidationException {
6
+ constructor(memberName, type, ctx) {
7
+ super(`No member ${memberName} found for type ${type}`, ctx);
8
+ this.memberName = memberName;
9
+ this.type = type;
10
+ }
11
+ }
12
+ exports.NoSuchMemberException = NoSuchMemberException;
13
+ //# sourceMappingURL=NoSuchMemberException.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/error/NoSuchMemberException.ts"],"names":[],"mappings":";;;AAAA,qEAA+D;AAE/D,MAAa,qBAAsB,SAAQ,4CAAmB;IAI5D,YAAY,UAAkB,EAAE,IAAY,EAAE,GAAG;QAC/C,KAAK,CAAC,aAAa,UAAU,mBAAmB,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AATD,sDASC","file":"error/NoSuchMemberException.js","sourcesContent":["import { ValidationException } from \"./ValidationException.js\";\n\nexport class NoSuchMemberException extends ValidationException {\n readonly memberName: string;\n readonly type: string;\n\n constructor(memberName: string, type: string, ctx) {\n super(`No member ${memberName} found for type ${type}`, ctx);\n this.memberName = memberName;\n this.type = type;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/error/ValidationException.ts"],"names":[],"mappings":";;;AAEA,MAAa,mBAAoB,SAAQ,KAAK;IAM5C,YAAY,OAAe,EAAE,GAAsB;QACjD,KAAK,CACH,sBAAsB,OAAO,OAAO,mBAAmB,CAAC,iBAAiB,CACvE,GAAG,CACJ,WAAW,GAAG,CAAC,OAAO,EAAE,GAAG,CAC7B,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,GAAsB;QACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAChC,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QACpC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAChE,IAAI,QAAQ,IAAI,MAAM,EAAE;YACtB,OAAO,UAAU,IAAI,QAAQ;gBAC3B,CAAC,CAAC,QAAQ,QAAQ,YAAY,UAAU,EAAE;gBAC1C,CAAC,CAAC,QAAQ,QAAQ,aAAa,UAAU,IAAI,QAAQ,EAAE,CAAC;SAC3D;aAAM;YACL,OAAO,QAAQ,QAAQ,YAAY,UAAU,YAAY,MAAM,YAAY,QAAQ,EAAE,CAAC;SACvF;IACH,CAAC;CACF;AA/BD,kDA+BC","file":"error/ValidationException.js","sourcesContent":["import { ParserRuleContext } from \"antlr4\";\n\nexport class ValidationException extends Error {\n public readonly fromLine: number;\n public readonly toLine: number;\n public readonly fromColumn: number;\n public readonly toColumn: number;\n\n constructor(message: string, ctx: ParserRuleContext) {\n super(\n `Validation Failed: ${message} at ${ValidationException.makeColumnsString(\n ctx\n )}, near '${ctx.getText()}'`\n );\n this.fromLine = ctx.start.line;\n this.fromColumn = ctx.start.column;\n this.toLine = ctx.stop.line;\n this.toColumn = ctx.stop.column + (ctx.stop.text || \"\").length;\n }\n\n private static makeColumnsString(ctx: ParserRuleContext): string {\n const fromLine = ctx.start.line;\n const fromColumn = ctx.start.column;\n const toLine = ctx.stop.line;\n const toColumn = ctx.stop.column + (ctx.stop.text || \"\").length;\n if (fromLine == toLine) {\n return fromColumn == toColumn\n ? `line ${fromLine}, column ${fromColumn}`\n : `line ${fromLine}, columns ${fromColumn}-${toColumn}`;\n } else {\n return `line ${fromLine}, column ${fromColumn} to line ${toLine}, column ${toColumn}`;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/error/ValidationException.ts"],"names":[],"mappings":";;;AAEA,MAAa,mBAAoB,SAAQ,KAAK;IAM5C,YAAY,OAAe,EAAE,GAAsB;QACjD,KAAK,CACH,sBAAsB,OAAO,OAAO,mBAAmB,CAAC,iBAAiB,CACvE,GAAG,CACJ,WAAW,GAAG,CAAC,OAAO,EAAE,GAAG,CAC7B,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,GAAsB;QACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAChC,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QACpC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAChE,IAAI,QAAQ,IAAI,MAAM,EAAE;YACtB,OAAO,UAAU,IAAI,QAAQ;gBAC3B,CAAC,CAAC,QAAQ,QAAQ,YAAY,UAAU,EAAE;gBAC1C,CAAC,CAAC,QAAQ,QAAQ,aAAa,UAAU,IAAI,QAAQ,EAAE,CAAC;SAC3D;aAAM;YACL,OAAO,QAAQ,QAAQ,YAAY,UAAU,YAAY,MAAM,YAAY,QAAQ,EAAE,CAAC;SACvF;IACH,CAAC;CACF;AA/BD,kDA+BC","file":"error/ValidationException.js","sourcesContent":["import { ParserRuleContext } from \"antlr4ng\";\n\nexport class ValidationException extends Error {\n public readonly fromLine: number;\n public readonly toLine: number;\n public readonly fromColumn: number;\n public readonly toColumn: number;\n\n constructor(message: string, ctx: ParserRuleContext) {\n super(\n `Validation Failed: ${message} at ${ValidationException.makeColumnsString(\n ctx\n )}, near '${ctx.getText()}'`\n );\n this.fromLine = ctx.start.line;\n this.fromColumn = ctx.start.column;\n this.toLine = ctx.stop.line;\n this.toColumn = ctx.stop.column + (ctx.stop.text || \"\").length;\n }\n\n private static makeColumnsString(ctx: ParserRuleContext): string {\n const fromLine = ctx.start.line;\n const fromColumn = ctx.start.column;\n const toLine = ctx.stop.line;\n const toColumn = ctx.stop.column + (ctx.stop.text || \"\").length;\n if (fromLine == toLine) {\n return fromColumn == toColumn\n ? `line ${fromLine}, column ${fromColumn}`\n : `line ${fromLine}, columns ${fromColumn}-${toColumn}`;\n } else {\n return `line ${fromLine}, column ${fromColumn} to line ${toLine}, column ${toColumn}`;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/error/WrongFunctionArgumentTypeException.ts"],"names":[],"mappings":";;;AAAA,qEAA+D;AAI/D,MAAa,kCAAmC,SAAQ,4CAAmB;IAOzE,YACE,YAAoB,EACpB,YAAoB,EACpB,YAAsB,EACtB,UAAoB,EACpB,aAAqB,EACrB,GAAsB;QAEtB,KAAK,CACH,YAAY,YAAY,2BAA2B,UAAU,CAAC,OAAO,EAAE,qCAAqC,YAAY,CAAC,OAAO,EAAE,mBAAmB,YAAY,yBAAyB,aAAa,GAAG,EAC1M,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAzBD,gFAyBC","file":"error/WrongFunctionArgumentTypeException.js","sourcesContent":["import { ExpressionTypeError } from \"./ExpressionTypeError.js\";\nimport { ParserRuleContext } from \"antlr4\";\nimport { ExprType } from \"../type/ExprType.js\";\n\nexport class WrongFunctionArgumentTypeException extends ExpressionTypeError {\n readonly functionName: string;\n readonly argumentName: string;\n readonly expectedType: ExprType;\n readonly actualType: ExprType;\n readonly argumentIndex: number;\n\n constructor(\n functionName: string,\n argumentName: string,\n expectedType: ExprType,\n actualType: ExprType,\n argumentIndex: number,\n ctx: ParserRuleContext\n ) {\n super(\n `Function ${functionName}: Actual argument type '${actualType.getName()}' does not satisfy expected type '${expectedType.getName()}' for argument '${argumentName}' at 0-based position ${argumentIndex}.`,\n ctx\n );\n this.functionName = functionName;\n this.argumentName = argumentName;\n this.expectedType = expectedType;\n this.actualType = actualType;\n this.argumentIndex = argumentIndex;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/error/WrongFunctionArgumentTypeException.ts"],"names":[],"mappings":";;;AAAA,qEAA+D;AAI/D,MAAa,kCAAmC,SAAQ,4CAAmB;IAOzE,YACE,YAAoB,EACpB,YAAoB,EACpB,YAAsB,EACtB,UAAoB,EACpB,aAAqB,EACrB,GAAsB;QAEtB,KAAK,CACH,YAAY,YAAY,2BAA2B,UAAU,CAAC,OAAO,EAAE,qCAAqC,YAAY,CAAC,OAAO,EAAE,mBAAmB,YAAY,yBAAyB,aAAa,GAAG,EAC1M,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAzBD,gFAyBC","file":"error/WrongFunctionArgumentTypeException.js","sourcesContent":["import { ExpressionTypeError } from \"./ExpressionTypeError.js\";\nimport { ParserRuleContext } from \"antlr4ng\";\nimport { ExprType } from \"../type/ExprType.js\";\n\nexport class WrongFunctionArgumentTypeException extends ExpressionTypeError {\n readonly functionName: string;\n readonly argumentName: string;\n readonly expectedType: ExprType;\n readonly actualType: ExprType;\n readonly argumentIndex: number;\n\n constructor(\n functionName: string,\n argumentName: string,\n expectedType: ExprType,\n actualType: ExprType,\n argumentIndex: number,\n ctx: ParserRuleContext\n ) {\n super(\n `Function ${functionName}: Actual argument type '${actualType.getName()}' does not satisfy expected type '${expectedType.getName()}' for argument '${argumentName}' at 0-based position ${argumentIndex}.`,\n ctx\n );\n this.functionName = functionName;\n this.argumentName = argumentName;\n this.expectedType = expectedType;\n this.actualType = actualType;\n this.argumentIndex = argumentIndex;\n }\n}\n"]}
@@ -17,6 +17,9 @@ var ExprKind;
17
17
  ExprKind["NUM_LITERAL"] = "NUM_LITERAL";
18
18
  ExprKind["REF_ELEMENT"] = "REF_ELEMENT";
19
19
  ExprKind["REF_PROPERTY"] = "REF_PROPERTY";
20
+ ExprKind["REF_BUILTIN_ROOT"] = "REF_BUILTIN_ROOT";
21
+ ExprKind["REF_BUILTIN_MEMBER"] = "REF_BUILTIN_MEMBER";
22
+ ExprKind["REF_BUILTIN_FUNCTION"] = "REF_BUILTIN_FUNCTION";
20
23
  ExprKind["STR_CONCAT"] = "STR_CONCAT";
21
24
  ExprKind["STR_LITERAL"] = "STR_LITERAL";
22
25
  ExprKind["AND"] = "AND";