Merge commit '3b7c7f97e4a7bb253a8d398ee4f8346f6cf2817b' into sync-from-ra

This commit is contained in:
Laurențiu Nicola
2023-11-08 08:15:03 +02:00
parent 6eaf3f8bb2
commit d1d111d09e
177 changed files with 14930 additions and 2099 deletions
+4 -1
View File
@@ -13,7 +13,7 @@ doctest = false
[dependencies]
drop_bomb = "0.1.5"
rustc_lexer.workspace = true
rustc-dependencies.workspace = true
limit.workspace = true
@@ -22,3 +22,6 @@ expect-test = "1.4.0"
stdx.workspace = true
sourcegen.workspace = true
[features]
in-rust-tree = ["rustc-dependencies/in-rust-tree"]
+8 -1
View File
@@ -7,6 +7,9 @@
// fn b(x: i32) {}
// fn c(x: i32, ) {}
// fn d(x: i32, y: ()) {}
// test_err empty_param_slot
// fn f(y: i32, ,t: i32) {}
pub(super) fn param_list_fn_def(p: &mut Parser<'_>) {
list_(p, Flavor::FnDef);
}
@@ -71,7 +74,11 @@ fn list_(p: &mut Parser<'_>, flavor: Flavor) {
if !p.at_ts(PARAM_FIRST.union(ATTRIBUTE_FIRST)) {
p.error("expected value parameter");
m.abandon(p);
break;
if p.eat(T![,]) {
continue;
} else {
break;
}
}
param(p, m, flavor);
if !p.at(T![,]) {
+95
View File
@@ -8,8 +8,12 @@
//! Note that these tokens, unlike the tokens we feed into the parser, do
//! include info about comments and whitespace.
use rustc_dependencies::lexer as rustc_lexer;
use std::ops;
use rustc_lexer::unescape::{EscapeError, Mode};
use crate::{
SyntaxKind::{self, *},
T,
@@ -253,30 +257,60 @@ fn extend_literal(&mut self, len: usize, kind: &rustc_lexer::LiteralKind) {
rustc_lexer::LiteralKind::Char { terminated } => {
if !terminated {
err = "Missing trailing `'` symbol to terminate the character literal";
} else {
let text = &self.res.text[self.offset + 1..][..len - 1];
let i = text.rfind('\'').unwrap();
let text = &text[..i];
if let Err(e) = rustc_lexer::unescape::unescape_char(text) {
err = error_to_diagnostic_message(e, Mode::Char);
}
}
CHAR
}
rustc_lexer::LiteralKind::Byte { terminated } => {
if !terminated {
err = "Missing trailing `'` symbol to terminate the byte literal";
} else {
let text = &self.res.text[self.offset + 2..][..len - 2];
let i = text.rfind('\'').unwrap();
let text = &text[..i];
if let Err(e) = rustc_lexer::unescape::unescape_byte(text) {
err = error_to_diagnostic_message(e, Mode::Byte);
}
}
BYTE
}
rustc_lexer::LiteralKind::Str { terminated } => {
if !terminated {
err = "Missing trailing `\"` symbol to terminate the string literal";
} else {
let text = &self.res.text[self.offset + 1..][..len - 1];
let i = text.rfind('"').unwrap();
let text = &text[..i];
err = unescape_string_error_message(text, Mode::Str);
}
STRING
}
rustc_lexer::LiteralKind::ByteStr { terminated } => {
if !terminated {
err = "Missing trailing `\"` symbol to terminate the byte string literal";
} else {
let text = &self.res.text[self.offset + 2..][..len - 2];
let i = text.rfind('"').unwrap();
let text = &text[..i];
err = unescape_string_error_message(text, Mode::ByteStr);
}
BYTE_STRING
}
rustc_lexer::LiteralKind::CStr { terminated } => {
if !terminated {
err = "Missing trailing `\"` symbol to terminate the string literal";
} else {
let text = &self.res.text[self.offset + 2..][..len - 2];
let i = text.rfind('"').unwrap();
let text = &text[..i];
err = unescape_string_error_message(text, Mode::CStr);
}
C_STRING
}
@@ -304,3 +338,64 @@ fn extend_literal(&mut self, len: usize, kind: &rustc_lexer::LiteralKind) {
self.push(syntax_kind, len, err);
}
}
fn error_to_diagnostic_message(error: EscapeError, mode: Mode) -> &'static str {
match error {
EscapeError::ZeroChars => "empty character literal",
EscapeError::MoreThanOneChar => "character literal may only contain one codepoint",
EscapeError::LoneSlash => "",
EscapeError::InvalidEscape if mode == Mode::Byte || mode == Mode::ByteStr => {
"unknown byte escape"
}
EscapeError::InvalidEscape => "unknown character escape",
EscapeError::BareCarriageReturn => "",
EscapeError::BareCarriageReturnInRawString => "",
EscapeError::EscapeOnlyChar if mode == Mode::Byte => "byte constant must be escaped",
EscapeError::EscapeOnlyChar => "character constant must be escaped",
EscapeError::TooShortHexEscape => "numeric character escape is too short",
EscapeError::InvalidCharInHexEscape => "invalid character in numeric character escape",
EscapeError::OutOfRangeHexEscape => "out of range hex escape",
EscapeError::NoBraceInUnicodeEscape => "incorrect unicode escape sequence",
EscapeError::InvalidCharInUnicodeEscape => "invalid character in unicode escape",
EscapeError::EmptyUnicodeEscape => "empty unicode escape",
EscapeError::UnclosedUnicodeEscape => "unterminated unicode escape",
EscapeError::LeadingUnderscoreUnicodeEscape => "invalid start of unicode escape",
EscapeError::OverlongUnicodeEscape => "overlong unicode escape",
EscapeError::LoneSurrogateUnicodeEscape => "invalid unicode character escape",
EscapeError::OutOfRangeUnicodeEscape => "invalid unicode character escape",
EscapeError::UnicodeEscapeInByte => "unicode escape in byte string",
EscapeError::NonAsciiCharInByte if mode == Mode::Byte => {
"non-ASCII character in byte literal"
}
EscapeError::NonAsciiCharInByte if mode == Mode::ByteStr => {
"non-ASCII character in byte string literal"
}
EscapeError::NonAsciiCharInByte => "non-ASCII character in raw byte string literal",
EscapeError::UnskippedWhitespaceWarning => "",
EscapeError::MultipleSkippedLinesWarning => "",
}
}
fn unescape_string_error_message(text: &str, mode: Mode) -> &'static str {
let mut error_message = "";
match mode {
Mode::CStr => {
rustc_lexer::unescape::unescape_c_string(text, mode, &mut |_, res| {
if let Err(e) = res {
error_message = error_to_diagnostic_message(e, mode);
}
});
}
Mode::ByteStr | Mode::Str => {
rustc_lexer::unescape::unescape_literal(text, mode, &mut |_, res| {
if let Err(e) = res {
error_message = error_to_diagnostic_message(e, mode);
}
});
}
_ => {
// Other Modes are not supported yet or do not apply
}
}
error_message
}
+1
View File
@@ -19,6 +19,7 @@
#![warn(rust_2018_idioms, unused_lifetimes, semicolon_in_expressions_from_macros)]
#![allow(rustdoc::private_intra_doc_links)]
#![cfg_attr(feature = "in-rust-tree", feature(rustc_private))]
mod lexed_str;
mod token_set;
+17 -19
View File
@@ -32,29 +32,27 @@ pub fn to_input(&self) -> crate::Input {
let kind = self.kind(i);
if kind.is_trivia() {
was_joint = false
} else if kind == SyntaxKind::IDENT {
let token_text = self.text(i);
let contextual_kw =
SyntaxKind::from_contextual_keyword(token_text).unwrap_or(SyntaxKind::IDENT);
res.push_ident(contextual_kw);
} else {
if kind == SyntaxKind::IDENT {
let token_text = self.text(i);
let contextual_kw = SyntaxKind::from_contextual_keyword(token_text)
.unwrap_or(SyntaxKind::IDENT);
res.push_ident(contextual_kw);
} else {
if was_joint {
if was_joint {
res.was_joint();
}
res.push(kind);
// Tag the token as joint if it is float with a fractional part
// we use this jointness to inform the parser about what token split
// event to emit when we encounter a float literal in a field access
if kind == SyntaxKind::FLOAT_NUMBER {
if !self.text(i).ends_with('.') {
res.was_joint();
}
res.push(kind);
// Tag the token as joint if it is float with a fractional part
// we use this jointness to inform the parser about what token split
// event to emit when we encounter a float literal in a field access
if kind == SyntaxKind::FLOAT_NUMBER {
if !self.text(i).ends_with('.') {
res.was_joint();
} else {
was_joint = false;
}
} else {
was_joint = true;
was_joint = false;
}
} else {
was_joint = true;
}
}
}
@@ -0,0 +1,86 @@
BYTE "b''" error: empty character literal
WHITESPACE "\n"
BYTE "b'\\'" error: Missing trailing `'` symbol to terminate the byte literal
WHITESPACE "\n"
BYTE "b'\n'" error: byte constant must be escaped
WHITESPACE "\n"
BYTE "b'spam'" error: character literal may only contain one codepoint
WHITESPACE "\n"
BYTE "b'\\x0ff'" error: character literal may only contain one codepoint
WHITESPACE "\n"
BYTE "b'\\\"a'" error: character literal may only contain one codepoint
WHITESPACE "\n"
BYTE "b'\\na'" error: character literal may only contain one codepoint
WHITESPACE "\n"
BYTE "b'\\ra'" error: character literal may only contain one codepoint
WHITESPACE "\n"
BYTE "b'\\ta'" error: character literal may only contain one codepoint
WHITESPACE "\n"
BYTE "b'\\\\a'" error: character literal may only contain one codepoint
WHITESPACE "\n"
BYTE "b'\\'a'" error: character literal may only contain one codepoint
WHITESPACE "\n"
BYTE "b'\\0a'" error: character literal may only contain one codepoint
WHITESPACE "\n"
BYTE "b'\\u{0}x'" error: unicode escape in byte string
WHITESPACE "\n"
BYTE "b'\\u{1F63b}}'" error: unicode escape in byte string
WHITESPACE "\n"
BYTE "b'\\v'" error: unknown byte escape
WHITESPACE "\n"
BYTE "b'\\💩'" error: unknown byte escape
WHITESPACE "\n"
BYTE "b'\\●'" error: unknown byte escape
WHITESPACE "\n"
BYTE "b'\\\\\\r'" error: character literal may only contain one codepoint
WHITESPACE "\n"
BYTE "b'\\x'" error: numeric character escape is too short
WHITESPACE "\n"
BYTE "b'\\x0'" error: numeric character escape is too short
WHITESPACE "\n"
BYTE "b'\\xf'" error: numeric character escape is too short
WHITESPACE "\n"
BYTE "b'\\xa'" error: numeric character escape is too short
WHITESPACE "\n"
BYTE "b'\\xx'" error: invalid character in numeric character escape
WHITESPACE "\n"
BYTE "b'\\xы'" error: invalid character in numeric character escape
WHITESPACE "\n"
BYTE "b'\\x🦀'" error: invalid character in numeric character escape
WHITESPACE "\n"
BYTE "b'\\xtt'" error: invalid character in numeric character escape
WHITESPACE "\n"
BYTE "b'\\u'" error: incorrect unicode escape sequence
WHITESPACE "\n"
BYTE "b'\\u[0123]'" error: incorrect unicode escape sequence
WHITESPACE "\n"
BYTE "b'\\u{0x}'" error: invalid character in unicode escape
WHITESPACE "\n"
BYTE "b'\\u{'" error: unterminated unicode escape
WHITESPACE "\n"
BYTE "b'\\u{0000'" error: unterminated unicode escape
WHITESPACE "\n"
BYTE "b'\\u{}'" error: empty unicode escape
WHITESPACE "\n"
BYTE "b'\\u{_0000}'" error: invalid start of unicode escape
WHITESPACE "\n"
BYTE "b'\\u{0000000}'" error: overlong unicode escape
WHITESPACE "\n"
BYTE "b'\\u{FFFFFF}'" error: unicode escape in byte string
WHITESPACE "\n"
BYTE "b'\\u{ffffff}'" error: unicode escape in byte string
WHITESPACE "\n"
BYTE "b'\\u{ffffff}'" error: unicode escape in byte string
WHITESPACE "\n"
BYTE "b'\\u{DC00}'" error: unicode escape in byte string
WHITESPACE "\n"
BYTE "b'\\u{DDDD}'" error: unicode escape in byte string
WHITESPACE "\n"
BYTE "b'\\u{DFFF}'" error: unicode escape in byte string
WHITESPACE "\n"
BYTE "b'\\u{D800}'" error: unicode escape in byte string
WHITESPACE "\n"
BYTE "b'\\u{DAAA}'" error: unicode escape in byte string
WHITESPACE "\n"
BYTE "b'\\u{DBFF}'" error: unicode escape in byte string
WHITESPACE "\n"
@@ -0,0 +1,44 @@
b''
b'\'
b'
'
b'spam'
b'\x0ff'
b'\"a'
b'\na'
b'\ra'
b'\ta'
b'\\a'
b'\'a'
b'\0a'
b'\u{0}x'
b'\u{1F63b}}'
b'\v'
b'\💩'
b'\●'
b'\\\r'
b'\x'
b'\x0'
b'\xf'
b'\xa'
b'\xx'
b'\xы'
b'\x🦀'
b'\xtt'
b'\u'
b'\u[0123]'
b'\u{0x}'
b'\u{'
b'\u{0000'
b'\u{}'
b'\u{_0000}'
b'\u{0000000}'
b'\u{FFFFFF}'
b'\u{ffffff}'
b'\u{ffffff}'
b'\u{DC00}'
b'\u{DDDD}'
b'\u{DFFF}'
b'\u{D800}'
b'\u{DAAA}'
b'\u{DBFF}'
@@ -0,0 +1,28 @@
BYTE_STRING "b\"\\💩\"" error: unknown byte escape
WHITESPACE "\n"
BYTE_STRING "b\"\\●\"" error: unknown byte escape
WHITESPACE "\n"
BYTE_STRING "b\"\\u{_0000}\"" error: invalid start of unicode escape
WHITESPACE "\n"
BYTE_STRING "b\"\\u{0000000}\"" error: overlong unicode escape
WHITESPACE "\n"
BYTE_STRING "b\"\\u{FFFFFF}\"" error: unicode escape in byte string
WHITESPACE "\n"
BYTE_STRING "b\"\\u{ffffff}\"" error: unicode escape in byte string
WHITESPACE "\n"
BYTE_STRING "b\"\\u{ffffff}\"" error: unicode escape in byte string
WHITESPACE "\n"
BYTE_STRING "b\"\\u{DC00}\"" error: unicode escape in byte string
WHITESPACE "\n"
BYTE_STRING "b\"\\u{DDDD}\"" error: unicode escape in byte string
WHITESPACE "\n"
BYTE_STRING "b\"\\u{DFFF}\"" error: unicode escape in byte string
WHITESPACE "\n"
BYTE_STRING "b\"\\u{D800}\"" error: unicode escape in byte string
WHITESPACE "\n"
BYTE_STRING "b\"\\u{DAAA}\"" error: unicode escape in byte string
WHITESPACE "\n"
BYTE_STRING "b\"\\u{DBFF}\"" error: unicode escape in byte string
WHITESPACE "\n"
BYTE_STRING "b\"\\xы\"" error: invalid character in numeric character escape
WHITESPACE "\n"
@@ -0,0 +1,14 @@
b"\💩"
b"\"
b"\u{_0000}"
b"\u{0000000}"
b"\u{FFFFFF}"
b"\u{ffffff}"
b"\u{ffffff}"
b"\u{DC00}"
b"\u{DDDD}"
b"\u{DFFF}"
b"\u{D800}"
b"\u{DAAA}"
b"\u{DBFF}"
b"\"
@@ -0,0 +1,28 @@
C_STRING "c\"\\💩\"" error: unknown character escape
WHITESPACE "\n"
C_STRING "c\"\\●\"" error: unknown character escape
WHITESPACE "\n"
C_STRING "c\"\\u{_0000}\"" error: invalid start of unicode escape
WHITESPACE "\n"
C_STRING "c\"\\u{0000000}\"" error: overlong unicode escape
WHITESPACE "\n"
C_STRING "c\"\\u{FFFFFF}\"" error: invalid unicode character escape
WHITESPACE "\n"
C_STRING "c\"\\u{ffffff}\"" error: invalid unicode character escape
WHITESPACE "\n"
C_STRING "c\"\\u{ffffff}\"" error: invalid unicode character escape
WHITESPACE "\n"
C_STRING "c\"\\u{DC00}\"" error: invalid unicode character escape
WHITESPACE "\n"
C_STRING "c\"\\u{DDDD}\"" error: invalid unicode character escape
WHITESPACE "\n"
C_STRING "c\"\\u{DFFF}\"" error: invalid unicode character escape
WHITESPACE "\n"
C_STRING "c\"\\u{D800}\"" error: invalid unicode character escape
WHITESPACE "\n"
C_STRING "c\"\\u{DAAA}\"" error: invalid unicode character escape
WHITESPACE "\n"
C_STRING "c\"\\u{DBFF}\"" error: invalid unicode character escape
WHITESPACE "\n"
C_STRING "c\"\\xы\"" error: invalid character in numeric character escape
WHITESPACE "\n"
@@ -0,0 +1,14 @@
c"\💩"
c"\"
c"\u{_0000}"
c"\u{0000000}"
c"\u{FFFFFF}"
c"\u{ffffff}"
c"\u{ffffff}"
c"\u{DC00}"
c"\u{DDDD}"
c"\u{DFFF}"
c"\u{D800}"
c"\u{DAAA}"
c"\u{DBFF}"
c"\"
@@ -0,0 +1,92 @@
CHAR "'hello'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "''" error: empty character literal
WHITESPACE "\n"
CHAR "'\n'" error: character constant must be escaped
WHITESPACE "\n"
CHAR "'spam'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "'\\x0ff'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "'\\\"a'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "'\\na'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "'\\ra'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "'\\ta'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "'\\\\a'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "'\\'a'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "'\\0a'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "'\\u{0}x'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "'\\u{1F63b}}'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "'\\v'" error: unknown character escape
WHITESPACE "\n"
CHAR "'\\💩'" error: unknown character escape
WHITESPACE "\n"
CHAR "'\\●'" error: unknown character escape
WHITESPACE "\n"
CHAR "'\\\\\\r'" error: character literal may only contain one codepoint
WHITESPACE "\n"
CHAR "'\\x'" error: numeric character escape is too short
WHITESPACE "\n"
CHAR "'\\x0'" error: numeric character escape is too short
WHITESPACE "\n"
CHAR "'\\xf'" error: numeric character escape is too short
WHITESPACE "\n"
CHAR "'\\xa'" error: numeric character escape is too short
WHITESPACE "\n"
CHAR "'\\xx'" error: invalid character in numeric character escape
WHITESPACE "\n"
CHAR "'\\xы'" error: invalid character in numeric character escape
WHITESPACE "\n"
CHAR "'\\x🦀'" error: invalid character in numeric character escape
WHITESPACE "\n"
CHAR "'\\xtt'" error: invalid character in numeric character escape
WHITESPACE "\n"
CHAR "'\\xff'" error: out of range hex escape
WHITESPACE "\n"
CHAR "'\\xFF'" error: out of range hex escape
WHITESPACE "\n"
CHAR "'\\x80'" error: out of range hex escape
WHITESPACE "\n"
CHAR "'\\u'" error: incorrect unicode escape sequence
WHITESPACE "\n"
CHAR "'\\u[0123]'" error: incorrect unicode escape sequence
WHITESPACE "\n"
CHAR "'\\u{0x}'" error: invalid character in unicode escape
WHITESPACE "\n"
CHAR "'\\u{'" error: unterminated unicode escape
WHITESPACE "\n"
CHAR "'\\u{0000'" error: unterminated unicode escape
WHITESPACE "\n"
CHAR "'\\u{}'" error: empty unicode escape
WHITESPACE "\n"
CHAR "'\\u{_0000}'" error: invalid start of unicode escape
WHITESPACE "\n"
CHAR "'\\u{0000000}'" error: overlong unicode escape
WHITESPACE "\n"
CHAR "'\\u{FFFFFF}'" error: invalid unicode character escape
WHITESPACE "\n"
CHAR "'\\u{ffffff}'" error: invalid unicode character escape
WHITESPACE "\n"
CHAR "'\\u{ffffff}'" error: invalid unicode character escape
WHITESPACE "\n"
CHAR "'\\u{DC00}'" error: invalid unicode character escape
WHITESPACE "\n"
CHAR "'\\u{DDDD}'" error: invalid unicode character escape
WHITESPACE "\n"
CHAR "'\\u{DFFF}'" error: invalid unicode character escape
WHITESPACE "\n"
CHAR "'\\u{D800}'" error: invalid unicode character escape
WHITESPACE "\n"
CHAR "'\\u{DAAA}'" error: invalid unicode character escape
WHITESPACE "\n"
CHAR "'\\u{DBFF}'" error: invalid unicode character escape
WHITESPACE "\n"
@@ -0,0 +1,47 @@
'hello'
''
'
'
'spam'
'\x0ff'
'\"a'
'\na'
'\ra'
'\ta'
'\\a'
'\'a'
'\0a'
'\u{0}x'
'\u{1F63b}}'
'\v'
'\💩'
'\●'
'\\\r'
'\x'
'\x0'
'\xf'
'\xa'
'\xx'
'\xы'
'\x🦀'
'\xtt'
'\xff'
'\xFF'
'\x80'
'\u'
'\u[0123]'
'\u{0x}'
'\u{'
'\u{0000'
'\u{}'
'\u{_0000}'
'\u{0000000}'
'\u{FFFFFF}'
'\u{ffffff}'
'\u{ffffff}'
'\u{DC00}'
'\u{DDDD}'
'\u{DFFF}'
'\u{D800}'
'\u{DAAA}'
'\u{DBFF}'
@@ -0,0 +1,28 @@
STRING "\"\\💩\"" error: unknown character escape
WHITESPACE "\n"
STRING "\"\\●\"" error: unknown character escape
WHITESPACE "\n"
STRING "\"\\u{_0000}\"" error: invalid start of unicode escape
WHITESPACE "\n"
STRING "\"\\u{0000000}\"" error: overlong unicode escape
WHITESPACE "\n"
STRING "\"\\u{FFFFFF}\"" error: invalid unicode character escape
WHITESPACE "\n"
STRING "\"\\u{ffffff}\"" error: invalid unicode character escape
WHITESPACE "\n"
STRING "\"\\u{ffffff}\"" error: invalid unicode character escape
WHITESPACE "\n"
STRING "\"\\u{DC00}\"" error: invalid unicode character escape
WHITESPACE "\n"
STRING "\"\\u{DDDD}\"" error: invalid unicode character escape
WHITESPACE "\n"
STRING "\"\\u{DFFF}\"" error: invalid unicode character escape
WHITESPACE "\n"
STRING "\"\\u{D800}\"" error: invalid unicode character escape
WHITESPACE "\n"
STRING "\"\\u{DAAA}\"" error: invalid unicode character escape
WHITESPACE "\n"
STRING "\"\\u{DBFF}\"" error: invalid unicode character escape
WHITESPACE "\n"
STRING "\"\\xы\"" error: invalid character in numeric character escape
WHITESPACE "\n"
@@ -0,0 +1,14 @@
"\💩"
"\"
"\u{_0000}"
"\u{0000000}"
"\u{FFFFFF}"
"\u{ffffff}"
"\u{ffffff}"
"\u{DC00}"
"\u{DDDD}"
"\u{DFFF}"
"\u{D800}"
"\u{DAAA}"
"\u{DBFF}"
"\"
@@ -1,13 +1,9 @@
BYTE "b''"
WHITESPACE " "
BYTE "b'x'"
WHITESPACE " "
BYTE_STRING "b\"foo\""
WHITESPACE " "
BYTE_STRING "br\"\""
WHITESPACE "\n"
BYTE "b''suf"
WHITESPACE " "
BYTE_STRING "b\"\"ix"
WHITESPACE " "
BYTE_STRING "br\"\"br"
@@ -17,6 +13,4 @@ WHITESPACE " "
BYTE "b'\\\\'"
WHITESPACE " "
BYTE "b'\\''"
WHITESPACE " "
BYTE "b'hello'"
WHITESPACE "\n"
@@ -1,3 +1,3 @@
b'' b'x' b"foo" br""
b''suf b""ix br""br
b'\n' b'\\' b'\'' b'hello'
b'x' b"foo" br""
b""ix br""br
b'\n' b'\\' b'\''
@@ -4,8 +4,6 @@ CHAR "' '"
WHITESPACE " "
CHAR "'0'"
WHITESPACE " "
CHAR "'hello'"
WHITESPACE " "
CHAR "'\\x7f'"
WHITESPACE " "
CHAR "'\\n'"
+1 -1
View File
@@ -1 +1 @@
'x' ' ' '0' 'hello' '\x7f' '\n' '\\' '\''
'x' ' ' '0' '\x7f' '\n' '\\' '\''
@@ -0,0 +1,41 @@
SOURCE_FILE
FN
FN_KW "fn"
WHITESPACE " "
NAME
IDENT "f"
PARAM_LIST
L_PAREN "("
PARAM
IDENT_PAT
NAME
IDENT "y"
COLON ":"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "i32"
COMMA ","
WHITESPACE " "
COMMA ","
PARAM
IDENT_PAT
NAME
IDENT "t"
COLON ":"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "i32"
R_PAREN ")"
WHITESPACE " "
BLOCK_EXPR
STMT_LIST
L_CURLY "{"
R_CURLY "}"
WHITESPACE "\n"
error 12: expected value parameter
@@ -0,0 +1 @@
fn f(y: i32, ,t: i32) {}