about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--032array.cc19
-rw-r--r--033exclusive_container.cc17
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 [