#ifndef COMMON_H
#define COMMON_H

#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <wchar.h>

typedef wchar_t dchar;

// Forwards
struct Identifier;
struct FuncDeclaration;
struct Statement;

// Missing class
struct LString
{
    char*   string;
};

// Missing class
struct StringValue
{
    void*       ptrvalue;
    LString     lstring;
};

// Missing class
struct StringTable 
{
    StringValue* update(const char* str, size_t len);
    StringValue* insert(const char* str, size_t len);
};

// Missing class
class Id {
public:
    static Identifier* Windows;
    static Identifier* Pascal;
    static Identifier* D;
    static Identifier* C;
};

// Missing in MSC
#ifdef _MSC_VER
inline float strtof(const char* str, char** end) { return (float)strtod(str,end); }
inline long double strtold(const char* str, char** end) { return strtod(str,end); }
#endif


#include "mars.h"
#include "root.h"
#include "scope.h"
#include "dsymbol.h"
#include "enum.h"
#include "lexer.h"
#include "parse.h"
#include "module.h"
#include "aggregate.h"
#include "import.h"
#include "attrib.h"
#include "declaration.h"
#include "identifier.h"
#include "version.h"
#include "debcond.h"
#include "mtype.h"
#include "init.h"
#include "expression.h"
#include "statement.h"
#include "mem.h"

#endif /* COMMON_H */
