aboutsummaryrefslogtreecommitdiffstats
path: root/src/parse.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-01-13 04:07:44 +0000
committerDavid Robillard <d@drobilla.net>2011-01-13 04:07:44 +0000
commit206c01b4ba4c5e674e313d7ed7fe21c2b93f2d12 (patch)
treef9564c63a471067af3aa8f1d7fe83c26a0f0a244 /src/parse.cpp
parentceebe5e8bd7593b99d2a4c8b8fa733a85e0eae81 (diff)
downloadresp-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.cpp24
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