mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-21 17:52:12 +03:00
Merge commit '3b7c7f97e4a7bb253a8d398ee4f8346f6cf2817b' into sync-from-ra
This commit is contained in:
@@ -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"]
|
||||
|
||||
@@ -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![,]) {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"\xы"
|
||||
@@ -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"\xы"
|
||||
@@ -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}"
|
||||
"\xы"
|
||||
@@ -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 @@
|
||||
'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) {}
|
||||
Reference in New Issue
Block a user