diff options
author | David Robillard <d@drobilla.net> | 2011-01-13 04:07:44 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-01-13 04:07:44 +0000 |
commit | 206c01b4ba4c5e674e313d7ed7fe21c2b93f2d12 (patch) | |
tree | f9564c63a471067af3aa8f1d7fe83c26a0f0a244 /src/parse.cpp | |
parent | ceebe5e8bd7593b99d2a4c8b8fa733a85e0eae81 (diff) | |
download | resp-206c01b4ba4c5e674e313d7ed7fe21c2b93f2d12.tar.gz resp-206c01b4ba4c5e674e313d7ed7fe21c2b93f2d12.tar.bz2 resp-206c01b4ba4c5e674e313d7ed7fe21c2b93f2d12.zip |
Fix error location reporting.
git-svn-id: http://svn.drobilla.net/resp/trunk@406 ad02d1e2-f140-0410-9f75-f8b11f17cedd
Diffstat (limited to 'src/parse.cpp')
-rw-r--r-- | src/parse.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
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 |