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;
+}