1
0
mirror of https://github.com/janet-lang/janet synced 2024-11-05 00:06:16 +00:00

Immediate instuctions will now call :compare method.

This commit is contained in:
Calvin Rose 2021-02-08 11:53:25 -06:00
parent 6a9bb0f4e4
commit 10dcbc639a
2 changed files with 22 additions and 4 deletions

View File

@ -202,6 +202,20 @@ JANET_THREAD_LOCAL jmp_buf *janet_vm_jmp_buf = NULL;
vm_checkgc_pcnext();\ vm_checkgc_pcnext();\
}\ }\
} }
#define vm_compop_imm(op) \
{\
Janet op1 = stack[B];\
if (janet_checktype(op1, JANET_NUMBER)) {\
double x1 = janet_unwrap_number(op1);\
double x2 = (double) CS; \
stack[A] = janet_wrap_boolean(x1 op x2);\
vm_pcnext();\
} else {\
vm_commit();\
stack[A] = janet_wrap_boolean(janet_compare(op1, janet_wrap_integer(CS)) op 0);\
vm_checkgc_pcnext();\
}\
}
/* Trace a function call */ /* Trace a function call */
static void vm_do_trace(JanetFunction *func, int32_t argc, const Janet *argv) { static void vm_do_trace(JanetFunction *func, int32_t argc, const Janet *argv) {
@ -780,8 +794,7 @@ static JanetSignal run_vm(JanetFiber *fiber, Janet in) {
vm_compop( <=); vm_compop( <=);
VM_OP(JOP_LESS_THAN_IMMEDIATE) VM_OP(JOP_LESS_THAN_IMMEDIATE)
stack[A] = janet_wrap_boolean(janet_unwrap_number(stack[B]) < (double) CS); vm_compop_imm( <);
vm_pcnext();
VM_OP(JOP_GREATER_THAN) VM_OP(JOP_GREATER_THAN)
vm_compop( >); vm_compop( >);
@ -790,8 +803,7 @@ static JanetSignal run_vm(JanetFiber *fiber, Janet in) {
vm_compop( >=); vm_compop( >=);
VM_OP(JOP_GREATER_THAN_IMMEDIATE) VM_OP(JOP_GREATER_THAN_IMMEDIATE)
stack[A] = janet_wrap_boolean(janet_unwrap_number(stack[B]) > (double) CS); vm_compop_imm( >);
vm_pcnext();
VM_OP(JOP_EQUALS) VM_OP(JOP_EQUALS)
stack[A] = janet_wrap_boolean(janet_equals(stack[B], stack[C])); stack[A] = janet_wrap_boolean(janet_equals(stack[B], stack[C]));

View File

@ -137,4 +137,10 @@
(assert (deep= (string/split "qq" "1qqqqz") @["1" "" "z"]) "string/split 1") (assert (deep= (string/split "qq" "1qqqqz") @["1" "" "z"]) "string/split 1")
(assert (deep= (string/split "aa" "aaa") @["" "a"]) "string/split 2") (assert (deep= (string/split "aa" "aaa") @["" "a"]) "string/split 2")
# Comparisons
(assert (> 1e23 100) "less than immediate 1")
(assert (> 1e23 1000) "less than immediate 2")
(assert (< 100 1e23) "greater than immediate 1")
(assert (< 1000 1e23) "greater than immediate 2")
(end-suite) (end-suite)