diff options
Diffstat (limited to 'vm/oo/Resolve.h')
-rw-r--r-- | vm/oo/Resolve.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/vm/oo/Resolve.h b/vm/oo/Resolve.h new file mode 100644 index 0000000..56a35b7 --- /dev/null +++ b/vm/oo/Resolve.h @@ -0,0 +1,98 @@ +/* + * 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_ |