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

package javassist.compiler.ast;

import javassist.compiler.CompileError;
import javassist.compiler.TokenId;

Double constant.
/** * Double constant. */
public class DoubleConst extends ASTree {
default serialVersionUID
/** default serialVersionUID */
private static final long serialVersionUID = 1L; protected double value; protected int type; public DoubleConst(double v, int tokenId) { value = v; type = tokenId; } public double get() { return value; } public void set(double v) { value = v; } /* Returns DoubleConstant or FloatConstant */ public int getType() { return type; } @Override public String toString() { return Double.toString(value); } @Override public void accept(Visitor v) throws CompileError { v.atDoubleConst(this); } public ASTree compute(int op, ASTree right) { if (right instanceof IntConst) return compute0(op, (IntConst)right); else if (right instanceof DoubleConst) return compute0(op, (DoubleConst)right); else return null; } private DoubleConst compute0(int op, DoubleConst right) { int newType; if (this.type == TokenId.DoubleConstant || right.type == TokenId.DoubleConstant) newType = TokenId.DoubleConstant; else newType = TokenId.FloatConstant; return compute(op, this.value, right.value, newType); } private DoubleConst compute0(int op, IntConst right) { return compute(op, this.value, right.value, this.type); } private static DoubleConst compute(int op, double value1, double value2, int newType) { double newValue; switch (op) { case '+' : newValue = value1 + value2; break; case '-' : newValue = value1 - value2; break; case '*' : newValue = value1 * value2; break; case '/' : newValue = value1 / value2; break; case '%' : newValue = value1 % value2; break; default : return null; } return new DoubleConst(newValue, newType); } }