On Tue, 2009-10-20 at 19:33 +0200, Xavier Bestel wrote:
> On Sun, 2009-10-18 at 23:00 +0200, Xavier Bestel wrote:
> > Le dimanche 18 octobre 2009 à 19:26 +0100, Abderrahim Kitouni a écrit :
> [...]
> > > You might want to look at GScanner, I haven't used it myself, but it
> > > seems to be exactly what you want.
> > > http://library.gnome.org/devel/glib/stable/glib-Lexical-Scanner.html
> > 
> > That looks effectively exactely like I want.
> 
> Except the vapi file doesn't work.
> Here are my changes:
> 
> --- /usr/share/vala/vapi/glib-2.0.vapi.orig     2009-10-20 19:22:51.000000000 
> +0200
> +++ /usr/share/vala/vapi/glib-2.0.vapi  2009-10-20 19:29:03.000000000 +0200
> @@ -2125,13 +2125,17 @@
>                 public TokenValue next_value;
>                 public uint next_line;
>                 public uint next_position;
> -               public Scanner (ScannerConfig? config_templ);
> +               public Scanner (ScannerConfig? config_templ = null);
>                 public void input_file (int input_fd);
>                 public void sync_file_offset ();
>                 public void input_text (string text, uint text_len);
>                 public TokenType peek_next_token ();
>                 public TokenType get_next_token ();
>                 public bool eof ();
> +               public int cur_line ();
> +               public int cur_position ();
> +               public TokenType cur_token ();
> +               public TokenValue cur_value ();
>                 public uint set_scope (uint scope_id);
>                 public void scope_add_symbol (uint scope_id, string symbol, 
> void* value);
>                 public void scope_foreach_symbol (uint scope_id, HFunc func);
> 
> 
> But even with that I still have a problem: TokenValue is a simple enum,
> tagged with [SimpleType] in the vapi file, but Vala inserts a
> (non-existing) g_token_value_destroy() and of course fails at link-time.
> 
> Could someone knowledgeable show me how to fix the vapi ?

So, I've added [CCode (destroy_function = "")] which makes it work, but
by pure luck: now the code generator inserts an "(&val)" into the code
(i.e. it tries to destroy the value with an empty function name).
That's ugly.

I think it comes from the fact that TokenValue is actually an union, but
Vala has no concept of union (even for foreign code) it it's declared as
a struct in the vapi, which it tries to destroy after use.

Is there some documentation about the code attributes somewhere ? I'd
like to fix it myself but I need some pointers.

Thanks,

        Xav



_______________________________________________
Vala-list mailing list
Vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to