| @@ -42,19 +42,19 @@ sl_read_numtok(const char *tok, sl_v *pval, int base) · 41 unmodified lines |
| 42 | 42 | s64int i64; |
| 43 | 43 | double d; |
| 44 | 44 | |
| 45 | | − if(sl_unlikely(*tok == '\0')) |
| 45 | + if(sl_unlikely(*tok == 0)) |
| 46 | 46 | return false; |
| 47 | 47 | if(!((tok[0] == '0' && tok[1] == 'x') || (base >= 15)) && strpbrk(tok, ".eEpP") != nil){ |
| 48 | 48 | d = strtod(tok, &end); |
| 49 | | − if(sl_unlikely(*end == '\0')){ |
| 49 | + if(sl_unlikely(*end == 0)){ |
| 50 | 50 | if(pval != nil) |
| 51 | 51 | *pval = mk_f64(d); |
| 52 | 52 | return true; |
| 53 | 53 | } |
| 54 | 54 | // floats can end in f or f0 |
| 55 | 55 | if(end > tok && end[0] == 'f' && |
| 56 | | − (end[1] == '\0' || |
| 57 | | − (end[1] == '0' && end[2] == '\0'))){ |
| 56 | + (end[1] == 0 || |
| 57 | + (end[1] == '0' && end[2] == 0))){ |
| 58 | 58 | if(pval != nil) |
| 59 | 59 | *pval = mk_f32((float)d); |
| 60 | 60 | return true; |
| @@ -77,8 +77,12 @@ sl_read_numtok(const char *tok, sl_v *pval, int base) · 16 unmodified lines |
| 77 | 77 | i64 = INT64_MAX; |
| 78 | 78 | else{ |
| 79 | 79 | i64 = strtoll(tok, &end, base); |
| 80 | | − if(*end != '\0') |
| 81 | | − return false; |
| 80 | + if(*end != 0){ |
| 81 | + Rune r; |
| 82 | + chartorune(&r, end); |
| 83 | + if(!isspacerune(r)) |
| 84 | + return false; |
| 85 | + } |
| 82 | 86 | } |
| 83 | 87 | if(sl_unlikely(pval == nil)) |
| 84 | 88 | return true; |
| @@ -89,9 +93,13 @@ sl_read_numtok(const char *tok, sl_v *pval, int base) · 4 unmodified lines |
| 89 | 93 | mpint *m = strtomp(tok, &end, base, nil); |
| 90 | 94 | if(m == nil) |
| 91 | 95 | return false; |
| 92 | | − if(end != tok+strlen(tok)){ |
| 93 | | − mpfree(m); |
| 94 | | − return false; |
| 96 | + if(*end != 0){ |
| 97 | + Rune r; |
| 98 | + chartorune(&r, end); |
| 99 | + if(!isspacerune(r)){ |
| 100 | + mpfree(m); |
| 101 | + return false; |
| 102 | + } |
| 95 | 103 | } |
| 96 | 104 | if(mpsignif(m) >= FIXNUM_BITS){ |
| 97 | 105 | *pval = mk_bignum(m); |
| @@ -207,7 +215,7 @@ read_token(Rune c, bool digits) · 109 unmodified lines |
| 207 | 215 | if(sl_unlikely(nc == 0)) |
| 208 | 216 | cthrow(parse_error("unexpected char: #x%"PRIx32, c), c); |
| 209 | 217 | terminate: |
| 210 | | − RS->buf[i++] = '\0'; |
| 218 | + RS->buf[i++] = 0; |
| 211 | 219 | return issym; |
| 212 | 220 | } |
| 213 | 221 | |
| @@ -357,7 +365,7 @@ again: · 143 unmodified lines |
| 357 | 365 | }else |
| 358 | 366 | cthrow(parse_error( "invalid label: #%s%c", RS->buf, ch), dummy); |
| 359 | 367 | x = strtoll(RS->buf, &end, 10); |
| 360 | | − if(*end != '\0') |
| 368 | + if(*end != 0) |
| 361 | 369 | cthrow(parse_error("invalid label: #%s%c", RS->buf, ch), dummy); |
| 362 | 370 | RS->tokval = fixnum(x); |
| 363 | 371 | }else if(sl_unlikely(c == '!')){ |
| @@ -410,7 +418,7 @@ again: · 46 unmodified lines |
| 410 | 418 | RS->tokval = mk_sym(RS->buf, true); |
| 411 | 419 | }else{ |
| 412 | 420 | x = strtol(RS->buf, &end, 10); |
| 413 | | − if(*end != '\0' || RS->buf[0] == '\0') |
| 421 | + if(*end != 0 || RS->buf[0] == 0) |
| 414 | 422 | cthrow(parse_error("invalid gensym label: #%s", RS->buf), dummy); |
| 415 | 423 | RS->tokval = fixnum(x); |
| 416 | 424 | } |
| @@ -636,7 +644,7 @@ read_str(int dummy) · 219 unmodified lines |
| 636 | 644 | break; |
| 637 | 645 | ios_getc(IO); |
| 638 | 646 | } |
| 639 | | − eseq[j] = '\0'; |
| 647 | + eseq[j] = 0; |
| 640 | 648 | r = strtol(eseq, nil, 8); |
| 641 | 649 | // \DDD and \xXX read bytes, not runes |
| 642 | 650 | buf[i++] = r; |
| @@ -648,7 +656,7 @@ read_str(int dummy) · 5 unmodified lines |
| 648 | 656 | eseq[j++] = c; |
| 649 | 657 | ios_getc(IO); |
| 650 | 658 | } |
| 651 | | − eseq[j] = '\0'; |
| 659 | + eseq[j] = 0; |
| 652 | 660 | if(j) |
| 653 | 661 | r = strtol(eseq, nil, 16); |
| 654 | 662 | if(!j || r > Runemax){ |