diff options
author | Pekka Enberg <penberg@kernel.org> | 2012-08-17 11:38:26 +0300 |
---|---|---|
committer | Pekka Enberg <penberg@kernel.org> | 2012-08-17 12:48:03 +0300 |
commit | 81ca95b79850207bb5b8680466d381418d1eb09e (patch) | |
tree | 1704cba985301d1aec86f7cd36d496fce2f5767d | |
parent | d7c88a0292ff2441faa84751444c2da37cf9a75a (diff) | |
download | jato-81ca95b79850207bb5b8680466d381418d1eb09e.tar.gz |
vm: Introduce new vm_method_arg_stack_count() API function
Move the oddly named 'method_real_argument_count' to 'vm/method.c' and
rename it to vm_method_arg_stack_count(). The API is useful for
implementing alternative codegen backends.
Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r-- | include/vm/method.h | 2 | ||||
-rw-r--r-- | jit/invoke-bc.c | 13 | ||||
-rw-r--r-- | vm/method.c | 16 |
3 files changed, 19 insertions, 12 deletions
diff --git a/include/vm/method.h b/include/vm/method.h index 9d032ab2..6885f637 100644 --- a/include/vm/method.h +++ b/include/vm/method.h @@ -70,6 +70,8 @@ struct vm_method { #define VM_METHOD_FLAG_TRACE (1 << 2) #define VM_METHOD_FLAG_TRACE_GATE (1 << 3) +unsigned int vm_method_arg_stack_count(struct vm_method *vmm); + struct vm_method *vm_method_get_overridden(struct vm_method *vmm); int vm_method_do_init(struct vm_method *vmm); diff --git a/jit/invoke-bc.c b/jit/invoke-bc.c index d1709ad4..6c829baa 100644 --- a/jit/invoke-bc.c +++ b/jit/invoke-bc.c @@ -53,17 +53,6 @@ int convert_return(struct parse_context *ctx) return 0; } -static unsigned int method_real_argument_count(struct vm_method *invoke_target) -{ - int argc; - - argc = vm_method_arg_slots(invoke_target); - if (!vm_method_is_static(invoke_target)) - argc++; - - return argc; -} - static int convert_and_add_args(struct parse_context *ctx, struct vm_method *invoke_target, struct statement *stmt) @@ -72,7 +61,7 @@ static int convert_and_add_args(struct parse_context *ctx, struct expression *args_list; unsigned long nr_args, i; - nr_args = method_real_argument_count(invoke_target); + nr_args = vm_method_arg_stack_count(invoke_target); args_array = pop_args(ctx->bb->mimic_stack, nr_args); if (!args_array) diff --git a/vm/method.c b/vm/method.c index 8bdbf74c..5233d954 100644 --- a/vm/method.c +++ b/vm/method.c @@ -24,6 +24,22 @@ #include <string.h> #include <stdio.h> +/* + * Returns the number of arguments on operand stack (and consequently, + * on the mimic stack) for a method. + */ +unsigned int vm_method_arg_stack_count(struct vm_method *vmm) +{ + int argc; + + argc = vm_method_arg_slots(vmm); + + if (!vm_method_is_static(vmm)) + argc++; + + return argc; +} + /* Returns the method vmm is overriding or NULL. */ struct vm_method *vm_method_get_overridden(struct vm_method *vmm) { |