arrays/length-type-include.vala \
arrays/struct-field-length-cname.vala \
arrays/struct-field-initializer.vala \
+ arrays/struct-namespaced-initializer.vala \
arrays/incompatible-integer-elements.test \
arrays/slice-invalid-start.test \
arrays/slice-invalid-stop.test \
--- /dev/null
+namespace Manam {
+ namespace Bar {
+ public struct Foo {
+ public int i;
+ public int j;
+ }
+ }
+
+ public class Baz {
+ public struct Faz {
+ public string s;
+ public uint i;
+ }
+ }
+}
+
+void main () {
+ Manam.Bar.Foo[] foo = { { 42, 4711 }, { 23, 17 } };
+ assert (foo.length == 2);
+ assert (foo[0].i == 42);
+ assert (foo[1].j == 17);
+
+ Manam.Baz.Faz[] faz = { { "manam", 4711U } };
+ assert (faz.length == 1);
+ assert (faz[0].s == "manam");
+ assert (faz[0].i == 4711U);
+}
var in_array_creation_initializer = parent_node is InitializerList && parent_node.parent_node is ArrayCreationExpression;
ObjectCreationExpression? struct_creation = null;
if (in_array_creation_initializer) {
- var ma = new MemberAccess.simple (st.name, source_reference);
+ unowned Symbol? sym = st;
+ var ma = new MemberAccess.simple (sym.name, source_reference);
ma.creation_member = true;
- ma.symbol_reference = st;
+ ma.symbol_reference = sym;
+ MemberAccess inner = ma;
+ while (sym.parent_symbol != null && sym.parent_symbol != context.root) {
+ sym = sym.parent_symbol;
+ var ma_inner = new MemberAccess.simple (sym.name, source_reference);
+ inner.inner = ma_inner;
+ inner = ma_inner;
+ }
struct_creation = new ObjectCreationExpression (ma, source_reference);
struct_creation.target_type = target_type.copy ();
struct_creation.struct_creation = true;