constantTag.cpp revision 10871:90aeaed2b342
1168404Spjd/*
2168404Spjd * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
3168404Spjd * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4168404Spjd *
5168404Spjd * This code is free software; you can redistribute it and/or modify it
6168404Spjd * under the terms of the GNU General Public License version 2 only, as
7168404Spjd * published by the Free Software Foundation.
8168404Spjd *
9168404Spjd * This code is distributed in the hope that it will be useful, but WITHOUT
10168404Spjd * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11168404Spjd * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12168404Spjd * version 2 for more details (a copy is included in the LICENSE file that
13168404Spjd * accompanied this code).
14168404Spjd *
15168404Spjd * You should have received a copy of the GNU General Public License version
16168404Spjd * 2 along with this work; if not, write to the Free Software Foundation,
17168404Spjd * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18168404Spjd *
19168404Spjd * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20168404Spjd * or visit www.oracle.com if you need additional information or have any
21168404Spjd * questions.
22168404Spjd *
23168404Spjd */
24168404Spjd
25168404Spjd#include "precompiled.hpp"
26169195Spjd#include "utilities/constantTag.hpp"
27169195Spjd#include "utilities/ostream.hpp"
28168404Spjd
29168404Spjd#ifndef PRODUCT
30168404Spjd
31168404Spjdvoid constantTag::print_on(outputStream* st) const {
32168404Spjd  st->print("%s", internal_name());
33168404Spjd}
34168404Spjd
35168404Spjd#endif // PRODUCT
36168404Spjd
37168404SpjdBasicType constantTag::basic_type() const {
38168404Spjd  switch (_tag) {
39168404Spjd    case JVM_CONSTANT_Integer :
40168404Spjd      return T_INT;
41168404Spjd    case JVM_CONSTANT_Float :
42168404Spjd      return T_FLOAT;
43168404Spjd    case JVM_CONSTANT_Long :
44168404Spjd      return T_LONG;
45168404Spjd    case JVM_CONSTANT_Double :
46168404Spjd      return T_DOUBLE;
47168404Spjd
48168404Spjd    case JVM_CONSTANT_Class :
49168404Spjd    case JVM_CONSTANT_String :
50168404Spjd    case JVM_CONSTANT_UnresolvedClass :
51168404Spjd    case JVM_CONSTANT_UnresolvedClassInError :
52168404Spjd    case JVM_CONSTANT_ClassIndex :
53168404Spjd    case JVM_CONSTANT_StringIndex :
54168404Spjd    case JVM_CONSTANT_MethodHandle :
55168404Spjd    case JVM_CONSTANT_MethodHandleInError :
56168404Spjd    case JVM_CONSTANT_MethodType :
57168404Spjd    case JVM_CONSTANT_MethodTypeInError :
58168404Spjd      return T_OBJECT;
59168404Spjd    default:
60168404Spjd      ShouldNotReachHere();
61168404Spjd      return T_ILLEGAL;
62168404Spjd  }
63168404Spjd}
64168404Spjd
65168404Spjd
66168404Spjdjbyte constantTag::non_error_value() const {
67168404Spjd  switch (_tag) {
68168404Spjd  case JVM_CONSTANT_UnresolvedClassInError:
69168404Spjd    return JVM_CONSTANT_UnresolvedClass;
70168404Spjd  case JVM_CONSTANT_MethodHandleInError:
71168404Spjd    return JVM_CONSTANT_MethodHandle;
72168404Spjd  case JVM_CONSTANT_MethodTypeInError:
73168488Spjd    return JVM_CONSTANT_MethodType;
74168404Spjd  default:
75168404Spjd    return _tag;
76168488Spjd  }
77168404Spjd}
78168404Spjd
79168404Spjd
80168404Spjdjbyte constantTag::error_value() const {
81168404Spjd  switch (_tag) {
82168488Spjd  case JVM_CONSTANT_UnresolvedClass:
83168404Spjd    return JVM_CONSTANT_UnresolvedClassInError;
84168404Spjd  case JVM_CONSTANT_MethodHandle:
85168404Spjd    return JVM_CONSTANT_MethodHandleInError;
86168404Spjd  case JVM_CONSTANT_MethodType:
87168404Spjd    return JVM_CONSTANT_MethodTypeInError;
88168404Spjd  default:
89168404Spjd    ShouldNotReachHere();
90168404Spjd    return JVM_CONSTANT_Invalid;
91168404Spjd  }
92168404Spjd}
93168404Spjd
94168404Spjdconst char* constantTag::internal_name() const {
95168404Spjd  switch (_tag) {
96168404Spjd    case JVM_CONSTANT_Invalid :
97168404Spjd      return "Invalid index";
98168404Spjd    case JVM_CONSTANT_Class :
99168404Spjd      return "Class";
100168404Spjd    case JVM_CONSTANT_Fieldref :
101168404Spjd      return "Field";
102168404Spjd    case JVM_CONSTANT_Methodref :
103168404Spjd      return "Method";
104168404Spjd    case JVM_CONSTANT_InterfaceMethodref :
105168404Spjd      return "InterfaceMethod";
106168404Spjd    case JVM_CONSTANT_String :
107168404Spjd      return "String";
108168404Spjd    case JVM_CONSTANT_Integer :
109168404Spjd      return "Integer";
110168404Spjd    case JVM_CONSTANT_Float :
111168404Spjd      return "Float";
112168404Spjd    case JVM_CONSTANT_Long :
113168404Spjd      return "Long";
114168404Spjd    case JVM_CONSTANT_Double :
115168404Spjd      return "Double";
116168404Spjd    case JVM_CONSTANT_NameAndType :
117168404Spjd      return "NameAndType";
118168404Spjd    case JVM_CONSTANT_MethodHandle :
119168404Spjd      return "MethodHandle";
120168404Spjd    case JVM_CONSTANT_MethodHandleInError :
121168404Spjd      return "MethodHandle Error";
122168404Spjd    case JVM_CONSTANT_MethodType :
123168404Spjd      return "MethodType";
124168404Spjd    case JVM_CONSTANT_MethodTypeInError :
125168404Spjd      return "MethodType Error";
126168404Spjd    case JVM_CONSTANT_InvokeDynamic :
127168404Spjd      return "InvokeDynamic";
128168404Spjd    case JVM_CONSTANT_Utf8 :
129168404Spjd      return "Utf8";
130168404Spjd    case JVM_CONSTANT_UnresolvedClass :
131168404Spjd      return "Unresolved Class";
132168404Spjd    case JVM_CONSTANT_UnresolvedClassInError :
133168404Spjd      return "Unresolved Class Error";
134168404Spjd    case JVM_CONSTANT_ClassIndex :
135168404Spjd      return "Unresolved Class Index";
136168404Spjd    case JVM_CONSTANT_StringIndex :
137168404Spjd      return "Unresolved String Index";
138168404Spjd    default:
139168404Spjd      ShouldNotReachHere();
140168404Spjd      return "Illegal";
141168404Spjd  }
142168404Spjd}
143168404Spjd