mirror of https://github.com/python/cpython.git
* Parser/tokenizer.c (tok_nextc): count line numbers when parsing
strings
This commit is contained in:
parent
df1c4ee503
commit
1a817c0911
|
@ -122,8 +122,7 @@ tok_setups(str)
|
||||||
struct tok_state *tok = tok_new();
|
struct tok_state *tok = tok_new();
|
||||||
if (tok == NULL)
|
if (tok == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
tok->buf = tok->cur = str;
|
tok->buf = tok->cur = tok->end = tok->inp = str;
|
||||||
tok->end = tok->inp = strchr(str, '\0');
|
|
||||||
return tok;
|
return tok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,13 +169,27 @@ tok_nextc(tok)
|
||||||
register struct tok_state *tok;
|
register struct tok_state *tok;
|
||||||
{
|
{
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (tok->cur != tok->inp)
|
if (tok->cur != tok->inp) {
|
||||||
return *tok->cur++; /* Fast path */
|
return *tok->cur++; /* Fast path */
|
||||||
|
}
|
||||||
if (tok->done != E_OK)
|
if (tok->done != E_OK)
|
||||||
return EOF;
|
return EOF;
|
||||||
if (tok->fp == NULL) {
|
if (tok->fp == NULL) {
|
||||||
tok->done = E_EOF;
|
char *end = strchr(tok->inp, '\n');
|
||||||
return EOF;
|
if (end != NULL)
|
||||||
|
end++;
|
||||||
|
else {
|
||||||
|
end = strchr(tok->inp, '\0');
|
||||||
|
if (end == tok->inp) {
|
||||||
|
tok->done = E_EOF;
|
||||||
|
return EOF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (tok->start == NULL)
|
||||||
|
tok->buf = tok->cur;
|
||||||
|
tok->lineno++;
|
||||||
|
tok->inp = end;
|
||||||
|
return *tok->cur++;
|
||||||
}
|
}
|
||||||
if (tok->prompt != NULL) {
|
if (tok->prompt != NULL) {
|
||||||
char *new = my_readline(tok->prompt);
|
char *new = my_readline(tok->prompt);
|
||||||
|
@ -478,9 +491,10 @@ tok_get(tok, p_start, p_end)
|
||||||
This is also recognized by vi, when it occurs near the
|
This is also recognized by vi, when it occurs near the
|
||||||
beginning or end of the file. (Will vi never die...?)
|
beginning or end of the file. (Will vi never die...?)
|
||||||
For Python it must be at the beginning of the file! */
|
For Python it must be at the beginning of the file! */
|
||||||
|
/* XXX The real vi syntax is actually different :-( */
|
||||||
|
/* XXX Should recognize Emacs syntax, too */
|
||||||
int x;
|
int x;
|
||||||
/* XXX The cast to (unsigned char *) is needed by THINK C 3.0 */
|
if (sscanf(tok->cur,
|
||||||
if (sscanf(/*(unsigned char *)*/tok->cur,
|
|
||||||
" vi:set tabsize=%d:", &x) == 1 &&
|
" vi:set tabsize=%d:", &x) == 1 &&
|
||||||
x >= 1 && x <= 40) {
|
x >= 1 && x <= 40) {
|
||||||
/* fprintf(stderr, "# vi:set tabsize=%d:\n", x); */
|
/* fprintf(stderr, "# vi:set tabsize=%d:\n", x); */
|
||||||
|
|
Loading…
Reference in New Issue