diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2017-05-19 00:39:22 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2017-05-19 00:39:22 -0700 |
commit | 34171bdac5602dbbda862c5ad2e247a8dd5bf3a3 (patch) | |
tree | e20f7bb3e923d95b0f6028ec9f5e270befe7ebf2 | |
parent | 537ad74cccc709b14418114e177d595ce3812627 (diff) | |
download | mu-34171bdac5602dbbda862c5ad2e247a8dd5bf3a3.tar.gz |
3863
Thanks Lakshman Swaminathan for running into this bug.
-rw-r--r-- | 032array.cc | 11 | ||||
-rw-r--r-- | 055shape_shifting_container.cc | 20 |
2 files changed, 22 insertions, 9 deletions
diff --git a/032array.cc b/032array.cc index 64264ef8..7c134bdb 100644 --- a/032array.cc +++ b/032array.cc @@ -269,6 +269,17 @@ void test_container_sizes_from_repeated_address_and_array_types() { CHECK_EQ(SIZE(Container_metadata)-old_size, 1); } +void test_container_sizes_on_unknown_type() { + // a container we don't have the size for + reagent container("x:point"); + int old_size = SIZE(Container_metadata); + // scanning address to array with a typo + reagent r("x:address:array:adress:number"); + compute_container_sizes(r, ""); // should not crash + // no non-container types precomputed + CHECK_EQ(SIZE(Container_metadata), old_size); +} + //:: To access elements of an array, use 'index' :(scenario index) diff --git a/055shape_shifting_container.cc b/055shape_shifting_container.cc index 6083f904..a9225960 100644 --- a/055shape_shifting_container.cc +++ b/055shape_shifting_container.cc @@ -555,15 +555,17 @@ def main [ :(before "End compute_container_sizes Non-atom Special-cases") const type_tree* root = get_base_type(type); -type_info& info = get(Type, root->value); -if (info.kind == CONTAINER) { - compute_container_sizes(info, type, pending_metadata, location_for_error_messages); - return; -} -if (info.kind == EXCLUSIVE_CONTAINER) { - compute_exclusive_container_sizes(info, type, pending_metadata, location_for_error_messages); - return; -} +if (contains_key(Type, root->value)) { + type_info& info = get(Type, root->value); + if (info.kind == CONTAINER) { + compute_container_sizes(info, type, pending_metadata, location_for_error_messages); + return; + } + if (info.kind == EXCLUSIVE_CONTAINER) { + compute_exclusive_container_sizes(info, type, pending_metadata, location_for_error_messages); + return; + } +} // otherwise error raised elsewhere :(before "End Unit Tests") void test_container_sizes_shape_shifting_container() { |