view gen/logger.c @ 82:d8dd47ef3973 trunk

[svn r86] Changed the way arguments are given storage. It is now detected if they will need it during semantic passes. Initial support for debug information. Very limited, but MUCH better than nothing :)
author lindquist
date Fri, 02 Nov 2007 01:17:26 +0100
parents 27b2f40bdb58
children
line wrap: on
line source

#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;
    }
}