| /* |
| * 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. |
| */ |
| /* |
| * instanceof, checkcast, etc. |
| */ |
| #ifndef _DALVIK_OO_TYPECHECK |
| #define _DALVIK_OO_TYPECHECK |
| |
| /* VM startup/shutdown */ |
| bool dvmInstanceofStartup(void); |
| void dvmInstanceofShutdown(void); |
| |
| |
| /* used by dvmInstanceof; don't call */ |
| int dvmInstanceofNonTrivial(const ClassObject* instance, |
| const ClassObject* clazz); |
| |
| /* |
| * Determine whether "instance" is an instance of "clazz". |
| * |
| * Returns 0 (false) if not, 1 (true) if so. |
| */ |
| INLINE int dvmInstanceof(const ClassObject* instance, const ClassObject* clazz) |
| { |
| if (instance == clazz) { |
| if (CALC_CACHE_STATS) |
| gDvm.instanceofCache->trivial++; |
| return 1; |
| } else |
| return dvmInstanceofNonTrivial(instance, clazz); |
| } |
| |
| /* |
| * Determine whether a class implements an interface. |
| * |
| * Returns 0 (false) if not, 1 (true) if so. |
| */ |
| int dvmImplements(const ClassObject* clazz, const ClassObject* interface); |
| |
| /* |
| * Determine whether "sub" is a sub-class of "clazz". |
| * |
| * Returns 0 (false) if not, 1 (true) if so. |
| */ |
| INLINE int dvmIsSubClass(const ClassObject* sub, const ClassObject* clazz) { |
| do { |
| /*printf("###### sub='%s' clazz='%s'\n", sub->name, clazz->name);*/ |
| if (sub == clazz) |
| return 1; |
| sub = sub->super; |
| } while (sub != NULL); |
| |
| return 0; |
| } |
| |
| /* |
| * Determine whether or not we can store an object into an array, based |
| * on the classes of the two. |
| * |
| * Returns 0 (false) if not, 1 (true) if so. |
| */ |
| bool dvmCanPutArrayElement(const ClassObject* elemClass, |
| const ClassObject* arrayClass); |
| |
| #endif /*_DALVIK_OO_TYPECHECK*/ |