0
|
1 module dmd.backend.Util;
|
|
2
|
|
3 import dmd.Array;
|
|
4 import dmd.Loc;
|
|
5
|
|
6 import dmd.backend.elem;
|
|
7 import dmd.backend.Symbol;
|
|
8 import dmd.backend.TYPE;
|
|
9 import dmd.backend.SC;
|
|
10 import dmd.backend.dt_t;
|
|
11 import dmd.backend.LIST;
|
|
12 import dmd.backend.block;
|
|
13 import dmd.backend.targ_types;
|
|
14 import dmd.backend.SYMIDX;
|
|
15 import dmd.backend.PARAM;
|
|
16 import dmd.backend.Blockx;
|
|
17 import dmd.backend.struct_t;
|
|
18 import dmd.backend.BC;
|
|
19 import dmd.backend.code;
|
|
20
|
|
21 import std.string;
|
|
22
|
|
23 alias ubyte mangle_t;
|
|
24
|
|
25 alias SC enum_SC;
|
|
26 alias uint SYMFLGS;
|
|
27
|
|
28 version (MARS) {
|
|
29 enum SYM_PREDEF_SZ = 35;
|
|
30 } else {
|
|
31 enum SYM_PREDEF_SZ = 22;
|
|
32 }
|
|
33
|
|
34 //extern (C++) extern {
|
|
35 elem* eictor;
|
|
36 Symbol* ictorlocalgot;
|
|
37 elem* ector;
|
|
38 Array ectorgates;
|
|
39 elem* edtor;
|
|
40 elem* etest;
|
|
41 int dtorcount;
|
|
42 Symbol* localgot;
|
|
43 //}
|
|
44
|
|
45 static this()
|
|
46 {
|
|
47 ectorgates = new Array();
|
|
48 }
|
|
49
|
|
50 alias uint tym_t; // data type big enough for type masks
|
|
51 alias elem* elem_p; // data type big enough for type masks
|
|
52
|
|
53 void el_setLoc(elem* e, Loc loc) {
|
|
54 e.Esrcpos.Sfilename = cast(char*)toStringz(loc.filename);
|
|
55 e.Esrcpos.Slinnum = loc.linnum;
|
|
56 }
|
|
57
|
|
58 void elem_setLoc(elem* e, Loc loc) {
|
|
59 return el_setLoc(e, loc);
|
|
60 }
|
|
61
|
|
62 struct_t* struct_calloc() {
|
|
63 return cast(struct_t *) mem_fcalloc(struct_t.sizeof);
|
|
64 }
|
|
65 ///#define struct_free(st) ((void)(st))
|
|
66
|
|
67 extern (C++) {
|
|
68 void* mem_fcalloc(uint numbytes);
|
|
69 void obj_initfile(const(char)* filename, const(char)* csegname, const(char)* modname);
|
|
70 Symbol* symbol_calloc(const(char)* id);
|
|
71 type* type_fake(tym_t);
|
|
72 dt_t** dtnzeros(dt_t** pdtend, targ_size_t size);
|
|
73 void outdata(Symbol* s);
|
|
74 int reftoident(int seg, targ_size_t offset, Symbol* s, targ_size_t val, int flags);
|
|
75 dt_t ** dtnbytes(dt_t** pdtend, targ_size_t size, const(char)* ptr);
|
|
76 type* type_alloc(tym_t ty);
|
|
77 elem_p el_params(elem_p, ...);
|
|
78 elem_p el_ptr(Symbol*);
|
|
79 elem_p el_long(tym_t, targ_long);
|
|
80 elem_p el_bin(uint, tym_t, elem_p, elem_p);
|
|
81 elem_p el_var(Symbol*);
|
|
82 elem_p el_combine(elem_p, elem_p);
|
|
83 block* block_calloc();
|
|
84 void writefunc(Symbol* sfunc);
|
|
85 void obj_termfile();
|
|
86 int objextdef(const(char)* name);
|
|
87 void obj_includelib(const(char)* name);
|
|
88 SYMIDX symbol_add(Symbol* s);
|
|
89 elem* el_param(elem* e1, elem* e2);
|
|
90 elem* el_una(uint op, tym_t ty, elem* e1);
|
|
91 Symbol* symbol_name(const(char)* name, int sclass, type* t);
|
|
92 type* type_setcv(type** pt, tym_t cv);
|
|
93 int type_jparam(type* t);
|
|
94 void obj_export(Symbol* s, uint argsize);
|
|
95 void obj_startaddress(Symbol* s);
|
|
96 void symbol_func(Symbol* s);
|
|
97 type* type_allocn(tym_t, type* tn);
|
|
98 param_t* param_append_type(param_t** pp, type* t);
|
|
99 void block_appendexp(block* b, elem* e);
|
|
100 void block_next(Blockx* bctx, BC bc, block* bn);
|
|
101 dt_t** dtxoff(dt_t** pdtend, Symbol* s,targ_size_t offset, tym_t ty);
|
|
102 dt_t** dtdword(dt_t** pdtend, int value);
|
|
103 dt_t** dtabytes(dt_t** pdtend, tym_t ty, targ_size_t offset, targ_size_t size, const(char)* ptr);
|
|
104 void obj_moduleinfo(Symbol* scc);
|
|
105 Symbol* symbol_genauto(TYPE* t);
|
|
106 elem* el_same(elem**);
|
|
107 void el_free(elem*);
|
|
108 Symbol* symbol_generate(int sclass, type* t);
|
|
109 elem* el_calloc();
|
|
110 void dt_optimize(dt_t* dt);
|
|
111 type* type_setty(type**, int);
|
|
112 type* type_setmangle(type** pt, mangle_t mangle);
|
|
113 list_t list_append(list_t* plist, void* ptr);
|
|
114 dt_t** dtcat(dt_t** pdtend, dt_t* dt);
|
|
115 elem_p el_copytree(elem_p);
|
|
116 elem_p el_pair(tym_t, elem_p, elem_p);
|
|
117 int el_allbits(elem *e, int bit);
|
|
118 block* block_goto(Blockx* bctx, BC bc, block* bn);
|
|
119 block* block_calloc(Blockx* blx);
|
|
120 targ_size_t type_paramsize_i(type* t);
|
|
121 int os_critsecsize();
|
|
122 void el_setVolatile(elem* e);
|
|
123 elem* exp2_copytotemp(elem* e);
|
|
124 elem* el_const(tym_t, eve*);
|
|
125 elem *el_params(void** args, int length);
|
|
126
|
|
127 void cod3_thunk(Symbol* sthunk, Symbol* sfunc, uint p, tym_t thisty, targ_size_t d, int i, targ_size_t d2);
|
|
128
|
|
129 version (SEH) {
|
|
130 void nteh_declarvars(Blockx* bx);
|
|
131 elem* nteh_setScopeTableIndex(Blockx* blx, int scope_index);
|
|
132 }
|
|
133 } |