speed up parse
This commit is contained in:
parent
369fd2451b
commit
06e2fceedf
1 changed files with 5 additions and 5 deletions
10
toml.c
10
toml.c
|
@ -1680,9 +1680,9 @@ static int scan_string(context_t* ctx, char* p, int lineno, int dotisspecial)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('\"' == *p) {
|
if ('\"' == *p) {
|
||||||
char* tsq = strstr(p, "\'\'\'");
|
|
||||||
int hexreq = 0; /* #hex required */
|
int hexreq = 0; /* #hex required */
|
||||||
int escape = 0;
|
int escape = 0;
|
||||||
|
int sqcnt = 0; /* count single-quote */
|
||||||
for (p++; *p; p++) {
|
for (p++; *p; p++) {
|
||||||
if (escape) {
|
if (escape) {
|
||||||
escape = 0;
|
escape = 0;
|
||||||
|
@ -1699,15 +1699,15 @@ static int scan_string(context_t* ctx, char* p, int lineno, int dotisspecial)
|
||||||
if (*p == '\\') { escape = 1; continue; }
|
if (*p == '\\') { escape = 1; continue; }
|
||||||
if (*p == '\n') break;
|
if (*p == '\n') break;
|
||||||
if (*p == '"') break;
|
if (*p == '"') break;
|
||||||
|
if (*p == '\'' && ++sqcnt == 3) {
|
||||||
|
return e_syntax(ctx, lineno, "triple-s-quote inside string lit");
|
||||||
|
}
|
||||||
|
sqcnt = 0;
|
||||||
}
|
}
|
||||||
if (*p != '"') {
|
if (*p != '"') {
|
||||||
return e_syntax(ctx, lineno, "unterminated quote");
|
return e_syntax(ctx, lineno, "unterminated quote");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tsq && tsq < p) {
|
|
||||||
return e_syntax(ctx, lineno, "triple-s-quote inside string lit");
|
|
||||||
}
|
|
||||||
|
|
||||||
set_token(ctx, STRING, lineno, orig, p + 1 - orig);
|
set_token(ctx, STRING, lineno, orig, p + 1 - orig);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue