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:
parent
6a9bb0f4e4
commit
10dcbc639a
@ -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]));
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user