KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > javassist > compiler > ast > DoubleConst


1 /*
2  * Javassist, a Java-bytecode translator toolkit.
3  * Copyright (C) 1999-2005 Shigeru Chiba. All Rights Reserved.
4  *
5  * The contents of this file are subject to the Mozilla Public License Version
6  * 1.1 (the "License"); you may not use this file except in compliance with
7  * the License. Alternatively, the contents of this file may be used under
8  * the terms of the GNU Lesser General Public License Version 2.1 or later.
9  *
10  * Software distributed under the License is distributed on an "AS IS" basis,
11  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12  * for the specific language governing rights and limitations under the
13  * License.
14  */

15
16 package javassist.compiler.ast;
17
18 import javassist.compiler.CompileError;
19 import javassist.compiler.TokenId;
20
21 /**
22  * Double constant.
23  */

24 public class DoubleConst extends ASTree {
25     protected double value;
26     protected int type;
27
28     public DoubleConst(double v, int tokenId) { value = v; type = tokenId; }
29
30     public double get() { return value; }
31
32     public void set(double v) { value = v; }
33
34     /* Returns DoubleConstant or FloatConstant
35      */

36     public int getType() { return type; }
37
38     public String JavaDoc toString() { return Double.toString(value); }
39
40     public void accept(Visitor v) throws CompileError {
41         v.atDoubleConst(this);
42     }
43
44     public ASTree compute(int op, ASTree right) {
45         if (right instanceof IntConst)
46             return compute0(op, (IntConst)right);
47         else if (right instanceof DoubleConst)
48             return compute0(op, (DoubleConst)right);
49         else
50             return null;
51     }
52
53     private DoubleConst compute0(int op, DoubleConst right) {
54         int newType;
55         if (this.type == TokenId.DoubleConstant
56             || right.type == TokenId.DoubleConstant)
57             newType = TokenId.DoubleConstant;
58         else
59             newType = TokenId.FloatConstant;
60
61         return compute(op, this.value, right.value, newType);
62     }
63
64     private DoubleConst compute0(int op, IntConst right) {
65         return compute(op, this.value, (double)right.value, this.type);
66     }
67
68     private static DoubleConst compute(int op, double value1, double value2,
69                                        int newType)
70     {
71         double newValue;
72         switch (op) {
73         case '+' :
74             newValue = value1 + value2;
75             break;
76         case '-' :
77             newValue = value1 - value2;
78             break;
79         case '*' :
80             newValue = value1 * value2;
81             break;
82         case '/' :
83             newValue = value1 / value2;
84             break;
85         case '%' :
86             newValue = value1 % value2;
87             break;
88         default :
89             return null;
90         }
91
92         return new DoubleConst(newValue, newType);
93     }
94 }
95
Popular Tags