Mercurial > projects > ldc
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;