diff options
-rw-r--r-- | 032array.cc | 19 | ||||
-rw-r--r-- | 033exclusive_container.cc | 17 |
2 files changed, 25 insertions, 11 deletions
diff --git a/032array.cc b/032array.cc index 188e3477..aace0a5a 100644 --- a/032array.cc +++ b/032array.cc @@ -134,17 +134,14 @@ container foo [ +error: container 'foo' cannot determine size of element x :(before "End Load Container Element Definition") -{ - const string_tree* type_name = info.element_type_names.back(); - if (type_name->value == "array") { - if (!type_name->right) { - raise_error << "container '" << name << "' doesn't specify type of array elements for " << info.element_names.back() << '\n' << end(); - break; - } - if (!type_name->right->right) { // array has no length - raise_error << "container '" << name << "' cannot determine size of element " << info.element_names.back() << '\n' << end(); - break; - } +if (info.element_type_names.back()->value == "array") { + if (!info.element_type_names.back()->right) { + raise_error << "container '" << name << "' doesn't specify type of array elements for " << info.element_names.back() << '\n' << end(); + continue; + } + if (!info.element_type_names.back()->right->right) { // array has no length + raise_error << "container '" << name << "' cannot determine size of element " << info.element_names.back() << '\n' << end(); + continue; } } diff --git a/033exclusive_container.cc b/033exclusive_container.cc index 1d63f593..3b1dc201 100644 --- a/033exclusive_container.cc +++ b/033exclusive_container.cc @@ -179,6 +179,23 @@ else if (command == "exclusive-container") { insert_container(command, EXCLUSIVE_CONTAINER, in); } +//: arrays are disallowed inside exclusive containers unless their length is +//: fixed in advance + +:(scenario exclusive_container_contains_array) +% Hide_errors = true; +exclusive-container foo [ + x:array:number:3 +] +$error: 0 + +:(scenario exclusive_container_warns_on_dynamic_array_element) +% Hide_errors = true; +exclusive-container foo [ + x:array:number +] ++error: container 'foo' cannot determine size of element x + //:: To construct exclusive containers out of variant types, use 'merge'. :(scenario lift_to_exclusive_container) exclusive-container foo [ |