From 00e10f3536a46ae2c663fd0cccf23c64c62bcb0d Mon Sep 17 00:00:00 2001 From: FelixBrendel Date: Wed, 21 Nov 2018 13:54:56 +0100 Subject: [PATCH] stdin works on an expressin-base and not line-base now --- src/helpers.c | 12 ++++++++++-- src/parse.c | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/helpers.c b/src/helpers.c index e2fd562..ee25f47 100644 --- a/src/helpers.c +++ b/src/helpers.c @@ -195,6 +195,8 @@ char* read_line() { size_t lenmax = 100, len = lenmax; int c; + int nesting = 0; + if(line == NULL) return NULL; @@ -215,8 +217,14 @@ char* read_line() { linep = linen; } - if((*line++ = (char)c) == '\n') - break; + *line++; + if((*line = (char)c) == '(') + ++nesting; + else if((*line = (char)c) == ')') + --nesting; + else if((*line = (char)c) == '\n') + if (nesting == 0) + break; } (*line)--; // we dont want the \n actually *line = '\0'; diff --git a/src/parse.c b/src/parse.c index 2688e55..8fc01d5 100644 --- a/src/parse.c +++ b/src/parse.c @@ -303,6 +303,8 @@ Ast_Node* parse_single_expression(char* text) { int index_in_text = 0; Ast_Node* result; eat_until_code(text, &index_in_text); + if (text[(index_in_text)] == '\0') + return create_ast_node_nil(); if (text[(index_in_text)] == '(' || text[(index_in_text)] == '\'' ) try { result = parse_expression(text, &index_in_text);