while (inner_expr is CastExpression) {
inner_expr = ((CastExpression) inner_expr).inner;
}
+ if (inner_expr is ElementAccess) {
+ inner_expr = ((ElementAccess) inner_expr).container;
+ }
if (!(inner_expr.symbol_reference is Variable)) {
// heap allocated struct leaked, destroy it
var value = new GLibValue (new PointerType (new VoidType ()), innercexpr);
constants/strings.vala \
namespace/unique.vala \
arrays/cast-silent-invalid.test \
+ arrays/cast-struct-boxed-element-access.vala \
arrays/class-field-initializer.vala \
arrays/class-field-length-cname.vala \
arrays/constant-element-access.vala \
--- /dev/null
+struct Foo {
+ public int i;
+}
+
+void main () {
+ var foo = new Foo?[] { { 23 }, { 42 }, { 4711 } };
+ {
+ Foo f = foo[0];
+ assert (f.i == 23);
+ assert (foo[0].i == 23);
+ }
+ {
+ Foo f = (Foo) foo[1];
+ assert (f.i == 42);
+ assert (foo[1].i == 42);
+ }
+ {
+ Foo f = (!) foo[2];
+ assert (f.i == 4711);
+ assert (foo[2].i == 4711);
+ }
+}