Unified · Split
| @@ -39,7 +39,6 @@ eval · 38 unmodified lines | ||
| 39 | 39 | if |
| 40 | 40 | lambda |
| 41 | 41 | list |
| 42 | −mac | |
| 43 | 42 | newline |
| 44 | 43 | not |
| 45 | 44 | or |
| @@ -62,6 +61,15 @@ string? · 16 unmodified lines | ||
| 62 | 61 | |
| 63 | 62 | `= < > <= >= + - * /` |
| 64 | 63 | |
| 64 | +## Things that need work/testing or not implemented at all | |
| 65 | + | |
| 66 | +``` | |
| 67 | +let | |
| 68 | +mac | |
| 69 | +setcar | |
| 70 | +setcdr | |
| 71 | +``` | |
| 72 | + | |
| 65 | 73 | ### Math (optional, see `aa_math.*`) |
| 66 | 74 | |
| 67 | 75 | ``` |
| @@ -308,15 +308,12 @@ equal(aaObject *a, aaObject *b) · 307 unmodified lines | ||
| 308 | 308 | return a == b; |
| 309 | 309 | } |
| 310 | 310 | |
| 311 | − if(TYPE(a) == AA_TPAIR){ | |
| 312 | − for(; !ISNULL(a); a = CDR(a), b = CDR(b)){ | |
| 313 | − if(!equal(CAR(a), CAR(b))) | |
| 314 | − return 0; | |
| 315 | − } | |
| 316 | − return a == b; | |
| 311 | + for(; TYPE(a) == AA_TPAIR && TYPE(b) == AA_TPAIR && !ISNULL(a) && !ISNULL(b) && a != b; a = CDR(a), b = CDR(b)){ | |
| 312 | + if(!equal(CAR(a), CAR(b))) | |
| 313 | + return 0; | |
| 317 | 314 | } |
| 318 | 315 | |
| 319 | − return 0; | |
| 316 | + return a == b; | |
| 320 | 317 | } |
| 321 | 318 | |
| 322 | 319 | static int |
| @@ -512,15 +509,15 @@ objfmt(Fmt *f) · 189 unmodified lines | ||
| 512 | 509 | |
| 513 | 510 | case AA_TPAIR: |
| 514 | 511 | fmtrune(f, '('); |
| 515 | − for(;;){ | |
| 512 | + do{ | |
| 516 | 513 | fmtprint(f, "%§", CAR(obj)); |
| 517 | 514 | obj = CDR(obj); |
| 518 | 515 | if(ISNULL(obj)) |
| 519 | 516 | break; |
| 520 | 517 | fmtrune(f, ' '); |
| 521 | − } | |
| 518 | + }while(TYPE(obj) == AA_TPAIR); | |
| 522 | 519 | if(!ISNULL(obj)) |
| 523 | − fmtprint(f, " . %§", obj); | |
| 520 | + fmtprint(f, ". %§", obj); | |
| 524 | 521 | fmtrune(f, ')'); |
| 525 | 522 | break; |
| 526 | 523 | |
| @@ -853,6 +850,7 @@ eval(aaContext *ctx, aaObject *obj, aaObject *env, aaObject **newenv) · 326 unmodified lines | ||
| 853 | 850 | case P_CONS: |
| 854 | 851 | va = evalarg(); |
| 855 | 852 | res = aa_cons(ctx, va, evalarg()); |
| 853 | + noargs(); | |
| 856 | 854 | break; |
| 857 | 855 | |
| 858 | 856 | case P_CAR: |
| @@ -57,3 +57,8 @@ · 56 unmodified lines | ||
| 57 | 57 | (test '(not "lol") #f) |
| 58 | 58 | (test '(not #t) #f) |
| 59 | 59 | (test '(not #f) #t) |
| 60 | + | |
| 61 | +(test '(car (cons 1 2)) 1) | |
| 62 | +(test '(cdr (cons 1 2)) 2) | |
| 63 | +(test '(car (cons 3 (list 1 2))) 3) | |
| 64 | +(test '(cdr (cons 3 (list 1 2))) (list 1 2)) | |