Mercurial > projects > ldc
diff gen/irstate.cpp @ 100:5071469303d4 trunk
[svn r104] TONS OF FIXES.
Split up declaration, constant initializer gen and definition for globals, structs, classes and functions.
Improved ClassInfo support (not complete), not in vtable yet.
Fixed a bunch of forward reference problems.
Much more. Major commit! :)
author | lindquist |
---|---|
date | Fri, 16 Nov 2007 08:21:47 +0100 |
parents | 61615fa85940 |
children | 855adfdb8d38 |
line wrap: on
line diff
--- a/gen/irstate.cpp Thu Nov 15 00:24:44 2007 +0100 +++ b/gen/irstate.cpp Fri Nov 16 08:21:47 2007 +0100 @@ -40,7 +40,7 @@ ir.state = this; } -IRFunction& IRState::func() +IRFunction* IRState::func() { assert(!functions.empty() && "Function stack is empty!"); return functions.back(); @@ -49,22 +49,22 @@ llvm::Function* IRState::topfunc() { assert(!functions.empty() && "Function stack is empty!"); - return functions.back().func; + return functions.back()->func; } TypeFunction* IRState::topfunctype() { assert(!functions.empty() && "Function stack is empty!"); - return functions.back().type; + return functions.back()->type; } llvm::Instruction* IRState::topallocapoint() { assert(!functions.empty() && "AllocaPoint stack is empty!"); - return functions.back().allocapoint; + return functions.back()->allocapoint; } -IRStruct& IRState::topstruct() +IRStruct* IRState::topstruct() { assert(!structs.empty() && "Struct vector is empty!"); return structs.back(); @@ -109,14 +109,16 @@ : recty(llvm::OpaqueType::get()) { type = 0; - queueFuncs = true; + defined = false; + constinited = false; } IRStruct::IRStruct(Type* t) : recty(llvm::OpaqueType::get()) { type = t; - queueFuncs = true; + defined = false; + constinited = false; } ////////////////////////////////////////////////////////////////////////////////////////// @@ -153,6 +155,7 @@ func = NULL; allocapoint = NULL; finallyretval = NULL; + defined = false; } ////////////////////////////////////////////////////////////////////////////////////////// @@ -169,3 +172,11 @@ e2 = r; v = val; } + +////////////////////////////////////////////////////////////////////////////////////////// + +IRGlobal::IRGlobal(VarDeclaration* v) : + type(llvm::OpaqueType::get()) +{ + var = v; +}