blob: 70b22942e6ffa1f70e606dd850628ad4ff6e46f5 [file] [log] [blame]
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001/*
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
20#define _DALVIK_OO_RESOLVE
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 */
30typedef enum MethodType {
31 METHOD_UNKNOWN = 0,
32 METHOD_DIRECT, // <init>, private
33 METHOD_STATIC, // static
34 METHOD_VIRTUAL, // virtual, super
35 METHOD_INTERFACE // interface
36} MethodType;
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 */
46ClassObject* dvmResolveClass(const ClassObject* referrer, u4 classIdx,
47 bool fromUnverifiedConstant);
48
49/*
50 * Resolve a direct, static, or virtual method.
51 *
52 * Can cause the method's class to be initialized if methodType is
53 * METHOD_STATIC.
54 *
55 * Throws an exception and returns NULL on failure.
56 */
57Method* dvmResolveMethod(const ClassObject* referrer, u4 methodIdx,
58 MethodType methodType);
59
60/*
61 * Resolve an interface method.
62 *
63 * Throws an exception and returns NULL on failure.
64 */
65Method* dvmResolveInterfaceMethod(const ClassObject* referrer, u4 methodIdx);
66
67/*
68 * Resolve an instance field.
69 *
70 * Throws an exception and returns NULL on failure.
71 */
72InstField* dvmResolveInstField(const ClassObject* referrer, u4 ifieldIdx);
73
74/*
75 * Resolve a static field.
76 *
77 * Causes the field's class to be initialized.
78 *
79 * Throws an exception and returns NULL on failure.
80 */
81StaticField* dvmResolveStaticField(const ClassObject* referrer, u4 sfieldIdx);
82
83/*
84 * Resolve a "const-string" reference.
85 *
86 * Throws an exception and returns NULL on failure.
87 */
88StringObject* dvmResolveString(const ClassObject* referrer, u4 stringIdx);
89
90/*
91 * Return debug string constant for enum.
92 */
93const char* dvmMethodTypeStr(MethodType methodType);
94
95#endif /*_DALVIK_OO_RESOLVE*/