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