summaryrefslogtreecommitdiff
path: root/vala
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2021-10-17 09:15:58 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2021-10-17 09:18:38 +0200
commite71ae37140e2567074d5335229a1cdb80651acf0 (patch)
tree85c2e8700b76602dc9164b3753b60b3ad7ad74e3 /vala
parent41f2e9cde0db4185767c3c355c21ce404d83b1cc (diff)
downloadvala-e71ae37140e2567074d5335229a1cdb80651acf0.tar.gz
codegen: Move some errors to semantic analyzer pass
Diffstat (limited to 'vala')
-rw-r--r--vala/valamemberaccess.vala17
1 files changed, 17 insertions, 0 deletions
diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala
index ef4bc22d2..a5432d614 100644
--- a/vala/valamemberaccess.vala
+++ b/vala/valamemberaccess.vala
@@ -1041,6 +1041,23 @@ public class Vala.MemberAccess : Expression {
value_type.check (context);
}
+ if (symbol_reference is ArrayLengthField) {
+ if (inner.value_type is ArrayType && ((ArrayType) inner.value_type).rank > 1 && !(parent_node is ElementAccess)) {
+ Report.error (source_reference, "unsupported use of length field of multi-dimensional array");
+ error = true;
+ }
+ } else if (symbol_reference is DelegateTargetField) {
+ if (!((DelegateType) inner.value_type).delegate_symbol.has_target) {
+ Report.error (source_reference, "unsupported use of target field of delegate without target");
+ error = true;
+ }
+ } else if (symbol_reference is DelegateDestroyField) {
+ if (!((DelegateType) inner.value_type).delegate_symbol.has_target) {
+ Report.error (source_reference, "unsupported use of destroy field of delegate without target");
+ error = true;
+ }
+ }
+
// Provide some extra information for the code generator
if (!tainted_access) {
tainted_access = is_tainted ();