diff options
author | Jürg Billeter <j@bitron.ch> | 2008-11-10 18:56:28 +0000 |
---|---|---|
committer | Jürg Billeter <juergbi@src.gnome.org> | 2008-11-10 18:56:28 +0000 |
commit | 67649405484570ae012df33b302e0b708a027b2e (patch) | |
tree | 09e3f1ec3fcd388a1ceeeef594115d3362709842 /vala/valaaddressofexpression.vala | |
parent | ef2a5af23c8596f9b5e0805ed1cd7ee628fb3cf2 (diff) | |
download | vala-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/valaaddressofexpression.vala')
-rw-r--r-- | vala/valaaddressofexpression.vala | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/vala/valaaddressofexpression.vala b/vala/valaaddressofexpression.vala index 1d1f714bc..38781bb89 100644 --- a/vala/valaaddressofexpression.vala +++ b/vala/valaaddressofexpression.vala @@ -1,6 +1,6 @@ /* valaaddressofexpression.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,31 @@ public class Vala.AddressofExpression : 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 is ValueType + || inner.value_type is ObjectType + || inner.value_type is PointerType)) { + error = true; + Report.error (source_reference, "Address-of operator not supported for this expression"); + return false; + } + + if (inner.value_type.is_reference_type_or_type_parameter ()) { + value_type = new PointerType (new PointerType (inner.value_type)); + } else { + value_type = new PointerType (inner.value_type); + } + + return !error; + } } |