We reuse the existing code for parsing the vm_method->type string. Signed-off-by: Eduard - Gabriel Munteanu <eduard.munte...@linux360.ro> --- arch/x86/args.c | 22 +++++++++++++++++++--- include/vm/types.h | 1 + vm/types.c | 2 +- 3 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/arch/x86/args.c b/arch/x86/args.c index 5b5a740..715b38d 100644 --- a/arch/x86/args.c +++ b/arch/x86/args.c @@ -25,6 +25,7 @@ */ #include <assert.h> +#include <stdio.h> #include "arch/args.h" @@ -32,6 +33,7 @@ #include "jit/expression.h" #include "vm/method.h" +#include "vm/types.h" #ifdef CONFIG_X86_64 @@ -39,11 +41,25 @@ int args_init(unsigned long *state, struct vm_method *method, unsigned long nr_args) { - char *type; - - for (type = method->type; *type != ')'; type++) { - if (*type == 'I' || *type == 'L' || *type == 'J') + const char *type; + enum vm_type vm_type; + + for (type = method->type + 1; *type != ')'; skip_type(&type)) { + vm_type = str_to_type(type); + switch (vm_type) { + case J_BYTE: + case J_CHAR: + case J_INT: + case J_LONG: + case J_SHORT: + case J_BOOLEAN: + case J_REFERENCE: method->reg_args_count++; + break; + default: + NOT_IMPLEMENTED; + break; + } if (method->reg_args_count == 6) break; diff --git a/include/vm/types.h b/include/vm/types.h index 34cdda4..e97bfbd 100644 --- a/include/vm/types.h +++ b/include/vm/types.h @@ -19,6 +19,7 @@ enum vm_type { extern enum vm_type str_to_type(const char *); extern enum vm_type get_method_return_type(char *); +int skip_type(const char **type); int count_arguments(const char *); enum vm_type bytecode_type_to_vmtype(int); int vmtype_to_bytecode_type(enum vm_type); diff --git a/vm/types.c b/vm/types.c index a1d8c64..778375a 100644 --- a/vm/types.c +++ b/vm/types.c @@ -46,7 +46,7 @@ enum vm_type get_method_return_type(char *type) static int count_skip_arguments(const char **type); -static int skip_type(const char **type) +int skip_type(const char **type) { const char *ptr = *type; int ret = 1; -- 1.6.0.6 ------------------------------------------------------------------------------ _______________________________________________ Jatovm-devel mailing list Jatovm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jatovm-devel