Changeset 629
- Timestamp:
- 08/26/10 14:21:45 (1 year ago)
- Files:
-
- branches/dmd-1.x/src/attrib.c (modified) (1 diff)
- branches/dmd-1.x/src/expression.c (modified) (2 diffs)
- branches/dmd-1.x/src/parse.c (modified) (4 diffs)
- trunk/src/attrib.c (modified) (1 diff)
- trunk/src/expression.c (modified) (2 diffs)
- trunk/src/parse.c (modified) (4 diffs)
- trunk/src/statement.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/dmd-1.x/src/attrib.c
r513 r629 324 324 if (decl) 325 325 { 326 buf->writenl(); 327 buf->writeByte('{'); 328 buf->writenl(); 329 for (unsigned i = 0; i < decl->dim; i++) 330 { 331 Dsymbol *s = (Dsymbol *)decl->data[i]; 332 333 buf->writestring(" "); 334 s->toCBuffer(buf, hgs); 335 } 336 buf->writeByte('}'); 326 if (decl->dim == 0) 327 buf->writestring("{}"); 328 else if (decl->dim == 1) 329 ((Dsymbol *)decl->data[0])->toCBuffer(buf, hgs); 330 else 331 { 332 buf->writenl(); 333 buf->writeByte('{'); 334 buf->writenl(); 335 for (unsigned i = 0; i < decl->dim; i++) 336 { 337 Dsymbol *s = (Dsymbol *)decl->data[i]; 338 339 buf->writestring(" "); 340 s->toCBuffer(buf, hgs); 341 } 342 buf->writeByte('}'); 343 } 337 344 } 338 345 else branches/dmd-1.x/src/expression.c
r590 r629 763 763 void expToCBuffer(OutBuffer *buf, HdrGenState *hgs, Expression *e, enum PREC pr) 764 764 { 765 #ifdef DEBUG 766 if (precedence[e->op] == PREC_zero) 767 printf("precedence not defined for token '%s'\n",Token::tochars[e->op]); 768 #endif 769 assert(precedence[e->op] != PREC_zero); 770 assert(pr != PREC_zero); 771 765 772 //if (precedence[e->op] == 0) e->dump(0); 766 773 if (precedence[e->op] < pr || … … 6802 6809 6803 6810 void CallExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs) 6804 { int i; 6805 6806 expToCBuffer(buf, hgs, e1, precedence[op]); 6811 { 6812 if (e1->op == TOKtype) 6813 /* Avoid parens around type to prevent forbidden cast syntax: 6814 * (sometype)(arg1) 6815 * This is ok since types in constructor calls 6816 * can never depend on parens anyway 6817 */ 6818 e1->toCBuffer(buf, hgs); 6819 else 6820 expToCBuffer(buf, hgs, e1, precedence[op]); 6807 6821 buf->writeByte('('); 6808 6822 argsToCBuffer(buf, arguments, hgs); branches/dmd-1.x/src/parse.c
r588 r629 5465 5465 void initPrecedence() 5466 5466 { 5467 for (int i = 0; i < TOKMAX; i++) 5468 precedence[i] = PREC_zero; 5469 5470 precedence[TOKtype] = PREC_expr; 5471 precedence[TOKerror] = PREC_expr; 5472 5473 precedence[TOKtypeof] = PREC_primary; 5474 precedence[TOKmixin] = PREC_primary; 5475 5467 5476 precedence[TOKdotvar] = PREC_primary; 5468 5477 precedence[TOKimport] = PREC_primary; … … 5480 5489 precedence[TOKfunction] = PREC_primary; 5481 5490 precedence[TOKvar] = PREC_primary; 5491 precedence[TOKsymoff] = PREC_primary; 5492 precedence[TOKstructliteral] = PREC_primary; 5482 5493 #if DMDV2 5494 precedence[TOKtraits] = PREC_primary; 5483 5495 precedence[TOKdefault] = PREC_primary; 5484 5496 #endif … … 5493 5505 precedence[TOKslice] = PREC_primary; 5494 5506 precedence[TOKarray] = PREC_primary; 5507 precedence[TOKindex] = PREC_primary; 5495 5508 5496 5509 precedence[TOKaddress] = PREC_unary; … … 5575 5588 5576 5589 precedence[TOKcomma] = PREC_expr; 5577 } 5578 5590 precedence[TOKdeclaration] = PREC_expr; 5591 } 5592 trunk/src/attrib.c
r526 r629 325 325 if (decl) 326 326 { 327 buf->writenl(); 328 buf->writeByte('{'); 329 buf->writenl(); 330 for (unsigned i = 0; i < decl->dim; i++) 331 { 332 Dsymbol *s = (Dsymbol *)decl->data[i]; 333 334 buf->writestring(" "); 335 s->toCBuffer(buf, hgs); 336 } 337 buf->writeByte('}'); 327 if (decl->dim == 0) 328 buf->writestring("{}"); 329 else if (decl->dim == 1) 330 ((Dsymbol *)decl->data[0])->toCBuffer(buf, hgs); 331 else 332 { 333 buf->writenl(); 334 buf->writeByte('{'); 335 buf->writenl(); 336 for (unsigned i = 0; i < decl->dim; i++) 337 { 338 Dsymbol *s = (Dsymbol *)decl->data[i]; 339 340 buf->writestring(" "); 341 s->toCBuffer(buf, hgs); 342 } 343 buf->writeByte('}'); 344 } 338 345 } 339 346 else trunk/src/expression.c
r616 r629 810 810 void expToCBuffer(OutBuffer *buf, HdrGenState *hgs, Expression *e, enum PREC pr) 811 811 { 812 #ifdef DEBUG 813 if (precedence[e->op] == PREC_zero) 814 printf("precedence not defined for token '%s'\n",Token::tochars[e->op]); 815 #endif 816 assert(precedence[e->op] != PREC_zero); 817 assert(pr != PREC_zero); 818 812 819 //if (precedence[e->op] == 0) e->dump(0); 813 820 if (precedence[e->op] < pr || … … 7261 7268 7262 7269 void CallExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs) 7263 { int i; 7264 7265 expToCBuffer(buf, hgs, e1, precedence[op]); 7270 { 7271 if (e1->op == TOKtype) 7272 /* Avoid parens around type to prevent forbidden cast syntax: 7273 * (sometype)(arg1) 7274 * This is ok since types in constructor calls 7275 * can never depend on parens anyway 7276 */ 7277 e1->toCBuffer(buf, hgs); 7278 else 7279 expToCBuffer(buf, hgs, e1, precedence[op]); 7266 7280 buf->writeByte('('); 7267 7281 argsToCBuffer(buf, arguments, hgs); trunk/src/parse.c
r585 r629 6265 6265 void initPrecedence() 6266 6266 { 6267 for (int i = 0; i < TOKMAX; i++) 6268 precedence[i] = PREC_zero; 6269 6270 precedence[TOKtype] = PREC_expr; 6271 precedence[TOKerror] = PREC_expr; 6272 6273 precedence[TOKtypeof] = PREC_primary; 6274 precedence[TOKmixin] = PREC_primary; 6275 6267 6276 precedence[TOKdotvar] = PREC_primary; 6268 6277 precedence[TOKimport] = PREC_primary; … … 6280 6289 precedence[TOKfunction] = PREC_primary; 6281 6290 precedence[TOKvar] = PREC_primary; 6291 precedence[TOKsymoff] = PREC_primary; 6292 precedence[TOKstructliteral] = PREC_primary; 6282 6293 #if DMDV2 6294 precedence[TOKtraits] = PREC_primary; 6283 6295 precedence[TOKdefault] = PREC_primary; 6284 6296 #endif … … 6295 6307 precedence[TOKslice] = PREC_primary; 6296 6308 precedence[TOKarray] = PREC_primary; 6309 precedence[TOKindex] = PREC_primary; 6297 6310 6298 6311 precedence[TOKaddress] = PREC_unary; … … 6381 6394 6382 6395 precedence[TOKcomma] = PREC_expr; 6383 } 6384 6385 6396 precedence[TOKdeclaration] = PREC_expr; 6397 } 6398 6399 trunk/src/statement.c
r586 r629 3109 3109 buf->writestring(": .. case "); 3110 3110 last->toCBuffer(buf, hgs); 3111 buf->writebyte(':'); 3111 3112 buf->writenl(); 3112 3113 statement->toCBuffer(buf, hgs);
