Changeset 395
- Timestamp:
- 02/21/10 21:21:56 (6 months ago)
- Files:
-
- trunk/src/backend/rtlsym.h (modified) (2 diffs)
- trunk/src/glue.c (modified) (3 diffs)
- trunk/src/module.h (modified) (1 diff)
- trunk/src/s2ir.c (modified) (1 diff)
- trunk/src/toobj.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/backend/rtlsym.h
r251 r395 45 45 SYMBOL_MARS(MONITOR_HANDLER, FLfunc,FREGSAVED,"_d_monitor_handler", 0, 0) \ 46 46 SYMBOL_MARS(MONITOR_PROLOG, FLfunc,FREGSAVED,"_d_monitor_prolog",0,t) \ 47 47 SYMBOL_MARS(MONITOR_EPILOG, FLfunc,FREGSAVED,"_d_monitor_epilog",0,t) \ 48 48 SYMBOL_MARS(DCOVER, FLfunc,FREGSAVED,"_d_cover_register", 0, t) \ 49 49 SYMBOL_MARS(DASSERT, FLfunc,FREGSAVED,"_d_assert", SFLexit, t) \ 50 SYMBOL_MARS(DASSERTM, FLfunc,FREGSAVED,"_d_assertm", SFLexit, t) \ 50 51 SYMBOL_MARS(DASSERT_MSG, FLfunc,FREGSAVED,"_d_assert_msg", SFLexit, t) \ 51 52 SYMBOL_MARS(DARRAY, FLfunc,FREGSAVED,"_d_array_bounds", SFLexit, t) \ 52 53 SYMBOL_MARS(DINVARIANT, FLfunc,FREGSAVED,"D9invariant12_d_invariantFC6ObjectZv", 0, tsdlib) \ 53 54 SYMBOL_MARS(_DINVARIANT, FLfunc,FREGSAVED,"_D9invariant12_d_invariantFC6ObjectZv", 0, tsdlib) \ 54 55 SYMBOL_MARS(MEMCPY, FLfunc,FREGSAVED,"memcpy", 0, t) \ … … 66 67 SYMBOL_MARS(CRITICALENTER, FLfunc,FREGSAVED,"_d_criticalenter",0, t) \ 67 68 SYMBOL_MARS(CRITICALEXIT, FLfunc,FREGSAVED,"_d_criticalexit",0, t) \ 68 69 SYMBOL_MARS(SWITCH_STRING, FLfunc,FREGSAVED,"_d_switch_string", 0, t) \ 69 70 SYMBOL_MARS(SWITCH_USTRING,FLfunc,FREGSAVED,"_d_switch_ustring", 0, t) \ 70 71 SYMBOL_MARS(SWITCH_DSTRING,FLfunc,FREGSAVED,"_d_switch_dstring", 0, t) \ 71 SYMBOL_MARS(DSWITCHERR, FLfunc,FREGSAVED,"_d_switch_error", 0, t) \72 SYMBOL_MARS(DSWITCHERR, FLfunc,FREGSAVED,"_d_switch_error", SFLexit, t) \ 72 73 SYMBOL_MARS(DHIDDENFUNC, FLfunc,FREGSAVED,"_d_hidden_func", 0, t) \ 73 74 SYMBOL_MARS(NEWCLASS, FLfunc,FREGSAVED,"_d_newclass", 0, t) \ 74 75 SYMBOL_MARS(NEWARRAYT, FLfunc,FREGSAVED,"_d_newarrayT", 0, t) \ 75 76 SYMBOL_MARS(NEWARRAYIT, FLfunc,FREGSAVED,"_d_newarrayiT", 0, t) \ 76 77 SYMBOL_MARS(NEWARRAYMT, FLfunc,FREGSAVED,"_d_newarraymT", 0, t) \ trunk/src/glue.c
r393 r395 469 469 Symbol *ma = i ? marray : massert; 470 470 471 471 if (ma) 472 472 { 473 473 elem *elinnum; 474 elem *efilename;475 474 476 475 localgot = NULL; 477 476 478 477 // Call dassert(filename, line) 479 478 // Get sole parameter, linnum … … 491 490 symbol_add(sp); 492 491 493 492 elinnum = el_var(sp); 494 493 } 495 494 496 e filename = toEmodulename();497 498 elem *e = el_var(rtlsym[i ? RTLSYM_DARRAY : RTLSYM_DASSERT ]);495 elem *efilename = el_ptr(toSymbol()); 496 497 elem *e = el_var(rtlsym[i ? RTLSYM_DARRAY : RTLSYM_DASSERTM]); 499 498 e = el_bin(OPcall, TYvoid, e, el_param(elinnum, efilename)); 500 499 501 500 block *b = block_calloc(); 502 501 b->BC = BCret; 503 502 b->Belem = e; … … 1157 1156 1158 1157 /************************************** 1159 1158 * Generate elem that is a pointer to the module file name. 1160 1159 */ 1161 1160 1162 elem *Module::toEmodulename()1163 {1164 elem *efilename;1165 1166 // Get filename1167 if (needModuleInfo())1168 { Symbol *si;1169 1170 /* Class ModuleInfo is defined in std.moduleinfo.1171 * The module name will be at nameoffset from the start of it.1172 */1173 1174 si = toSymbol();1175 1176 //printf("nameoffset = x%x\n", nameoffset);1177 assert(nameoffset >= 4);1178 1179 efilename = el_ptr(si);1180 efilename = el_bin(OPadd, TYnptr, efilename, el_long(TYsize_t, nameoffset));1181 efilename = el_pair(TYdarray, el_long(TYsize_t, namelen), efilename);1182 }1183 else // generate our own filename1184 {1185 efilename = toEfilename();1186 }1187 return efilename;1188 }1189 1190 1161 elem *Module::toEfilename() 1191 1162 { elem *efilename; 1192 1163 1193 1164 if (!sfilename) 1194 1165 { trunk/src/module.h
r393 r395 168 168 Symbol *toModuleArray(); // get module array bounds function 169 169 170 170 171 171 static Symbol *gencritsec(); 172 172 elem *toEfilename(); 173 elem *toEmodulename();174 173 175 174 Symbol *toSymbol(); 176 175 void genmoduleinfo(); 177 176 178 177 Module *isModule() { return this; } trunk/src/s2ir.c
r288 r395 1150 1150 block_next(blx,BCgoto,NULL); 1151 1151 } 1152 1152 1153 1153 void SwitchErrorStatement::toIR(IRState *irs) 1154 1154 { 1155 elem *e;1156 elem *elinnum;1157 elem *efilename;1158 1155 Blockx *blx = irs->blx; 1159 1156 1160 1157 //printf("SwitchErrorStatement::toIR()\n"); 1161 1158 1162 e filename = blx->module->toEmodulename();1163 el innum = el_long(TYint, loc.linnum);1164 e = el_bin(OPcall, TYvoid, el_var(rtlsym[RTLSYM_DSWITCHERR]), el_param(elinnum, efilename));1159 elem *efilename = el_ptr(blx->module->toSymbol()); 1160 elem *elinnum = el_long(TYint, loc.linnum); 1161 elem *e = el_bin(OPcall, TYvoid, el_var(rtlsym[RTLSYM_DSWITCHERR]), el_param(elinnum, efilename)); 1165 1162 block_appendexp(blx->curblock, e); 1166 1163 } 1167 1164 1168 1165 /************************************** 1169 1166 */ trunk/src/toobj.c
r394 r395 171 171 // Put out module name as a 0-terminated string, to save bytes 172 172 nameoffset = dt_size(dt); 173 173 const char *name = toPrettyChars(); 174 174 namelen = strlen(name); 175 175 dtnbytes(&dt, namelen + 1, name); 176 //printf("nameoffset = x%x\n", nameoffset); 176 177 #else 177 178 /* The layout is: 178 179 { 179 180 void **vptr; 180 181 monitor_t monitor;
