Mercurial > projects > ddmd
diff dmd/backend/Util.d @ 0:10317f0c89a5
Initial commit
author | korDen |
---|---|
date | Sat, 24 Oct 2009 08:42:06 +0400 |
parents | |
children | 63623152e82a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dmd/backend/Util.d Sat Oct 24 08:42:06 2009 +0400 @@ -0,0 +1,133 @@ +module dmd.backend.Util; + +import dmd.Array; +import dmd.Loc; + +import dmd.backend.elem; +import dmd.backend.Symbol; +import dmd.backend.TYPE; +import dmd.backend.SC; +import dmd.backend.dt_t; +import dmd.backend.LIST; +import dmd.backend.block; +import dmd.backend.targ_types; +import dmd.backend.SYMIDX; +import dmd.backend.PARAM; +import dmd.backend.Blockx; +import dmd.backend.struct_t; +import dmd.backend.BC; +import dmd.backend.code; + +import std.string; + +alias ubyte mangle_t; + +alias SC enum_SC; +alias uint SYMFLGS; + +version (MARS) { + enum SYM_PREDEF_SZ = 35; +} else { + enum SYM_PREDEF_SZ = 22; +} + +//extern (C++) extern { + elem* eictor; + Symbol* ictorlocalgot; + elem* ector; + Array ectorgates; + elem* edtor; + elem* etest; + int dtorcount; + Symbol* localgot; +//} + +static this() +{ + ectorgates = new Array(); +} + +alias uint tym_t; // data type big enough for type masks +alias elem* elem_p; // data type big enough for type masks + +void el_setLoc(elem* e, Loc loc) { + e.Esrcpos.Sfilename = cast(char*)toStringz(loc.filename); + e.Esrcpos.Slinnum = loc.linnum; +} + +void elem_setLoc(elem* e, Loc loc) { + return el_setLoc(e, loc); +} + +struct_t* struct_calloc() { + return cast(struct_t *) mem_fcalloc(struct_t.sizeof); +} +///#define struct_free(st) ((void)(st)) + +extern (C++) { + void* mem_fcalloc(uint numbytes); + void obj_initfile(const(char)* filename, const(char)* csegname, const(char)* modname); + Symbol* symbol_calloc(const(char)* id); + type* type_fake(tym_t); + dt_t** dtnzeros(dt_t** pdtend, targ_size_t size); + void outdata(Symbol* s); + int reftoident(int seg, targ_size_t offset, Symbol* s, targ_size_t val, int flags); + dt_t ** dtnbytes(dt_t** pdtend, targ_size_t size, const(char)* ptr); + type* type_alloc(tym_t ty); + elem_p el_params(elem_p, ...); + elem_p el_ptr(Symbol*); + elem_p el_long(tym_t, targ_long); + elem_p el_bin(uint, tym_t, elem_p, elem_p); + elem_p el_var(Symbol*); + elem_p el_combine(elem_p, elem_p); + block* block_calloc(); + void writefunc(Symbol* sfunc); + void obj_termfile(); + int objextdef(const(char)* name); + void obj_includelib(const(char)* name); + SYMIDX symbol_add(Symbol* s); + elem* el_param(elem* e1, elem* e2); + elem* el_una(uint op, tym_t ty, elem* e1); + Symbol* symbol_name(const(char)* name, int sclass, type* t); + type* type_setcv(type** pt, tym_t cv); + int type_jparam(type* t); + void obj_export(Symbol* s, uint argsize); + void obj_startaddress(Symbol* s); + void symbol_func(Symbol* s); + type* type_allocn(tym_t, type* tn); + param_t* param_append_type(param_t** pp, type* t); + void block_appendexp(block* b, elem* e); + void block_next(Blockx* bctx, BC bc, block* bn); + dt_t** dtxoff(dt_t** pdtend, Symbol* s,targ_size_t offset, tym_t ty); + dt_t** dtdword(dt_t** pdtend, int value); + dt_t** dtabytes(dt_t** pdtend, tym_t ty, targ_size_t offset, targ_size_t size, const(char)* ptr); + void obj_moduleinfo(Symbol* scc); + Symbol* symbol_genauto(TYPE* t); + elem* el_same(elem**); + void el_free(elem*); + Symbol* symbol_generate(int sclass, type* t); + elem* el_calloc(); + void dt_optimize(dt_t* dt); + type* type_setty(type**, int); + type* type_setmangle(type** pt, mangle_t mangle); + list_t list_append(list_t* plist, void* ptr); + dt_t** dtcat(dt_t** pdtend, dt_t* dt); + elem_p el_copytree(elem_p); + elem_p el_pair(tym_t, elem_p, elem_p); + int el_allbits(elem *e, int bit); + block* block_goto(Blockx* bctx, BC bc, block* bn); + block* block_calloc(Blockx* blx); + targ_size_t type_paramsize_i(type* t); + int os_critsecsize(); + void el_setVolatile(elem* e); + elem* exp2_copytotemp(elem* e); + elem* el_const(tym_t, eve*); + elem *el_params(void** args, int length); + + void cod3_thunk(Symbol* sthunk, Symbol* sfunc, uint p, tym_t thisty, targ_size_t d, int i, targ_size_t d2); + + version (SEH) { + void nteh_declarvars(Blockx* bx); + elem* nteh_setScopeTableIndex(Blockx* blx, int scope_index); + } +} \ No newline at end of file