mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-11 05:16:19 +03:00

Basically it tries to do the following in order: Resolve types, Declare symbols, Create constant initializers, Apply initializers, Generate functions bodies. ClassInfo is now has the most useful(biased?) members working. Probably other stuf...
75 lines
1.5 KiB
C++
75 lines
1.5 KiB
C++
#include <cassert>
|
|
#include <cstdarg>
|
|
#include <cstdio>
|
|
#include <cstdlib>
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <string>
|
|
|
|
#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(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(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;
|
|
}
|
|
void attention(const char* fmt,...)
|
|
{
|
|
printf("***ATTENTION*** ");
|
|
va_list va;
|
|
va_start(va,fmt);
|
|
vprintf(fmt,va);
|
|
va_end(va);
|
|
printf("\n");
|
|
}
|
|
}
|