Reported-by: Arthur HUILLET <[email protected]>
Signed-off-by: Vegard Nossum <[email protected]>
---
include/vm/class.h | 5 +++++
vm/class.c | 4 +++-
vm/itable.c | 5 +----
3 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/include/vm/class.h b/include/vm/class.h
index 4333f4a..e6cb2fe 100644
--- a/include/vm/class.h
+++ b/include/vm/class.h
@@ -85,6 +85,11 @@ static inline bool vm_class_is_interface(const struct
vm_class *vmc)
return vmc->class->access_flags & CAFEBABE_CLASS_ACC_INTERFACE;
}
+static inline bool vm_class_is_abstract(const struct vm_class *vmc)
+{
+ return vmc->class->access_flags & CAFEBABE_CLASS_ACC_ABSTRACT;
+}
+
static inline bool vm_class_is_array_class(const struct vm_class *vmc)
{
return vmc->kind == VM_CLASS_KIND_ARRAY;
diff --git a/vm/class.c b/vm/class.c
index c153fe4..5382377 100644
--- a/vm/class.c
+++ b/vm/class.c
@@ -304,7 +304,9 @@ int vm_class_link(struct vm_class *vmc, const struct
cafebabe_class *class)
if (!vm_class_is_interface(vmc)) {
setup_vtable(vmc);
- vm_itable_setup(vmc);
+
+ if (!vm_class_is_abstract(vmc))
+ vm_itable_setup(vmc);
}
INIT_LIST_HEAD(&vmc->static_fixup_site_list);
diff --git a/vm/itable.c b/vm/itable.c
index a705ddb..dcfc08d 100644
--- a/vm/itable.c
+++ b/vm/itable.c
@@ -224,10 +224,7 @@ int vm_itable_setup(struct vm_class *vmc)
struct vm_method *c_vmm
= vm_class_get_method_recursive(vmc,
i_vmm->name, i_vmm->type);
- if (!c_vmm) {
- NOT_IMPLEMENTED;
- continue;
- }
+ assert(c_vmm);
entry->c_method = c_vmm;
}
--
1.6.0.4
------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/blackberry
_______________________________________________
Jatovm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel