View Javadoc

1   /********************************************************************************
2    *
3    *	Copyright (C) 2008 Fujitsu Services Ltd.
4    *
5    *	Author: Nick Battle
6    *
7    *	This file is part of VDMJ.
8    *
9    *	VDMJ is free software: you can redistribute it and/or modify
10   *	it under the terms of the GNU General Public License as published by
11   *	the Free Software Foundation, either version 3 of the License, or
12   *	(at your option) any later version.
13   *
14   *	VDMJ is distributed in the hope that it will be useful,
15   *	but WITHOUT ANY WARRANTY; without even the implied warranty of
16   *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   *	GNU General Public License for more details.
18   *
19   *	You should have received a copy of the GNU General Public License
20   *	along with VDMJ.  If not, see <http://www.gnu.org/licenses/>.
21   *
22   ******************************************************************************/
23  
24  package org.overturetool.vdmj.statements;
25  
26  import java.io.Serializable;
27  
28  import org.overturetool.vdmj.lex.LexLocation;
29  import org.overturetool.vdmj.runtime.Context;
30  import org.overturetool.vdmj.runtime.ContextException;
31  import org.overturetool.vdmj.runtime.ValueException;
32  import org.overturetool.vdmj.typechecker.Environment;
33  import org.overturetool.vdmj.typechecker.TypeChecker;
34  import org.overturetool.vdmj.types.Type;
35  import org.overturetool.vdmj.types.TypeList;
36  import org.overturetool.vdmj.values.Value;
37  
38  /***
39   * A class to hold an object assignment designator.
40   */
41  
42  public abstract class ObjectDesignator implements Serializable
43  {
44  	private static final long serialVersionUID = 1L;
45  
46  	public final LexLocation location;
47  
48  	public ObjectDesignator(LexLocation location)
49  	{
50  		this.location = location;
51  	}
52  
53  	@Override
54  	abstract public String toString();
55  
56  	abstract public Type typeCheck(Environment env, TypeList qualifiers);
57  
58  	abstract public Value eval(Context ctxt);
59  
60  	public Value abort(int number, String msg, Context ctxt)
61  	{
62  		throw new ContextException(number, msg, location, ctxt);
63  	}
64  
65  	public Value abort(ValueException ve)
66  	{
67  		throw new ContextException(ve, location);
68  	}
69  
70  	public void report(int number, String msg)
71  	{
72  		TypeChecker.report(number, msg, location);
73  	}
74  
75  	public void concern(boolean serious, int number, String msg)
76  	{
77  		if (serious)
78  		{
79  			TypeChecker.report(number, msg, location);
80  		}
81  		else
82  		{
83  			TypeChecker.warning(number, msg, location);
84  		}
85  	}
86  
87  	public void detail(String tag, Object obj)
88  	{
89  		TypeChecker.detail(tag, obj);
90  	}
91  
92  	public void detail(boolean serious, String tag, Object obj)
93  	{
94  		if (serious)
95  		{
96  			TypeChecker.detail(tag, obj);
97  		}
98  	}
99  
100 	public void detail2(String tag1, Object obj1, String tag2, Object obj2)
101 	{
102 		TypeChecker.detail2(tag1, obj1, tag2, obj2);
103 	}
104 
105 	public void detail2(
106 		boolean serious, String tag1, Object obj1, String tag2, Object obj2)
107 	{
108 		if (serious)
109 		{
110 			TypeChecker.detail2(tag1, obj1, tag2, obj2);
111 		}
112 	}
113 }