2 * Copyright (C) 2012 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #ifndef ART_RUNTIME_COMMON_THROWS_H_
18 #define ART_RUNTIME_COMMON_THROWS_H_
20 #include "base/mutex.h"
21 #include "invoke_type.h"
34 // AbstractMethodError
36 void ThrowAbstractMethodError(ArtMethod* method)
37 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
39 void ThrowAbstractMethodError(uint32_t method_idx, const DexFile& dex_file)
40 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
42 // ArithmeticException
44 void ThrowArithmeticExceptionDivideByZero() SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
46 // ArrayIndexOutOfBoundsException
48 void ThrowArrayIndexOutOfBoundsException(int index, int length)
49 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
51 // ArrayStoreException
53 void ThrowArrayStoreException(mirror::Class* element_class, mirror::Class* array_class)
54 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
56 // ClassCircularityError
58 void ThrowClassCircularityError(mirror::Class* c)
59 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
61 void ThrowClassCircularityError(mirror::Class* c, const char* fmt, ...)
62 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
66 void ThrowClassCastException(mirror::Class* dest_type, mirror::Class* src_type)
67 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
69 void ThrowClassCastException(const char* msg)
70 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
74 void ThrowClassFormatError(mirror::Class* referrer, const char* fmt, ...)
75 __attribute__((__format__(__printf__, 2, 3)))
76 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
80 void ThrowIllegalAccessErrorClass(mirror::Class* referrer, mirror::Class* accessed)
81 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
83 void ThrowIllegalAccessErrorClassForMethodDispatch(mirror::Class* referrer, mirror::Class* accessed,
86 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
88 void ThrowIllegalAccessErrorMethod(mirror::Class* referrer, ArtMethod* accessed)
89 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
91 void ThrowIllegalAccessErrorField(mirror::Class* referrer, ArtField* accessed)
92 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
94 void ThrowIllegalAccessErrorFinalField(ArtMethod* referrer, ArtField* accessed)
95 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
97 void ThrowIllegalAccessError(mirror::Class* referrer, const char* fmt, ...)
98 __attribute__((__format__(__printf__, 2, 3)))
99 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
101 // IllegalAccessException
103 void ThrowIllegalAccessException(const char* msg)
104 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
106 // IllegalArgumentException
108 void ThrowIllegalArgumentException(const char* msg)
109 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
111 // IncompatibleClassChangeError
113 void ThrowIncompatibleClassChangeError(InvokeType expected_type, InvokeType found_type,
114 ArtMethod* method, ArtMethod* referrer)
115 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
117 void ThrowIncompatibleClassChangeErrorClassForInterfaceSuper(ArtMethod* method,
118 mirror::Class* target_class,
119 mirror::Object* this_object,
121 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
123 void ThrowIncompatibleClassChangeErrorClassForInterfaceDispatch(ArtMethod* interface_method,
124 mirror::Object* this_object,
126 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
128 void ThrowIncompatibleClassChangeErrorField(ArtField* resolved_field, bool is_static,
130 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
132 void ThrowIncompatibleClassChangeError(mirror::Class* referrer, const char* fmt, ...)
133 __attribute__((__format__(__printf__, 2, 3)))
134 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
136 void ThrowIncompatibleClassChangeErrorForMethodConflict(ArtMethod* method)
137 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
141 void ThrowIOException(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)))
142 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
144 void ThrowWrappedIOException(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)))
145 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
149 void ThrowLinkageError(mirror::Class* referrer, const char* fmt, ...)
150 __attribute__((__format__(__printf__, 2, 3)))
151 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
153 void ThrowWrappedLinkageError(mirror::Class* referrer, const char* fmt, ...)
154 __attribute__((__format__(__printf__, 2, 3)))
155 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
157 // NegativeArraySizeException
159 void ThrowNegativeArraySizeException(int size)
160 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
162 void ThrowNegativeArraySizeException(const char* msg)
163 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
168 void ThrowNoSuchFieldError(const StringPiece& scope, mirror::Class* c,
169 const StringPiece& type, const StringPiece& name)
170 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
172 void ThrowNoSuchFieldException(mirror::Class* c, const StringPiece& name)
173 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
177 void ThrowNoSuchMethodError(InvokeType type, mirror::Class* c, const StringPiece& name,
178 const Signature& signature)
179 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
181 void ThrowNoSuchMethodError(uint32_t method_idx)
182 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
184 // NullPointerException
186 void ThrowNullPointerExceptionForFieldAccess(ArtField* field,
188 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
190 void ThrowNullPointerExceptionForMethodAccess(uint32_t method_idx,
192 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
194 void ThrowNullPointerExceptionForMethodAccess(ArtMethod* method,
196 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
198 void ThrowNullPointerExceptionFromDexPC()
199 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
201 void ThrowNullPointerException(const char* msg)
202 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
206 void ThrowRuntimeException(const char* fmt, ...)
207 __attribute__((__format__(__printf__, 1, 2)))
208 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
212 void ThrowStackOverflowError(Thread* self) SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
216 void ThrowVerifyError(mirror::Class* referrer, const char* fmt, ...)
217 __attribute__((__format__(__printf__, 2, 3)))
218 SHARED_REQUIRES(Locks::mutator_lock_) COLD_ATTR;
222 #endif // ART_RUNTIME_COMMON_THROWS_H_