Mercurial > projects > ddmd
view dmd/Global.d @ 179:cd48cb899aee
Updated to dmd2.040
author | korDen |
---|---|
date | Sun, 17 Oct 2010 20:56:07 +0400 |
parents | e3afd1303184 |
children | eb38fdcb3e62 |
line wrap: on
line source
module dmd.Global; import dmd.common; import dmd.Array; import dmd.Param; import dmd.ClassDeclaration; import dmd.DsymbolTable; import dmd.StringTable; import dmd.OutBuffer; import dmd.Token; import dmd.Scope; import dmd.Module; import dmd.Expression; import dmd.Dsymbol; import dmd.Type; import dmd.TypeInfoDeclaration; import dmd.Id; import dmd.TY; import dmd.LINK; import dmd.MOD; import dmd.Loc; import dmd.TOK; import dmd.TypeFunction; import dmd.codegen.Util; import dmd.backend.elem; import dmd.backend.Classsym; import dmd.backend.Symbol; import dmd.backend.glue; import dmd.backend.iasm; import dmd.backend.StringTab; import core.stdc.time; import core.stdc.stdio; import dmd.TObject; class Global : TObject { string mars_ext = "d"; string sym_ext = "d"; version (TARGET_WINDOS) { string obj_ext = "obj"; } else version (POSIX) { // TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS string obj_ext = "o"; } else version (TARGET_NET) { } else { static assert (false); } version (TARGET_WINDOS) { string lib_ext = "lib"; } else version (POSIX) { // TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS string lib_ext = "a"; } else version (TARGET_NET) { } else { static assert (false); } string doc_ext = "html"; // for Ddoc generated files string ddoc_ext = "ddoc"; // for Ddoc macro include files string json_ext = "json"; string map_ext = "map"; // for .map files string hdr_ext = "di"; // for D 'header' import files string copyright= "Copyright (c) 1999-2009 by Digital Mars"; string written = "written by Walter Bright, ported to D by community"; ///version (TARGET_NET) { /// "\nMSIL back-end (alpha release) by Cristian L. Vlasceanu and associates."; ///} string[] path; // Array of char*'s which form the import lookup path string[] filePath; // Array of char*'s which form the file import lookup path int structalign = 8; string version_ = "v2.040"; Param params; uint errors; // number of errors reported so far uint gag; // !=0 means gag reporting of errors ClassDeclaration object; ClassDeclaration classinfo; // Used in FuncDeclaration.genCfunc() DsymbolTable st; // Used in Lexer.uniqueId() int num; // Used in Identifier.generateId() size_t i; // Used in Lexer StringTable stringtable; OutBuffer stringbuffer; Token* freelist; char date[11+1]; char time[8+1]; char timestamp[24+1]; // Used in Module Module rootModule; DsymbolTable modules; // symbol table of all modules Array amodules; // array of all modules Array deferred; // deferred Dsymbol's needing semantic() run on them uint dprogress; // progress resolving the deferred list int nested; Classsym* scc; ClassDeclaration moduleinfo; // Used in PowExp bool importMathChecked = false; // Used in Scope Scope scope_freelist; // Used in TemplateMixin int nest; // Used in Type StringTable type_stringtable; Type tvoidptr; // void* Type tstring; // immutable(char)[] ClassDeclaration typeinfo; ClassDeclaration typeinfoclass; ClassDeclaration typeinfointerface; ClassDeclaration typeinfostruct; ClassDeclaration typeinfotypedef; ClassDeclaration typeinfopointer; ClassDeclaration typeinfoarray; ClassDeclaration typeinfostaticarray; ClassDeclaration typeinfoassociativearray; ClassDeclaration typeinfoenum; ClassDeclaration typeinfofunction; ClassDeclaration typeinfodelegate; ClassDeclaration typeinfotypelist; ClassDeclaration typeinfoconst; ClassDeclaration typeinfoinvariant; ClassDeclaration typeinfoshared; ClassDeclaration typeinfowild; Type basic[TY.TMAX]; TypeInfoDeclaration internalTI[TMAX]; // Used in BinExp StringTable arrayfuncs; // Used in FuncDeclaration int hiddenparami; // how many we've generated so far // Used in TypeAArray // Dumb linear symbol table - should use associative array! Array sarray; Symbol* AArray_s; // Used in TypeDelegate Symbol* Delegate_s; // Used in TypeInfoStructDeclaration TypeFunction tftohash; TypeFunction tftostring; // Used in backend.glue Array obj_symbols_towrite; Outbuffer objbuf; string lastmname; int count; elem* esharedctor; Array esharedctorgates; elem* eshareddtor; int shareddtorcount; // Used in backend.iasm ASM_STATE asmstate; Token* asmtok; TOK tok_value; // Used in backend.StringTab StringTab[STSIZE] stringTab; size_t stidx; // Used in backend.Util elem* eictor; Symbol* ictorlocalgot; elem* ector; Array ectorgates; elem* edtor; elem* etest; int dtorcount; Symbol* localgot; Dsymbol sdummy; Expression edummy; this() { register(); params.versionids = new Vector!(string)(); params.imppath = new Array(); st = new DsymbolTable(); stringbuffer = new OutBuffer(); modules = new DsymbolTable(); amodules = new Array(); deferred = new Array(); sarray = new Array(); obj_symbols_towrite = new Array(); ectorgates = new Array(); esharedctorgates = new Array(); sdummy = new Dsymbol(); edummy = new Expression(Loc(0), TOK.init, 0); init_time(); } void initClasssym() { scc = fake_classsym(Id.ClassInfo); scope Scope sc = new Scope(); tftohash = new TypeFunction(null, Type.thash_t, 0, LINK.LINKd); tftohash.mod = MOD.MODconst; tftohash = cast(TypeFunction)tftohash.semantic(Loc(0), sc); tftostring = new TypeFunction(null, Type.tchar.invariantOf().arrayOf(), 0, LINK.LINKd); tftostring = cast(TypeFunction)tftostring.semantic(Loc(0), sc); } void init_time() { time_t tm; char* p; .time(&tm); p = ctime(&tm); assert(p); sprintf(date.ptr, "%.6s %.4s", p + 4, p + 20); sprintf(time.ptr, "%.8s", p + 11); sprintf(timestamp.ptr, "%.24s", p); } } __gshared Global global;