diff gen/irstate.c @ 1:c53b6e3fe49a trunk

[svn r5] Initial commit. Most things are very rough.
author lindquist
date Sat, 01 Sep 2007 21:43:27 +0200
parents
children e116aa1488e6
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gen/irstate.c	Sat Sep 01 21:43:27 2007 +0200
@@ -0,0 +1,111 @@
+/* DMDFE backend stubs
+ * This file contains the implementations of the backend routines.
+ * For dmdfe these do nothing but print a message saying the module
+ * has been parsed. Substitute your own behaviors for these routimes.
+ */
+
+#include "irstate.h"
+
+#include "mtype.h"
+
+IRState* gIR = 0;
+llvm::TargetData* gTargetData = 0;
+
+//////////////////////////////////////////////////////////////////////////////////////////
+IRScope::IRScope()
+{
+    begin = end = 0;
+    returned = false;
+}
+
+IRScope::IRScope(llvm::BasicBlock* b, llvm::BasicBlock* e)
+{
+    begin = b;
+    end = e;
+    returned = false;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
+IRState::IRState()
+{
+    dmodule = 0;
+    module = 0;
+    inLvalue = false;
+    emitMain = false;
+    mainFunc = 0;
+}
+
+llvm::Function* IRState::topfunc()
+{
+    assert(!funcs.empty() && "Function stack is empty!");
+    return funcs.top();
+}
+
+TypeFunction* IRState::topfunctype()
+{
+    assert(!functypes.empty() && "TypeFunction stack is empty!");
+    return functypes.top();
+}
+
+llvm::Instruction* IRState::topallocapoint()
+{
+    assert(!functypes.empty() && "AllocaPoint stack is empty!");
+    return functypes.top()->llvmAllocaPoint;
+}
+
+IRStruct& IRState::topstruct()
+{
+    assert(!structs.empty() && "Struct vector is empty!");
+    return structs.back();
+}
+
+llvm::Value* IRState::toplval()
+{
+    assert(!lvals.empty() && "Lval vector is empty!");
+    return lvals.back();
+}
+
+IRScope& IRState::scope()
+{
+    assert(!scopes.empty());
+    return scopes.back();
+}
+
+llvm::BasicBlock* IRState::scopebb()
+{
+    return scopebegin();
+}
+llvm::BasicBlock* IRState::scopebegin()
+{
+    IRScope& s = scope();
+    assert(s.begin);
+    return s.begin;
+}
+llvm::BasicBlock* IRState::scopeend()
+{
+    IRScope& s = scope();
+    assert(s.end);
+    return s.end;
+}
+bool IRState::scopereturned()
+{
+    return scope().returned;
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
+
+IRStruct::IRStruct()
+ : recty(llvm::OpaqueType::get())
+{
+    type = 0;
+}
+
+IRStruct::IRStruct(TypeStruct* t)
+ : recty(llvm::OpaqueType::get())
+{
+    type = t;
+}
+
+IRStruct::~IRStruct()
+{
+}