From 206c01b4ba4c5e674e313d7ed7fe21c2b93f2d12 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 13 Jan 2011 04:07:44 +0000 Subject: Fix error location reporting. git-svn-id: http://svn.drobilla.net/resp/trunk@406 ad02d1e2-f140-0410-9f75-f8b11f17cedd --- src/parse.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'src/parse.cpp') diff --git a/src/parse.cpp b/src/parse.cpp index 4f2c723..b61b971 100644 --- a/src/parse.cpp +++ b/src/parse.cpp @@ -55,9 +55,9 @@ eat_char(Cursor& cur, istream& in, const char character) static const AST* read_string(Cursor& cur, istream& in) { - Cursor loc = cur; - string str; - char c; + const Cursor loc = cur; + string str; + char c; eat_char(cur, in, '"'); while ((c = read_char(cur, in)) != '"') { switch (c) { @@ -89,13 +89,14 @@ read_line_comment(Cursor& cur, istream& in) static const AST* read_list(PEnv& penv, Cursor& cur, istream& in) { - List list; - + const Cursor loc = cur; + List list; eat_char(cur, in, '('); while (true) { skip_space(cur, in); if (in.peek() == ')') { eat_char(cur, in, ')'); + list.head->loc = loc; return list.head; } else { list.push_back(penv.parse(cur, in)); @@ -127,9 +128,9 @@ read_special(Cursor& cur, istream& in) static const AST* read_number(Cursor& cur, istream& in) { - Cursor loc = cur; - string str; - char c; + const Cursor loc = cur; + string str; + char c; while ((c = in.peek()) != EOF) { if (isdigit(c) || c == '.') str += read_char(cur, in); @@ -146,8 +147,9 @@ read_number(Cursor& cur, istream& in) static const AST* read_symbol(PEnv& penv, Cursor& cur, istream& in) { - string str; - char c; + const Cursor loc = cur; + string str; + char c; while ((c = in.peek()) != EOF) { if (!isspace(c) && c != ')' && c != '(' && c != EOF && c != -1) str += read_char(cur, in); @@ -155,7 +157,7 @@ read_symbol(PEnv& penv, Cursor& cur, istream& in) break; } - return penv.sym(str, cur); + return penv.sym(str, loc); } /// Read an expression from @a in -- cgit v1.2.1