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);