comparison dmd/constfold.c @ 658:50383e476c7e

Upgraded frontend to DMD 1.035
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Mon, 06 Oct 2008 16:22:11 +0200
parents 29dc68c949b0
children a26b0c5d5942
comparison
equal deleted inserted replaced
657:c42173b3557b 658:50383e476c7e
704 } 704 }
705 else if (e1->op == TOKstring && e2->op == TOKstring) 705 else if (e1->op == TOKstring && e2->op == TOKstring)
706 { StringExp *es1 = (StringExp *)e1; 706 { StringExp *es1 = (StringExp *)e1;
707 StringExp *es2 = (StringExp *)e2; 707 StringExp *es2 = (StringExp *)e2;
708 708
709 assert(es1->sz == es2->sz); 709 if (es1->sz != es2->sz)
710 {
711 assert(global.errors);
712 return EXP_CANT_INTERPRET;
713 }
710 if (es1->len == es2->len && 714 if (es1->len == es2->len &&
711 memcmp(es1->string, es2->string, es1->sz * es1->len) == 0) 715 memcmp(es1->string, es2->string, es1->sz * es1->len) == 0)
712 cmp = 1; 716 cmp = 1;
713 else 717 else
714 cmp = 0; 718 cmp = 0;
1342 StringExp *es; 1346 StringExp *es;
1343 Type *t; 1347 Type *t;
1344 size_t len = es1->len + es2->len; 1348 size_t len = es1->len + es2->len;
1345 int sz = es1->sz; 1349 int sz = es1->sz;
1346 1350
1347 assert(sz == es2->sz); 1351 if (sz != es2->sz)
1352 {
1353 /* Can happen with:
1354 * auto s = "foo"d ~ "bar"c;
1355 */
1356 assert(global.errors);
1357 return e;
1358 }
1348 s = mem.malloc((len + 1) * sz); 1359 s = mem.malloc((len + 1) * sz);
1349 memcpy(s, es1->string, es1->len * sz); 1360 memcpy(s, es1->string, es1->len * sz);
1350 memcpy((unsigned char *)s + es1->len * sz, es2->string, es2->len * sz); 1361 memcpy((unsigned char *)s + es1->len * sz, es2->string, es2->len * sz);
1351 1362
1352 // Add terminating 0 1363 // Add terminating 0