mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-11 23:07:36 +02:00
Bug fixes for num comparisons
This commit is contained in:
parent
67f73d1d8a
commit
c9326fc8c4
1 changed files with 20 additions and 18 deletions
38
runtime.c
38
runtime.c
|
@ -775,9 +775,11 @@ object Cyc_num_cmp_va_list(void *data, int argc, int (fn_op(void *, object, obje
|
|||
if (argc < 2) {
|
||||
Cyc_rt_raise_msg(data, "Not enough arguments for boolean operator\n");
|
||||
}
|
||||
Cyc_check_num(data, n);
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
next = va_arg(ns, object);
|
||||
Cyc_check_num(data, next);
|
||||
if (!fn_op(data, n, next)) {
|
||||
return boolean_f;
|
||||
}
|
||||
|
@ -792,24 +794,24 @@ int FUNC_OP(void *data, object x, object y) { \
|
|||
int result = 0, \
|
||||
tx = (obj_is_int(x) ? -1 : type_of(x)), \
|
||||
ty = (obj_is_int(y) ? -1 : type_of(y)); \
|
||||
if (tx == -1 && ty == -1) { \
|
||||
result = (obj_obj2int(x)) OP (obj_obj2int(y)); \
|
||||
} else if (tx == -1 && ty == integer_tag) { \
|
||||
result = (obj_obj2int(x)) OP (integer_value(y)); \
|
||||
} else if (tx == -1 && ty == double_tag) { \
|
||||
result = (obj_obj2int(x)) OP (double_value(y)); \
|
||||
} else if (tx == integer_tag && ty == -1) { \
|
||||
result = (integer_value(x)) OP (obj_obj2int(y)); \
|
||||
} else if (tx == integer_tag && ty == integer_tag) { \
|
||||
result = (integer_value(x)) OP (integer_value(y)); \
|
||||
} else if (tx == integer_tag && ty == double_tag) { \
|
||||
result = (integer_value(x)) OP (double_value(y)); \
|
||||
} else if (tx == double_tag && ty == -1) { \
|
||||
result = (double_value(x)) OP (obj_obj2int(y)); \
|
||||
} else if (tx == double_tag && ty == integer_tag) { \
|
||||
result = (double_value(x)) OP (integer_value(y)); \
|
||||
} else if (tx == double_tag && ty == double_tag) { \
|
||||
result = (double_value(x)) OP (double_value(y)); \
|
||||
if (tx == -1 && ty == -1) { \
|
||||
result = (obj_obj2int(x)) OP (obj_obj2int(y)); \
|
||||
} else if (tx == -1 && ty == integer_tag) { \
|
||||
result = (obj_obj2int(x)) OP (integer_value(y)); \
|
||||
} else if (tx == -1 && ty == double_tag) { \
|
||||
result = (obj_obj2int(x)) OP (double_value(y)); \
|
||||
} else if (tx == integer_tag && ty == -1) { \
|
||||
result = (integer_value(x)) OP (obj_obj2int(y)); \
|
||||
} else if (tx == integer_tag && ty == integer_tag) { \
|
||||
result = (integer_value(x)) OP (integer_value(y)); \
|
||||
} else if (tx == integer_tag && ty == double_tag) { \
|
||||
result = (integer_value(x)) OP (double_value(y)); \
|
||||
} else if (tx == double_tag && ty == -1) { \
|
||||
result = (double_value(x)) OP (obj_obj2int(y)); \
|
||||
} else if (tx == double_tag && ty == integer_tag) { \
|
||||
result = (double_value(x)) OP (integer_value(y)); \
|
||||
} else if (tx == double_tag && ty == double_tag) { \
|
||||
result = (double_value(x)) OP (double_value(y)); \
|
||||
} else { \
|
||||
make_string(s, "Bad argument type"); \
|
||||
make_cons(c1, y, nil); \
|
||||
|
|
Loading…
Add table
Reference in a new issue