Home | History | Annotate | Download | only in native
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 /*
     18  * java.lang.Object
     19  */
     20 #include "Dalvik.h"
     21 #include "native/InternalNativePriv.h"
     22 
     23 
     24 /*
     25  * private Object internalClone()
     26  *
     27  * Implements most of Object.clone().
     28  */
     29 static void Dalvik_java_lang_Object_internalClone(const u4* args,
     30     JValue* pResult)
     31 {
     32     Object* thisPtr = (Object*) args[0];
     33     Object* clone = dvmCloneObject(thisPtr, ALLOC_DONT_TRACK);
     34 
     35     RETURN_PTR(clone);
     36 }
     37 
     38 /*
     39  * public int hashCode()
     40  */
     41 static void Dalvik_java_lang_Object_hashCode(const u4* args, JValue* pResult)
     42 {
     43     Object* thisPtr = (Object*) args[0];
     44     RETURN_INT(dvmIdentityHashCode(thisPtr));
     45 }
     46 
     47 /*
     48  * public Class getClass()
     49  */
     50 static void Dalvik_java_lang_Object_getClass(const u4* args, JValue* pResult)
     51 {
     52     Object* thisPtr = (Object*) args[0];
     53 
     54     RETURN_PTR(thisPtr->clazz);
     55 }
     56 
     57 /*
     58  * public void notify()
     59  *
     60  * NOTE: we declare this as a full DalvikBridgeFunc, rather than a
     61  * DalvikNativeFunc, because we really want to avoid the "self" lookup.
     62  */
     63 static void Dalvik_java_lang_Object_notify(const u4* args, JValue* pResult,
     64     const Method* method, Thread* self)
     65 {
     66     Object* thisPtr = (Object*) args[0];
     67 
     68     dvmObjectNotify(self, thisPtr);
     69     RETURN_VOID();
     70 }
     71 
     72 /*
     73  * public void notifyAll()
     74  */
     75 static void Dalvik_java_lang_Object_notifyAll(const u4* args, JValue* pResult,
     76     const Method* method, Thread* self)
     77 {
     78     Object* thisPtr = (Object*) args[0];
     79 
     80     dvmObjectNotifyAll(self, thisPtr);
     81     RETURN_VOID();
     82 }
     83 
     84 /*
     85  * public void wait(long ms, int ns) throws InterruptedException
     86  */
     87 static void Dalvik_java_lang_Object_wait(const u4* args, JValue* pResult,
     88     const Method* method, Thread* self)
     89 {
     90     Object* thisPtr = (Object*) args[0];
     91 
     92     dvmObjectWait(self, thisPtr, GET_ARG_LONG(args,1), (s4)args[3], true);
     93     RETURN_VOID();
     94 }
     95 
     96 const DalvikNativeMethod dvm_java_lang_Object[] = {
     97     { "internalClone",  "(Ljava/lang/Cloneable;)Ljava/lang/Object;",
     98         Dalvik_java_lang_Object_internalClone },
     99     { "hashCode",       "()I",
    100         Dalvik_java_lang_Object_hashCode },
    101     { "notify",         "()V",
    102         (DalvikNativeFunc) Dalvik_java_lang_Object_notify },
    103     { "notifyAll",      "()V",
    104         (DalvikNativeFunc) Dalvik_java_lang_Object_notifyAll },
    105     { "wait",           "(JI)V",
    106         (DalvikNativeFunc) Dalvik_java_lang_Object_wait },
    107     { "getClass",       "()Ljava/lang/Class;",
    108         Dalvik_java_lang_Object_getClass },
    109     { NULL, NULL, NULL },
    110 };
    111