dmd.clone

Define the implicit opEquals, opAssign, post blit, copy constructor and destructor for structs.

Members

Functions

buildDtor
DtorDeclaration buildDtor(AggregateDeclaration ad, Scope* sc)

Create inclusive destructor for struct/class by aggregating all the destructors in dtors[] with the destructors for all the members.

buildExternDDtor
DtorDeclaration buildExternDDtor(AggregateDeclaration ad, Scope* sc)

build a shim function around the compound dtor that translates a C++ destructor to a destructor with extern(D) calling convention

buildInv
FuncDeclaration buildInv(AggregateDeclaration ad, Scope* sc)

Create inclusive invariant for struct/class by aggregating all the invariants in invs[].

buildOpAssign
FuncDeclaration buildOpAssign(StructDeclaration sd, Scope* sc)

Build opAssign for a struct.

buildOpEquals
FuncDeclaration buildOpEquals(StructDeclaration sd, Scope* sc)

Build opEquals for struct. const bool opEquals(const S s) { ... }

buildXopCmp
FuncDeclaration buildXopCmp(StructDeclaration sd, Scope* sc)

Build __xopCmp for TypeInfo_Struct static bool __xopCmp(ref const S p, ref const S q) { return p.opCmp(q); }

buildXopEquals
FuncDeclaration buildXopEquals(StructDeclaration sd, Scope* sc)

Build __xopEquals for TypeInfo_Struct static bool __xopEquals(ref const S p, ref const S q) { return p == q; }

buildXtoHash
FuncDeclaration buildXtoHash(StructDeclaration sd, Scope* sc)

Build __xtoHash for non-bitwise hashing static hash_t xtoHash(ref const S p) nothrow @trusted;

hasIdentityOpAssign
FuncDeclaration hasIdentityOpAssign(AggregateDeclaration ad, Scope* sc)

Check given aggregate actually has an identity opAssign or not.

mergeFuncAttrs
StorageClass mergeFuncAttrs(StorageClass s1, FuncDeclaration f)

Merge function attributes pure, nothrow, @safe, @nogc, and @disable from f into s1.

needOpEquals
bool needOpEquals(StructDeclaration sd)

We need an opEquals for the struct if any fields has an opEquals. Generate one if a user-specified one does not exist.

Meta