diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2021-10-17 09:15:58 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2021-10-17 09:18:38 +0200 |
commit | e71ae37140e2567074d5335229a1cdb80651acf0 (patch) | |
tree | 85c2e8700b76602dc9164b3753b60b3ad7ad74e3 /vala | |
parent | 41f2e9cde0db4185767c3c355c21ce404d83b1cc (diff) | |
download | vala-e71ae37140e2567074d5335229a1cdb80651acf0.tar.gz |
codegen: Move some errors to semantic analyzer pass
Diffstat (limited to 'vala')
-rw-r--r-- | vala/valamemberaccess.vala | 17 |
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 (); |