allow implicit conversion from 0 to enum and flags types
authorJuerg Billeter <j@bitron.ch>
Sun, 2 Mar 2008 11:55:37 +0000 (11:55 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sun, 2 Mar 2008 11:55:37 +0000 (11:55 +0000)
2008-03-02  Juerg Billeter  <j@bitron.ch>

* vala/valaintegertype.vala: allow implicit conversion from 0 to
  enum and flags types

* tests/enums.vala: test conversion from 0 to enum type

svn path=/trunk/; revision=1084

ChangeLog
tests/enums.vala
vala/valaintegertype.vala

index 78b2913..f95decc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2008-03-02  Jürg Billeter  <j@bitron.ch>
 
+       * vala/valaintegertype.vala: allow implicit conversion from 0 to
+         enum and flags types
+
+       * tests/enums.vala: test conversion from 0 to enum type
+
+2008-03-02  Jürg Billeter  <j@bitron.ch>
+
        * vapi/glib-2.0.vapi: add bindings for g_get_system_*_dirs
 
        * vala/valacodecontext.vala: use g_get_system_data_dirs to find
index 09ca122..aa5437a 100644 (file)
@@ -17,6 +17,10 @@ class Maman.Bar : Object {
                stdout.printf (" %d", Foo.VAL5);
        }
 
+       static void test_enums_0_conversion () {
+               Foo foo = 0;
+       }
+
        static int main (string[] args) {
                stdout.printf ("Enum Test: 1");
                
@@ -24,7 +28,9 @@ class Maman.Bar : Object {
                bar.run ();
 
                stdout.printf (" 6\n");
-               
+
+               test_enums_0_conversion ();
+
                return 0;
        }
 }
index 97c2bca..40309af 100644 (file)
@@ -51,6 +51,11 @@ public class Vala.IntegerType : ValueType {
                                        return (val >= int_attr.get_integer ("min") && val <= int_attr.get_integer ("max"));
                                }
                        }
+               } else if (target_type.data_type is Enum && literal.get_type_name () == "int") {
+                       // allow implicit conversion from 0 to enum and flags types
+                       if (literal.value.to_int () == 0) {
+                               return true;
+                       }
                }
 
                return base.compatible (target_type, enable_non_null);