dmd.ctfeexpr

CTFE for expressions involving pointers, slices, array concatenation etc.

Members

Classes

CTFEExp
class CTFEExp

This type is only used by the interpreter.

ClassReferenceExp
class ClassReferenceExp

A reference to a class, or an interface. We need this when we point to a base class (we must record what the type is).

ThrownExceptionExp
class ThrownExceptionExp

Fake class which holds the thrown exception. Used for implementing exception handling.

Functions

assignInPlace
void assignInPlace(Expression dest, Expression src)

Assignment helper functions **************************

changeArrayLiteralLength
Expression changeArrayLiteralLength(UnionExp* pue, Loc loc, TypeArray arrayType, Expression oldval, size_t oldlen, size_t newlen)

Given array literal oldval of type ArrayLiteralExp or StringExp, of length oldlen, change its length to newlen. If the newlen is longer than oldlen, all new elements will be set to the default initializer for the element type.

createBlockDuplicatedArrayLiteral
ArrayLiteralExp createBlockDuplicatedArrayLiteral(UnionExp* pue, Loc loc, Type type, Expression elem, size_t dim)

Helper for NewExp Create an array literal consisting of 'elem' duplicated 'dim' times.

createBlockDuplicatedStringLiteral
StringExp createBlockDuplicatedStringLiteral(UnionExp* pue, Loc loc, Type type, dchar value, size_t dim, ubyte sz)

Helper for NewExp Create a string literal consisting of 'value' duplicated 'dim' times.

ctfeCmp
bool ctfeCmp(Loc loc, EXP op, Expression e1, Expression e2)

Evaluate >,<=, etc. Resolves slices before comparing. Returns 0 or 1

ctfeEqual
bool ctfeEqual(Loc loc, EXP op, Expression e1, Expression e2)

Evaluate ==, !=. Resolves slices before comparing. Returns 0 or 1

ctfeIdentity
bool ctfeIdentity(Loc loc, EXP op, Expression e1, Expression e2)

Evaluate is, !is. Resolves slices before comparing. Returns 0 or 1

findFieldIndexByName
int findFieldIndexByName(StructDeclaration sd, VarDeclaration v)

Same as getFieldIndex, but checks for a direct match with the VarDeclaration

intSignedCmp
bool intSignedCmp(EXP op, sinteger_t n1, sinteger_t n2)

Returns e1 OP e2; where OP is ==, !=, <, >=, etc. Result is 0 or 1

intUnsignedCmp
bool intUnsignedCmp(EXP op, dinteger_t n1, dinteger_t n2)

Returns e1 OP e2; where OP is ==, !=, <, >=, etc. Result is 0 or 1

isCtfeComparable
bool isCtfeComparable(Expression e)

Constant folding, with support for CTFE ************************** Return true if non-pointer expression e can be compared with >,is, ==, etc, using ctfeCmp, ctfeEqual, ctfeIdentity

isCtfeValueValid
bool isCtfeValueValid(Expression newval)

CTFE Sanity Checks **************************

isPointer
bool isPointer(Type t)

Pointer operations ***********************************

isTypeInfo_Class
bool isTypeInfo_Class(Type type)

TypeInfo operations ***********************************

needToCopyLiteral
bool needToCopyLiteral(Expression expr)

Aggregate literals (AA/string/array/struct) *****************

pointToSameMemoryBlock
bool pointToSameMemoryBlock(Expression agg1, Expression agg2)

Return true if agg1 and agg2 are pointers to the same memory block

realCmp
bool realCmp(EXP op, real_t r1, real_t r2)

Returns e1 OP e2; where OP is ==, !=, <, >=, etc. Result is 0 or 1

resolveSlice
Expression resolveSlice(Expression e, UnionExp* pue)

If e is a SliceExp, constant fold it.

specificCmp
bool specificCmp(EXP op, int rawCmp)

Returns cmp OP 0; where OP is ==, !=, <, >=, etc. Result is 0 or 1

voidInitLiteral
UnionExp voidInitLiteral(Type t, VarDeclaration var)

Void initialization **************************

Meta