# HG changeset patch # User Tomas Lindquist Olsen # Date 1217620573 -7200 # Node ID 4d9108f1fbf418eecccab54d683fdad386a5846e # Parent 22a56b65872b6e2beb9ff71ae6639027ed9880e1# Parent 7f037b2ab84e8ac354d882c42257f5f73871c520 merge ... diff -r 7f037b2ab84e -r 4d9108f1fbf4 demos/qd.d --- a/demos/qd.d Fri Aug 01 21:21:08 2008 +0200 +++ b/demos/qd.d Fri Aug 01 21:56:13 2008 +0200 @@ -1,5 +1,7 @@ module qd; +alias char[] string; + extern(C) { struct SDL_Rect { short x, y; @@ -107,6 +109,7 @@ SDL_GetRGBA(*bufp, display.format, &(*col)[0], &(*col)[1], &(*col)[2], &(*col)[3]); } +align(1) struct rgb { ubyte[3] values; ubyte r() { return values[0]; } @@ -288,14 +291,23 @@ } } -pragma(LLVM_internal, "intrinsic", "llvm.sqrt.f32") { - float sqrt(float val); +import llvmdc.intrinsics; +alias llvm_sqrt_f32 sqrt; +alias llvm_sqrt_f64 sqrt; +version(X86) +{ + alias llvm_sqrt_f80 sqrt; } -pragma(LLVM_internal, "intrinsic", "llvm.sqrt.f64") { - double sqrt(double val); - real sqrt(real val); +else +{ + static import tango.stdc.math; + real sqrt(real x) + { + return tango.stdc.math.sqrtl(x); + } } + template circle_bresenham_pass(bool first) { const string xy=(first?"x":"y"); const string yx=(first?"y":"x"); @@ -326,7 +338,6 @@ "; } -import std.stdio; void circle(T...)(T t) { static assert(T.length!<3, "Circle: Needs x, y and radius"); int cx=t[0], cy=t[1], xradius=t[2]; @@ -434,7 +445,7 @@ if (key) key(evt.key.keysym.sym, false); break; case SDL_EventType.Quit: - throw new Error("Quit"); + throw new Exception("Quit"); break; default: break; } @@ -454,3 +465,10 @@ void events(void delegate(int, bool) key, void delegate(int, int) mouse) { events(key, (int x, int y, ubyte b, bool p) { mouse(x, y); }); } + +void sleep(float secs) +{ + assert(secs >= 0); + uint ms = cast(uint)(secs * 1000); + SDL_Delay(ms); +} diff -r 7f037b2ab84e -r 4d9108f1fbf4 demos/qd1.d --- a/demos/qd1.d Fri Aug 01 21:21:08 2008 +0200 +++ b/demos/qd1.d Fri Aug 01 21:56:13 2008 +0200 @@ -1,19 +1,29 @@ module qd1; import qd; -import std.c.time: sleep; void main() { screen(640, 480); - pset(10, 10); - line(0, 0, 100, 100, Box, Back(Red~Black)); - for (int i=0; i<=100; i+=10) { - line(i, 0, 100-i, 100); - line(0, i, 100, 100-i); - } - circle(100, 100, 50, 15, White~Black, Fill=White~Black); - paint(200, 200, Red, Back=White); - circle(100, 100, 50, 15, White); - paint(200, 200, Black); - pset(10, 11); pset(10, 11, Black); - pset(10, 10); - sleep(5); + sleep(1); + + cls(Red); + sleep(1); + + cls(Green); + sleep(1); + + cls(Blue); + sleep(1); + +// pset(10, 10); +// line(0, 0, 100, 100, Box, Back(Red~Black)); +// for (int i=0; i<=100; i+=10) { +// line(i, 0, 100-i, 100); +// line(0, i, 100, 100-i); +// } +// circle(100, 100, 50, 15, White~Black, Fill=White~Black); +// paint(200, 200, Red, Back=White); +// circle(100, 100, 50, 15, White); +// paint(200, 200, Black); +// pset(10, 11); pset(10, 11, Black); +// pset(10, 10); +// sleep(1); } diff -r 7f037b2ab84e -r 4d9108f1fbf4 gen/functions.cpp --- a/gen/functions.cpp Fri Aug 01 21:21:08 2008 +0200 +++ b/gen/functions.cpp Fri Aug 01 21:56:13 2008 +0200 @@ -589,10 +589,21 @@ // FIXME: llvm seems to want an alloca/byval for debug info if (!vd->needsStorage || vd->nestedref || vd->isRef() || vd->isOut()) + { + Logger::println("skipping arg storage for (%s) %s ", vd->loc.toChars(), vd->toChars()); continue; + } + // static array params don't support debug info it seems + // probably because they're not passed byval + else if (vd->type->toBasetype()->ty == Tsarray) + { + Logger::println("skipping arg storage for static array (%s) %s ", vd->loc.toChars(), vd->toChars()); + continue; + } // debug info for normal aggr params seem to work fine else if (DtoIsPassedByRef(vd->type)) { + Logger::println("skipping arg storage for aggregate (%s) %s ", vd->loc.toChars(), vd->toChars()); if (global.params.symdebug) DtoDwarfLocalVariable(vd->ir.getIrValue(), vd); continue; diff -r 7f037b2ab84e -r 4d9108f1fbf4 gen/structs.cpp --- a/gen/structs.cpp Fri Aug 01 21:21:08 2008 +0200 +++ b/gen/structs.cpp Fri Aug 01 21:56:13 2008 +0200 @@ -23,8 +23,11 @@ Logger::println("DtoConstStructInitializer: %s", si->toChars()); LOG_SCOPE; + assert(si->ad); TypeStruct* ts = (TypeStruct*)si->ad->type; + DtoResolveDsymbol(si->ad); + const llvm::StructType* structtype = isaStruct(ts->ir.type->get()); Logger::cout() << "llvm struct type: " << *structtype << '\n';