Resolve.h revision 375fb116bcb817b37509ab579dbd55cdbb765cbf
1/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16/*
17 * Resolve "constant pool" references into pointers to VM structs.
18 */
19#ifndef DALVIK_OO_RESOLVE_H_
20#define DALVIK_OO_RESOLVE_H_
21
22/*
23 * "Direct" and "virtual" methods are stored independently.  The type of call
24 * used to invoke the method determines which list we search, and whether
25 * we travel up into superclasses.
26 *
27 * (<clinit>, <init>, and methods declared "private" or "static" are stored
28 * in the "direct" list.  All others are stored in the "virtual" list.)
29 */
30enum MethodType {
31    METHOD_UNKNOWN  = 0,
32    METHOD_DIRECT,      // <init>, private
33    METHOD_STATIC,      // static
34    METHOD_VIRTUAL,     // virtual, super
35    METHOD_INTERFACE    // interface
36};
37
38/*
39 * Resolve a class, given the referring class and a constant pool index
40 * for the DexTypeId.
41 *
42 * Does not initialize the class.
43 *
44 * Throws an exception and returns NULL on failure.
45 */
46extern "C" ClassObject* dvmResolveClass(const ClassObject* referrer,
47                                        u4 classIdx,
48                                        bool fromUnverifiedConstant);
49
50/*
51 * Resolve a direct, static, or virtual method.
52 *
53 * Can cause the method's class to be initialized if methodType is
54 * METHOD_STATIC.
55 *
56 * Throws an exception and returns NULL on failure.
57 */
58extern "C" Method* dvmResolveMethod(const ClassObject* referrer, u4 methodIdx,
59                                    MethodType methodType);
60
61/*
62 * Resolve an interface method.
63 *
64 * Throws an exception and returns NULL on failure.
65 */
66Method* dvmResolveInterfaceMethod(const ClassObject* referrer, u4 methodIdx);
67
68/*
69 * Resolve an instance field.
70 *
71 * Throws an exception and returns NULL on failure.
72 */
73extern "C" InstField* dvmResolveInstField(const ClassObject* referrer,
74                                          u4 ifieldIdx);
75
76/*
77 * Resolve a static field.
78 *
79 * Causes the field's class to be initialized.
80 *
81 * Throws an exception and returns NULL on failure.
82 */
83extern "C" StaticField* dvmResolveStaticField(const ClassObject* referrer,
84                                              u4 sfieldIdx);
85
86/*
87 * Resolve a "const-string" reference.
88 *
89 * Throws an exception and returns NULL on failure.
90 */
91extern "C" StringObject* dvmResolveString(const ClassObject* referrer, u4 stringIdx);
92
93/*
94 * Return debug string constant for enum.
95 */
96const char* dvmMethodTypeStr(MethodType methodType);
97
98#endif  // DALVIK_OO_RESOLVE_H_
99