fix(tomllib): 单引号处误用双引号字符串,改为字符字面量
char 形参与 char 比较位置写成「双引号包单引号」(实为 i8* 字符串):形参处报 CastError(implicit pointer-to-integer),比较处被 C 哨兵规则静默 ptrtoint 成恒假(TOML 单引号字面量字符串根本解析不出来)。7 处统一改成字符字面量,与 lexer.vp 同款写法一致。
This commit is contained in:
1 parent
76deaa27bf
commit
788c52b749
1 file changed
+7
-7
+7
-7
@@ -224,10 +224,10 @@ def _parse_basic_string(s: TomlState*) -> str:
|
||||
|
||||
# Literal string '...': taken verbatim, no escapes.
|
||||
def _parse_literal_string(s: TomlState*) -> str:
|
||||
if _peek(s) != "'": return None
|
||||
if _peek(s) != '\'': return None
|
||||
_advance(s)
|
||||
start: sizet = s.pos
|
||||
while s.pos < s.len and s.src[s.pos] != "'":
|
||||
while s.pos < s.len and s.src[s.pos] != '\'':
|
||||
if _is_newline(s.src[s.pos]): return None
|
||||
s.pos += 1
|
||||
if s.pos >= s.len: return None
|
||||
@@ -276,7 +276,7 @@ def _parse_multiline_literal(s: TomlState*) -> str:
|
||||
if _peek(s) == '\n': s.pos += 1
|
||||
start: sizet = s.pos
|
||||
while s.pos < s.len:
|
||||
if s.src[s.pos] == "'" and s.pos + 2 < s.len and s.src[s.pos + 1] == "'" and s.src[s.pos + 2] == "'":
|
||||
if s.src[s.pos] == '\'' and s.pos + 2 < s.len and s.src[s.pos + 1] == '\'' and s.src[s.pos + 2] == '\'':
|
||||
n: sizet = s.pos - start
|
||||
s.pos += 3
|
||||
return _copy_span(s.pool, s.src, start, n)
|
||||
@@ -440,9 +440,9 @@ def _parse_value(s: TomlState*) -> JsonValue*:
|
||||
else: sv = _parse_basic_string(s)
|
||||
if sv == None: return None
|
||||
return string_val(s.pool, sv)
|
||||
if ch == "'":
|
||||
if ch == '\'':
|
||||
sv2: str = None
|
||||
if _is_multiline_open(s, "'") != 0: sv2 = _parse_multiline_literal(s)
|
||||
if _is_multiline_open(s, '\'') != 0: sv2 = _parse_multiline_literal(s)
|
||||
else: sv2 = _parse_literal_string(s)
|
||||
if sv2 == None: return None
|
||||
return string_val(s.pool, sv2)
|
||||
@@ -468,8 +468,8 @@ def _parse_key_segment(s: TomlState*) -> str:
|
||||
if ch == '"':
|
||||
if _is_multiline_open(s, '"') != 0: return None
|
||||
return _parse_basic_string(s)
|
||||
if ch == "'":
|
||||
if _is_multiline_open(s, "'") != 0: return None
|
||||
if ch == '\'':
|
||||
if _is_multiline_open(s, '\'') != 0: return None
|
||||
return _parse_literal_string(s)
|
||||
if not _is_bare_key_char(ch): return None
|
||||
start: sizet = s.pos
|
||||
|
||||
Reference in new issue
Block a user