Changeset 629
- Timestamp:
- 08/26/10 18:21:45 (14 years 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) (2 diffs)
- trunk/src/attrib.c (modified) (1 diff)
- trunk/src/expression.c (modified) (2 diffs)
- trunk/src/parse.c (modified) (2 diffs)
- trunk/src/statement.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/dmd-1.x/src/attrib.c
r513 r629 306 306 */ 307 307 308 308 void AttribDeclaration::addLocalClass(ClassDeclarations *aclasses) 309 309 { 310 310 Array *d = include(NULL, NULL); 311 311 312 312 if (d) 313 313 { 314 314 for (unsigned i = 0; i < d->dim; i++) 315 315 { Dsymbol *s = (Dsymbol *)d->data[i]; 316 316 s->addLocalClass(aclasses); 317 317 } 318 318 } 319 319 } 320 320 321 321 322 322 void AttribDeclaration::toCBuffer(OutBuffer *buf, HdrGenState *hgs) 323 323 { 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 339 346 buf->writeByte(';'); 340 347 buf->writenl(); 341 348 } 342 349 343 350 /************************* StorageClassDeclaration ****************************/ 344 351 345 352 StorageClassDeclaration::StorageClassDeclaration(StorageClass stc, Array *decl) 346 353 : AttribDeclaration(decl) 347 354 { 348 355 this->stc = stc; 349 356 } 350 357 351 358 Dsymbol *StorageClassDeclaration::syntaxCopy(Dsymbol *s) 352 359 { 353 360 StorageClassDeclaration *scd; 354 361 355 362 assert(!s); 356 363 scd = new StorageClassDeclaration(stc, Dsymbol::arraySyntaxCopy(decl)); branches/dmd-1.x/src/expression.c
r590 r629 745 745 break; 746 746 } 747 747 748 748 // If D linkage and variadic, add _arguments[] as first argument 749 749 if (tf->linkage == LINKd && tf->varargs == 1) 750 750 { 751 751 assert(arguments->dim >= nparams); 752 752 Expression *e = createTypeInfoArray(sc, (Expression **)&arguments->data[nparams], 753 753 arguments->dim - nparams); 754 754 arguments->insert(0, e); 755 755 } 756 756 } 757 757 758 758 /************************************************** 759 759 * Write expression out to buf, but wrap it 760 760 * in ( ) if its precedence is less than pr. 761 761 */ 762 762 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 || 767 774 /* Despite precedence, we don't allow a<b<c expressions. 768 775 * They must be parenthesized. 769 776 */ 770 777 (pr == PREC_rel && precedence[e->op] == pr)) 771 778 { 772 779 buf->writeByte('('); 773 780 e->toCBuffer(buf, hgs); 774 781 buf->writeByte(')'); 775 782 } 776 783 else 777 784 e->toCBuffer(buf, hgs); 778 785 } 779 786 780 787 /************************************************** 781 788 * Write out argument list to buf. 782 789 */ 783 790 784 791 void argsToCBuffer(OutBuffer *buf, Expressions *arguments, HdrGenState *hgs) … … 6784 6791 else 6785 6792 #endif 6786 6793 return Expression::toLvalue(sc, e); 6787 6794 } 6788 6795 6789 6796 Expression *CallExp::modifiableLvalue(Scope *sc, Expression *e) 6790 6797 { 6791 6798 #if 1 6792 6799 return Expression::modifiableLvalue(sc, e); 6793 6800 #else 6794 6801 /* Although function return values being usable as "ref" parameters is 6795 6802 * unsound, disabling it breaks existing code. 6796 6803 * Bugzilla 3167 6797 6804 */ 6798 6805 error("cannot assign to function call"); 6799 6806 return toLvalue(sc, e); 6800 6807 #endif 6801 6808 } 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); 6809 6823 buf->writeByte(')'); 6810 6824 } 6811 6825 6812 6826 6813 6827 /************************************************************/ 6814 6828 6815 6829 AddrExp::AddrExp(Loc loc, Expression *e) 6816 6830 : UnaExp(loc, TOKaddress, sizeof(AddrExp), e) 6817 6831 { 6818 6832 } 6819 6833 6820 6834 Expression *AddrExp::semantic(Scope *sc) 6821 6835 { 6822 6836 #if LOGSEMANTIC 6823 6837 printf("AddrExp::semantic('%s')\n", toChars()); 6824 6838 #endif 6825 6839 if (!type) 6826 6840 { branches/dmd-1.x/src/parse.c
r588 r629 5447 5447 return e; 5448 5448 } 5449 5449 5450 5450 /********************************************** 5451 5451 */ 5452 5452 5453 5453 void Parser::addComment(Dsymbol *s, unsigned char *blockComment) 5454 5454 { 5455 5455 s->addComment(combineComments(blockComment, token.lineComment)); 5456 5456 token.lineComment = NULL; 5457 5457 } 5458 5458 5459 5459 /********************************** 5460 5460 * Set operator precedence for each operator. 5461 5461 */ 5462 5462 5463 5463 enum PREC precedence[TOKMAX]; 5464 5464 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; 5469 5478 precedence[TOKidentifier] = PREC_primary; 5470 5479 precedence[TOKthis] = PREC_primary; 5471 5480 precedence[TOKsuper] = PREC_primary; 5472 5481 precedence[TOKint64] = PREC_primary; 5473 5482 precedence[TOKfloat64] = PREC_primary; 5474 5483 precedence[TOKnull] = PREC_primary; 5475 5484 precedence[TOKstring] = PREC_primary; 5476 5485 precedence[TOKarrayliteral] = PREC_primary; 5477 5486 precedence[TOKtypeid] = PREC_primary; 5478 5487 precedence[TOKis] = PREC_primary; 5479 5488 precedence[TOKassert] = 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 5485 5497 5486 5498 // post 5487 5499 precedence[TOKdotti] = PREC_primary; 5488 5500 precedence[TOKdot] = PREC_primary; 5489 5501 // precedence[TOKarrow] = PREC_primary; 5490 5502 precedence[TOKplusplus] = PREC_primary; 5491 5503 precedence[TOKminusminus] = PREC_primary; 5492 5504 precedence[TOKcall] = PREC_primary; 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; 5497 5510 precedence[TOKstar] = PREC_unary; 5498 5511 precedence[TOKneg] = PREC_unary; 5499 5512 precedence[TOKuadd] = PREC_unary; 5500 5513 precedence[TOKnot] = PREC_unary; 5501 5514 precedence[TOKtobool] = PREC_add; 5502 5515 precedence[TOKtilde] = PREC_unary; 5503 5516 precedence[TOKdelete] = PREC_unary; 5504 5517 precedence[TOKnew] = PREC_unary; 5505 5518 precedence[TOKcast] = PREC_unary; 5506 5519 5507 5520 precedence[TOKmul] = PREC_mul; 5508 5521 precedence[TOKdiv] = PREC_mul; 5509 5522 precedence[TOKmod] = PREC_mul; 5510 5523 5511 5524 precedence[TOKadd] = PREC_add; 5512 5525 precedence[TOKmin] = PREC_add; 5513 5526 precedence[TOKcat] = PREC_add; 5514 5527 … … 5557 5570 5558 5571 precedence[TOKquestion] = PREC_cond; 5559 5572 5560 5573 precedence[TOKassign] = PREC_assign; 5561 5574 precedence[TOKconstruct] = PREC_assign; 5562 5575 precedence[TOKblit] = PREC_assign; 5563 5576 precedence[TOKaddass] = PREC_assign; 5564 5577 precedence[TOKminass] = PREC_assign; 5565 5578 precedence[TOKcatass] = PREC_assign; 5566 5579 precedence[TOKmulass] = PREC_assign; 5567 5580 precedence[TOKdivass] = PREC_assign; 5568 5581 precedence[TOKmodass] = PREC_assign; 5569 5582 precedence[TOKshlass] = PREC_assign; 5570 5583 precedence[TOKshrass] = PREC_assign; 5571 5584 precedence[TOKushrass] = PREC_assign; 5572 5585 precedence[TOKandass] = PREC_assign; 5573 5586 precedence[TOKorass] = PREC_assign; 5574 5587 precedence[TOKxorass] = PREC_assign; 5575 5588 5576 5589 precedence[TOKcomma] = PREC_expr; 5577 } 5578 5590 precedence[TOKdeclaration] = PREC_expr; 5591 } 5592 trunk/src/attrib.c
r526 r629 307 307 */ 308 308 309 309 void AttribDeclaration::addLocalClass(ClassDeclarations *aclasses) 310 310 { 311 311 Dsymbols *d = include(NULL, NULL); 312 312 313 313 if (d) 314 314 { 315 315 for (unsigned i = 0; i < d->dim; i++) 316 316 { Dsymbol *s = (Dsymbol *)d->data[i]; 317 317 s->addLocalClass(aclasses); 318 318 } 319 319 } 320 320 } 321 321 322 322 323 323 void AttribDeclaration::toCBuffer(OutBuffer *buf, HdrGenState *hgs) 324 324 { 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 340 347 buf->writeByte(';'); 341 348 buf->writenl(); 342 349 } 343 350 344 351 /************************* StorageClassDeclaration ****************************/ 345 352 346 353 StorageClassDeclaration::StorageClassDeclaration(StorageClass stc, Dsymbols *decl) 347 354 : AttribDeclaration(decl) 348 355 { 349 356 this->stc = stc; 350 357 } 351 358 352 359 Dsymbol *StorageClassDeclaration::syntaxCopy(Dsymbol *s) 353 360 { 354 361 StorageClassDeclaration *scd; 355 362 356 363 assert(!s); 357 364 scd = new StorageClassDeclaration(stc, Dsymbol::arraySyntaxCopy(decl)); trunk/src/expression.c
r616 r629 792 792 assert(tret->isWild()); 793 793 if (wildmatch & MODconst || wildmatch & (wildmatch - 1)) 794 794 tret = tret->constOf(); 795 795 else if (wildmatch & MODimmutable) 796 796 tret = tret->invariantOf(); 797 797 else 798 798 { assert(wildmatch & MODmutable); 799 799 tret = tret->mutableOf(); 800 800 } 801 801 } 802 802 return tret; 803 803 } 804 804 805 805 /************************************************** 806 806 * Write expression out to buf, but wrap it 807 807 * in ( ) if its precedence is less than pr. 808 808 */ 809 809 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 || 814 821 /* Despite precedence, we don't allow a<b<c expressions. 815 822 * They must be parenthesized. 816 823 */ 817 824 (pr == PREC_rel && precedence[e->op] == pr)) 818 825 { 819 826 buf->writeByte('('); 820 827 e->toCBuffer(buf, hgs); 821 828 buf->writeByte(')'); 822 829 } 823 830 else 824 831 e->toCBuffer(buf, hgs); 825 832 } 826 833 827 834 /************************************************** 828 835 * Write out argument list to buf. 829 836 */ 830 837 831 838 void argsToCBuffer(OutBuffer *buf, Expressions *arguments, HdrGenState *hgs) … … 7243 7250 #if DMDV2 7244 7251 int CallExp::isLvalue() 7245 7252 { 7246 7253 // if (type->toBasetype()->ty == Tstruct) 7247 7254 // return 1; 7248 7255 Type *tb = e1->type->toBasetype(); 7249 7256 if (tb->ty == Tfunction && ((TypeFunction *)tb)->isref) 7250 7257 return 1; // function returns a reference 7251 7258 return 0; 7252 7259 } 7253 7260 #endif 7254 7261 7255 7262 Expression *CallExp::toLvalue(Scope *sc, Expression *e) 7256 7263 { 7257 7264 if (isLvalue()) 7258 7265 return this; 7259 7266 return Expression::toLvalue(sc, e); 7260 7267 } 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); 7268 7282 buf->writeByte(')'); 7269 7283 } 7270 7284 7271 7285 7272 7286 /************************************************************/ 7273 7287 7274 7288 AddrExp::AddrExp(Loc loc, Expression *e) 7275 7289 : UnaExp(loc, TOKaddress, sizeof(AddrExp), e) 7276 7290 { 7277 7291 } 7278 7292 7279 7293 Expression *AddrExp::semantic(Scope *sc) 7280 7294 { 7281 7295 #if LOGSEMANTIC 7282 7296 printf("AddrExp::semantic('%s')\n", toChars()); 7283 7297 #endif 7284 7298 if (!type) 7285 7299 { trunk/src/parse.c
r585 r629 6247 6247 } 6248 6248 6249 6249 /********************************************** 6250 6250 */ 6251 6251 6252 6252 void Parser::addComment(Dsymbol *s, unsigned char *blockComment) 6253 6253 { 6254 6254 s->addComment(combineComments(blockComment, token.lineComment)); 6255 6255 token.lineComment = NULL; 6256 6256 } 6257 6257 6258 6258 6259 6259 /********************************** 6260 6260 * Set operator precedence for each operator. 6261 6261 */ 6262 6262 6263 6263 enum PREC precedence[TOKMAX]; 6264 6264 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; 6269 6278 precedence[TOKidentifier] = PREC_primary; 6270 6279 precedence[TOKthis] = PREC_primary; 6271 6280 precedence[TOKsuper] = PREC_primary; 6272 6281 precedence[TOKint64] = PREC_primary; 6273 6282 precedence[TOKfloat64] = PREC_primary; 6274 6283 precedence[TOKnull] = PREC_primary; 6275 6284 precedence[TOKstring] = PREC_primary; 6276 6285 precedence[TOKarrayliteral] = PREC_primary; 6277 6286 precedence[TOKtypeid] = PREC_primary; 6278 6287 precedence[TOKis] = PREC_primary; 6279 6288 precedence[TOKassert] = 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 6285 6297 6286 6298 // post 6287 6299 precedence[TOKdotti] = PREC_primary; 6288 6300 precedence[TOKdot] = PREC_primary; 6289 6301 // precedence[TOKarrow] = PREC_primary; 6290 6302 precedence[TOKplusplus] = PREC_primary; 6291 6303 precedence[TOKminusminus] = PREC_primary; 6292 6304 precedence[TOKpreplusplus] = PREC_primary; 6293 6305 precedence[TOKpreminusminus] = PREC_primary; 6294 6306 precedence[TOKcall] = PREC_primary; 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; 6299 6312 precedence[TOKstar] = PREC_unary; 6300 6313 precedence[TOKneg] = PREC_unary; 6301 6314 precedence[TOKuadd] = PREC_unary; 6302 6315 precedence[TOKnot] = PREC_unary; 6303 6316 precedence[TOKtobool] = PREC_add; 6304 6317 precedence[TOKtilde] = PREC_unary; 6305 6318 precedence[TOKdelete] = PREC_unary; 6306 6319 precedence[TOKnew] = PREC_unary; 6307 6320 precedence[TOKcast] = PREC_unary; 6308 6321 6309 6322 precedence[TOKpow] = PREC_pow; 6310 6323 6311 6324 precedence[TOKmul] = PREC_mul; 6312 6325 precedence[TOKdiv] = PREC_mul; 6313 6326 precedence[TOKmod] = PREC_mul; 6314 6327 precedence[TOKpow] = PREC_mul; 6315 6328 6316 6329 precedence[TOKadd] = PREC_add; … … 6363 6376 precedence[TOKquestion] = PREC_cond; 6364 6377 6365 6378 precedence[TOKassign] = PREC_assign; 6366 6379 precedence[TOKconstruct] = PREC_assign; 6367 6380 precedence[TOKblit] = PREC_assign; 6368 6381 precedence[TOKaddass] = PREC_assign; 6369 6382 precedence[TOKminass] = PREC_assign; 6370 6383 precedence[TOKcatass] = PREC_assign; 6371 6384 precedence[TOKmulass] = PREC_assign; 6372 6385 precedence[TOKdivass] = PREC_assign; 6373 6386 precedence[TOKmodass] = PREC_assign; 6374 6387 precedence[TOKpowass] = PREC_assign; 6375 6388 precedence[TOKshlass] = PREC_assign; 6376 6389 precedence[TOKshrass] = PREC_assign; 6377 6390 precedence[TOKushrass] = PREC_assign; 6378 6391 precedence[TOKandass] = PREC_assign; 6379 6392 precedence[TOKorass] = PREC_assign; 6380 6393 precedence[TOKxorass] = PREC_assign; 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 3091 3091 for (uinteger_t i = fval; i != lval + 1; i++) 3092 3092 { 3093 3093 Statement *s = statement; 3094 3094 if (i != lval) // if not last case 3095 3095 s = new ExpStatement(loc, NULL); 3096 3096 Expression *e = new IntegerExp(loc, i, first->type); 3097 3097 Statement *cs = new CaseStatement(loc, e, s); 3098 3098 statements->push(cs); 3099 3099 } 3100 3100 Statement *s = new CompoundStatement(loc, statements); 3101 3101 s = s->semantic(sc); 3102 3102 return s; 3103 3103 } 3104 3104 3105 3105 void CaseRangeStatement::toCBuffer(OutBuffer *buf, HdrGenState *hgs) 3106 3106 { 3107 3107 buf->writestring("case "); 3108 3108 first->toCBuffer(buf, hgs); 3109 3109 buf->writestring(": .. case "); 3110 3110 last->toCBuffer(buf, hgs); 3111 buf->writebyte(':'); 3111 3112 buf->writenl(); 3112 3113 statement->toCBuffer(buf, hgs); 3113 3114 } 3114 3115 3115 3116 #endif 3116 3117 3117 3118 /******************************** DefaultStatement ***************************/ 3118 3119 3119 3120 DefaultStatement::DefaultStatement(Loc loc, Statement *s) 3120 3121 : Statement(loc) 3121 3122 { 3122 3123 this->statement = s; 3123 3124 #if IN_GCC 3124 3125 + cblock = NULL; 3125 3126 #endif 3126 3127 } 3127 3128 3128 3129 Statement *DefaultStatement::syntaxCopy() 3129 3130 { 3130 3131 DefaultStatement *s = new DefaultStatement(loc, statement->syntaxCopy());
