summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Werbeck <simon.werbeck@gmail.com>2016-09-18 18:30:02 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2016-09-18 21:24:10 +0200
commit33879ec4c2286314957ac0e03a5a8e89ba6faa02 (patch)
treeba6a622026ba3c10d80e302f269d3e417011e4d6
parentc4336c0f38b31094cb875b4556eb73c2d6f11ef8 (diff)
downloadvala-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.am1
-rw-r--r--tests/basic-types/bug771626.test7
-rw-r--r--vala/valaassignment.vala6
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;