import { AnythingConstructASTNode } from "../../../ast/ASTNode"; import { AddressOfExpressionASTNode, ArithmeticBinaryOperatorExpressionASTNode, ArrowExpressionASTNode, AssignmentExpressionASTNode, BitwiseNotExpressionASTNode, CommaASTNode, CompoundAssignmentExpressionASTNode, ConstCastExpressionASTNode, ConstructExpressionASTNode, CStyleCastExpressionASTNode, DeleteArrayExpressionASTNode, DeleteExpressionASTNode, DereferenceExpressionASTNode, DotExpressionASTNode, DynamicCastExpressionASTNode, ExpressionASTNode, FunctionCallExpressionASTNode, IdentifierExpressionASTNode, InitializerListExpressionASTNode, LogicalBinaryOperatorExpressionASTNode, LogicalNotExpressionASTNode, NewExpressionASTNode, NullptrExpressionASTNode, NumericLiteralASTNode, OpaqueExpressionASTNode, ParenthesesExpressionASTNode, PointerToMemberExpressionASTNode, PostfixIncrementExpressionASTNode, PrefixIncrementExpressionASTNode, ReinterpretCastExpressionASTNode, RelationalBinaryOperatorExpressionASTNode, SizeofExpressionASTNode, SizeofTypeExpressionASTNode, StaticCastExpressionASTNode, StringLiteralASTNode, SubscriptExpressionASTNode, TernaryASTNode, ThisExpressionASTNode, UnaryMinusExpressionASTNode, UnaryPlusExpressionASTNode } from "../../../ast/ast_expressions"; import { ExpressionContext } from "../../compilation/contexts"; import { ArithmeticType, ArrayElemType, AtomicType, CompleteClassType, CompleteObjectType, CompleteReturnType, ExpressionType, FunctionType, PeelReference, PointerToCompleteType as PointerToCompleteObjectType, PointerType } from "../../compilation/types"; import { RuntimeConstruct } from "../CPPConstruct"; import { AddressOfExpression, CompiledAddressOfExpression, RuntimeAddressOfExpression, TypedAddressOfExpression } from "./AddressOfExpression"; import { AnythingExpression } from "./AnythingExpression"; import { ArithmeticBinaryOperatorExpression, CompiledArithmeticBinaryOperatorExpression, RuntimeArithmeticBinaryOperator, TypedArithmeticBinaryOperatorExpression } from "./ArithmeticBinaryOperatorExpression"; import { ArrowExpression, CompiledFunctionArrowExpression, CompiledObjectArrowExpression, RuntimeFunctionArrowExpression, RuntimeObjectArrowExpression, TypedFunctionArrowExpression, TypedObjectArrowExpression } from "./ArrowExpression"; import { AssignmentExpression, CompiledAssignmentExpression, RuntimeAssignment, TypedAssignmentExpression } from "./AssignmentExpression"; import { AuxiliaryExpression, CompiledAuxiliaryExpression, TypedAuxiliaryExpression } from "./AuxiliaryExpression"; import { AnalyticBinaryOperatorExpression } from "./BinaryOperatorExpression"; import { CommaExpression, CompiledCommaExpression, CompiledTernaryExpression, RuntimeComma, RuntimeTernary, TernaryExpression, TypedCommaExpression, TypedTernaryExpression } from "./CommaExpression"; import { CompiledCompoundAssignmentExpression, CompoundAssignmentExpression, RuntimeCompoundAssignment, TypedCompoundAssignmentExpression } from "./CompoundAssignmentExpression"; import { CompiledDeleteArrayExpression, CompiledDeleteExpression, DeleteArrayExpression, DeleteExpression, RuntimeDeleteArrayExpression, RuntimeDeleteExpression, TypedDeleteArrayExpression, TypedDeleteExpression } from "./DeleteExpression"; import { CompiledDereferenceExpression, DereferenceExpression, RuntimeDereferenceExpression, TypedDereferenceExpression } from "./DereferenceExpression"; import { CompiledFunctionDotExpression, CompiledObjectDotExpression, DotExpression, RuntimeFunctionDotExpression, RuntimeObjectDotExpression, TypedFunctionDotExpression, TypedObjectDotExpression } from "./DotExpression"; import { CompiledExpression, ValueCategory } from "./Expression"; import { RuntimeExpression } from "./RuntimeExpression"; import { CompiledFunctionCallExpression, FunctionCallExpression, RuntimeFunctionCallExpression, TypedFunctionCallExpression } from "./FunctionCallExpression"; import { CompiledFunctionIdentifierExpression, CompiledObjectIdentifierExpression, IdentifierExpression, RuntimeFunctionIdentifierExpression, RuntimeObjectIdentifierExpression, TypedFunctionIdentifierExpression, TypedObjectIdentifierExpression } from "./IdentifierExpression"; import { CompiledImplicitConversion, ImplicitConversion, RuntimeImplicitConversion, TypedImplicitConversion } from "./ImplicitConversion"; import { CompiledInitializerListExpression, InitializerListExpression, RuntimeInitializerListExpression, TypedInitializerListExpression } from "./InitializerListExpression"; import { CompiledInputOperatorExpression, RuntimeInputOperatorExpression, TypedInputOperatorExpression } from "./InputOperatorExpression"; import { CompiledLogicalBinaryOperatorExpression, LogicalBinaryOperatorExpression, RuntimeLogicalBinaryOperatorExpression, TypedLogicalBinaryOperatorExpression } from "./LogicalBinaryOperatorExpression"; import { CompiledLogicalNotExpression, LogicalNotExpression, RuntimeLogicalNotExpression, TypedLogicalNotExpression } from "./LogicalNotExpression"; import { CompiledMagicFunctionCallExpression, MagicFunctionCallExpression, RuntimeMagicFunctionCallExpression, TypedMagicFunctionCallExpression } from "./MagicFunctionCallExpression"; import { CompiledNewArrayExpression, CompiledNewExpression, NewArrayExpression, NewExpression, NewObjectType, RuntimeNewArrayExpression, RuntimeNewExpression, TypedNewArrayExpression, TypedNewExpression } from "./NewExpression"; import { CompiledMemberOperatorOverloadExpression, CompiledNonMemberOperatorOverloadExpression, InvalidOperatorOverloadExpression, OperatorOverloadExpression, RuntimeMemberOperatorOverloadExpression, RuntimeNonMemberOperatorOverloadExpression, TypedMemberOperatorOverloadExpression, TypedNonMemberOperatorOverloadExpression } from "./OperatorOverloadExpression"; import { CompiledNullptrExpression, NullptrExpression, RuntimeNullptrExpression, TypedNullptrExpression } from "./NullptrExpression"; import { CompiledNumericLiteralExpression, NumericLiteralExpression, RuntimeNumericLiteral, TypedNumericLiteralExpression } from "./NumericLiteralExpression"; import { CompiledOpaqueExpression, OpaqueExpression, RuntimeOpaqueExpression, TypedOpaqueExpression } from "./OpaqueExpression"; import { CompiledOutputOperatorExpression, RuntimeOutputOperatorExpression, TypedOutputOperatorExpression } from "./OutputOperatorExpression"; import { CompiledParenthesesExpression, ParenthesesExpression, RuntimeParentheses, TypedParenthesesExpression } from "./ParenthesesExpression"; import { CompiledPointerComparisonExpression, RuntimePointerComparisonExpression, TypedPointerComparisonExpression } from "./PointerComparisonExpression"; import { CompiledPointerDifferenceExpression, RuntimePointerDifference, TypedPointerDifferenceExpression } from "./PointerDifferenceExpression"; import { CompiledPointerOffsetExpression, RuntimePointerOffset, TypedPointerOffsetExpression } from "./PointerOffsetExpression"; import { CompiledPostfixIncrementExpression, PostfixIncrementExpression, RuntimePostfixIncrementExpression, TypedPostfixIncrementExpression } from "./PostfixIncrementExpression"; import { CompiledPrefixIncrementExpression, PrefixIncrementExpression, RuntimePrefixIncrementExpression, TypedPrefixIncrementExpression } from "./PrefixIncrementExpression"; import { CompiledRelationalBinaryOperatorExpression, RelationalBinaryOperatorExpression, RuntimeRelationalBinaryOperator, TypedRelationalBinaryOperatorExpression } from "./RelationalBinaryOperatorExpression"; import { CompiledStringLiteralExpression, RuntimeStringLiteralExpression, StringLiteralExpression, TypedStringLiteralExpression } from "./StringLiteralExpression"; import { CompiledSubscriptExpression, RuntimeSubscriptExpression, SubscriptExpression, TypedSubscriptExpression } from "./SubscriptExpression"; import { CompiledThisExpression, RuntimeThisExpression, ThisExpression, TypedThisExpression } from "./ThisExpression"; import { CompiledUnaryMinusExpression, RuntimeUnaryMinusExpression, TypedUnaryMinusExpression, UnaryMinusExpression } from "./UnaryMinusExpression"; import { AnalyticUnaryOperatorExpression } from "./UnaryOperatorExpression"; import { CompiledUnaryPlusExpression, RuntimeUnaryPlusExpression, TypedUnaryPlusExpression, UnaryPlusExpression } from "./UnaryPlusExpression"; import { UnsupportedExpression } from "./UnsupportedExpression"; declare const ExpressionConstructsMap: { comma_expression: (ast: CommaASTNode, context: ExpressionContext) => CommaExpression; ternary_expression: (ast: TernaryASTNode, context: ExpressionContext) => TernaryExpression; assignment_expression: (ast: AssignmentExpressionASTNode, context: ExpressionContext) => OperatorOverloadExpression | AssignmentExpression; compound_assignment_expression: (ast: CompoundAssignmentExpressionASTNode, context: ExpressionContext) => OperatorOverloadExpression | CompoundAssignmentExpression; arithmetic_binary_operator_expression: (ast: ArithmeticBinaryOperatorExpressionASTNode, context: ExpressionContext) => OperatorOverloadExpression | ArithmeticBinaryOperatorExpression | import("./PointerDifferenceExpression").PointerDifferenceExpression | import("./PointerOffsetExpression").PointerOffsetExpression | import("./OutputOperatorExpression").OutputOperatorExpression | import("./InputOperatorExpression").InputOperatorExpression; relational_binary_operator_expression: (ast: RelationalBinaryOperatorExpressionASTNode, context: ExpressionContext) => OperatorOverloadExpression | RelationalBinaryOperatorExpression | import("./PointerComparisonExpression").PointerComparisonExpression; logical_binary_operator_expression: (ast: LogicalBinaryOperatorExpressionASTNode, context: ExpressionContext) => OperatorOverloadExpression | LogicalBinaryOperatorExpression; pointer_to_member_expression: (ast: PointerToMemberExpressionASTNode, context: ExpressionContext) => UnsupportedExpression; c_style_cast_expression: (ast: CStyleCastExpressionASTNode, context: ExpressionContext) => UnsupportedExpression; prefix_increment_expression: (ast: PrefixIncrementExpressionASTNode, context: ExpressionContext) => PrefixIncrementExpression; dereference_expression: (ast: DereferenceExpressionASTNode, context: ExpressionContext) => DereferenceExpression; address_of_expression: (ast: AddressOfExpressionASTNode, context: ExpressionContext) => AddressOfExpression; unary_plus_expression: (ast: UnaryPlusExpressionASTNode, context: ExpressionContext) => UnaryPlusExpression; unary_minus_expression: (ast: UnaryMinusExpressionASTNode, context: ExpressionContext) => UnaryMinusExpression; logical_not_expression: (ast: LogicalNotExpressionASTNode, context: ExpressionContext) => LogicalNotExpression; bitwise_not_expression: (ast: BitwiseNotExpressionASTNode, context: ExpressionContext) => UnsupportedExpression; sizeof_expression: (ast: SizeofExpressionASTNode, context: ExpressionContext) => UnsupportedExpression; sizeof_type_expression: (ast: SizeofTypeExpressionASTNode, context: ExpressionContext) => UnsupportedExpression; new_expression: (ast: NewExpressionASTNode, context: ExpressionContext) => NewExpression | NewArrayExpression; delete_expression: (ast: DeleteExpressionASTNode, context: ExpressionContext) => DeleteExpression; delete_array_expression: (ast: DeleteArrayExpressionASTNode, context: ExpressionContext) => DeleteArrayExpression; static_cast_expression: (ast: StaticCastExpressionASTNode, context: ExpressionContext) => UnsupportedExpression; dynamic_cast_expression: (ast: DynamicCastExpressionASTNode, context: ExpressionContext) => UnsupportedExpression; reinterpret_cast_expression: (ast: ReinterpretCastExpressionASTNode, context: ExpressionContext) => UnsupportedExpression; const_cast_expression: (ast: ConstCastExpressionASTNode, context: ExpressionContext) => UnsupportedExpression; subscript_expression: (ast: SubscriptExpressionASTNode, context: ExpressionContext) => OperatorOverloadExpression | SubscriptExpression; function_call_expression: (ast: FunctionCallExpressionASTNode, context: ExpressionContext) => OperatorOverloadExpression | FunctionCallExpression | MagicFunctionCallExpression; dot_expression: (ast: DotExpressionASTNode, context: ExpressionContext) => DotExpression; arrow_expression: (ast: ArrowExpressionASTNode, context: ExpressionContext) => ArrowExpression; postfix_increment_expression: (ast: PostfixIncrementExpressionASTNode, context: ExpressionContext) => PostfixIncrementExpression; construct_expression: (ast: ConstructExpressionASTNode, context: ExpressionContext) => UnsupportedExpression; identifier_expression: (ast: IdentifierExpressionASTNode, context: ExpressionContext) => IdentifierExpression; this_expression: (ast: ThisExpressionASTNode, context: ExpressionContext) => ThisExpression; nullptr_expression: (ast: NullptrExpressionASTNode, context: ExpressionContext) => NullptrExpression; numeric_literal_expression: (ast: NumericLiteralASTNode, context: ExpressionContext) => NumericLiteralExpression; string_literal_expression: (ast: StringLiteralASTNode, context: ExpressionContext) => StringLiteralExpression; parentheses_expression: (ast: ParenthesesExpressionASTNode, context: ExpressionContext) => ParenthesesExpression; initializer_list_expression: (ast: InitializerListExpressionASTNode, context: ExpressionContext) => InitializerListExpression; opaque_expression: (ast: OpaqueExpressionASTNode, context: ExpressionContext) => OpaqueExpression; anything_construct: (ast: AnythingConstructASTNode, context: ExpressionContext) => AnythingExpression; }; /** * Creates an expression construct based on a given expression AST node. * If the `ast` argument has a union type that is a subtype of `ExpressionASTNode`, * this function's return type is inferred as corresponding union of construct types. * @param ast An expression AST node. * @param context The context in which this expression occurs. */ export declare function createExpressionFromAST(ast: ASTType, context: ExpressionContext): ReturnType<(typeof ExpressionConstructsMap)[ASTType["construct_type"]]>; export declare type AnalyticExpression = OperatorOverloadExpression | CommaExpression | TernaryExpression | AssignmentExpression | CompoundAssignmentExpression | AnalyticBinaryOperatorExpression | AnalyticUnaryOperatorExpression | NewExpression | NewArrayExpression | DeleteExpression | DeleteArrayExpression | PostfixIncrementExpression | SubscriptExpression | DotExpression | ArrowExpression | FunctionCallExpression | IdentifierExpression | ThisExpression | NullptrExpression | NumericLiteralExpression | StringLiteralExpression | ParenthesesExpression | InitializerListExpression | OpaqueExpression | MagicFunctionCallExpression | AuxiliaryExpression | UnsupportedExpression | ImplicitConversion; export declare type TypedExpressionKinds = { "unsupported_expression": never; "anything_construct": never; "invalid_operator_overload_expression": never; "comma_expression": T extends NonNullable ? V extends NonNullable ? TypedCommaExpression : never : NonNullable extends T ? V extends NonNullable ? TypedCommaExpression : never : never; "ternary_expression": T extends NonNullable ? V extends NonNullable ? TypedTernaryExpression : never : NonNullable extends T ? V extends NonNullable ? TypedTernaryExpression : never : never; "assignment_expression": T extends NonNullable ? V extends NonNullable ? TypedAssignmentExpression : never : NonNullable extends T ? V extends NonNullable ? TypedAssignmentExpression : never : never; "compound_assignment_expression": T extends NonNullable ? V extends NonNullable ? TypedCompoundAssignmentExpression : never : NonNullable extends T ? V extends NonNullable ? TypedCompoundAssignmentExpression : never : never; "arithmetic_binary_operator_expression": T extends NonNullable ? V extends NonNullable ? TypedArithmeticBinaryOperatorExpression : never : NonNullable extends T ? V extends NonNullable ? TypedArithmeticBinaryOperatorExpression : never : never; "pointer_difference_expression": T extends NonNullable ? V extends NonNullable ? TypedPointerDifferenceExpression : never : NonNullable extends T ? V extends NonNullable ? TypedPointerDifferenceExpression : never : never; "pointer_offset_expression": T extends NonNullable ? V extends NonNullable ? TypedPointerOffsetExpression : never : NonNullable extends T ? V extends NonNullable ? TypedPointerOffsetExpression : never : never; "output_operator_expression": T extends NonNullable ? V extends NonNullable ? TypedOutputOperatorExpression : never : NonNullable extends T ? V extends NonNullable ? TypedOutputOperatorExpression : never : never; "input_operator_expression": T extends NonNullable ? V extends NonNullable ? TypedInputOperatorExpression : never : NonNullable extends T ? V extends NonNullable ? TypedInputOperatorExpression : never : never; "relational_binary_operator_expression": T extends NonNullable ? V extends NonNullable ? TypedRelationalBinaryOperatorExpression : never : NonNullable extends T ? V extends NonNullable ? TypedRelationalBinaryOperatorExpression : never : never; "pointer_comparison_expression": T extends NonNullable ? V extends NonNullable ? TypedPointerComparisonExpression : never : NonNullable extends T ? V extends NonNullable ? TypedPointerComparisonExpression : never : never; "logical_binary_operator_expression": T extends NonNullable ? V extends NonNullable ? TypedLogicalBinaryOperatorExpression : never : NonNullable extends T ? V extends NonNullable ? TypedLogicalBinaryOperatorExpression : never : never; "non_member_operator_overload_expression": T extends NonNullable ? V extends NonNullable ? TypedNonMemberOperatorOverloadExpression : never : NonNullable extends T ? V extends NonNullable ? TypedNonMemberOperatorOverloadExpression : never : never; "member_operator_overload_expression": T extends NonNullable ? V extends NonNullable ? TypedMemberOperatorOverloadExpression : never : NonNullable extends T ? V extends NonNullable ? TypedMemberOperatorOverloadExpression : never : never; "prefix_increment_expression": T extends NonNullable ? V extends NonNullable ? TypedPrefixIncrementExpression : never : NonNullable extends T ? V extends NonNullable ? TypedPrefixIncrementExpression : never : never; "dereference_expression": T extends NonNullable ? V extends NonNullable ? TypedDereferenceExpression : never : NonNullable extends T ? V extends NonNullable ? TypedDereferenceExpression : never : never; "address_of_expression": T extends NonNullable ? V extends NonNullable ? TypedAddressOfExpression : never : NonNullable extends T ? V extends NonNullable ? TypedAddressOfExpression : never : never; "new_expression": T extends NonNullable ? V extends NonNullable ? TypedNewExpression : never : NonNullable extends T ? V extends NonNullable ? TypedNewExpression : never : never; "new_array_expression": T extends NonNullable ? V extends NonNullable ? TypedNewArrayExpression : never : NonNullable extends T ? V extends NonNullable ? TypedNewArrayExpression : never : never; "delete_expression": T extends NonNullable ? V extends NonNullable ? TypedDeleteExpression : never : NonNullable extends T ? V extends NonNullable ? TypedDeleteExpression : never : never; "delete_array_expression": T extends NonNullable ? V extends NonNullable ? TypedDeleteArrayExpression : never : NonNullable extends T ? V extends NonNullable ? TypedDeleteArrayExpression : never : never; "this_expression": T extends NonNullable ? V extends NonNullable ? TypedThisExpression : never : NonNullable extends T ? V extends NonNullable ? TypedThisExpression : never : never; "nullptr_expression": T extends NonNullable ? V extends NonNullable ? TypedNullptrExpression : never : NonNullable extends T ? V extends NonNullable ? TypedNullptrExpression : never : never; "unary_plus_expression": T extends NonNullable ? V extends NonNullable ? TypedUnaryPlusExpression : never : NonNullable extends T ? V extends NonNullable ? TypedUnaryPlusExpression : never : never; "unary_minus_expression": T extends NonNullable ? V extends NonNullable ? TypedUnaryMinusExpression : never : NonNullable extends T ? V extends NonNullable ? TypedUnaryMinusExpression : never : never; "logical_not_expression": T extends NonNullable ? V extends NonNullable ? TypedLogicalNotExpression : never : NonNullable extends T ? V extends NonNullable ? TypedLogicalNotExpression : never : never; "postfix_increment_expression": T extends NonNullable ? V extends NonNullable ? TypedPostfixIncrementExpression : never : NonNullable extends T ? V extends NonNullable ? TypedPostfixIncrementExpression : never : never; "subscript_expression": T extends NonNullable ? V extends NonNullable ? TypedSubscriptExpression : never : NonNullable extends T ? V extends NonNullable ? TypedSubscriptExpression : never : never; "dot_expression": V extends NonNullable ? (T extends CompleteObjectType ? TypedObjectDotExpression : T extends FunctionType ? TypedFunctionDotExpression : CompleteObjectType extends T ? FunctionType extends T ? TypedObjectDotExpression | TypedFunctionDotExpression : never : never) : never; "arrow_expression": V extends NonNullable ? (T extends CompleteObjectType ? TypedObjectArrowExpression : T extends FunctionType ? TypedFunctionArrowExpression : CompleteObjectType extends T ? FunctionType extends T ? TypedObjectArrowExpression | TypedFunctionArrowExpression : never : never) : never; "identifier_expression": V extends NonNullable ? (T extends CompleteObjectType ? TypedObjectIdentifierExpression : T extends FunctionType ? TypedFunctionIdentifierExpression : CompleteObjectType extends T ? FunctionType extends T ? TypedObjectIdentifierExpression | TypedFunctionIdentifierExpression : never : never) : never; "numeric_literal_expression": T extends NonNullable ? V extends NonNullable ? TypedNumericLiteralExpression : never : NonNullable extends T ? V extends NonNullable ? TypedNumericLiteralExpression : never : never; "string_literal_expression": T extends NonNullable ? V extends NonNullable ? TypedStringLiteralExpression : never : NonNullable extends T ? V extends NonNullable ? TypedStringLiteralExpression : never : never; "parentheses_expression": T extends NonNullable ? V extends NonNullable ? TypedParenthesesExpression : never : NonNullable extends T ? V extends NonNullable ? TypedParenthesesExpression : never : never; "initializer_list_expression": T extends NonNullable ? V extends NonNullable ? TypedInitializerListExpression : never : NonNullable extends T ? V extends NonNullable ? TypedInitializerListExpression : never : never; "opaque_expression": T extends NonNullable ? V extends NonNullable ? TypedOpaqueExpression : never : NonNullable extends T ? V extends NonNullable ? TypedOpaqueExpression : never : never; "auxiliary_expression": T extends NonNullable ? V extends NonNullable ? TypedAuxiliaryExpression : never : NonNullable extends T ? V extends NonNullable ? TypedAuxiliaryExpression : never : never; "magic_function_call_expression": T extends NonNullable ? V extends NonNullable ? TypedMagicFunctionCallExpression : never : NonNullable extends T ? V extends NonNullable ? TypedMagicFunctionCallExpression : never : never; "function_call_expression": T extends NonNullable ? V extends NonNullable ? TypedFunctionCallExpression : never : NonNullable extends T ? V extends NonNullable ? TypedFunctionCallExpression : never : never; "ImplicitConversion": T extends NonNullable ? V extends NonNullable ? TypedImplicitConversion : never : NonNullable extends T ? V extends NonNullable ? TypedImplicitConversion : never : never; }; export declare type CompiledExpressionKinds = { "unsupported_expression": never; "anything_construct": never; "invalid_operator_overload_expression": never; "comma_expression": T extends NonNullable ? V extends NonNullable ? CompiledCommaExpression : never : never; "ternary_expression": T extends NonNullable ? V extends NonNullable ? CompiledTernaryExpression : never : never; "assignment_expression": T extends NonNullable ? V extends NonNullable ? CompiledAssignmentExpression : never : never; "compound_assignment_expression": T extends NonNullable ? V extends NonNullable ? CompiledCompoundAssignmentExpression : never : never; "arithmetic_binary_operator_expression": T extends NonNullable ? V extends NonNullable ? CompiledArithmeticBinaryOperatorExpression : never : NonNullable extends T ? V extends NonNullable ? CompiledArithmeticBinaryOperatorExpression : never : never; "pointer_difference_expression": T extends NonNullable ? V extends NonNullable ? CompiledPointerDifferenceExpression : never : never; "pointer_offset_expression": T extends NonNullable ? V extends NonNullable ? CompiledPointerOffsetExpression : never : never; "output_operator_expression": T extends NonNullable ? V extends NonNullable ? CompiledOutputOperatorExpression : never : never; "input_operator_expression": T extends NonNullable ? V extends NonNullable ? CompiledInputOperatorExpression : never : never; "relational_binary_operator_expression": T extends NonNullable ? V extends NonNullable ? CompiledRelationalBinaryOperatorExpression : never : never; "pointer_comparison_expression": T extends NonNullable ? V extends NonNullable ? CompiledPointerComparisonExpression : never : never; "logical_binary_operator_expression": T extends NonNullable ? V extends NonNullable ? CompiledLogicalBinaryOperatorExpression : never : never; "non_member_operator_overload_expression": T extends NonNullable ? V extends NonNullable ? CompiledNonMemberOperatorOverloadExpression : never : never; "member_operator_overload_expression": T extends NonNullable ? V extends NonNullable ? CompiledMemberOperatorOverloadExpression : never : never; "prefix_increment_expression": T extends NonNullable ? V extends NonNullable ? CompiledPrefixIncrementExpression : never : never; "dereference_expression": T extends NonNullable ? V extends NonNullable ? CompiledDereferenceExpression : never : never; "address_of_expression": T extends NonNullable ? V extends NonNullable ? CompiledAddressOfExpression : never : never; "new_expression": T extends NonNullable ? V extends NonNullable ? CompiledNewExpression : never : never; "new_array_expression": T extends NonNullable ? V extends NonNullable ? CompiledNewArrayExpression : never : never; "delete_expression": T extends NonNullable ? V extends NonNullable ? CompiledDeleteExpression : never : never; "delete_array_expression": T extends NonNullable ? V extends NonNullable ? CompiledDeleteArrayExpression : never : never; "this_expression": T extends NonNullable ? V extends NonNullable ? CompiledThisExpression : never : never; "nullptr_expression": T extends NonNullable ? V extends NonNullable ? CompiledNullptrExpression : never : never; "unary_plus_expression": T extends NonNullable ? V extends NonNullable ? CompiledUnaryPlusExpression : never : never; "unary_minus_expression": T extends NonNullable ? V extends NonNullable ? CompiledUnaryMinusExpression : never : never; "logical_not_expression": T extends NonNullable ? V extends NonNullable ? CompiledLogicalNotExpression : never : never; "postfix_increment_expression": T extends NonNullable ? V extends NonNullable ? CompiledPrefixIncrementExpression : never : never; "subscript_expression": T extends NonNullable ? V extends NonNullable ? CompiledSubscriptExpression : never : never; "dot_expression": V extends NonNullable ? (T extends CompleteObjectType ? CompiledObjectDotExpression : T extends FunctionType ? CompiledFunctionDotExpression : never) : never; "arrow_expression": V extends NonNullable ? (T extends CompleteObjectType ? CompiledObjectArrowExpression : T extends FunctionType ? CompiledFunctionArrowExpression : never) : never; "identifier_expression": V extends NonNullable ? (T extends CompleteObjectType ? CompiledObjectIdentifierExpression : T extends FunctionType ? CompiledFunctionIdentifierExpression : never) : never; "numeric_literal_expression": T extends NonNullable ? V extends NonNullable ? CompiledNumericLiteralExpression : never : never; "string_literal_expression": T extends NonNullable ? V extends NonNullable ? CompiledStringLiteralExpression : never : never; "parentheses_expression": T extends NonNullable ? V extends NonNullable ? CompiledParenthesesExpression : never : never; "initializer_list_expression": T extends NonNullable ? V extends NonNullable ? CompiledInitializerListExpression : never : never; "opaque_expression": T extends NonNullable ? V extends NonNullable ? CompiledOpaqueExpression : never : never; "auxiliary_expression": T extends NonNullable ? V extends NonNullable ? CompiledAuxiliaryExpression : never : never; "magic_function_call_expression": T extends NonNullable ? V extends NonNullable ? CompiledMagicFunctionCallExpression : never : never; "function_call_expression": T extends NonNullable ? V extends NonNullable ? CompiledFunctionCallExpression : never : never; "ImplicitConversion": T extends NonNullable ? V extends NonNullable ? CompiledImplicitConversion : never : never; }; export declare type AnalyticTypedExpression, V extends ValueCategory = NonNullable> = TypedExpressionKinds[C["construct_type"]]; export declare type AnalyticCompiledExpression, V extends ValueCategory = NonNullable> = CompiledExpressionKinds[C["construct_type"]]; declare const ExpressionConstructsRuntimeMap: { unsupported_expression: (construct: UnsupportedExpression, parent: RuntimeConstruct) => never; anything_construct: (construct: AnythingExpression, parent: RuntimeConstruct) => never; invalid_operator_overload_expression: (construct: UnsupportedExpression, parent: RuntimeConstruct) => never; comma_expression: (construct: CompiledCommaExpression, parent: RuntimeConstruct) => RuntimeComma; ternary_expression: (construct: CompiledTernaryExpression, parent: RuntimeConstruct) => RuntimeTernary; assignment_expression: (construct: CompiledAssignmentExpression, parent: RuntimeConstruct) => RuntimeAssignment; compound_assignment_expression: (construct: CompiledCompoundAssignmentExpression, parent: RuntimeConstruct) => RuntimeCompoundAssignment; arithmetic_binary_operator_expression: (construct: CompiledArithmeticBinaryOperatorExpression, parent: RuntimeConstruct) => RuntimeArithmeticBinaryOperator; pointer_difference_expression: (construct: CompiledPointerDifferenceExpression, parent: RuntimeConstruct) => RuntimePointerDifference; pointer_offset_expression: (construct: CompiledPointerOffsetExpression, parent: RuntimeConstruct) => RuntimePointerOffset; output_operator_expression: (construct: CompiledOutputOperatorExpression, parent: RuntimeConstruct) => RuntimeOutputOperatorExpression; input_operator_expression: (construct: CompiledInputOperatorExpression, parent: RuntimeConstruct) => RuntimeInputOperatorExpression; relational_binary_operator_expression: (construct: CompiledRelationalBinaryOperatorExpression, parent: RuntimeConstruct) => RuntimeRelationalBinaryOperator; pointer_comparison_expression: (construct: CompiledPointerComparisonExpression, parent: RuntimeConstruct) => RuntimePointerComparisonExpression>; logical_binary_operator_expression: (construct: CompiledLogicalBinaryOperatorExpression, parent: RuntimeConstruct) => RuntimeLogicalBinaryOperatorExpression; non_member_operator_overload_expression: (construct: CompiledNonMemberOperatorOverloadExpression, parent: RuntimeConstruct) => RuntimeNonMemberOperatorOverloadExpression; member_operator_overload_expression: (construct: CompiledMemberOperatorOverloadExpression, parent: RuntimeConstruct) => RuntimeMemberOperatorOverloadExpression; prefix_increment_expression: (construct: CompiledPrefixIncrementExpression, parent: RuntimeConstruct) => RuntimePrefixIncrementExpression; dereference_expression: (construct: CompiledDereferenceExpression, parent: RuntimeConstruct) => RuntimeDereferenceExpression; address_of_expression: >(construct: CompiledAddressOfExpression, parent: RuntimeConstruct) => RuntimeAddressOfExpression; new_expression: >(construct: CompiledNewExpression, parent: RuntimeConstruct) => RuntimeNewExpression; new_array_expression: >(construct: CompiledNewArrayExpression, parent: RuntimeConstruct) => RuntimeNewArrayExpression; delete_expression: (construct: CompiledDeleteExpression, parent: RuntimeConstruct) => RuntimeDeleteExpression; delete_array_expression: (construct: CompiledDeleteArrayExpression, parent: RuntimeConstruct) => RuntimeDeleteArrayExpression; this_expression: >(construct: CompiledThisExpression, parent: RuntimeConstruct) => RuntimeThisExpression; nullptr_expression: (construct: CompiledNullptrExpression, parent: RuntimeConstruct) => RuntimeNullptrExpression; unary_plus_expression: >(construct: CompiledUnaryPlusExpression, parent: RuntimeConstruct) => RuntimeUnaryPlusExpression; unary_minus_expression: (construct: CompiledUnaryMinusExpression, parent: RuntimeConstruct) => RuntimeUnaryMinusExpression; logical_not_expression: (construct: CompiledLogicalNotExpression, parent: RuntimeConstruct) => RuntimeLogicalNotExpression; postfix_increment_expression: (construct: CompiledPostfixIncrementExpression, parent: RuntimeConstruct) => RuntimePostfixIncrementExpression; subscript_expression: (construct: CompiledSubscriptExpression, parent: RuntimeConstruct) => RuntimeSubscriptExpression; dot_expression: (construct: CompiledObjectDotExpression | CompiledFunctionDotExpression, parent: RuntimeConstruct) => RuntimeObjectDotExpression | RuntimeFunctionDotExpression; arrow_expression: (construct: CompiledObjectArrowExpression | CompiledFunctionArrowExpression, parent: RuntimeConstruct) => RuntimeObjectArrowExpression | RuntimeFunctionArrowExpression; identifier_expression: (construct: CompiledObjectIdentifierExpression | CompiledFunctionIdentifierExpression, parent: RuntimeConstruct) => RuntimeObjectIdentifierExpression | RuntimeFunctionIdentifierExpression; numeric_literal_expression: (construct: CompiledNumericLiteralExpression, parent: RuntimeConstruct) => RuntimeNumericLiteral; string_literal_expression: (construct: CompiledStringLiteralExpression, parent: RuntimeConstruct) => RuntimeStringLiteralExpression; parentheses_expression: (construct: CompiledParenthesesExpression, parent: RuntimeConstruct) => RuntimeParentheses; initializer_list_expression: (construct: CompiledInitializerListExpression, parent: RuntimeConstruct) => RuntimeInitializerListExpression; opaque_expression: (construct: CompiledOpaqueExpression, parent: RuntimeConstruct) => RuntimeOpaqueExpression; auxiliary_expression: (construct: CompiledExpression, parent: RuntimeConstruct) => never; magic_function_call_expression: (construct: CompiledMagicFunctionCallExpression, parent: RuntimeConstruct) => RuntimeMagicFunctionCallExpression; function_call_expression: (construct: CompiledFunctionCallExpression, parent: RuntimeConstruct) => RuntimeFunctionCallExpression; ImplicitConversion: (construct: CompiledImplicitConversion, parent: RuntimeConstruct) => RuntimeImplicitConversion; }; export declare function createRuntimeExpression(construct: UnsupportedExpression, parent: RuntimeConstruct): never; export declare function createRuntimeExpression(construct: AnythingExpression, parent: RuntimeConstruct): never; export declare function createRuntimeExpression(construct: InvalidOperatorOverloadExpression, parent: RuntimeConstruct): never; export declare function createRuntimeExpression(construct: CompiledCommaExpression, parent: RuntimeConstruct): RuntimeComma; export declare function createRuntimeExpression(construct: CompiledTernaryExpression, parent: RuntimeConstruct): RuntimeTernary; export declare function createRuntimeExpression(construct: CompiledAssignmentExpression, parent: RuntimeConstruct): RuntimeAssignment; export declare function createRuntimeExpression(construct: CompiledCompoundAssignmentExpression, parent: RuntimeConstruct): RuntimeCompoundAssignment; export declare function createRuntimeExpression(construct: CompiledArithmeticBinaryOperatorExpression, parent: RuntimeConstruct): RuntimeArithmeticBinaryOperator; export declare function createRuntimeExpression(construct: CompiledPointerDifferenceExpression, parent: RuntimeConstruct): RuntimePointerDifference; export declare function createRuntimeExpression(construct: CompiledPointerOffsetExpression, parent: RuntimeConstruct): RuntimePointerOffset; export declare function createRuntimeExpression(construct: CompiledPointerOffsetExpression, parent: RuntimeConstruct): RuntimePointerOffset; export declare function createRuntimeExpression(construct: CompiledRelationalBinaryOperatorExpression, parent: RuntimeConstruct): RuntimeRelationalBinaryOperator; export declare function createRuntimeExpression(construct: CompiledPointerComparisonExpression, parent: RuntimeConstruct): RuntimePointerComparisonExpression; export declare function createRuntimeExpression(construct: CompiledLogicalBinaryOperatorExpression, parent: RuntimeConstruct): RuntimeLogicalBinaryOperatorExpression; export declare function createRuntimeExpression(construct: CompiledNonMemberOperatorOverloadExpression, parent: RuntimeConstruct): RuntimeNonMemberOperatorOverloadExpression; export declare function createRuntimeExpression(construct: CompiledMemberOperatorOverloadExpression, parent: RuntimeConstruct): RuntimeMemberOperatorOverloadExpression; export declare function createRuntimeExpression(construct: CompiledOutputOperatorExpression, parent: RuntimeConstruct): RuntimeOutputOperatorExpression; export declare function createRuntimeExpression(construct: CompiledInputOperatorExpression, parent: RuntimeConstruct): RuntimeInputOperatorExpression; export declare function createRuntimeExpression(construct: CompiledPrefixIncrementExpression, parent: RuntimeConstruct): RuntimePrefixIncrementExpression; export declare function createRuntimeExpression(construct: CompiledDereferenceExpression, parent: RuntimeConstruct): RuntimeDereferenceExpression; export declare function createRuntimeExpression(construct: CompiledAddressOfExpression, parent: RuntimeConstruct): RuntimeAddressOfExpression; export declare function createRuntimeExpression>(construct: CompiledNewExpression, parent: RuntimeConstruct): RuntimeNewExpression; export declare function createRuntimeExpression>(construct: CompiledNewArrayExpression, parent: RuntimeConstruct): RuntimeNewArrayExpression; export declare function createRuntimeExpression(construct: CompiledDeleteArrayExpression, parent: RuntimeConstruct): RuntimeDeleteArrayExpression; export declare function createRuntimeExpression>(construct: CompiledThisExpression, parent: RuntimeConstruct): RuntimeThisExpression; export declare function createRuntimeExpression(construct: CompiledNullptrExpression, parent: RuntimeConstruct): RuntimeNullptrExpression; export declare function createRuntimeExpression(construct: CompiledUnaryPlusExpression, parent: RuntimeConstruct): RuntimeUnaryPlusExpression; export declare function createRuntimeExpression(construct: CompiledUnaryMinusExpression, parent: RuntimeConstruct): RuntimeUnaryMinusExpression; export declare function createRuntimeExpression(construct: CompiledLogicalNotExpression, parent: RuntimeConstruct): RuntimeLogicalNotExpression; export declare function createRuntimeExpression(construct: CompiledPostfixIncrementExpression, parent: RuntimeConstruct): RuntimePostfixIncrementExpression; export declare function createRuntimeExpression(construct: CompiledSubscriptExpression, parent: RuntimeConstruct): RuntimeSubscriptExpression; export declare function createRuntimeExpression(construct: CompiledObjectIdentifierExpression, parent: RuntimeConstruct): RuntimeObjectIdentifierExpression; export declare function createRuntimeExpression(construct: CompiledFunctionIdentifierExpression, parent: RuntimeConstruct): RuntimeFunctionIdentifierExpression; export declare function createRuntimeExpression(construct: CompiledObjectIdentifierExpression | CompiledFunctionIdentifierExpression, parent: RuntimeConstruct): RuntimeObjectIdentifierExpression | RuntimeFunctionIdentifierExpression; export declare function createRuntimeExpression(construct: CompiledObjectDotExpression, parent: RuntimeConstruct): RuntimeObjectDotExpression; export declare function createRuntimeExpression(construct: CompiledFunctionDotExpression, parent: RuntimeConstruct): RuntimeFunctionDotExpression; export declare function createRuntimeExpression(construct: CompiledObjectDotExpression | CompiledFunctionDotExpression, parent: RuntimeConstruct): RuntimeObjectDotExpression | RuntimeFunctionDotExpression; export declare function createRuntimeExpression(construct: CompiledObjectArrowExpression, parent: RuntimeConstruct): RuntimeObjectArrowExpression; export declare function createRuntimeExpression(construct: CompiledFunctionArrowExpression, parent: RuntimeConstruct): RuntimeFunctionArrowExpression; export declare function createRuntimeExpression(construct: CompiledObjectArrowExpression | CompiledFunctionArrowExpression, parent: RuntimeConstruct): RuntimeObjectArrowExpression | RuntimeFunctionDotExpression; export declare function createRuntimeExpression(construct: CompiledNumericLiteralExpression, parent: RuntimeConstruct): RuntimeNumericLiteral; export declare function createRuntimeExpression(construct: CompiledStringLiteralExpression, parent: RuntimeConstruct): RuntimeStringLiteralExpression; export declare function createRuntimeExpression(construct: CompiledParenthesesExpression, parent: RuntimeConstruct): RuntimeParentheses; export declare function createRuntimeExpression(construct: CompiledInitializerListExpression, parent: RuntimeConstruct): RuntimeInitializerListExpression; export declare function createRuntimeExpression(construct: AuxiliaryExpression, parent: RuntimeConstruct): never; export declare function createRuntimeExpression>(construct: CompiledMagicFunctionCallExpression, parent: RuntimeConstruct): RuntimeMagicFunctionCallExpression; export declare function createRuntimeExpression>(construct: CompiledFunctionCallExpression, parent: RuntimeConstruct): RuntimeFunctionCallExpression; export declare function createRuntimeExpression(construct: CompiledImplicitConversion, parent: RuntimeConstruct): RuntimeImplicitConversion; export declare function createRuntimeExpression>(construct: CompiledConstructType, parent: RuntimeConstruct): ReturnType<(typeof ExpressionConstructsRuntimeMap)[CompiledConstructType["construct_type"]]>; export declare function createRuntimeExpression(construct: CompiledExpression, parent: RuntimeConstruct): RuntimeExpression; export {};