[vala/wip/issue/996: 3/3] girwriter: Evaluate and output non literal enum-value if it is a constant



commit b6a85de3cf035411d15b199aacac1cb793afd85d
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Tue May 19 14:29:06 2020 +0200

    girwriter: Evaluate and output non literal enum-value if it is a constant
    
    Fixes https://gitlab.gnome.org/GNOME/vala/issues/996

 codegen/valagirwriter.vala               | 5 +++++
 tests/girwriter/GirTest-1.0.gir-expected | 5 +++++
 tests/girwriter/girtest.vala             | 6 ++++++
 tests/girwriter/girtest.vapi-expected    | 6 ++++++
 4 files changed, 22 insertions(+)
---
diff --git a/codegen/valagirwriter.vala b/codegen/valagirwriter.vala
index 0198cc908..194645a00 100644
--- a/codegen/valagirwriter.vala
+++ b/codegen/valagirwriter.vala
@@ -1680,6 +1680,11 @@ public class Vala.GIRWriter : CodeVisitor {
                                        return "-" + ((IntegerLiteral) unary.inner).value;
                                }
                        }
+               } else {
+                       unowned CCodeExpression? cexpr = get_cvalue (literal);
+                       if (cexpr is CCodeConstant) {
+                               return ((CCodeConstant) cexpr).name;
+                       }
                }
                return null;
        }
diff --git a/tests/girwriter/GirTest-1.0.gir-expected b/tests/girwriter/GirTest-1.0.gir-expected
index 0db2fc636..a71242e9d 100644
--- a/tests/girwriter/GirTest-1.0.gir-expected
+++ b/tests/girwriter/GirTest-1.0.gir-expected
@@ -26,6 +26,11 @@
        <enumeration name="SkippedFlags" c:type="GirTestSkippedFlags" glib:type-name="GirTestSkippedFlags" 
glib:get-type="gir_test_skipped_flags_get_type" introspectable="0">
                <member name="value1" c:identifier="GIR_TEST_SKIPPED_FLAGS_VALUE1" value="0"/>
        </enumeration>
+       <enumeration name="EnumTest2" c:type="GirTestEnumTest2" glib:type-name="GirTestEnumTest2" 
glib:get-type="gir_test_enum_test2_get_type">
+               <member name="value1" c:identifier="GIR_TEST_ENUM_TEST2_VALUE1" 
value="GIR_TEST_ENUM_TEST_VALUE3"/>
+               <member name="value2" c:identifier="GIR_TEST_ENUM_TEST2_VALUE2" value="0"/>
+               <member name="value3" c:identifier="GIR_TEST_ENUM_TEST2_VALUE3" value="4711"/>
+       </enumeration>
        <enumeration name="ErrorTest" c:type="GirTestErrorTest" glib:error-domain="gir-test-error-test-quark">
                <member name="failed" c:identifier="GIR_TEST_ERROR_TEST_FAILED" value="0"/>
                <member name="smelly" c:identifier="GIR_TEST_ERROR_TEST_SMELLY" value="1"/>
diff --git a/tests/girwriter/girtest.vala b/tests/girwriter/girtest.vala
index e9b3d2ae1..e0756e5fb 100644
--- a/tests/girwriter/girtest.vala
+++ b/tests/girwriter/girtest.vala
@@ -306,4 +306,10 @@ namespace GirTest {
                public void method<K> (K[] param) {
                }
        }
+
+       public enum EnumTest2 {
+               VALUE1 = EnumTest.VALUE3,
+               VALUE2,
+               VALUE3 = 4711
+       }
 }
diff --git a/tests/girwriter/girtest.vapi-expected b/tests/girwriter/girtest.vapi-expected
index f92e00d05..b2deaad4e 100644
--- a/tests/girwriter/girtest.vapi-expected
+++ b/tests/girwriter/girtest.vapi-expected
@@ -143,6 +143,12 @@ namespace GirTest {
                VALUE3
        }
        [CCode (cheader_filename = "girtest.h")]
+       public enum EnumTest2 {
+               VALUE1,
+               VALUE2,
+               VALUE3
+       }
+       [CCode (cheader_filename = "girtest.h")]
        [Flags]
        public enum FlagsTest {
                VALUE1,


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