1/* valanullliteral.vala
2 *
3 * Copyright (C) 2006-2010  Jürg Billeter
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 * Lesser General Public License for more details.
14
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
18 *
19 * Author:
20 * 	Jürg Billeter <j@bitron.ch>
21 */
22
23using GLib;
24
25/**
26 * Represents a literal `null` in the source code.
27 */
28public class Vala.NullLiteral : Literal {
29	/**
30	 * Creates a new null literal.
31	 *
32	 * @param source reference to source code
33	 * @return       newly created null literal
34	 */
35	public NullLiteral (SourceReference? source = null) {
36		source_reference = source;
37	}
38
39	public override void accept (CodeVisitor visitor) {
40		visitor.visit_null_literal (this);
41
42		visitor.visit_expression (this);
43	}
44
45	public override string to_string () {
46		return "null";
47	}
48
49	public override bool is_pure () {
50		return true;
51	}
52
53	public override bool check (CodeContext context) {
54		if (checked) {
55			return !error;
56		}
57
58		checked = true;
59
60		value_type = new NullType (source_reference);
61
62		return !error;
63	}
64
65	public override void emit (CodeGenerator codegen) {
66		codegen.visit_null_literal (this);
67
68		codegen.visit_expression (this);
69	}
70}
71