Mercurial > projects > ldc
comparison dmd2/init.c @ 1577:e4f7b5d9c68a
DMD 2.032 Merge.
author | Robert Clipsham <robert@octarineparrot.com> |
---|---|
date | Tue, 08 Sep 2009 10:07:56 +0100 |
parents | 54b3c1394d62 |
children |
comparison
equal
deleted
inserted
replaced
1576:4551475bc6b6 | 1577:e4f7b5d9c68a |
---|---|
410 edim = ((TypeSArray *)t)->dim->toInteger(); | 410 edim = ((TypeSArray *)t)->dim->toInteger(); |
411 break; | 411 break; |
412 | 412 |
413 case Tpointer: | 413 case Tpointer: |
414 case Tarray: | 414 case Tarray: |
415 edim = dim; | 415 edim = dim; |
416 break; | 416 break; |
417 | 417 |
418 default: | 418 default: |
419 assert(0); | 419 assert(0); |
420 } | 420 } |
421 } | 421 } |
422 else | 422 else |
423 { | |
423 edim = value.dim; | 424 edim = value.dim; |
425 for (size_t i = 0, j = 0; i < value.dim; i++, j++) | |
426 { | |
427 if (index.data[i]) | |
428 j = ((Expression *)index.data[i])->toInteger(); | |
429 if (j >= edim) | |
430 edim = j + 1; | |
431 } | |
432 } | |
424 | 433 |
425 elements = new Expressions(); | 434 elements = new Expressions(); |
426 elements->setDim(edim); | 435 elements->setDim(edim); |
427 for (size_t i = 0, j = 0; i < value.dim; i++, j++) | 436 for (size_t i = 0, j = 0; i < value.dim; i++, j++) |
428 { | 437 { |
462 } | 471 } |
463 | 472 |
464 Lno: | 473 Lno: |
465 delete elements; | 474 delete elements; |
466 error(loc, "array initializers as expressions are not allowed"); | 475 error(loc, "array initializers as expressions are not allowed"); |
467 return NULL; | 476 return new ErrorExp(); |
468 } | 477 } |
469 | 478 |
470 | 479 |
471 /******************************** | 480 /******************************** |
472 * If possible, convert array initializer to associative array initializer. | 481 * If possible, convert array initializer to associative array initializer. |