chore: upgrade project dependencies to latest compatible versions across all modules
This commit is contained in:
+55
-2
@@ -1784,7 +1784,7 @@ static bool _rava_vm_execute_fast(RavaVM_t *vm, RavaCallFrame_t *frame) {
|
||||
&&op_and, &&op_or, &&op_xor, &&op_not, &&op_bitnot, &&op_shl, &&op_shr, &&op_ushr,
|
||||
&&op_eq, &&op_ne, &&op_lt, &&op_le, &&op_gt, &&op_ge,
|
||||
&&op_jump, &&op_jump_if_true, &&op_jump_if_false, &&op_label,
|
||||
&&op_call, &&op_call_static, &&op_call_virtual, &&op_call_super, &&op_call_native,
|
||||
&&op_call, &&op_call_static, &&op_call_recursive, &&op_call_virtual, &&op_call_super, &&op_call_native,
|
||||
&&op_return, &&op_return_void,
|
||||
&&op_new, &&op_new_array, &&op_new_array_of_arrays, &&op_array_length, &&op_get_field, &&op_put_field,
|
||||
&&op_cast, &&op_instanceof,
|
||||
@@ -2249,6 +2249,29 @@ op_call_static: {
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
op_call_recursive: {
|
||||
frame->pc = pc;
|
||||
RavaMethod_t *target_method = (RavaMethod_t*)instr->operand.call.cached_method;
|
||||
if (UNLIKELY(!target_method)) {
|
||||
target_method = frame->method;
|
||||
instr->operand.call.cached_method = target_method;
|
||||
}
|
||||
RavaCallFrame_t *new_frame = rava_call_frame_create(target_method);
|
||||
for (int i = instr->operand.call.arg_count - 1; i >= 0; i--) {
|
||||
new_frame->locals[i] = STACK_POP(stack);
|
||||
}
|
||||
rava_call_stack_push(vm->call_stack, new_frame);
|
||||
if (!_rava_vm_execute_fast(vm, new_frame)) {
|
||||
goto done;
|
||||
}
|
||||
if (!rava_stack_is_empty(new_frame->operand_stack)) {
|
||||
STACK_PUSH(stack, rava_stack_pop(new_frame->operand_stack));
|
||||
}
|
||||
rava_call_stack_pop(vm->call_stack);
|
||||
rava_call_frame_destroy(new_frame);
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
op_call_virtual: {
|
||||
frame->pc = pc;
|
||||
RavaValue_t this_val = stack->values[stack->top - instr->operand.call.arg_count - 1];
|
||||
@@ -3039,7 +3062,7 @@ static bool _rava_vm_execute_ultrafast(RavaVM_t *vm, RavaMethod_t *entry_method)
|
||||
&&uf_and, &&uf_or, &&uf_xor, &&uf_not, &&uf_bitnot, &&uf_shl, &&uf_shr, &&uf_ushr,
|
||||
&&uf_eq, &&uf_ne, &&uf_lt, &&uf_le, &&uf_gt, &&uf_ge,
|
||||
&&uf_jump, &&uf_jump_if_true, &&uf_jump_if_false, &&uf_label,
|
||||
&&uf_call, &&uf_call_static, &&uf_call_virtual, &&uf_call_super, &&uf_call_native,
|
||||
&&uf_call, &&uf_call_static, &&uf_call_recursive, &&uf_call_virtual, &&uf_call_super, &&uf_call_native,
|
||||
&&uf_return, &&uf_return_void,
|
||||
&&uf_new, &&uf_new_array, &&uf_new_array_of_arrays, &&uf_array_length, &&uf_get_field, &&uf_put_field,
|
||||
&&uf_cast, &&uf_instanceof,
|
||||
@@ -3373,6 +3396,36 @@ uf_call_static: {
|
||||
UF_DISPATCH();
|
||||
}
|
||||
|
||||
uf_call_recursive: {
|
||||
RavaMethod_t *target = (RavaMethod_t*)instr->operand.call.cached_method;
|
||||
if (UNLIKELY(!target)) {
|
||||
target = frame->method;
|
||||
instr->operand.call.cached_method = target;
|
||||
}
|
||||
if (!target->label_table) {
|
||||
rava_optimize_superinstructions(target);
|
||||
target->label_table = rava_labeltable_create(target->instructions);
|
||||
}
|
||||
RavaNanboxValue_t args[16];
|
||||
for (int i = instr->operand.call.arg_count - 1; i >= 0; i--) {
|
||||
args[i] = UF_POP();
|
||||
}
|
||||
frame->pc = pc;
|
||||
FastFrame_t *new_frame = rava_fastframe_push(target, target->local_count);
|
||||
if (!new_frame) {
|
||||
vm->had_error = true;
|
||||
goto uf_done;
|
||||
}
|
||||
for (int i = 0; i < instr->operand.call.arg_count; i++) {
|
||||
new_frame->locals[i] = args[i];
|
||||
}
|
||||
frame = new_frame;
|
||||
instructions = target->instructions->instructions;
|
||||
instr_count = target->instructions->count;
|
||||
pc = 0;
|
||||
UF_DISPATCH();
|
||||
}
|
||||
|
||||
uf_call_virtual: {
|
||||
int arg_count = instr->operand.call.arg_count;
|
||||
RavaNanboxValue_t args[16];
|
||||
|
||||
Reference in New Issue
Block a user