import { ArithmeticType, AtomicType } from "../../compilation/types"; import { ExpressionContext, ConstructDescription, SemanticContext } from "../../compilation/contexts"; import { SuccessfullyCompiled, RuntimeConstruct } from "../CPPConstruct"; import { Expression, CompiledExpression, TypedExpression, t_TypedExpression } from "./Expression"; import { RuntimeExpression } from "./RuntimeExpression"; import { AnalyticConstruct } from "../../../analysis/predicates"; import { CompiledTemporaryDeallocator } from "../TemporaryDeallocator"; import { ArithmeticBinaryOperatorExpressionASTNode, t_ArithmeticBinaryOperators } from "../../../ast/ast_expressions"; import { SimpleRuntimeExpression } from "./SimpleRuntimeExpression"; import { BinaryOperatorExpression } from "./BinaryOperatorExpression"; import { OperatorOverloadExpression } from "./OperatorOverloadExpression"; import { InputOperatorExpression } from "./InputOperatorExpression"; import { OutputOperatorExpression } from "./OutputOperatorExpression"; import { PointerOffsetExpression } from "./PointerOffsetExpression"; import { PointerDifferenceExpression } from "./PointerDifferenceExpression"; import { Value } from "../../runtime/Value"; export declare const ARITHMETIC_BINARY_OPERATIONS: { [k in t_ArithmeticBinaryOperators]: (left: Value, right: Value) => Value; }; export declare class ArithmeticBinaryOperatorExpression extends BinaryOperatorExpression { readonly construct_type = "arithmetic_binary_operator_expression"; readonly type?: ArithmeticType; readonly left: Expression; readonly right: Expression; readonly operator: t_ArithmeticBinaryOperators; protected constructor(context: ExpressionContext, ast: ArithmeticBinaryOperatorExpressionASTNode, left: Expression, right: Expression, operator: t_ArithmeticBinaryOperators); static createFromAST(ast: ArithmeticBinaryOperatorExpressionASTNode, context: ExpressionContext): ArithmeticBinaryOperatorExpression | PointerDifferenceExpression | PointerOffsetExpression | OutputOperatorExpression | InputOperatorExpression | OperatorOverloadExpression; describeEvalResult(depth: number): ConstructDescription; isSemanticallyEquivalent_impl(other: AnalyticConstruct, ec: SemanticContext): boolean; } export interface TypedArithmeticBinaryOperatorExpression extends ArithmeticBinaryOperatorExpression, t_TypedExpression { readonly type: T; readonly left: TypedExpression; readonly right: TypedExpression; } export interface CompiledArithmeticBinaryOperatorExpression extends TypedArithmeticBinaryOperatorExpression, SuccessfullyCompiled { readonly temporaryDeallocator?: CompiledTemporaryDeallocator; readonly left: CompiledExpression; readonly right: CompiledExpression; } export declare class RuntimeArithmeticBinaryOperator extends SimpleRuntimeExpression> { readonly left: RuntimeExpression; readonly right: RuntimeExpression; constructor(model: CompiledArithmeticBinaryOperatorExpression, parent: RuntimeConstruct); operate(): void; }