Mercurial > projects > ldc
view gen/nested.h @ 1317:4099548c80e0
Allocate objects on the stack if they (a) don't have a destructor, and
(b) don't override the delete operator (on top of the regular conditions for
stack allocation that also apply to arrays, structs, etc.).
The "no destructor" clause is not strictly necessary, but calling them at the
right time would be tricky to say the least; it would involve, among other
things, "manually" inserting a try-finally block around anything that might
throw exceptions not caught in the current function.
Note: objects with custom new operators are automatically ignored because they
don't use the regular allocation runtime call, so there's no need to pay special
attention to them.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Sat, 09 May 2009 00:50:15 +0200 |
parents | 83d3b25c2213 |
children |
line wrap: on
line source
#ifndef LDC_GEN_NESTED_H #define LDC_GEN_NESTED_H #include "declaration.h" #include "mtype.h" #include "gen/dvalue.h" /////////////////////////////////////////////////////////// // Nested variable and context helpers /////////////////////////////////////////////////////////// /// Creates the context value for a nested function. void DtoCreateNestedContext(FuncDeclaration* fd); /// Allocate space for variable accessed from nested function. void DtoNestedInit(VarDeclaration* vd); /// Gets the context value for a call to a nested function or newing a nested /// class with arbitrary nesting. llvm::Value* DtoNestedContext(Loc loc, Dsymbol* sym); /// Gets the DValue of a nested variable with arbitrary nesting. DValue* DtoNestedVariable(Loc loc, Type* astype, VarDeclaration* vd); #endif