Mercurial > projects > ldc
view dmd/mars.h @ 252:e3355ce5444b trunk
[svn r269] Fixed dwarf debug info for structs.
author | lindquist |
---|---|
date | Thu, 12 Jun 2008 16:58:26 +0200 |
parents | a168a2c3ea48 |
children | 665b81613475 |
line wrap: on
line source
// 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 <string> #include <cstdarg> #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 V2 0 // Version 2.0 features #define BREAKABI 1 // 0 if not ready to break the ABI just yet struct Array; // Put command line switches in here struct Param { char obj; // write object file char link; // perform link 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 char cpu; // target CPU char is64bit; // generate 64 bit code char isLE; // generate little endian code char isLinux; // generate code for linux char isWindows; // generate code for Windows 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 cov; // generate code coverage data char nofloat; // code should not pull in floating point support 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; char *defaultlibname; // default library for non-debug builds char *debuglibname; // default library for debug builds 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; // LLVM stuff char *llvmArch; char forceBE; char *tt_arch; char *tt_os; char *data_layout; char disassemble; char llvmInline; char llvmAnnotate; char *runtimePath; char useFP80; char useInlineAsm; char fqnPaths; // use fully qualified object names }; struct Global { char *mars_ext; char *sym_ext; char *obj_ext; char *ll_ext; char *bc_ext; char *nativeobj_ext; char *doc_ext; // for Ddoc generated files char *ddoc_ext; // for Ddoc macro include files char *hdr_ext; // for D 'header' import files char *copyright; 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; char *version; char *llvmdc_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 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, }; enum DYNCAST { DYNCAST_OBJECT, DYNCAST_EXPRESSION, DYNCAST_DSYMBOL, DYNCAST_TYPE, DYNCAST_IDENTIFIER, DYNCAST_TUPLE, }; enum MATCH { MATCHnomatch, // no match MATCHconvert, // match with conversions #if V2 MATCHconst, // match with conversion to const #endif MATCHexact // exact match }; enum ARCH { ARCHx86, ARCHx86_64, ARCHppc, ARCHppc_64 }; void error(Loc loc, const char *format, ...); void verror(Loc loc, const char *format, va_list); void fatal(); void err_nomem(); int runLINK(); void deleteExeFile(); int runProgram(); void inifile(char *argv0, char *inifile); void halt(); /*** Where to send error messages ***/ #if IN_GCC #define stdmsg stderr #else #define stdmsg stdout #endif #endif /* DMD_MARS_H */