diff gen/statements.cpp @ 268:23d0d9855cad trunk

[svn r289] Fixed: right shift >> was broken for unsigned types. Fixed: debug info for classes now started.
author lindquist
date Sun, 15 Jun 2008 18:52:27 +0200
parents c43911baea21
children d9d5d59873d8
line wrap: on
line diff
--- a/gen/statements.cpp	Sun Jun 15 18:37:23 2008 +0200
+++ b/gen/statements.cpp	Sun Jun 15 18:52:27 2008 +0200
@@ -176,6 +176,9 @@
     Logger::println("IfStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     if (match)
     {
         LLValue* allocainst = new llvm::AllocaInst(DtoType(match->type), "._tmp_if_var", p->topallocapoint());
@@ -203,7 +206,8 @@
     gIR->scope() = IRScope(ifbb,elsebb);
 
     // do scoped statements
-    ifbody->toIR(p);
+    if (ifbody)
+        ifbody->toIR(p);
     if (!gIR->scopereturned()) {
         llvm::BranchInst::Create(endbb,gIR->scopebb());
     }
@@ -264,6 +268,9 @@
     Logger::println("WhileStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     // create while blocks
     llvm::BasicBlock* oldend = gIR->scopeend();
     llvm::BasicBlock* whilebb = llvm::BasicBlock::Create("whilecond", gIR->topfunc(), oldend);
@@ -308,6 +315,9 @@
     Logger::println("DoStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     // create while blocks
     llvm::BasicBlock* oldend = gIR->scopeend();
     llvm::BasicBlock* dowhilebb = llvm::BasicBlock::Create("dowhile", gIR->topfunc(), oldend);
@@ -344,6 +354,9 @@
     Logger::println("ForStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     // create for blocks
     llvm::BasicBlock* oldend = gIR->scopeend();
     llvm::BasicBlock* forbb = llvm::BasicBlock::Create("forcond", gIR->topfunc(), oldend);
@@ -412,6 +425,9 @@
     if (p->scopereturned())
         return;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     if (ident != 0) {
         Logger::println("ident = %s", ident->toChars());
 
@@ -446,6 +462,9 @@
     Logger::println("ContinueStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     if (ident != 0) {
         Logger::println("ident = %s", ident->toChars());
 
@@ -491,6 +510,9 @@
     Logger::println("TryFinallyStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     // create basic blocks
     llvm::BasicBlock* oldend = p->scopeend();
 
@@ -535,6 +557,9 @@
 
     Logger::attention(loc, "try-catch is not yet fully implemented");
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     // create basic blocks
     llvm::BasicBlock* oldend = p->scopeend();
 
@@ -577,6 +602,9 @@
 
     Logger::attention(loc, "throw is not yet fully implemented");
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     assert(exp);
     DValue* e = exp->toElem(p);
     llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_throw_exception");
@@ -654,6 +682,9 @@
     Logger::println("SwitchStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     llvm::BasicBlock* oldend = gIR->scopeend();
 
     // clear data from previous passes... :/
@@ -822,6 +853,9 @@
     Logger::println("UnrolledLoopStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     llvm::BasicBlock* oldend = gIR->scopeend();
     llvm::BasicBlock* endbb = llvm::BasicBlock::Create("unrolledend", p->topfunc(), oldend);
 
@@ -847,6 +881,9 @@
     Logger::println("ForeachStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     //assert(arguments->dim == 1);
     assert(value != 0);
     assert(body != 0);
@@ -1047,6 +1084,9 @@
     Logger::println("GotoStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     assert(tf == NULL);
 
     llvm::BasicBlock* oldend = gIR->scopeend();
@@ -1080,6 +1120,9 @@
     Logger::println("GotoDefaultStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     llvm::BasicBlock* oldend = gIR->scopeend();
     llvm::BasicBlock* bb = llvm::BasicBlock::Create("aftergotodefault", p->topfunc(), oldend);
 
@@ -1099,6 +1142,9 @@
     Logger::println("GotoCaseStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     llvm::BasicBlock* oldend = gIR->scopeend();
     llvm::BasicBlock* bb = llvm::BasicBlock::Create("aftergotocase", p->topfunc(), oldend);
 
@@ -1121,6 +1167,9 @@
     Logger::println("WithStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     assert(exp);
     assert(body);
 
@@ -1141,6 +1190,9 @@
 
     Logger::attention(loc, "synchronized is currently ignored. only the body will be emitted");
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     body->toIR(p);
 }
 
@@ -1186,6 +1238,9 @@
     Logger::println("VolatileStatement::toIR(): %s", loc.toChars());
     LOG_SCOPE;
 
+    if (global.params.symdebug)
+        DtoDwarfStopPoint(loc.linnum);
+
     // mark in-volatile
     bool old = gIR->func()->inVolatile;
     gIR->func()->inVolatile = true;