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.values;
25  
26  import org.overturetool.vdmj.runtime.Context;
27  import org.overturetool.vdmj.runtime.ValueException;
28  import org.overturetool.vdmj.types.TokenType;
29  import org.overturetool.vdmj.types.Type;
30  
31  public class TokenValue extends Value
32  {
33  	private static final long serialVersionUID = 1L;
34  	private final Value value;
35  	private final int hash;
36  
37  	public TokenValue(Value exp)
38  	{
39  		this.value = exp;
40  		this.hash = exp.hashCode();
41  	}
42  
43  	@Override
44  	public String toString()
45  	{
46  		return "mk_token(" + value + ")";
47  	}
48  
49  	@Override
50  	public boolean equals(Object other)
51  	{
52  		if (other instanceof Value)
53  		{
54  			Value val = ((Value)other).deref();
55  
56      		if (val instanceof TokenValue)
57      		{
58      			TokenValue tok = (TokenValue)val;
59      			return tok.hash == hash;
60      		}
61  		}
62  
63  		return false;
64  	}
65  
66  	@Override
67  	public int hashCode()
68  	{
69  		return hash;
70  	}
71  
72  	@Override
73  	public String kind()
74  	{
75  		return toString();
76  	}
77  
78  	@Override
79  	public Value convertValueTo(Type to, Context ctxt) throws ValueException
80  	{
81  		if (to.isType(TokenType.class))
82  		{
83  			return this;
84  		}
85  		else
86  		{
87  			return super.convertValueTo(to, ctxt);
88  		}
89  	}
90  
91  	@Override
92  	public Object clone()
93  	{
94  		return new TokenValue(value);
95  	}
96  }