blob: 89e219feaf4a4edc4401df1031c8230c200a9f5c [file] [log] [blame]
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001/*
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 */
29static void Dalvik_java_lang_Object_internalClone(const u4* args,
30 JValue* pResult)
31{
32 Object* thisPtr = (Object*) args[0];
33 Object* clone = dvmCloneObject(thisPtr);
34
35 dvmReleaseTrackedAlloc(clone, NULL);
36 RETURN_PTR(clone);
37}
38
39/*
40 * public int hashCode()
41 */
42static void Dalvik_java_lang_Object_hashCode(const u4* args, JValue* pResult)
43{
44 Object* thisPtr = (Object*) args[0];
45 RETURN_INT(dvmGetObjectHashCode(thisPtr));
46}
47
48/*
49 * public Class getClass()
50 */
51static void Dalvik_java_lang_Object_getClass(const u4* args, JValue* pResult)
52{
53 Object* thisPtr = (Object*) args[0];
54
55 RETURN_PTR(thisPtr->clazz);
56}
57
58/*
59 * public void notify()
60 *
61 * NOTE: we declare this as a full DalvikBridgeFunc, rather than a
62 * DalvikNativeFunc, because we really want to avoid the "self" lookup.
63 */
64static void Dalvik_java_lang_Object_notify(const u4* args, JValue* pResult,
65 const Method* method, Thread* self)
66{
67 Object* thisPtr = (Object*) args[0];
68
69 dvmObjectNotify(self, thisPtr);
70 RETURN_VOID();
71}
72
73/*
74 * public void notifyAll()
75 */
76static void Dalvik_java_lang_Object_notifyAll(const u4* args, JValue* pResult,
77 const Method* method, Thread* self)
78{
79 Object* thisPtr = (Object*) args[0];
80
81 dvmObjectNotifyAll(self, thisPtr);
82 RETURN_VOID();
83}
84
85/*
86 * public void wait(long ms, int ns) throws InterruptedException
87 */
88static void Dalvik_java_lang_Object_wait(const u4* args, JValue* pResult,
89 const Method* method, Thread* self)
90{
91 Object* thisPtr = (Object*) args[0];
92
93 dvmObjectWait(self, thisPtr, GET_ARG_LONG(args,1), (s4)args[3], true);
94 RETURN_VOID();
95}
96
97const DalvikNativeMethod dvm_java_lang_Object[] = {
98 { "internalClone", "(Ljava/lang/Cloneable;)Ljava/lang/Object;",
99 Dalvik_java_lang_Object_internalClone },
100 { "hashCode", "()I",
101 Dalvik_java_lang_Object_hashCode },
102 { "notify", "()V",
103 (DalvikNativeFunc) Dalvik_java_lang_Object_notify },
104 { "notifyAll", "()V",
105 (DalvikNativeFunc) Dalvik_java_lang_Object_notifyAll },
106 { "wait", "(JI)V",
107 (DalvikNativeFunc) Dalvik_java_lang_Object_wait },
108 { "getClass", "()Ljava/lang/Class;",
109 Dalvik_java_lang_Object_getClass },
110 { NULL, NULL, NULL },
111};
112