[vala/staging] vala: Check accessibility of initializer for constant and enum value




commit 9f1fa33b52d7c324521ce2d1808b5397182a3322
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Sat Nov 6 18:55:38 2021 +0100

    vala: Check accessibility of initializer for constant and enum value

 tests/Makefile.am                                  |  2 ++
 tests/semantic/constant-value-less-accessible.test |  8 ++++++++
 tests/semantic/enum-value-less-accessible.test     | 10 ++++++++++
 vala/valaconstant.vala                             |  6 ++++++
 vala/valaenumvalue.vala                            |  6 ++++++
 5 files changed, 32 insertions(+)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 190628152..329fb8795 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1029,6 +1029,7 @@ TESTS = \
        semantic/constant-reassignment-member.test \
        semantic/constant-type-less-accessible.test \
        semantic/constant-value.test \
+       semantic/constant-value-less-accessible.test \
        semantic/constant-value-missing.test \
        semantic/constant-value-type.test \
        semantic/constant-void.test \
@@ -1047,6 +1048,7 @@ TESTS = \
        semantic/delete-unsupported.test \
        semantic/element-access-index-invalid.test \
        semantic/enum-empty.test \
+       semantic/enum-value-less-accessible.test \
        semantic/errordomain-empty.test \
        semantic/field-accessibility.test \
        semantic/field-compact-static.test \
diff --git a/tests/semantic/constant-value-less-accessible.test 
b/tests/semantic/constant-value-less-accessible.test
new file mode 100644
index 000000000..ea909d6cf
--- /dev/null
+++ b/tests/semantic/constant-value-less-accessible.test
@@ -0,0 +1,8 @@
+Invalid Code
+
+const int BAR = 42;
+
+public const int FOO = BAR;
+
+void main () {
+}
diff --git a/tests/semantic/enum-value-less-accessible.test b/tests/semantic/enum-value-less-accessible.test
new file mode 100644
index 000000000..bbe131bce
--- /dev/null
+++ b/tests/semantic/enum-value-less-accessible.test
@@ -0,0 +1,10 @@
+Invalid Code
+
+const int BAR = 42;
+
+public enum Foo {
+       FOO = BAR
+}
+
+void main () {
+}
diff --git a/vala/valaconstant.vala b/vala/valaconstant.vala
index 92591026c..c9b1bfbfd 100644
--- a/vala/valaconstant.vala
+++ b/vala/valaconstant.vala
@@ -168,6 +168,12 @@ public class Vala.Constant : Symbol {
                                        Report.error (value.source_reference, "Value must be constant");
                                        return false;
                                }
+
+                               // check whether initializer is at least as accessible as the constant
+                               if (!value.is_accessible (this)) {
+                                       error = true;
+                                       Report.error (value.source_reference, "value is less accessible than 
constant `%s'", get_full_name ());
+                               }
                        }
                } else {
                        if (value != null) {
diff --git a/vala/valaenumvalue.vala b/vala/valaenumvalue.vala
index 7a98afb67..be3fcc52e 100644
--- a/vala/valaenumvalue.vala
+++ b/vala/valaenumvalue.vala
@@ -73,6 +73,12 @@ public class Vala.EnumValue : Constant {
 
                if (value != null) {
                        value.check (context);
+
+                       // check whether initializer is at least as accessible as the enum value
+                       if (!value.is_accessible (this)) {
+                               error = true;
+                               Report.error (value.source_reference, "value is less accessible than enum 
`%s'", parent_symbol.get_full_name ());
+                       }
                }
 
                return !error;


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