arrays/resize-unowned-invalid.test \
arrays/resize-unowned-invalid-2.test \
arrays/resize-unowned-invalid-3.test \
+ arrays/slice-fixed-length.vala \
arrays/slice-invalid-start.test \
arrays/slice-invalid-stop.test \
arrays/slice-no-array.test \
--- /dev/null
+void manam (string[] foo) {
+ assert (foo.length == 2);
+ assert (foo[0] == "bar");
+ assert (foo[1] == "baz");
+}
+
+void minim (owned string[] foo) {
+ assert (foo.length == 2);
+ assert (foo[0] == "bar");
+ assert (foo[1] == "baz");
+}
+
+void main () {
+ string bar[4] = { "foo", "bar", "baz", "buzz" };
+ {
+ var foo = bar[1:3];
+ assert (foo.length == 2);
+ assert (foo[0] == "bar");
+ assert (foo[1] == "baz");
+ }
+ {
+ unowned string[] foo = bar[1:3];
+ assert (foo.length == 2);
+ assert (foo[0] == "bar");
+ assert (foo[1] == "baz");
+ }
+ {
+ int begin = 1;
+ var foo = bar[begin:3];
+ assert (foo.length == 2);
+ assert (foo[0] == "bar");
+ assert (foo[1] == "baz");
+ }
+ {
+ string[] foo = bar[1:3];
+ assert (foo.length == 2);
+ assert (foo[0] == "bar");
+ assert (foo[1] == "baz");
+ }
+ {
+ int end = 3;
+ string[] foo = bar[1:end];
+ assert (foo.length == 2);
+ assert (foo[0] == "bar");
+ assert (foo[1] == "baz");
+ }
+ {
+ manam (bar[1:3]);
+ }
+ {
+ int begin = 1;
+ manam (bar[begin:3]);
+ }
+ {
+ int end = 3;
+ manam (bar[1:end]);
+ }
+ {
+ minim (bar[1:3]);
+ }
+ {
+ int begin = 1;
+ minim (bar[begin:3]);
+ }
+ {
+ int end = 3;
+ minim (bar[1:end]);
+ }
+}
value_type = container.value_type.copy ();
value_type.value_owned = false;
+ // inline allocated results are not compatible with non-constant start/stop expressions
+ unowned ArrayType array_type = (ArrayType) value_type;
+ array_type.fixed_length = false;
+ array_type.inline_allocated = false;
+ array_type.length = null;
+
/* check if the index is of type integer */
if (!(start.value_type is IntegerType || start.value_type is EnumValueType)) {
error = true;