Changeset 252
- Timestamp:
- 11/18/09 04:52:26 (2 years ago)
- Files:
-
- trunk/src/expression.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/expression.c
r251 r252 4997 4997 //printf("targ: %s\n", targ->toChars()); 4998 4998 //printf("tspec: %s\n", tspec->toChars()); 4999 //printf("test1 %d\n", m);5000 4999 if (m == MATCHnomatch || 5001 5000 (m != MATCHexact && tok == TOKequal)) … … 9473 9472 e2->type->print(); 9474 9473 #endif 9474 Type *tb1next = tb1->nextOf(); 9475 Type *tb2next = tb2->nextOf(); 9476 9475 9477 if ((tb1->ty == Tsarray || tb1->ty == Tarray) && 9476 e2->type->implicitConvTo(tb1->nextOf()) >= MATCHconst) 9477 { 9478 type = tb1->nextOf()->arrayOf(); 9478 e2->implicitConvTo(tb1next) >= MATCHconvert) 9479 { 9480 e2 = e2->implicitCastTo(sc, tb1next); 9481 type = tb1next->arrayOf(); 9479 9482 if (tb2->ty == Tarray) 9480 9483 { // Make e2 into [e2] … … 9485 9488 } 9486 9489 else if ((tb2->ty == Tsarray || tb2->ty == Tarray) && 9487 e1->type->implicitConvTo(tb2->nextOf()) >= MATCHconst) 9488 { 9489 type = tb2->nextOf()->arrayOf(); 9490 e1->implicitConvTo(tb2next) >= MATCHconvert) 9491 { 9492 e1 = e1->implicitCastTo(sc, tb2next); 9493 type = tb2next->arrayOf(); 9490 9494 if (tb1->ty == Tarray) 9491 9495 { // Make e1 into [e1] … … 9498 9502 if ((tb1->ty == Tsarray || tb1->ty == Tarray) && 9499 9503 (tb2->ty == Tsarray || tb2->ty == Tarray) && 9500 (tb1 ->nextOf()->mod || tb2->nextOf()->mod) &&9501 (tb1 ->nextOf()->mod != tb2->nextOf()->mod)9504 (tb1next->mod || tb2next->mod) && 9505 (tb1next->mod != tb2next->mod) 9502 9506 ) 9503 9507 { 9504 Type *t1 = tb1 ->nextOf()->mutableOf()->constOf()->arrayOf();9505 Type *t2 = tb2 ->nextOf()->mutableOf()->constOf()->arrayOf();9508 Type *t1 = tb1next->mutableOf()->constOf()->arrayOf(); 9509 Type *t2 = tb2next->mutableOf()->constOf()->arrayOf(); 9506 9510 if (e1->op == TOKstring && !((StringExp *)e1)->committed) 9507 9511 e1->type = t1; … … 9520 9524 if (tb->ty == Tsarray) 9521 9525 type = tb->nextOf()->arrayOf(); 9522 if (type->ty == Tarray && tb1 ->nextOf() && tb2->nextOf()&&9523 tb1 ->nextOf()->mod != tb2->nextOf()->mod)9526 if (type->ty == Tarray && tb1next && tb2next && 9527 tb1next->mod != tb2next->mod) 9524 9528 { 9525 9529 type = type->nextOf()->toHeadMutable()->arrayOf(); … … 9545 9549 error("Can only concatenate arrays, not (%s ~ %s)", 9546 9550 e1->type->toChars(), e2->type->toChars()); 9547 type = Type::tint32; 9548 e = this; 9551 return new ErrorExp(); 9549 9552 } 9550 9553 e->type = e->type->semantic(loc, sc);
