I had never heard of EnumClass or EnumValue until I saw your code but
after a quick play around with it the following seems to actually
work:


enum Something
{
        TEST1,
        TEST2,
        TEST3;
        
        public string toString ()
        {
                return ((EnumClass)typeof (Something).class_ref ()).get_value
(this).value_name;
        }
}

void main()
{
        Something e  = Something.TEST3;
        
        print (e.toString () + "\n");
}


b...@tbird:~/Projects/obj$ valac enumtest.vala
b...@tbird:~/Projects/obj$ ./enumtest
SOMETHING_TEST3


Its a bit of a perl one-liner. Maybe someone more experienced knows a shortcut?

You can also use "value_nick" to get a less fully qualified name but
it seems to convert to lowercase with hyphens.  "maximum" and
"minimum" work as well instead of "get_value(this)" if you want to
enumerate;

Hope this helps

On 10 July 2010 20:20, Peterpaul Klein Haneveld <[email protected]> wrote:
>
>
>
>
>
>
> Hi All,
>
> I've been interested in vala from the beginning, but only
>  recently started doing some simple tests in it. In my daily work I'm a
> Software Engineer developing in Java/JEE. In my private projects I use C
>  mostly (using my own object system, so I can develop object oriented.)
>
> I'm
>  porting a small java framework (I wrote myself) for writing Command
> Line Interfaces (CLI) to vala, in order to get more acquainted with
> vala. Now I'm having a problem with Enumerations. I'm trying to iterate
> over the values of an Enumeration. My testcase looks as follows:
>
> ---
>  start of EnumTest.vala:
> enum EnumTest {TEST1, TEST2, TEST3}
>
> void
>  main() {
>    EnumClass enumClass = (EnumClass) typeof
> (EnumTest).class_ref();
>    unowned EnumValue[] falues =
> enumClass.values;
>    for (int i = 0; i < falues.length; i++) {
>
>  unowned EnumValue falue = falues[i];
>        stdout.printf("%s",
> falue.value_name);
>    }
> }
> --- end of EnumTest.vala.
>
> First
>  of all, I don't know whether this is the way it should be done, but at
> least valac -C doesn't complain. Please enlighten me if I'm doing
> anything wrong in the vala code :-).
> I'm trying to compile this in
> Ubuntu Lucid, 64-bits, using the vala ppa, but I get an error on the
> generated C code.
>
> $ uname -a
>
>
> Linux peterpaul-vaio 2.6.32-23-generic #37-Ubuntu SMP Fri Jun 11
> 08:03:28 UTC 2010 x86_64 GNU/Linux
>
>
> $ valac --version
>
>
> Vala 0.9.1
> $ valac EnumTest.vala
> /home/peterpaul/projects/vala/EnumTest.vala.c:
>  In function ‘_vala_main’:
> /home/peterpaul/projects/vala/EnumTest.vala.c:45:
>  warning: assignment from incompatible pointer type
> /home/peterpaul/projects/vala/EnumTest.vala.c:45:
>  error: ‘GEnumClass’ has no member named ‘values_length1’
> error: cc
> exited with status 256
> Compilation failed: 1 error(s), 0 warning(s)
>
> I've
>  also generated the C code using 'valac -C', and studied the generated
> code. Indeed it contains a reference to values_length1. By googling
> around, I found that this might need to be: 'n_values'. However when
> changing this in the C file, compilation still gives me another error:
>
> $
>  gcc -g3 -o enumtest EnumTest.c `pkg-config --libs --cflags glib-2.0`
> `pkg-config --libs --cflags gobject-2.0`
> EnumTest.c: In function
> ‘_vala_main’:
> EnumTest.c:45: warning: assignment from incompatible
> pointer type
>
> Here is the relevant section from the C file:
> ---
>  start part of EnumTest.c
> 39:    GEnumClass* enumClass;
> 40:
> GEnumValue** _tmp0_;
> 41:    gint _falues_size_;
> 42:    gint
> falues_length1;
> 43:    GEnumValue** falues;
> 44:    enumClass =
> (GEnumClass*) g_type_class_ref (TYPE_ENUM_TEST);
> 45:    falues =
> (_tmp0_ = enumClass->values, falues_length1 = enumClass->n_values,
>  _falues_size_ = falues_length1, _tmp0_);
> --- end part of EnumTest.c
>
> When
>  I explicitly cast in line 45: falues = (_tmp0_ = (GEnumValue**)
> enumClass->values, falues_length1 = enumClass->n_values,
> _falues_size_ = falues_length1, _tmp0_);
> I get a segmentation fault
> in the generated binary (enumtest).
>
> Coming to a conclusion, I
> think I've found a bug in the vala compiler, in that it doesn't generate
>  the correct code for the EnumClass length of values. But also when I
> try to fix the generated C code, I cannot create something working. Note
>  that I'm not familiar with the internals of the GObject system. So in
> the end it could still be my lack of knowledge. I hope that someone can
> have a look at this, and tell me how it should be done, or verify
> valac's behavior.
>
> Thanks in advance,
> Peterpaul Klein Haneveld.
> _________________________________________________________________
> Al je email accounts in 1 inbox. Het kan in Hotmail.
> http://www.microsoft.com/netherlands/windowslive/Views/productdetail.aspx?product=Hotmail
> _______________________________________________
> vala-list mailing list
> [email protected]
> http://mail.gnome.org/mailman/listinfo/vala-list
>
>
_______________________________________________
vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to