1 /*
2  * Copyright (c) 1994, 2003, 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 package sun.tools.tree;
27 
28 import sun.tools.java.*;
29 import sun.tools.asm.Assembler;
30 
31 /**
32  * WARNING: The contents of this source file are not part of any
33  * supported API.  Code that depends on them does so at its own risk:
34  * they are subject to change or removal without notice.
35  */
36 public
37 class IntegerExpression extends ConstantExpression {
38     int value;
39 
40     /**
41      * Constructor
42      */
IntegerExpression(int op, long where, Type type, int value)43     IntegerExpression(int op, long where, Type type, int value) {
44         super(op, where, type);
45         this.value = value;
46     }
47 
48     /**
49      * See if this number fits in the given type.
50      */
fitsType(Environment env, Context ctx, Type t)51     public boolean fitsType(Environment env, Context ctx, Type t) {
52         if (this.type.isType(TC_CHAR)) {
53             // A char constant is not really an int constant,
54             // so do not report that 'a' fits in a byte or short,
55             // even if its value is in fact 7-bit ascii.  See JLS 5.2.
56             return super.fitsType(env, ctx, t);
57         }
58         switch (t.getTypeCode()) {
59           case TC_BYTE:
60             return value == (byte)value;
61           case TC_SHORT:
62             return value == (short)value;
63           case TC_CHAR:
64             return value == (char)value;
65         }
66         return super.fitsType(env, ctx, t);
67     }
68 
69     /**
70      * Get the value
71      */
getValue()72     public Object getValue() {
73         return value;
74     }
75 
76     /**
77      * Check if the expression is equal to a value
78      */
equals(int i)79     public boolean equals(int i) {
80         return value == i;
81     }
82 
83     /**
84      * Check if the expression is equal to its default static value
85      */
equalsDefault()86     public boolean equalsDefault() {
87         return value == 0;
88     }
89 
90     /**
91      * Code
92      */
codeValue(Environment env, Context ctx, Assembler asm)93     public void codeValue(Environment env, Context ctx, Assembler asm) {
94         asm.add(where, opc_ldc, value);
95     }
96 }
97