/// /// import { CompleteObjectType, AtomicType, IntegralType, PointerType, BoundedArrayType, Bool, ArithmeticType, Int, Float, Double, ArrayElemType, FloatingPointType, CompleteClassType, ExpressionType } from "../../compilation/types"; import { ConstructDescription, SemanticContext } from "../../compilation/contexts"; import { SuccessfullyCompiled, RuntimeConstruct } from "../CPPConstruct"; import { Value } from "../../runtime/Value"; import { VCResultTypes, ValueCategory, Expression, CompiledExpression, TypedExpression, SpecificTypedExpression, t_TypedExpression } from "./Expression"; import { RuntimeExpression } from "./RuntimeExpression"; import { LValueToRValueOutlet, ArrayToPointerOutlet, TypeConversionOutlet, QualificationConversionOutlet, StreamToBoolOutlet } from "../../../view/constructs/TypeConversionOutlets"; import { ConstructOutlet } from "../../../view/constructs/ConstructOutlet"; import { AnalyticConstruct } from "../../../analysis/predicates"; import { CompiledTemporaryDeallocator } from "../TemporaryDeallocator"; import { SimpleRuntimeExpression } from "./SimpleRuntimeExpression"; import { CompiledNullptrExpression } from "./NullptrExpression"; import { CompiledNumericLiteralExpression } from "./NumericLiteralExpression"; export declare abstract class ImplicitConversion extends Expression { readonly construct_type = "ImplicitConversion"; readonly from: TypedExpression; readonly type: ToType; readonly valueCategory: ToVC; readonly conversionLength: number; constructor(from: TypedExpression, toType: ToType, valueCategory: ToVC); createRuntimeExpression(this: CompiledImplicitConversion, parent: RuntimeConstruct): RuntimeImplicitConversion; createRuntimeExpression(this: CompiledExpression, parent: RuntimeConstruct): never; abstract operate(fromEvalResult: VCResultTypes): VCResultTypes; describeEvalResult(depth: number): ConstructDescription; } export interface TypedImplicitConversion extends ImplicitConversion, t_TypedExpression { } export interface CompiledImplicitConversion extends TypedImplicitConversion, SuccessfullyCompiled { readonly temporaryDeallocator?: CompiledTemporaryDeallocator; readonly from: CompiledExpression; } export declare class RuntimeImplicitConversion extends SimpleRuntimeExpression> { readonly from: RuntimeExpression; constructor(model: CompiledImplicitConversion, parent: RuntimeConstruct); protected operate(): void; } export declare class LValueToRValueConversion extends ImplicitConversion { constructor(from: TypedExpression); operate(fromEvalResult: VCResultTypes): VCResultTypes; createDefaultOutlet(this: CompiledLValueToRValueConversion, element: JQuery, parent?: ConstructOutlet): LValueToRValueOutlet; } export interface TypedLValueToRValueConversion extends LValueToRValueConversion, t_TypedExpression { } export interface CompiledLValueToRValueConversion extends TypedLValueToRValueConversion, SuccessfullyCompiled { readonly temporaryDeallocator?: CompiledTemporaryDeallocator; readonly from: CompiledExpression; } export declare class ArrayToPointerConversion extends ImplicitConversion { constructor(from: TypedExpression); operate(fromEvalResult: VCResultTypes): Value>; createDefaultOutlet(this: CompiledArrayToPointerConversion, element: JQuery, parent?: ConstructOutlet): ArrayToPointerOutlet; } export interface TypedArrayToPointerConversion extends ArrayToPointerConversion, t_TypedExpression { } export interface CompiledArrayToPointerConversion extends TypedArrayToPointerConversion, SuccessfullyCompiled { readonly temporaryDeallocator?: CompiledTemporaryDeallocator; readonly from: CompiledExpression; } export declare class StreamToBoolConversion extends ImplicitConversion { constructor(from: TypedExpression); operate(fromEvalResult: VCResultTypes): Value; createDefaultOutlet(this: CompiledStreamToBoolConversion, element: JQuery, parent?: ConstructOutlet): StreamToBoolOutlet; } export interface TypedStreamToBoolConversion extends StreamToBoolConversion, t_TypedExpression { } export interface CompiledStreamToBoolConversion extends TypedStreamToBoolConversion, SuccessfullyCompiled { readonly temporaryDeallocator?: CompiledTemporaryDeallocator; readonly from: CompiledExpression; } /** * All type conversions ignore (top-level) cv-qualifications on the given destination * type. This is because type conversions only operate on prvalues of atomic type, * which cannot be cv-qualified. For convenience, the user may still specify a * cv-qualified type and the cv-unqualified version will be used instead. */ declare abstract class TypeConversion extends ImplicitConversion { constructor(from: TypedExpression, toType: ToType); createDefaultOutlet(this: CompiledTypeConversion, element: JQuery, parent?: ConstructOutlet): TypeConversionOutlet; } export interface TypedTypeConversion extends TypeConversion, t_TypedExpression { } export interface CompiledTypeConversion extends TypedTypeConversion, SuccessfullyCompiled { readonly temporaryDeallocator?: CompiledTemporaryDeallocator; readonly from: CompiledExpression; } declare abstract class NoOpTypeConversion extends TypeConversion { constructor(from: TypedExpression, toType: ToType); operate(fromEvalResult: VCResultTypes): VCResultTypes; } export declare type IntegerLiteralZero = CompiledNumericLiteralExpression & { value: Value & { rawValue: 0; }; } | CompiledNullptrExpression; export declare class NullPointerConversion

