summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSebastien Hertz <shertz@google.com>2013-07-09 17:27:07 +0200
committerSebastien Hertz <shertz@google.com>2013-07-09 18:09:30 +0200
commit56adf601ed9d1d11a2c462caa262e7de66a9e172 (patch)
treea994d1346436e86dfd26a9c0a7d3de7c118c70dc /src
parent3dd9f76ff8fa99be9ff6b18354528c5def7b26f7 (diff)
downloadart-56adf601ed9d1d11a2c462caa262e7de66a9e172.zip
art-56adf601ed9d1d11a2c462caa262e7de66a9e172.tar.gz
art-56adf601ed9d1d11a2c462caa262e7de66a9e172.tar.bz2
Adds ThrowAbstractMethodError to common throws.
Change-Id: Ib9b6b634a934b075a168534e50b2160a4e4dbc65
Diffstat (limited to 'src')
-rw-r--r--src/common_throws.cc8
-rw-r--r--src/common_throws.h5
-rw-r--r--src/interpreter/interpreter.cc12
-rw-r--r--src/oat/runtime/support_stubs.cc4
4 files changed, 17 insertions, 12 deletions
diff --git a/src/common_throws.cc b/src/common_throws.cc
index 66e512e..0497901 100644
--- a/src/common_throws.cc
+++ b/src/common_throws.cc
@@ -66,6 +66,14 @@ static void ThrowException(const ThrowLocation* throw_location, const char* exce
}
}
+// AbstractMethodError
+
+void ThrowAbstractMethodError(const mirror::AbstractMethod* method) {
+ ThrowException(NULL, "Ljava/lang/AbstractMethodError;", NULL,
+ StringPrintf("abstract method \"%s\"",
+ PrettyMethod(method).c_str()).c_str());
+}
+
// ArithmeticException
void ThrowArithmeticExceptionDivideByZero() {
diff --git a/src/common_throws.h b/src/common_throws.h
index fbaf4c1..4bf12c0 100644
--- a/src/common_throws.h
+++ b/src/common_throws.h
@@ -30,6 +30,11 @@ class Object;
class StringPiece;
class ThrowLocation;
+// AbstractMethodError
+
+void ThrowAbstractMethodError(const mirror::AbstractMethod* method)
+ SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
+
// ArithmeticException
void ThrowArithmeticExceptionDivideByZero() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
diff --git a/src/interpreter/interpreter.cc b/src/interpreter/interpreter.cc
index a89fb11..16e04a5 100644
--- a/src/interpreter/interpreter.cc
+++ b/src/interpreter/interpreter.cc
@@ -420,9 +420,7 @@ static void DoInvoke(Thread* self, ShadowFrame& shadow_frame,
num_regs = code_item->registers_size_;
num_ins = code_item->ins_size_;
} else if (method->IsAbstract()) {
- ThrowLocation throw_location = self->GetCurrentLocationForThrow();
- self->ThrowNewExceptionF(throw_location, "Ljava/lang/AbstractMethodError;",
- "abstract method \"%s\"", PrettyMethod(method).c_str());
+ ThrowAbstractMethodError(method);
return;
} else {
DCHECK(method->IsNative() || method->IsProxyMethod());
@@ -511,9 +509,7 @@ static void DoInvokeVirtualQuick(Thread* self, ShadowFrame& shadow_frame,
num_regs = code_item->registers_size_;
num_ins = code_item->ins_size_;
} else if (method->IsAbstract()) {
- ThrowLocation throw_location = self->GetCurrentLocationForThrow();
- self->ThrowNewExceptionF(throw_location, "Ljava/lang/AbstractMethodError;",
- "abstract method \"%s\"", PrettyMethod(method).c_str());
+ ThrowAbstractMethodError(method);
return;
} else {
DCHECK(method->IsNative() || method->IsProxyMethod());
@@ -2988,9 +2984,7 @@ void EnterInterpreterFromInvoke(Thread* self, AbstractMethod* method, Object* re
num_regs = code_item->registers_size_;
num_ins = code_item->ins_size_;
} else if (method->IsAbstract()) {
- ThrowLocation throw_location = self->GetCurrentLocationForThrow();
- self->ThrowNewExceptionF(throw_location, "Ljava/lang/AbstractMethodError;",
- "abstract method \"%s\"", PrettyMethod(method).c_str());
+ ThrowAbstractMethodError(method);
return;
} else {
DCHECK(method->IsNative());
diff --git a/src/oat/runtime/support_stubs.cc b/src/oat/runtime/support_stubs.cc
index 71b67d0..096cb9c 100644
--- a/src/oat/runtime/support_stubs.cc
+++ b/src/oat/runtime/support_stubs.cc
@@ -409,9 +409,7 @@ extern "C" void artThrowAbstractMethodErrorFromCode(mirror::AbstractMethod* meth
#else
UNUSED(sp);
#endif
- ThrowLocation throw_location = self->GetCurrentLocationForThrow();
- self->ThrowNewExceptionF(throw_location, "Ljava/lang/AbstractMethodError;",
- "abstract method \"%s\"", PrettyMethod(method).c_str());
+ ThrowAbstractMethodError(method);
self->QuickDeliverException();
}