Signed-off-by: Tomek Grabiec <tgrab...@gmail.com>
---
 include/vm/types.h |    1 +
 vm/classloader.c   |   12 ++++++++++++
 2 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/include/vm/types.h b/include/vm/types.h
index c1b650e..f5bf6e7 100644
--- a/include/vm/types.h
+++ b/include/vm/types.h
@@ -13,6 +13,7 @@ enum vm_type {
        J_DOUBLE,
        J_BOOLEAN,
        J_RETURN_ADDRESS,
+       VM_TYPE_MAX,
 };
 
 extern enum vm_type str_to_type(const char *);
diff --git a/vm/classloader.c b/vm/classloader.c
index 01376a5..b99701a 100644
--- a/vm/classloader.c
+++ b/vm/classloader.c
@@ -283,9 +283,19 @@ struct vm_class *load_class_from_classpath_file(const char 
*classpath,
        return result;
 }
 
+static struct vm_class *primitive_class_cache[VM_TYPE_MAX];
+
 struct vm_class *classloader_load_primitive(const char *class_name)
 {
        struct vm_class *class;
+       int cache_index;
+
+       cache_index = str_to_type(class_name);
+
+       assert(cache_index != J_VOID && cache_index != J_REFERENCE);
+
+       if (primitive_class_cache[cache_index])
+               return primitive_class_cache[cache_index];
 
        class = malloc(sizeof *class);
        if (!class) {
@@ -301,6 +311,8 @@ struct vm_class *classloader_load_primitive(const char 
*class_name)
                return NULL;
        }
 
+       primitive_class_cache[cache_index] = class;
+
        return class;
 }
 
-- 
1.6.0.6


------------------------------------------------------------------------------
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to