Implement unsafe attribute parsing

This commit is contained in:
Lukas Wirth 2024-05-06 12:09:31 +02:00
parent c4618fe14d
commit e1aeed3aed
8 changed files with 534 additions and 11 deletions

View file

@ -0,0 +1,457 @@
SOURCE_FILE
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple_ident"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
PATH
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "path"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple_ident_expr"
WHITESPACE " "
EQ "="
WHITESPACE " "
LITERAL
STRING "\"\""
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
PATH
PATH
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "path"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "Expr"
WHITESPACE " "
EQ "="
WHITESPACE " "
LITERAL
STRING "\"\""
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple_ident_tt"
TOKEN_TREE
L_PAREN "("
IDENT "a"
WHITESPACE " "
IDENT "b"
WHITESPACE " "
IDENT "c"
R_PAREN ")"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple_ident_tt"
TOKEN_TREE
L_BRACK "["
IDENT "a"
WHITESPACE " "
IDENT "b"
WHITESPACE " "
IDENT "c"
R_BRACK "]"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple_ident_tt"
TOKEN_TREE
L_CURLY "{"
IDENT "a"
WHITESPACE " "
IDENT "b"
WHITESPACE " "
IDENT "c"
R_CURLY "}"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
PATH
PATH
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "path"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "tt"
TOKEN_TREE
L_PAREN "("
IDENT "a"
WHITESPACE " "
IDENT "b"
WHITESPACE " "
IDENT "c"
R_PAREN ")"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
PATH
PATH
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "path"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "tt"
TOKEN_TREE
L_BRACK "["
IDENT "a"
WHITESPACE " "
IDENT "b"
WHITESPACE " "
IDENT "c"
R_BRACK "]"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
PATH
PATH
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "path"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "tt"
TOKEN_TREE
L_CURLY "{"
IDENT "a"
WHITESPACE " "
IDENT "b"
WHITESPACE " "
IDENT "c"
R_CURLY "}"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
UNSAFE_KW "unsafe"
L_PAREN "("
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple_ident"
R_PAREN ")"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
UNSAFE_KW "unsafe"
L_PAREN "("
PATH
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "path"
R_PAREN ")"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
UNSAFE_KW "unsafe"
L_PAREN "("
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple_ident_expr"
WHITESPACE " "
EQ "="
WHITESPACE " "
LITERAL
STRING "\"\""
R_PAREN ")"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
UNSAFE_KW "unsafe"
L_PAREN "("
PATH
PATH
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "path"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "Expr"
WHITESPACE " "
EQ "="
WHITESPACE " "
LITERAL
STRING "\"\""
R_PAREN ")"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
UNSAFE_KW "unsafe"
L_PAREN "("
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple_ident_tt"
TOKEN_TREE
L_PAREN "("
IDENT "a"
WHITESPACE " "
IDENT "b"
WHITESPACE " "
IDENT "c"
R_PAREN ")"
R_PAREN ")"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
UNSAFE_KW "unsafe"
L_PAREN "("
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple_ident_tt"
TOKEN_TREE
L_BRACK "["
IDENT "a"
WHITESPACE " "
IDENT "b"
WHITESPACE " "
IDENT "c"
R_BRACK "]"
R_PAREN ")"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
UNSAFE_KW "unsafe"
L_PAREN "("
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple_ident_tt"
TOKEN_TREE
L_CURLY "{"
IDENT "a"
WHITESPACE " "
IDENT "b"
WHITESPACE " "
IDENT "c"
R_CURLY "}"
R_PAREN ")"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
UNSAFE_KW "unsafe"
L_PAREN "("
PATH
PATH
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "path"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "tt"
TOKEN_TREE
L_PAREN "("
IDENT "a"
WHITESPACE " "
IDENT "b"
WHITESPACE " "
IDENT "c"
R_PAREN ")"
R_PAREN ")"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
UNSAFE_KW "unsafe"
L_PAREN "("
PATH
PATH
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "path"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "tt"
TOKEN_TREE
L_BRACK "["
IDENT "a"
WHITESPACE " "
IDENT "b"
WHITESPACE " "
IDENT "c"
R_BRACK "]"
R_PAREN ")"
R_BRACK "]"
WHITESPACE "\n"
ATTR
POUND "#"
BANG "!"
L_BRACK "["
META
UNSAFE_KW "unsafe"
L_PAREN "("
PATH
PATH
PATH
PATH_SEGMENT
NAME_REF
IDENT "simple"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "path"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "tt"
TOKEN_TREE
L_CURLY "{"
IDENT "a"
WHITESPACE " "
IDENT "b"
WHITESPACE " "
IDENT "c"
R_CURLY "}"
R_PAREN ")"
R_BRACK "]"
WHITESPACE "\n"

View file

@ -0,0 +1,20 @@
#![simple_ident]
#![simple::path]
#![simple_ident_expr = ""]
#![simple::path::Expr = ""]
#![simple_ident_tt(a b c)]
#![simple_ident_tt[a b c]]
#![simple_ident_tt{a b c}]
#![simple::path::tt(a b c)]
#![simple::path::tt[a b c]]
#![simple::path::tt{a b c}]
#![unsafe(simple_ident)]
#![unsafe(simple::path)]
#![unsafe(simple_ident_expr = "")]
#![unsafe(simple::path::Expr = "")]
#![unsafe(simple_ident_tt(a b c))]
#![unsafe(simple_ident_tt[a b c])]
#![unsafe(simple_ident_tt{a b c})]
#![unsafe(simple::path::tt(a b c))]
#![unsafe(simple::path::tt[a b c])]
#![unsafe(simple::path::tt{a b c})]