Terminal.java revision 672:2bb058ce572e
1/*
2 * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25/*
26 * COMPONENT_NAME: idl.parser
27 *
28 * ORIGINS: 27
29 *
30 * Licensed Materials - Property of IBM
31 * 5639-D57 (C) COPYRIGHT International Business Machines Corp. 1997, 1999
32 * RMI-IIOP v1.0
33 *
34 */
35
36package com.sun.tools.corba.se.idl.constExpr;
37
38// NOTES:
39
40import com.sun.tools.corba.se.idl.ConstEntry;
41import java.math.BigInteger;
42
43/**
44 * This class contains values.  Objects of this class are the terminal
45 * nodes of an expression tree.
46 * <p>
47 * Note that there is a constructor for Double values, but not Float.
48 * CORBA defines that all floating point expressions are evaluated as
49 * double, and that the result is coerced back to float if necessary.
50 * <p>
51 * Note also that there is a constructor for long values, but not for
52 * int or short.  CORBA defines that all integral expressions are evaluated
53 * as unsigned long.  A CORBA long is a Java int.  There is no unsigned int
54 * in Java, so the next larger type, long, is used.
55 **/
56public class Terminal extends Expression
57{
58  protected Terminal (String representation, Character charValue,
59    boolean isWide)
60  {
61    rep (representation);
62    value (charValue);
63    if (isWide)
64        type( "wchar" ) ;
65    else
66        type( "char" ) ;
67  } // ctor
68
69  protected Terminal (String representation, Boolean booleanValue)
70  {
71    rep (representation);
72    value (booleanValue);
73  } // ctor
74
75  // Support long long <daz>
76  protected Terminal (String representation, BigInteger bigIntegerValue)
77  {
78    rep (representation);
79    value (bigIntegerValue);
80  } // ctor
81
82  protected Terminal (String representation, Long longValue)
83  {
84    long lv = longValue.longValue ();
85    rep (representation);
86    if (lv > Integer.MAX_VALUE || lv < Integer.MIN_VALUE)
87      value (longValue);
88    else
89      value (new Integer (longValue.intValue ()));
90  } // ctor
91
92  protected Terminal (String representation, Double doubleValue)
93  {
94    rep (representation);
95    value (doubleValue);
96  } // ctor
97
98  protected Terminal (String stringValue, boolean isWide )
99  {
100    rep (stringValue);
101    value (stringValue);
102    if (isWide)
103        type( "wstring" ) ;
104    else
105        type( "string" ) ;
106  } // ctor
107
108  protected Terminal (ConstEntry constReference)
109  {
110    rep (constReference.fullName ());
111    value (constReference);
112  } // ctor
113
114  ///// INSTANCE METHODS
115  public Object evaluate () throws EvaluationException
116  {
117    if (value () instanceof ConstEntry)
118      return ((ConstEntry)value ()).value ().evaluate ();
119    else
120      return value ();
121  } // evaluate
122} // class Terminal
123