Hi,
If I understand correctly, arrays declared like this:
type[] an_array
are arrays with a variable length. This gets translated into C as a
pointer to a dynamically allocated array, with some extra fixed-size
variables like length and size. Is this correct?
Taking that in mind, I drew the conclusion that such variable-length
arrays could be members of a struct, as the parts actually ending up in
the C-struct are fixed-size.
In Vala, I defined this struct:
struct Test {
double some_double;
uint[] array;
}
Then I tried using it in the following manner:
const Test[] tests = {
{ 2.5, {1, 2, 3} },
{ 3.5, {2, 3} }
};
int main { return 0; }
This resulted in the following failure (valac):
ERROR:valaccodearraymodule.c:1108:vala_ccode_array_module_real_get_array_length_cvalue: assertion failed:
(size != null && size.size >= dim)
Then I tried the following:
int main() {
Test[] tests = {
Test() { some_double = 2.5, array = {1, 2, 3} },
Test() { some_double = 2.7, array = {2, 3} }
};
return 0;
}
Which did compile.
I attached two files with complete code of the two examples I posted. I
compiled them using 'valac test.vala' (version 0.29.2)
Are the code examples valid Vala code? I'm in doubt because the
compiler fails instead of giving a warning (example 1).
Thanks for your time,
Steef
P.S.
For those wondering why on earth I'd be interested in this: I'm writing
a small application with an interface that consists of functions bound
to a sequence of pressed keys. Ideally, I'd like to define those
bindings like this:
const Binding[] bindings = {
{ function1, {key1, key2} },
{ function2, {key3} },
...
};
Attachment:
example_1.vala
Description: Text document
Attachment:
example_2.vala
Description: Text document