Signed-off-by: Tomek Grabiec <[email protected]>
---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel