Re: [Vala] conversion segfault



If you look at the generated code, you will see:

_tmp1_ = g_strconcat ("foobar", (const gchar*) test, NULL);

for line 4, which is not what you want. When you use an explicit cast on
any type other than a GObject, Vala doesn't know how to do a conversion, so
it does whatever conversion C would do. That usually means converting
integers from one type to another, but it can also mean converting an
integer to a pointer, as in this case.

If you do:
    string x = "foobar" + x.to_string();

it will compile to:

test = (guint64) 1;
_tmp1_ = g_strdup_printf ("%" G_GUINT64_FORMAT, test);
_tmp2_ = _tmp1_;
_tmp3_ = g_strconcat ("foobar", _tmp2_, NULL);

Which is probably what you want when using the + operator.

If you use an interpolated string:

     string x = @"foobar$(test)";

You will get the same code as Vala will automatically call `to_string` on
any non-strings that are embedded.

The reason the direct cast behaviour is needed is there are legitimately
non-string things that are strings. For instance, if you have an array of
uint8[], a direct cast is desirable.

    uint8 data[12];
    data[0] = 'a';
    data[1] = '\0';
    string x = "foobar" + (string) data; // Just fine and exactly what I
intended.

I agree it's not what a typical VM language would do, but Vala is trying to
have C compatibility.

On 6 February 2015 at 06:01, Daniel Brendle <grindhold skarphed org> wrote:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hello, fellow Valaists

I have the following example code which segfaults:

public int main(string[] argv){
    stdout.printf("hello world\n");
    uint64 test = 1;
    string x = "foobar"+(string)test;
    stdout.printf(x+"\n");
    return  0;
}

compiled with my valac 0.26.1, the result segfaults in line 4.
I can't imagine, this is intended behaviour.

Of course, the proper way to go for line 4 would be something like

    string x = "foobar%lld".printf(test);

Nevertheless i wonder, why the code segfaults, shouldn't there rather
be a type conversion error at compile time?

Sorry, i don't have a more recent 0.27 or 0.26.2 compiler at hand.


TIA, Grindhold
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAEBAgAGBQJU1J8SAAoJEBuqgJs6izSE+JMQAJApxYTnuGmriXvbR5KLOAcv
ZTzJ1PbUKuGs76EewJYOS5lPX997y4DRBHPTCy7cALwaAhpNcKYAI+jb6QisUbP0
Fu5JLRFv7xjoTC560r3yuRNPRgeMTd9esE6siGTm1oMB35buxt1XOQ9bz1iZ28n2
vnFhaZZ3paOFBpAwVyn6lyNGmWnjquAfCc0Km1h/w94PGgFf3wAqSQugiG9dPG9U
afOiDG1R8JFLpdQEEHCZfSd6ohq9CPjBIgncHKuRxsrfFRkmJ6CuyMdMKvzqvXeq
PgqIQ2RiAm76lVFMH4XCfsfhupVz8oDNACqaI1AEnKNRizdWBi8kqsuBZBJtlmz6
mJC2fim8ZIDUJo75/aJnUPTHFKrHFp307kkkp5AW4ihGQtn8Ef4q9Z0aLcAO4sSC
vGSdnG3hysrlUxLwozoIx1cv47IHJ+A/Nn8tO//riFsrwa821dh2wioWVdq58e7b
T5wQ+Q+nsb21LoQpd+bw2vDlRhmjJcAWXoXG/6YFPIU1zi2n9jTZ3/75m4btG6P1
sS3L99w22KldN1JDlCCWkH+6bnrQfwOP0YArQbtP7zVWEZCmKtH3ncXrAdrkjhIp
hcHAzgtsrH2fggQ9VGPMGrVVz5ALTxOMt2qUKtXSoC4LtlNDVFEXAtxvYIj5REjD
L2rx0BsJxwRq+OQfRsal
=H26t
-----END PGP SIGNATURE-----
_______________________________________________
vala-list mailing list
vala-list gnome org
https://mail.gnome.org/mailman/listinfo/vala-list




-- 
--Andre Masella<andre masella name>
http://www.masella.name/


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]