Tue, 23 Nov 2010 13:22:55 -0800
6989984: Use standard include model for Hospot
Summary: Replaced MakeDeps and the includeDB files with more standardized solutions.
Reviewed-by: coleenp, kvn, kamg
1 /*
2 * Copyright (c) 1999, 2010, 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 */
25 #include "precompiled.hpp"
26 #include "ci/ciSignature.hpp"
27 #include "ci/ciUtilities.hpp"
28 #include "memory/allocation.inline.hpp"
29 #include "oops/oop.inline.hpp"
30 #include "runtime/signature.hpp"
32 // ciSignature
33 //
34 // This class represents the signature of a method.
36 // ------------------------------------------------------------------
37 // ciSignature::ciSignature
38 ciSignature::ciSignature(ciKlass* accessing_klass, ciSymbol* symbol) {
39 ASSERT_IN_VM;
40 EXCEPTION_CONTEXT;
41 _accessing_klass = accessing_klass;
42 _symbol = symbol;
44 ciEnv* env = CURRENT_ENV;
45 Arena* arena = env->arena();
46 _types = new (arena) GrowableArray<ciType*>(arena, 8, 0, NULL);
48 int size = 0;
49 int count = 0;
50 symbolHandle sh (THREAD, symbol->get_symbolOop());
51 SignatureStream ss(sh);
52 for (; ; ss.next()) {
53 // Process one element of the signature
54 ciType* type;
55 if (!ss.is_object()) {
56 type = ciType::make(ss.type());
57 } else {
58 symbolOop name = ss.as_symbol(THREAD);
59 if (HAS_PENDING_EXCEPTION) {
60 type = ss.is_array() ? (ciType*)ciEnv::unloaded_ciobjarrayklass()
61 : (ciType*)ciEnv::unloaded_ciinstance_klass();
62 env->record_out_of_memory_failure();
63 CLEAR_PENDING_EXCEPTION;
64 } else {
65 ciSymbol* klass_name = env->get_object(name)->as_symbol();
66 type = env->get_klass_by_name_impl(_accessing_klass, klass_name, false);
67 }
68 }
69 _types->append(type);
70 if (ss.at_return_type()) {
71 // Done processing the return type; do not add it into the count.
72 break;
73 }
74 size += type->size();
75 count++;
76 }
77 _size = size;
78 _count = count;
79 }
81 // ------------------------------------------------------------------
82 // ciSignature::return_ciType
83 //
84 // What is the return type of this signature?
85 ciType* ciSignature::return_type() const {
86 return _types->at(_count);
87 }
89 // ------------------------------------------------------------------
90 // ciSignature::ciType_at
91 //
92 // What is the type of the index'th element of this
93 // signature?
94 ciType* ciSignature::type_at(int index) const {
95 assert(index < _count, "out of bounds");
96 // The first _klasses element holds the return klass.
97 return _types->at(index);
98 }
100 // ------------------------------------------------------------------
101 // ciSignature::print_signature
102 void ciSignature::print_signature() {
103 _symbol->print_symbol();
104 }
106 // ------------------------------------------------------------------
107 // ciSignature::print
108 void ciSignature::print() {
109 tty->print("<ciSignature symbol=");
110 print_signature();
111 tty->print(" accessing_klass=");
112 _accessing_klass->print();
113 tty->print(" address=0x%x>", (address)this);
114 }