/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* Resolve "constant pool" references into pointers to VM structs.
*/
#ifndef DALVIK_OO_RESOLVE_H_
#define DALVIK_OO_RESOLVE_H_
/*
* "Direct" and "virtual" methods are stored independently. The type of call
* used to invoke the method determines which list we search, and whether
* we travel up into superclasses.
*
* (<clinit>, <init>, and methods declared "private" or "static" are stored
* in the "direct" list. All others are stored in the "virtual" list.)
*/
enum MethodType {
METHOD_UNKNOWN = 0,
METHOD_DIRECT, // <init>, private
METHOD_STATIC, // static
METHOD_VIRTUAL, // virtual, super
METHOD_INTERFACE // interface
};
/*
* Resolve a class, given the referring class and a constant pool index
* for the DexTypeId.
*
* Does not initialize the class.
*
* Throws an exception and returns NULL on failure.
*/
extern "C" ClassObject* dvmResolveClass(const ClassObject* referrer,
u4 classIdx,
bool fromUnverifiedConstant);
/*
* Resolve a direct, static, or virtual method.
*
* Can cause the method's class to be initialized if methodType is
* METHOD_STATIC.
*
* Throws an exception and returns NULL on failure.
*/
extern "C" Method* dvmResolveMethod(const ClassObject* referrer, u4 methodIdx,
MethodType methodType);
/*
* Resolve an interface method.
*
* Throws an exception and returns NULL on failure.
*/
Method* dvmResolveInterfaceMethod(const ClassObject* referrer, u4 methodIdx);
/*
* Resolve an instance field.
*
* Throws an exception and returns NULL on failure.
*/
extern "C" InstField* dvmResolveInstField(const ClassObject* referrer,
u4 ifieldIdx);
/*
* Resolve a static field.
*
* Causes the field's class to be initialized.
*
* Throws an exception and returns NULL on failure.
*/
extern "C" StaticField* dvmResolveStaticField(const ClassObject* referrer,
u4 sfieldIdx);
/*
* Resolve a "const-string" reference.
*
* Throws an exception and returns NULL on failure.
*/
extern "C" StringObject* dvmResolveString(const ClassObject* referrer, u4 stringIdx);
/*
* Return debug string constant for enum.
*/
const char* dvmMethodTypeStr(MethodType methodType);
#endif // DALVIK_OO_RESOLVE_H_