Showing the changes to src/cvalues.c (1 of 1 file). Show all
Unified · Split
| @@ -1029,29 +1029,21 @@ mk_cbuiltin(const char *name, sl_builtinfn f) · 1028 unmodified lines | ||
| 1029 | 1029 | sl_##name##type = pt; \ |
| 1030 | 1030 | }while(0) |
| 1031 | 1031 | |
| 1032 | −#define RETURN_NUM_AS(var, type) return mk_##type(var) | |
| 1033 | − | |
| 1034 | 1032 | sl_constfn |
| 1035 | 1033 | sl_v |
| 1036 | −return_from_u64(u64int Uaccum) | |
| 1034 | +return_from_u64(u64int u) | |
| 1037 | 1035 | { |
| 1038 | − if(fits_fixnum(Uaccum)) | |
| 1039 | − return fixnum((sl_fx)Uaccum); | |
| 1040 | − if(sl_unlikely(Uaccum > (u64int)INT64_MAX)) | |
| 1041 | − RETURN_NUM_AS(Uaccum, u64); | |
| 1042 | − if(Uaccum > (u64int)UINT32_MAX) | |
| 1043 | − RETURN_NUM_AS(Uaccum, s64); | |
| 1044 | − if(Uaccum > (u64int)INT32_MAX) | |
| 1045 | − RETURN_NUM_AS(Uaccum, u32); | |
| 1046 | − RETURN_NUM_AS(Uaccum, s32); | |
| 1036 | + if(fits_fixnum(u)) | |
| 1037 | + return fixnum((sl_fx)u); | |
| 1038 | + return mk_u64(u); | |
| 1047 | 1039 | } |
| 1048 | 1040 | |
| 1049 | 1041 | sl_v |
| 1050 | −return_from_s64(s64int Saccum) | |
| 1042 | +return_from_s64(s64int s) | |
| 1051 | 1043 | { |
| 1052 | − if(fits_fixnum(Saccum)) | |
| 1053 | − return fixnum((sl_fx)Saccum); | |
| 1054 | − RETURN_NUM_AS(vtomp(Saccum, nil), bignum); | |
| 1044 | + if(fits_fixnum(s)) | |
| 1045 | + return fixnum((sl_fx)s); | |
| 1046 | + return mk_bignum(vtomp(s, nil)); | |
| 1055 | 1047 | } |
| 1056 | 1048 | |
| 1057 | 1049 | #define ACCUM_DEFAULT 0 |
| @@ -1494,12 +1486,12 @@ BUILTIN("ash", ash) · 436 unmodified lines | ||
| 1494 | 1486 | if(sl_unlikely(n < -63)) |
| 1495 | 1487 | n = -63; |
| 1496 | 1488 | u >>= -n; |
| 1497 | − return fits_fixnum(u) ? fixnum(u) : return_from_u64(u); | |
| 1489 | + return return_from_u64(u); | |
| 1498 | 1490 | }else if(n >= 64 || uash_overflow_64(u, n, &u)){ |
| 1499 | 1491 | mp = uvtomp(u, nil); |
| 1500 | 1492 | mpleft(mp, n, mp); |
| 1501 | 1493 | }else{ |
| 1502 | − return fits_fixnum(u) ? fixnum(u) : return_from_u64(u); | |
| 1494 | + return return_from_u64(u); | |
| 1503 | 1495 | } |
| 1504 | 1496 | }else if(isfixnum(a) || isubnum(a)){ |
| 1505 | 1497 | accum = isfixnum(a) ? numval(a) : ubnumval(a); |
| @@ -1513,7 +1505,7 @@ signedshift: · 7 unmodified lines | ||
| 1513 | 1505 | mp = vtomp(accum, nil); |
| 1514 | 1506 | mpleft(mp, n, mp); |
| 1515 | 1507 | }else{ |
| 1516 | − return fits_fixnum(accum) ? fixnum(accum) : return_from_s64(accum); | |
| 1508 | + return return_from_s64(accum); | |
| 1517 | 1509 | } |
| 1518 | 1510 | } |
| 1519 | 1511 | if(mp != nil){ |