History

remove aa_readfp and simplify reading

Sigrid Haflínudóttir committed 6 years ago

Commit a5cbab71 parent 2362b063 files · +22 −39Browse files

Unified · Split

3 files
  1. aa.c +20 −36
  2. aa.h +1 −2
  3. repl.c +1 −1
aa.c+20−36
@@ -589,7 +589,7 @@ aa_set(aaContext *ctx, aaObject *sym, aaObject *v) · 588 unmodified lines
589589 }
590590
591591 static aaObject *
592−read_(aaContext *ctx, aaReadFn fn, void *udata)
592+read_(aaContext *ctx, Biobuf *fp)
593593 {
594594 const char *delimiter = " \n\t\r();";
595595 aaObject *v, *res, **tail;
@@ -598,21 +598,21 @@ read_(aaContext *ctx, aaReadFn fn, void *udata) · 2 unmodified lines
598598 char buf[64], *p;
599599
600600 /* get next character */
601− chr = ctx->nextchr ? ctx->nextchr : fn(ctx, udata);
601+ chr = ctx->nextchr ? ctx->nextchr : Bgetc(fp);
602602 ctx->nextchr = '\0';
603603
604604 /* skip whitespace */
605− while(chr && strchr(" \n\t\r", chr))
606− chr = fn(ctx, udata);
605+ while(chr > 0 && strchr(" \n\t\r", chr))
606+ chr = Bgetc(fp);
607607
608− switch(chr){
609− case 0:
608+ if(chr <= 0)
610609 return nil;
611610
611+ switch(chr){
612612 case ';':
613− while(chr && chr != '\n')
614− chr = fn(ctx, udata);
615− return read_(ctx, fn, udata);
613+ while(chr > 0 && chr != '\n')
614+ chr = Bgetc(fp);
615+ return read_(ctx, fp);
616616
617617 case ')':
618618 return &rparen;
@@ -622,12 +622,12 @@ read_(aaContext *ctx, aaReadFn fn, void *udata) · 3 unmodified lines
622622 tail = &res;
623623 gc = aa_savegc(ctx);
624624 aa_pushgc(ctx, res); /* to cause error on too-deep nesting */
625− while((v = read_(ctx, fn, udata)) != &rparen){
625+ while((v = read_(ctx, fp)) != &rparen){
626626 if(v == nil)
627627 aa_error(ctx, "unclosed list");
628628 if(TYPE(v) == AA_TSYMBOL && streq(CAR(CDR(v)), ".")){
629629 /* dotted pair */
630− *tail = aa_read(ctx, fn, udata);
630+ *tail = aa_read(ctx, fp);
631631 }else{
632632 /* proper pair */
633633 *tail = aa_cons(ctx, v, &Null);
@@ -639,7 +639,7 @@ read_(aaContext *ctx, aaReadFn fn, void *udata) · 5 unmodified lines
639639 return res;
640640
641641 case '\'':
642− v = aa_read(ctx, fn, udata);
642+ v = aa_read(ctx, fp);
643643 if(!v)
644644 aa_error(ctx, "stray '''");
645645 return aa_cons(ctx, aa_symbol(ctx, "quote"), aa_cons(ctx, v, &Null));
@@ -647,11 +647,11 @@ read_(aaContext *ctx, aaReadFn fn, void *udata) · 1 unmodified line
647647 case '"':
648648 res = buildstring(ctx, nil, '\0');
649649 v = res;
650− for(chr = fn(ctx, udata); chr != '"'; chr = fn(ctx, udata)){
651− if(chr == 0)
650+ for(chr = Bgetc(fp); chr != '"'; chr = Bgetc(fp)){
651+ if(chr <= 0)
652652 aa_error(ctx, "unclosed string");
653653 if(chr == '\\'){
654− chr = fn(ctx, udata);
654+ chr = Bgetc(fp);
655655 if(strchr("nrt", chr))
656656 chr = strchr("n\nr\rt\t", chr)[1];
657657 }
@@ -665,8 +665,8 @@ read_(aaContext *ctx, aaReadFn fn, void *udata) · 7 unmodified lines
665665 if(p == buf + sizeof(buf) - 1)
666666 aa_error(ctx, "symbol too long");
667667 *p++ = chr;
668− chr = fn(ctx, udata);
669− }while(chr && !strchr(delimiter, chr));
668+ chr = Bgetc(fp);
669+ }while(chr > 0 && !strchr(delimiter, chr));
670670 *p = '\0';
671671 ctx->nextchr = chr;
672672 n.r = strtod(buf, &p); /* try to read as number */
@@ -677,9 +677,9 @@ read_(aaContext *ctx, aaReadFn fn, void *udata) · 4 unmodified lines
677677 }
678678
679679 aaObject *
680−aa_read(aaContext *ctx, aaReadFn fn, void *udata)
680+aa_read(aaContext *ctx, Biobuf *fp)
681681 {
682− aaObject *obj = read_(ctx, fn, udata);
682+ aaObject *obj = read_(ctx, fp);
683683
684684 if(obj == &rparen)
685685 aa_error(ctx, "stray ')'");
@@ -687,22 +687,6 @@ aa_read(aaContext *ctx, aaReadFn fn, void *udata) · 1 unmodified line
687687 return obj;
688688 }
689689
690−static char
691−readbio(aaContext *ctx, void *udata)
692−{
693− int chr;
694−
695− USED(ctx);
696−
697− return (chr = Bgetc(udata)) < 0 ? 0 : chr;
698−}
699−
700−aaObject *
701−aa_readfp(aaContext *ctx, Biobuf *fp)
702−{
703− return aa_read(ctx, readbio, fp);
704−}
705−
706690 static aaObject *
707691 evallist(aaContext *ctx, aaObject *lst, aaObject *env)
708692 {
@@ -1069,7 +1053,7 @@ aa_open(void *ptr, int size, int flags) · 360 unmodified lines
10691053 Binits(&b, -1, OREAD, (uchar*)prelude, i);
10701054 b.icount = -i;
10711055 Biofn(&b, eof);
1072− while((v = aa_readfp(ctx, &b)) != nil){
1056+ while((v = aa_read(ctx, &b)) != nil){
10731057 aa_eval(ctx, v);
10741058 aa_restoregc(ctx, save);
10751059 }
aa.h+1−2
@@ -99,6 +99,5 @@ aaObject *aa_cdr(aaContext *ctx, aaObject *obj); · 98 unmodified lines
9999 aaNumber aa_tonumber(aaContext *ctx, aaObject *obj);
100100 void *aa_toptr(aaContext *ctx, aaObject *obj);
101101 void aa_set(aaContext *ctx, aaObject *sym, aaObject *v);
102−aaObject *aa_read(aaContext *ctx, aaReadFn fn, void *udata);
103−aaObject *aa_readfp(aaContext *ctx, Biobuf *fp);
102+aaObject *aa_read(aaContext *ctx, Biobuf *fp);
104103 aaObject *aa_eval(aaContext *ctx, aaObject *obj);
repl.c+1−1
@@ -63,7 +63,7 @@ main(int argc, char **argv) · 62 unmodified lines
6363 Bflush(ctx->fd[2]);
6464 Bflush(ctx->fd[1]);
6565 }
66− if((obj = aa_readfp(ctx, fp)) == nil)
66+ if((obj = aa_read(ctx, fp)) == nil)
6767 break;
6868 obj = aa_eval(ctx, obj);
6969 if(fp->fid == 0)

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