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