diff options
author | Simon Werbeck <simon.werbeck@gmail.com> | 2016-09-18 18:30:02 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2016-09-18 21:24:10 +0200 |
commit | 33879ec4c2286314957ac0e03a5a8e89ba6faa02 (patch) | |
tree | ba6a622026ba3c10d80e302f269d3e417011e4d6 | |
parent | c4336c0f38b31094cb875b4556eb73c2d6f11ef8 (diff) | |
download | vala-33879ec4c2286314957ac0e03a5a8e89ba6faa02.tar.gz |
Check for assignment to constant
This simply checks if the left-hand side is a constant and if so raises
an error.
Fixes bug 771626
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/basic-types/bug771626.test | 7 | ||||
-rw-r--r-- | vala/valaassignment.vala | 6 |
3 files changed, 14 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 0832a41f4..b2caa7767 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -41,6 +41,7 @@ TESTS = \ basic-types/bug729907.vala \ basic-types/bug731017.vala \ basic-types/bug761307.vala \ + basic-types/bug771626.test \ namespaces.vala \ methods/lambda.vala \ methods/closures.vala \ diff --git a/tests/basic-types/bug771626.test b/tests/basic-types/bug771626.test new file mode 100644 index 000000000..64a5da8bf --- /dev/null +++ b/tests/basic-types/bug771626.test @@ -0,0 +1,7 @@ +Invalid Code + +const int FOO = 0; + +void main () { + FOO = 1; +} diff --git a/vala/valaassignment.vala b/vala/valaassignment.vala index a6b73b913..fc27acf63 100644 --- a/vala/valaassignment.vala +++ b/vala/valaassignment.vala @@ -145,6 +145,12 @@ public class Vala.Assignment : Expression { if (left is MemberAccess) { var ma = (MemberAccess) left; + if (ma.symbol_reference is Constant) { + error = true; + Report.error (source_reference, "Assignment to constant after initialization"); + return false; + } + if ((!(ma.symbol_reference is Signal || ma.symbol_reference is DynamicProperty) && ma.value_type == null) || (ma.inner == null && ma.member_name == "this" && context.analyzer.is_in_instance_method ())) { error = true; |