History

cvalues: simplify/clean up return_from_* and its calls

Sigrid Solveig Haflínudóttir committed 1 month ago

Commit ce486cd1 parent 14310041 file · +11 −19Browse files

Unified · Split

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

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t