/* * 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*/