summaryrefslogtreecommitdiff
path: root/vala/valapointerindirection.vala
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2008-11-10 18:56:28 +0000
committerJürg Billeter <juergbi@src.gnome.org>2008-11-10 18:56:28 +0000
commit67649405484570ae012df33b302e0b708a027b2e (patch)
tree09e3f1ec3fcd388a1ceeeef594115d3362709842 /vala/valapointerindirection.vala
parentef2a5af23c8596f9b5e0805ed1cd7ee628fb3cf2 (diff)
downloadvala-67649405484570ae012df33b302e0b708a027b2e.tar.gz
Move expression checking to code nodes
2008-11-10 Jürg Billeter <j@bitron.ch> * vala/valaaddressofexpression.vala: * vala/valabaseaccess.vala: * vala/valabooleanliteral.vala: * vala/valacastexpression.vala: * vala/valacharacterliteral.vala: * vala/valaconditionalexpression.vala: * vala/valaintegerliteral.vala: * vala/valalambdaexpression.vala: * vala/valanullliteral.vala: * vala/valaobjectcreationexpression.vala: * vala/valaparenthesizedexpression.vala: * vala/valapointerindirection.vala: * vala/valapostfixexpression.vala: * vala/valarealliteral.vala: * vala/valareferencetransferexpression.vala: * vala/valasemanticanalyzer.vala: * vala/valasizeofexpression.vala: * vala/valastringliteral.vala: * vala/valatypecheck.vala: * vala/valatypeofexpression.vala: * vala/valaunaryexpression.vala: Move expression checking to code nodes svn path=/trunk/; revision=2009
Diffstat (limited to 'vala/valapointerindirection.vala')
-rw-r--r--vala/valapointerindirection.vala34
1 files changed, 33 insertions, 1 deletions
diff --git a/vala/valapointerindirection.vala b/vala/valapointerindirection.vala
index 5606a3ca2..7ea1354dd 100644
--- a/vala/valapointerindirection.vala
+++ b/vala/valapointerindirection.vala
@@ -1,6 +1,6 @@
/* valapointerindirection.vala
*
- * Copyright (C) 2007 Jürg Billeter
+ * Copyright (C) 2007-2008 Jürg Billeter
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -69,4 +69,36 @@ public class Vala.PointerIndirection : Expression {
public override bool is_pure () {
return inner.is_pure ();
}
+
+ public override bool check (SemanticAnalyzer analyzer) {
+ if (checked) {
+ return !error;
+ }
+
+ checked = true;
+
+ if (inner.error) {
+ return false;
+ }
+ if (inner.value_type == null) {
+ error = true;
+ Report.error (source_reference, "internal error: unknown type of inner expression");
+ return false;
+ }
+ if (inner.value_type is PointerType) {
+ var pointer_type = (PointerType) inner.value_type;
+ if (pointer_type.base_type is ReferenceType) {
+ error = true;
+ Report.error (source_reference, "Pointer indirection not supported for this expression");
+ return false;
+ }
+ value_type = pointer_type.base_type;
+ } else {
+ error = true;
+ Report.error (source_reference, "Pointer indirection not supported for this expression");
+ return false;
+ }
+
+ return !error;
+ }
}