1 /*
   2  * Copyright (c) 1997, 2014, 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.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "utilities/constantTag.hpp"
  27 
  28 #ifndef PRODUCT
  29 
  30 void constantTag::print_on(outputStream* st) const {
  31   st->print("%s", internal_name());
  32 }
  33 
  34 #endif // PRODUCT
  35 
  36 BasicType constantTag::basic_type() const {
  37   switch (_tag) {
  38     case JVM_CONSTANT_Integer :
  39       return T_INT;
  40     case JVM_CONSTANT_Float :
  41       return T_FLOAT;
  42     case JVM_CONSTANT_Long :
  43       return T_LONG;
  44     case JVM_CONSTANT_Double :
  45       return T_DOUBLE;
  46 
  47     case JVM_CONSTANT_Class :
  48     case JVM_CONSTANT_String :
  49     case JVM_CONSTANT_UnresolvedClass :
  50     case JVM_CONSTANT_UnresolvedClassInError :
  51     case JVM_CONSTANT_ClassIndex :
  52     case JVM_CONSTANT_StringIndex :
  53     case JVM_CONSTANT_MethodHandle :
  54     case JVM_CONSTANT_MethodHandleInError :
  55     case JVM_CONSTANT_MethodType :
  56     case JVM_CONSTANT_MethodTypeInError :
  57       return T_OBJECT;
  58     default:
  59       ShouldNotReachHere();
  60       return T_ILLEGAL;
  61   }
  62 }
  63 
  64 
  65 jbyte constantTag::non_error_value() const {
  66   switch (_tag) {
  67   case JVM_CONSTANT_UnresolvedClassInError:
  68     return JVM_CONSTANT_UnresolvedClass;
  69   case JVM_CONSTANT_MethodHandleInError:
  70     return JVM_CONSTANT_MethodHandle;
  71   case JVM_CONSTANT_MethodTypeInError:
  72     return JVM_CONSTANT_MethodType;
  73   default:
  74     return _tag;
  75   }
  76 }
  77 
  78 
  79 const char* constantTag::internal_name() const {
  80   switch (_tag) {
  81     case JVM_CONSTANT_Invalid :
  82       return "Invalid index";
  83     case JVM_CONSTANT_Class :
  84       return "Class";
  85     case JVM_CONSTANT_Fieldref :
  86       return "Field";
  87     case JVM_CONSTANT_Methodref :
  88       return "Method";
  89     case JVM_CONSTANT_InterfaceMethodref :
  90       return "InterfaceMethod";
  91     case JVM_CONSTANT_String :
  92       return "String";
  93     case JVM_CONSTANT_Integer :
  94       return "Integer";
  95     case JVM_CONSTANT_Float :
  96       return "Float";
  97     case JVM_CONSTANT_Long :
  98       return "Long";
  99     case JVM_CONSTANT_Double :
 100       return "Double";
 101     case JVM_CONSTANT_NameAndType :
 102       return "NameAndType";
 103     case JVM_CONSTANT_MethodHandle :
 104       return "MethodHandle";
 105     case JVM_CONSTANT_MethodHandleInError :
 106       return "MethodHandle Error";
 107     case JVM_CONSTANT_MethodType :
 108       return "MethodType";
 109     case JVM_CONSTANT_MethodTypeInError :
 110       return "MethodType Error";
 111     case JVM_CONSTANT_InvokeDynamic :
 112       return "InvokeDynamic";
 113     case JVM_CONSTANT_Utf8 :
 114       return "Utf8";
 115     case JVM_CONSTANT_UnresolvedClass :
 116       return "Unresolved Class";
 117     case JVM_CONSTANT_UnresolvedClassInError :
 118       return "Unresolved Class Error";
 119     case JVM_CONSTANT_ClassIndex :
 120       return "Unresolved Class Index";
 121     case JVM_CONSTANT_StringIndex :
 122       return "Unresolved String Index";
 123     default:
 124       ShouldNotReachHere();
 125       return "Illegal";
 126   }
 127 }