0N/A/*
2362N/A * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/Apackage com.sun.tools.jdi;
0N/A
0N/Aimport com.sun.jdi.*;
0N/A
0N/Apublic abstract class PrimitiveValueImpl extends ValueImpl
0N/A implements PrimitiveValue {
0N/A
0N/A PrimitiveValueImpl(VirtualMachine aVm) {
0N/A super(aVm);
0N/A }
0N/A
0N/A abstract public boolean booleanValue();
0N/A abstract public byte byteValue();
0N/A abstract public char charValue();
0N/A abstract public short shortValue();
0N/A abstract public int intValue();
0N/A abstract public long longValue();
0N/A abstract public float floatValue();
0N/A abstract public double doubleValue();
0N/A
0N/A /*
0N/A * The checked versions of the value accessors throw
0N/A * InvalidTypeException if the required conversion is
0N/A * narrowing and would result in the loss of information
0N/A * (either magnitude or precision).
0N/A *
0N/A * Default implementations here do no checking; subclasses
0N/A * override as necessary to do the proper checking.
0N/A */
0N/A byte checkedByteValue() throws InvalidTypeException {
0N/A return byteValue();
0N/A }
0N/A char checkedCharValue() throws InvalidTypeException {
0N/A return charValue();
0N/A }
0N/A short checkedShortValue() throws InvalidTypeException {
0N/A return shortValue();
0N/A }
0N/A int checkedIntValue() throws InvalidTypeException {
0N/A return intValue();
0N/A }
0N/A long checkedLongValue() throws InvalidTypeException {
0N/A return longValue();
0N/A }
0N/A float checkedFloatValue() throws InvalidTypeException {
0N/A return floatValue();
0N/A }
0N/A
0N/A final boolean checkedBooleanValue() throws InvalidTypeException {
0N/A /*
0N/A * Always disallow a conversion to boolean from any other
0N/A * primitive
0N/A */
0N/A if (this instanceof BooleanValue) {
0N/A return booleanValue();
0N/A } else {
0N/A throw new InvalidTypeException("Can't convert non-boolean value to boolean");
0N/A }
0N/A }
0N/A
0N/A final double checkedDoubleValue() throws InvalidTypeException {
0N/A /*
0N/A * Can't overflow by converting to double, so this method
0N/A * is never overridden
0N/A */
0N/A return doubleValue();
0N/A }
0N/A
0N/A ValueImpl prepareForAssignmentTo(ValueContainer destination)
0N/A throws InvalidTypeException {
0N/A
0N/A return convertForAssignmentTo(destination);
0N/A }
0N/A
0N/A ValueImpl convertForAssignmentTo(ValueContainer destination)
0N/A throws InvalidTypeException {
0N/A
0N/A /*
0N/A * TO DO: Centralize JNI signature knowledge
0N/A */
0N/A if (destination.signature().length() > 1) {
0N/A throw new InvalidTypeException("Can't assign primitive value to object");
0N/A }
0N/A
0N/A if ((destination.signature().charAt(0) == 'Z') &&
0N/A (type().signature().charAt(0) != 'Z')) {
0N/A throw new InvalidTypeException("Can't assign non-boolean value to a boolean");
0N/A }
0N/A
0N/A if ((destination.signature().charAt(0) != 'Z') &&
0N/A (type().signature().charAt(0) == 'Z')) {
0N/A throw new InvalidTypeException("Can't assign boolean value to an non-boolean");
0N/A }
0N/A
0N/A if ("void".equals(destination.typeName())) {
0N/A throw new InvalidTypeException("Can't assign primitive value to a void");
0N/A }
0N/A
0N/A try {
0N/A PrimitiveTypeImpl primitiveType = (PrimitiveTypeImpl)destination.type();
0N/A return (ValueImpl)(primitiveType.convert(this));
0N/A } catch (ClassNotLoadedException e) {
0N/A throw new InternalException("Signature and type inconsistent for: " +
0N/A destination.typeName());
0N/A }
0N/A }
0N/A}