aboutsummaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2024-06-23 00:39:25 -0400
committerGravatar Peter McGoron 2024-06-23 00:39:25 -0400
commit41f05b95565f182bc13b45d95abc078e7b62c366 (patch)
tree6b07c0c055811b75544540ef80a1c6086eac3ebc /main.c
parentnew expression parser with explicit stack for error handling (diff)
quality of life printing improvements
Diffstat (limited to 'main.c')
-rw-r--r--main.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/main.c b/main.c
index 759f387..3594b47 100644
--- a/main.c
+++ b/main.c
@@ -240,7 +240,6 @@ static void tokenize(FILE *input, struct token *tok)
default:
if (c == '.') {
c2 = getc(input);
- /* Flatrate does not have floating point. */
if (tonum(c2) >= 0) {
ungetc(c2, input);
tok_num(input, tok, c);
@@ -765,12 +764,24 @@ static void display(struct uns_ctr *ctr)
tmp.p = gc.record_get_ptr(ctr->p, 1);
display(&tmp);
- printf(" . ");
-
tmp.p = gc.record_get_ptr(ctr->p, 2);
- display(&tmp);
- printf(")");
+ switch (get_type(tmp.p)) {
+ case EMPTY_LIST:
+ printf(")");
+ goto remove;
+ case CELL:
+ printf(" ");
+ display(&tmp);
+ printf(")");
+ break;
+ default:
+ printf(" . ");
+ display(&tmp);
+ printf(")");
+ break;
+ }
+ remove:
uns_root_remove(&gc, &tmp);
return;
case INTEGER:
@@ -790,7 +801,7 @@ static void display(struct uns_ctr *ctr)
case SYMBOL:
tmp.p = gc.record_get_ptr(ctr->p, 1);
uns_root_add(&gc, &tmp);
- printf("'%s ", uns_string_cstring(&gc, &tmp));
+ printf("%s ", uns_string_cstring(&gc, &tmp));
uns_root_remove(&gc, &tmp);
return;
case EMPTY_LIST:
@@ -867,7 +878,7 @@ int main(void)
case EXPR_PARSE_IMPROPER_LIST_OVERFLOW:
fprintf(stderr, "too many values at end of improper list (must be exactly one)\n");
case EXPR_PARSE_BAD_IMPROPER_LIST:
- fprintf(stderr, "Bad syntax for improper list (must be (value . value))");
+ fprintf(stderr, "Bad syntax for improper list (must be (value . value))\n");
break;
case EXPR_PARSE_INTERNAL_ERROR:
fprintf(stderr, "Bug in implementation\n");