refine reader error message for missing closing paren
svn: r11104
This commit is contained in:
parent
2feab45ea7
commit
ada4b6f9d0
|
@ -149,7 +149,7 @@ static int use_perma_cache = 1;
|
||||||
|
|
||||||
static Scheme_Object *read_list(Scheme_Object *port, Scheme_Object *stxsrc,
|
static Scheme_Object *read_list(Scheme_Object *port, Scheme_Object *stxsrc,
|
||||||
long line, long col, long pos,
|
long line, long col, long pos,
|
||||||
int closer,
|
int opener, int closer,
|
||||||
int shape, int use_stack,
|
int shape, int use_stack,
|
||||||
Scheme_Hash_Table **ht,
|
Scheme_Hash_Table **ht,
|
||||||
Scheme_Object *indentation,
|
Scheme_Object *indentation,
|
||||||
|
@ -172,7 +172,7 @@ static Scheme_Object *read_quote(char *who, Scheme_Object *quote_symbol, int len
|
||||||
ReadParams *params);
|
ReadParams *params);
|
||||||
static Scheme_Object *read_vector(Scheme_Object *port, Scheme_Object *stxsrc,
|
static Scheme_Object *read_vector(Scheme_Object *port, Scheme_Object *stxsrc,
|
||||||
long line, long col, long pos,
|
long line, long col, long pos,
|
||||||
char closer,
|
int opener, char closer,
|
||||||
long reqLen, const mzchar *reqBuffer,
|
long reqLen, const mzchar *reqBuffer,
|
||||||
Scheme_Hash_Table **ht,
|
Scheme_Hash_Table **ht,
|
||||||
Scheme_Object *indentation,
|
Scheme_Object *indentation,
|
||||||
|
@ -211,7 +211,7 @@ static Scheme_Object *read_box(Scheme_Object *port, Scheme_Object *stxsrc,
|
||||||
ReadParams *params);
|
ReadParams *params);
|
||||||
static Scheme_Object *read_hash(Scheme_Object *port, Scheme_Object *stxsrc,
|
static Scheme_Object *read_hash(Scheme_Object *port, Scheme_Object *stxsrc,
|
||||||
long line, long col, long pos,
|
long line, long col, long pos,
|
||||||
char closer, int eq,
|
int opener, char closer, int eq,
|
||||||
Scheme_Hash_Table **ht,
|
Scheme_Hash_Table **ht,
|
||||||
Scheme_Object *indentation,
|
Scheme_Object *indentation,
|
||||||
ReadParams *params);
|
ReadParams *params);
|
||||||
|
@ -981,19 +981,19 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table *
|
||||||
unexpected_closer(ch, port, stxsrc, line, col, pos, indentation, params);
|
unexpected_closer(ch, port, stxsrc, line, col, pos, indentation, params);
|
||||||
return NULL;
|
return NULL;
|
||||||
case '(':
|
case '(':
|
||||||
return read_list(port, stxsrc, line, col, pos, ')', mz_shape_cons, 0, ht, indentation, params);
|
return read_list(port, stxsrc, line, col, pos, ch, ')', mz_shape_cons, 0, ht, indentation, params);
|
||||||
case '[':
|
case '[':
|
||||||
if (!params->square_brackets_are_parens) {
|
if (!params->square_brackets_are_parens) {
|
||||||
scheme_read_err(port, stxsrc, line, col, pos, 1, 0, indentation, "read: illegal use of open square bracket");
|
scheme_read_err(port, stxsrc, line, col, pos, 1, 0, indentation, "read: illegal use of open square bracket");
|
||||||
return NULL;
|
return NULL;
|
||||||
} else
|
} else
|
||||||
return read_list(port, stxsrc, line, col, pos, ']', mz_shape_cons, 0, ht, indentation, params);
|
return read_list(port, stxsrc, line, col, pos, ch, ']', mz_shape_cons, 0, ht, indentation, params);
|
||||||
case '{':
|
case '{':
|
||||||
if (!params->curly_braces_are_parens) {
|
if (!params->curly_braces_are_parens) {
|
||||||
scheme_read_err(port, stxsrc, line, col, pos, 1, 0, indentation, "read: illegal use of open curly brace");
|
scheme_read_err(port, stxsrc, line, col, pos, 1, 0, indentation, "read: illegal use of open curly brace");
|
||||||
return NULL;
|
return NULL;
|
||||||
} else
|
} else
|
||||||
return read_list(port, stxsrc, line, col, pos, '}', mz_shape_cons, 0, ht, indentation, params);
|
return read_list(port, stxsrc, line, col, pos, ch, '}', mz_shape_cons, 0, ht, indentation, params);
|
||||||
case '|':
|
case '|':
|
||||||
special_value = read_symbol(ch, 1, port, stxsrc, line, col, pos, ht, indentation, params, table);
|
special_value = read_symbol(ch, 1, port, stxsrc, line, col, pos, ht, indentation, params, table);
|
||||||
break;
|
break;
|
||||||
|
@ -1133,7 +1133,7 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table *
|
||||||
break;
|
break;
|
||||||
case '(':
|
case '(':
|
||||||
if (!params->honu_mode) {
|
if (!params->honu_mode) {
|
||||||
return read_vector(port, stxsrc, line, col, pos, ')', -1, NULL, ht, indentation, params);
|
return read_vector(port, stxsrc, line, col, pos, ch, ')', -1, NULL, ht, indentation, params);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '[':
|
case '[':
|
||||||
|
@ -1142,7 +1142,7 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table *
|
||||||
scheme_read_err(port, stxsrc, line, col, pos, 2, 0, indentation, "read: bad syntax `#['");
|
scheme_read_err(port, stxsrc, line, col, pos, 2, 0, indentation, "read: bad syntax `#['");
|
||||||
return NULL;
|
return NULL;
|
||||||
} else
|
} else
|
||||||
return read_vector(port, stxsrc, line, col, pos, ']', -1, NULL, ht, indentation, params);
|
return read_vector(port, stxsrc, line, col, pos, ch, ']', -1, NULL, ht, indentation, params);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '{':
|
case '{':
|
||||||
|
@ -1151,7 +1151,7 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table *
|
||||||
scheme_read_err(port, stxsrc, line, col, pos, 2, 0, indentation, "read: bad syntax `#{'");
|
scheme_read_err(port, stxsrc, line, col, pos, 2, 0, indentation, "read: bad syntax `#{'");
|
||||||
return NULL;
|
return NULL;
|
||||||
} else
|
} else
|
||||||
return read_vector(port, stxsrc, line, col, pos, '}', -1, NULL, ht, indentation, params);
|
return read_vector(port, stxsrc, line, col, pos, ch, '}', -1, NULL, ht, indentation, params);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '\\':
|
case '\\':
|
||||||
|
@ -1241,7 +1241,7 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table *
|
||||||
else if (effective_ch == '{')
|
else if (effective_ch == '{')
|
||||||
ch = '}';
|
ch = '}';
|
||||||
|
|
||||||
v = read_vector(port, stxsrc, line, col, pos, ch, -1, NULL, ht, indentation, params);
|
v = read_vector(port, stxsrc, line, col, pos, orig_ch, ch, -1, NULL, ht, indentation, params);
|
||||||
if (stxsrc)
|
if (stxsrc)
|
||||||
v = SCHEME_STX_VAL(v);
|
v = SCHEME_STX_VAL(v);
|
||||||
|
|
||||||
|
@ -1626,11 +1626,11 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table *
|
||||||
effective_ch = readtable_effective_char(table, ch);
|
effective_ch = readtable_effective_char(table, ch);
|
||||||
|
|
||||||
if (effective_ch == '(')
|
if (effective_ch == '(')
|
||||||
return read_hash(port, stxsrc, line, col, pos, ')', (scanpos == 4), ht, indentation, params);
|
return read_hash(port, stxsrc, line, col, pos, ch, ')', (scanpos == 4), ht, indentation, params);
|
||||||
if (effective_ch == '[' && params->square_brackets_are_parens)
|
if (effective_ch == '[' && params->square_brackets_are_parens)
|
||||||
return read_hash(port, stxsrc, line, col, pos, ']', (scanpos == 4), ht, indentation, params);
|
return read_hash(port, stxsrc, line, col, pos, ch, ']', (scanpos == 4), ht, indentation, params);
|
||||||
if (effective_ch == '{' && params->curly_braces_are_parens)
|
if (effective_ch == '{' && params->curly_braces_are_parens)
|
||||||
return read_hash(port, stxsrc, line, col, pos, '}', (scanpos == 4), ht, indentation, params);
|
return read_hash(port, stxsrc, line, col, pos, ch, '}', (scanpos == 4), ht, indentation, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Report an error. So far, we read 'ha', then scanpos chars of str, then ch. */
|
/* Report an error. So far, we read 'ha', then scanpos chars of str, then ch. */
|
||||||
|
@ -1778,11 +1778,11 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table *
|
||||||
effective_ch = readtable_effective_char(table, ch);
|
effective_ch = readtable_effective_char(table, ch);
|
||||||
|
|
||||||
if (effective_ch == '(')
|
if (effective_ch == '(')
|
||||||
return read_vector(port, stxsrc, line, col, pos, ')', vector_length, vecbuf, ht, indentation, params);
|
return read_vector(port, stxsrc, line, col, pos, ch, ')', vector_length, vecbuf, ht, indentation, params);
|
||||||
if (effective_ch == '[' && params->square_brackets_are_parens)
|
if (effective_ch == '[' && params->square_brackets_are_parens)
|
||||||
return read_vector(port, stxsrc, line, col, pos, ']', vector_length, vecbuf, ht, indentation, params);
|
return read_vector(port, stxsrc, line, col, pos, ch, ']', vector_length, vecbuf, ht, indentation, params);
|
||||||
if (effective_ch == '{' && params->curly_braces_are_parens)
|
if (effective_ch == '{' && params->curly_braces_are_parens)
|
||||||
return read_vector(port, stxsrc, line, col, pos, '}', vector_length, vecbuf, ht, indentation, params);
|
return read_vector(port, stxsrc, line, col, pos, ch, '}', vector_length, vecbuf, ht, indentation, params);
|
||||||
|
|
||||||
if (ch == '#' && (vector_length != -1)) {
|
if (ch == '#' && (vector_length != -1)) {
|
||||||
/* Not a vector after all: a graph reference */
|
/* Not a vector after all: a graph reference */
|
||||||
|
@ -2591,7 +2591,7 @@ static Scheme_Object *combine_angle_brackets(Scheme_Object *list);
|
||||||
static Scheme_Object *
|
static Scheme_Object *
|
||||||
read_list(Scheme_Object *port,
|
read_list(Scheme_Object *port,
|
||||||
Scheme_Object *stxsrc, long line, long col, long pos,
|
Scheme_Object *stxsrc, long line, long col, long pos,
|
||||||
int closer, int shape, int use_stack,
|
int opener, int closer, int shape, int use_stack,
|
||||||
Scheme_Hash_Table **ht,
|
Scheme_Hash_Table **ht,
|
||||||
Scheme_Object *indentation,
|
Scheme_Object *indentation,
|
||||||
ReadParams *params)
|
ReadParams *params)
|
||||||
|
@ -2646,7 +2646,10 @@ read_list(Scheme_Object *port,
|
||||||
}
|
}
|
||||||
|
|
||||||
scheme_read_err(port, stxsrc, startline, startcol, start, MINSPAN(port, start, init_span), EOF, indentation,
|
scheme_read_err(port, stxsrc, startline, startcol, start, MINSPAN(port, start, init_span), EOF, indentation,
|
||||||
"read: expected a %s%s", closer_name(params, closer), suggestion);
|
"read: expected a %s to close `%c'%s",
|
||||||
|
closer_name(params, closer),
|
||||||
|
opener,
|
||||||
|
suggestion);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2727,7 +2730,7 @@ read_list(Scheme_Object *port,
|
||||||
long xl, xc, xp;
|
long xl, xc, xp;
|
||||||
scheme_tell_all(port, &xl, &xc, &xp);
|
scheme_tell_all(port, &xl, &xc, &xp);
|
||||||
car = read_list(port, stxsrc, xl, xc, xp,
|
car = read_list(port, stxsrc, xl, xc, xp,
|
||||||
((effective_ch == '(') ? ')' : ((effective_ch == '[') ? ']' : '}')),
|
ch, ((effective_ch == '(') ? ')' : ((effective_ch == '[') ? ']' : '}')),
|
||||||
mz_shape_hash_elem, use_stack, ht, indentation, params);
|
mz_shape_hash_elem, use_stack, ht, indentation, params);
|
||||||
/* car is guaranteed to have an appropriate shape */
|
/* car is guaranteed to have an appropriate shape */
|
||||||
}
|
}
|
||||||
|
@ -3336,7 +3339,7 @@ char *scheme_extract_indentation_suggestions(Scheme_Object *indentation)
|
||||||
static Scheme_Object *
|
static Scheme_Object *
|
||||||
read_vector (Scheme_Object *port,
|
read_vector (Scheme_Object *port,
|
||||||
Scheme_Object *stxsrc, long line, long col, long pos,
|
Scheme_Object *stxsrc, long line, long col, long pos,
|
||||||
char closer,
|
int opener, char closer,
|
||||||
long requestLength, const mzchar *reqBuffer,
|
long requestLength, const mzchar *reqBuffer,
|
||||||
Scheme_Hash_Table **ht,
|
Scheme_Hash_Table **ht,
|
||||||
Scheme_Object *indentation, ReadParams *params)
|
Scheme_Object *indentation, ReadParams *params)
|
||||||
|
@ -3346,7 +3349,7 @@ read_vector (Scheme_Object *port,
|
||||||
Scheme_Object *lresult, *obj, *vec, **els;
|
Scheme_Object *lresult, *obj, *vec, **els;
|
||||||
int len, i;
|
int len, i;
|
||||||
|
|
||||||
lresult = read_list(port, stxsrc, line, col, pos, closer, mz_shape_vec, 1, ht, indentation, params);
|
lresult = read_list(port, stxsrc, line, col, pos, opener, closer, mz_shape_vec, 1, ht, indentation, params);
|
||||||
|
|
||||||
if (requestLength == -2) {
|
if (requestLength == -2) {
|
||||||
scheme_raise_out_of_memory("read", "making vector of size %5", reqBuffer);
|
scheme_raise_out_of_memory("read", "making vector of size %5", reqBuffer);
|
||||||
|
@ -4027,14 +4030,14 @@ static Scheme_Object *read_box(Scheme_Object *port,
|
||||||
/* "(" has been read */
|
/* "(" has been read */
|
||||||
static Scheme_Object *read_hash(Scheme_Object *port, Scheme_Object *stxsrc,
|
static Scheme_Object *read_hash(Scheme_Object *port, Scheme_Object *stxsrc,
|
||||||
long line, long col, long pos,
|
long line, long col, long pos,
|
||||||
char closer, int eq,
|
int opener, char closer, int eq,
|
||||||
Scheme_Hash_Table **ht,
|
Scheme_Hash_Table **ht,
|
||||||
Scheme_Object *indentation, ReadParams *params)
|
Scheme_Object *indentation, ReadParams *params)
|
||||||
{
|
{
|
||||||
Scheme_Object *l;
|
Scheme_Object *l;
|
||||||
|
|
||||||
/* using mz_shape_hash_list ensures that l is a list of pairs */
|
/* using mz_shape_hash_list ensures that l is a list of pairs */
|
||||||
l = read_list(port, stxsrc, line, col, pos, closer, mz_shape_hash_list, 0, ht, indentation, params);
|
l = read_list(port, stxsrc, line, col, pos, opener, closer, mz_shape_hash_list, 0, ht, indentation, params);
|
||||||
|
|
||||||
if (stxsrc) {
|
if (stxsrc) {
|
||||||
Scheme_Object *key, *val;
|
Scheme_Object *key, *val;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user