diff dmd2/mars.h @ 758:f04dde6e882c

Added initial D2 support, D2 frontend and changes to codegen to make things compile.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Tue, 11 Nov 2008 01:38:48 +0100
parents
children 340acf1535d0
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dmd2/mars.h	Tue Nov 11 01:38:48 2008 +0100
@@ -0,0 +1,359 @@
+
+// Compiler implementation of the D programming language
+// Copyright (c) 1999-2007 by Digital Mars
+// All Rights Reserved
+// written by Walter Bright
+// http://www.digitalmars.com
+// License for redistribution is by either the Artistic License
+// in artistic.txt, or the GNU General Public License in gnu.txt.
+// See the included readme.txt for details.
+
+#ifndef DMD_MARS_H
+#define DMD_MARS_H
+
+#ifdef __DMC__
+#pragma once
+#endif /* __DMC__ */
+
+#include <stdint.h>
+#include <stdarg.h>
+#define __STDC_FORMAT_MACROS 1
+#include <inttypes.h>
+#include <stdarg.h>
+
+#ifdef __DMC__
+#ifdef DEBUG
+#undef assert
+#define assert(e) (static_cast<void>((e) || (printf("assert %s(%d) %s\n", __FILE__, __LINE__, #e), halt())))
+#endif
+#endif
+
+#ifdef IN_GCC
+/* Changes for the GDC compiler by David Friedman */
+#endif
+
+#define BREAKABI 1	// 0 if not ready to break the ABI just yet
+
+struct Array;
+
+// LDC
+enum ARCH
+{
+    ARCHinvalid,
+    ARCHx86,
+    ARCHx86_64,
+    ARCHppc,
+    ARCHppc_64,
+    ARCHarm,
+    ARCHthumb
+};
+enum OUTPUTFLAG
+{
+    OUTPUTFLAGno,
+    OUTPUTFLAGdefault, // for the .o default
+    OUTPUTFLAGset // for -output
+};
+
+enum OS
+{
+    OSinvalid,
+    OSLinux,
+    OSWindows,
+    OSMacOSX,
+    OSFreeBSD
+};
+
+// Put command line switches in here
+struct Param
+{
+    char obj;		// write object file
+    char link;		// perform link
+    char lib;		// write library file instead of object file(s)
+    char multiobj;	// break one object file into multiple ones
+    char oneobj;	// write one object file instead of multiple ones
+    char trace;		// insert profiling hooks
+    char quiet;		// suppress non-error messages
+    char verbose;	// verbose compile
+    char symdebug;	// insert debug symbolic information
+    char optimize;	// run optimizer
+    char optimizeLevel; // optimization level
+    ARCH cpu;		// target CPU
+    OS   os;		// target OS
+    char is64bit;	// generate 64 bit code
+    char isLE;      // generate little endian code
+    char scheduler;	// which scheduler to use
+    char useDeprecated;	// allow use of deprecated features
+    char useAssert;	// generate runtime code for assert()'s
+    char useInvariants;	// generate class invariant checks
+    char useIn;		// generate precondition checks
+    char useOut;	// generate postcondition checks
+    char useArrayBounds; // generate array bounds checks
+    char useSwitchError; // check for switches without a default
+    char useUnitTests;	// generate unittest code
+    char useInline;	// inline expand functions
+    char release;	// build release version
+    char preservePaths;	// !=0 means don't strip path from source file
+    char warnings;	// enable warnings
+    char pic;		// generate position-independent-code for shared libs
+    char noruntime;	// code is not allowed to make implicit calls to the runtime
+    char novalidate;// no bitcode validation
+    char Dversion;	// D version number
+    char ignoreUnsupportedPragmas;	// rather than error on them
+
+    char *argv0;	// program name
+    Array *imppath;	// array of char*'s of where to look for import modules
+    Array *fileImppath;	// array of char*'s of where to look for file import modules
+    char *runtimeImppath; // char* of where to look for the core runtime
+    char *objdir;	// .obj file output directory
+    char *objname;	// .obj file output name
+
+    char doDocComments;	// process embedded documentation comments
+    char *docdir;	// write documentation file to docdir directory
+    char *docname;	// write documentation file to docname
+    Array *ddocfiles;	// macro include files for Ddoc
+
+    char doHdrGeneration;	// process embedded documentation comments
+    char *hdrdir;		// write 'header' file to docdir directory
+    char *hdrname;		// write 'header' file to docname
+
+    unsigned debuglevel;	// debug level
+    Array *debugids;		// debug identifiers
+
+    unsigned versionlevel;	// version level
+    Array *versionids;		// version identifiers
+
+    bool dump_source;
+
+    Array *defaultlibnames;	// default libraries for non-debug builds
+    Array *debuglibnames;	// default libraries for debug builds
+
+    const char *xmlname;	// filename for XML output
+
+    // Hidden debug switches
+    char debuga;
+    char debugb;
+    char debugc;
+    char debugf;
+    char debugr;
+    char debugw;
+    char debugx;
+    char debugy;
+
+    char run;		// run resulting executable
+    size_t runargs_length;
+    char** runargs;	// arguments for executable
+
+    // Linker stuff
+    Array *objfiles;
+    Array *linkswitches;
+    Array *libfiles;
+    char *deffile;
+    char *resfile;
+    char *exefile;
+
+    // LDC stuff
+    const char *llvmArch;
+    char forceBE;
+    char output_ll;
+    char output_bc;
+    char output_s;
+    char output_o;
+    char llvmInline;
+    char llvmAnnotate;
+    char useInlineAsm;
+    char fqnNames; // use fully qualified object names
+    char noDefaultLib;
+
+    // target stuff
+    const char *targetTriple;
+    const char *dataLayout;
+};
+
+struct Global
+{
+    const char *mars_ext;
+    const char *sym_ext;
+    const char *obj_ext;
+#if _WIN32
+    const char *obj_ext_alt;
+#endif
+    const char *ll_ext;
+    const char *bc_ext;
+    const char *s_ext;
+    const char *lib_ext;
+    const char *doc_ext;	// for Ddoc generated files
+    const char *ddoc_ext;	// for Ddoc macro include files
+    const char *hdr_ext;	// for D 'header' import files
+    const char *copyright;
+    const char *written;
+    Array *path;	// Array of char*'s which form the import lookup path
+    Array *filePath;	// Array of char*'s which form the file import lookup path
+    int structalign;
+    const char *version;
+    const char *ldc_version;
+
+    Param params;
+    unsigned errors;	// number of errors reported so far
+    unsigned gag;	// !=0 means gag reporting of errors
+
+    Global();
+};
+
+extern Global global;
+
+#if __GNUC__
+//#define memicmp strncasecmp
+//#define stricmp strcasecmp
+#endif
+
+#ifdef __DMC__
+ typedef _Complex long double complex_t;
+#else
+ #ifndef IN_GCC
+  #include "complex_t.h"
+ #endif
+ #ifdef __APPLE__
+  //#include "complex.h"//This causes problems with include the c++ <complex> and not the C "complex.h"
+  #define integer_t dmd_integer_t
+ #endif
+#endif
+
+// Be careful not to care about sign when using integer_t
+typedef uint64_t integer_t;
+
+// Signed and unsigned variants
+typedef int64_t sinteger_t;
+typedef uint64_t uinteger_t;
+
+typedef int8_t			d_int8;
+typedef uint8_t			d_uns8;
+typedef int16_t			d_int16;
+typedef uint16_t		d_uns16;
+typedef int32_t			d_int32;
+typedef uint32_t		d_uns32;
+typedef int64_t			d_int64;
+typedef uint64_t		d_uns64;
+
+typedef float			d_float32;
+typedef double			d_float64;
+typedef long double		d_float80;
+
+typedef d_uns8			d_char;
+typedef d_uns16			d_wchar;
+typedef d_uns32			d_dchar;
+
+#ifdef IN_GCC
+#include "d-gcc-real.h"
+#else
+typedef long double real_t;
+#endif
+
+// Modify OutBuffer::writewchar to write the correct size of wchar
+#if _WIN32
+#define writewchar writeword
+#else
+// This needs a configuration test...
+#define writewchar write4
+#endif
+
+#ifdef IN_GCC
+#include "d-gcc-complex_t.h"
+#endif
+
+// taken from GDC
+// for handling printf incompatibilities
+#if __MSVCRT__
+#define PRIuSIZE "Iu"
+#define PRIxSIZE "Ix"
+#elif __MINGW32__
+#define PRIuSIZE "u"
+#define PRIxSIZE "x"
+#else
+#define PRIuSIZE "zu"
+#define PRIxSIZE "zx"
+#endif
+
+struct Module;
+
+//typedef unsigned Loc;		// file location
+struct Loc
+{
+    char *filename;
+    unsigned linnum;
+
+    Loc()
+    {
+	linnum = 0;
+	filename = NULL;
+    }
+
+    Loc(int x)
+    {
+	linnum = x;
+	filename = NULL;
+    }
+
+    Loc(Module *mod, unsigned linnum);
+
+    char *toChars() const;
+};
+
+#ifndef GCC_SAFE_DMD
+#define TRUE	1
+#define FALSE	0
+#endif
+
+#define INTERFACE_OFFSET	0	// if 1, put classinfo as first entry
+					// in interface vtbl[]'s
+#define INTERFACE_VIRTUAL	0	// 1 means if an interface appears
+					// in the inheritance graph multiple
+					// times, only one is used
+
+enum LINK
+{
+    LINKdefault,
+    LINKd,
+    LINKc,
+    LINKcpp,
+    LINKwindows,
+    LINKpascal,
+
+    // LDC
+    LINKintrinsic,
+};
+
+enum DYNCAST
+{
+    DYNCAST_OBJECT,
+    DYNCAST_EXPRESSION,
+    DYNCAST_DSYMBOL,
+    DYNCAST_TYPE,
+    DYNCAST_IDENTIFIER,
+    DYNCAST_TUPLE,
+};
+
+enum MATCH
+{
+    MATCHnomatch,	// no match
+    MATCHconvert,	// match with conversions
+#if DMDV2
+    MATCHconst,		// match with conversion to const
+#endif
+    MATCHexact		// exact match
+};
+
+void error(Loc loc, const char *format, ...);
+void verror(Loc loc, const char *format, va_list);
+void fatal();
+void err_nomem();
+void inifile(const char *argv0, const char *inifile);
+void halt();
+
+/*** Where to send error messages ***/
+#if IN_GCC
+#define stdmsg stderr
+#else
+#define stdmsg stdout
+#endif
+
+#endif /* DMD_MARS_H */