diff options
| -rw-r--r-- | ast.c | 2 | ||||
| -rw-r--r-- | parse.c | 11 |
2 files changed, 11 insertions, 2 deletions
@@ -97,7 +97,7 @@ CORD ast_to_xml(ast_t *ast) T(Unknown, "<Unknown>") T(Nil, "<Nil>%r</Nil>", type_ast_to_xml(data.type)) T(Bool, "<Bool value=\"%s\" />", data.b ? "yes" : "no") - T(Var, "%s", data.name) + T(Var, "<Var>%s</Var>", data.name) T(Int, "<Int bits=\"%ld\">%ld</Int>", data.bits, data.i) T(Num, "<Num bits=\"%ld\">%g</Num>", data.bits, data.n) T(TextLiteral, "%r", xml_escape(data.cord)) @@ -1619,7 +1619,16 @@ PARSER(parse_block) { break; } statements = new(ast_list_t, .ast=stmt, .next=statements); - whitespace(&pos); // TODO: check for newline + whitespace(&pos); + + // Guard against having two valid statements on the same line, separated by spaces (but no newlines): + if (!memchr(stmt->end, '\n', (size_t)(pos - stmt->end))) { + if (*pos) + parser_err(ctx, pos, strchrnul(pos, '\n'), "I don't know how to parse the rest of this line"); + pos = stmt->end; + break; + } + if (get_indent(ctx, pos) != block_indent) { pos = stmt->end; // backtrack break; |