extends NoOpTypeConversion { readonly from: IntegerLiteralZero; constructor(from: IntegerLiteralZero, toType: P); } export interface TypedNullPointerConversion

extends NullPointerConversion

, t_TypedExpression { } export interface CompiledNullPointerConversion

extends TypedNullPointerConversion

, SuccessfullyCompiled { readonly temporaryDeallocator?: CompiledTemporaryDeallocator; readonly from: IntegerLiteralZero; } export declare class PointerConversion extends NoOpTypeConversion { } export interface TypedPointerConversion extends TypedTypeConversion { } export interface CompiledPointerConversion extends CompiledTypeConversion { } export declare abstract class ToBooleanConversion extends TypeConversion { constructor(from: TypedExpression); operate(fromEvalResult: VCResultTypes): Value; } export declare class PointerToBooleanConversion extends ToBooleanConversion { isSemanticallyEquivalent_impl(other: AnalyticConstruct, ec: SemanticContext): boolean; } export declare class FloatingToBooleanConversion extends ToBooleanConversion { } export declare class IntegralToBooleanConversion extends ToBooleanConversion { isSemanticallyEquivalent_impl(other: AnalyticConstruct, ec: SemanticContext): boolean; } export declare class IntegralPromotion extends NoOpTypeConversion { } export declare class IntegralConversion extends NoOpTypeConversion { } export declare class FloatingPointPromotion extends NoOpTypeConversion { constructor(from: TypedExpression); } export declare class FloatingPointConversion extends NoOpTypeConversion { } export declare class IntegralToFloatingConversion extends NoOpTypeConversion { } export declare class FloatingToIntegralConversion extends TypeConversion { operate(fromEvalResult: VCResultTypes): Value; } export declare class QualificationConversion extends ImplicitConversion { constructor(from: TypedExpression, toType: T); createDefaultOutlet(this: CompiledQualificationConversion, element: JQuery, parent?: ConstructOutlet): QualificationConversionOutlet; operate(fromEvalResult: VCResultTypes): VCResultTypes; } export interface TypedQualificationConversion extends QualificationConversion, t_TypedExpression { } export interface CompiledQualificationConversion extends TypedQualificationConversion, SuccessfullyCompiled { readonly temporaryDeallocator?: CompiledTemporaryDeallocator; readonly from: CompiledExpression; } export declare function convertToPRValue(from: SpecificTypedExpression): TypedExpression; export declare function convertToPRValue(from: TypedExpression, "lvalue">): TypedExpression, "prvalue">; export declare function convertToPRValue(from: SpecificTypedExpression | TypedExpression): TypedExpression; export declare function convertToPRValue(from: SpecificTypedExpression | TypedExpression): TypedExpression; export declare function convertToPRValue(from: TypedExpression): TypedExpression; export declare function typeConversion(from: TypedExpression, toType: Bool): TypedExpression; export declare function typeConversion(from: TypedExpression, toType: Float): TypedExpression; export declare function typeConversion(from: TypedExpression, toType: IntegralType): TypedExpression; export declare function typeConversion(from: TypedExpression, toType: IntegralType): TypedExpression; export declare function typeConversion(from: TypedExpression, toType: FloatingPointType): TypedExpression; export declare function typeConversion(from: TypedExpression, toType: FloatingPointType): TypedExpression; export declare function typeConversion(from: TypedExpression, toType: SimilarType): TypedExpression; export declare function typeConversion(from: TypedExpression, toType: ToType): TypedExpression | TypedExpression; export declare function qualificationConversion(from: TypedExpression, toType: AtomicType): TypedExpression; export interface StandardConversionOptions { readonly suppressLTR?: true; } /** * Attempts to generate a standard conversion sequence of the given expression to the given * destination type. * @param from The original expression * @param toType The destination type * @param options */ export declare function standardConversion(from: TypedExpression, toType: ExpressionType, options?: StandardConversionOptions): TypedExpression; export declare function integralPromotion(expr: TypedExpression): TypedExpression; export declare function isIntegerLiteralZero(from: Expression): from is IntegerLiteralZero; export declare function isConvertibleToPointer(from: Expression): from is SpecificTypedExpression | TypedExpression | IntegerLiteralZero; export declare function isConvertible(from: TypedExpression, toType: ExpressionType, options?: StandardConversionOptions): boolean; export declare function usualArithmeticConversions(leftOrig: SpecificTypedExpression, rightOrig: SpecificTypedExpression): TypedExpression[]; export {};