Mercurial > projects > ldc
view gen/logger.cpp @ 920:545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Fixed align N; in asm blocks.
Fixed inreg parameter passing on x86 for ref/out params.
Removed support for lazy initialization of function local static variables, I have no idea why I ever implemented this, it's not in the D spec, and DMD doesn't support it :P
Some of the global variable related changes might cause minor regressions, but they should be easily fixable.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Tue, 03 Feb 2009 08:54:57 +0100 |
parents | 661384d6a936 |
children | a8cb25d478c4 |
line wrap: on
line source
#include <cassert> #include <cstdarg> #include <cstdio> #include <cstdlib> #include <iostream> #include <fstream> #include <string> #include "mars.h" #include "gen/logger.h" namespace Logger { static std::string indent_str; static std::ofstream null_out("/dev/null"); static bool _enabled = false; void indent() { if (_enabled) { indent_str += "* "; } } void undent() { if (_enabled) { assert(!indent_str.empty()); indent_str.resize(indent_str.size()-2); } } std::ostream& cout() { if (_enabled) return std::cout << indent_str; else return null_out; } void println(const char* fmt,...) { if (_enabled) { printf("%s", indent_str.c_str()); va_list va; va_start(va,fmt); vprintf(fmt,va); va_end(va); printf("\n"); } } void print(const char* fmt,...) { if (_enabled) { printf("%s", indent_str.c_str()); va_list va; va_start(va,fmt); vprintf(fmt,va); va_end(va); } } void enable() { _enabled = true; } void disable() { _enabled = false; } bool enabled() { return _enabled; } void attention(const Loc& loc, const char* fmt,...) { printf("Warning: %s: ", loc.toChars()); va_list va; va_start(va,fmt); vprintf(fmt,va); va_end(va); printf("\n"); } }