mirror of
https://github.com/rust-lang/rust.git
synced 2026-06-01 05:57:03 +03:00
syntax: Fix complexity of string parsing. Closes #16624.
This commit is contained in:
@@ -412,14 +412,21 @@ fn eat<'a>(it: &mut iter::Peekable<(uint, char), str::CharOffsets<'a>>) {
|
||||
loop {
|
||||
match chars.next() {
|
||||
Some((i, c)) => {
|
||||
let em = error(i);
|
||||
match c {
|
||||
'\\' => {
|
||||
if chars.peek().expect(em.as_slice()).val1() == '\n' {
|
||||
let ch = chars.peek().unwrap_or_else(|| {
|
||||
fail!("{}", error(i).as_slice())
|
||||
}).val1();
|
||||
|
||||
if ch == '\n' {
|
||||
eat(&mut chars);
|
||||
} else if chars.peek().expect(em.as_slice()).val1() == '\r' {
|
||||
} else if ch == '\r' {
|
||||
chars.next();
|
||||
if chars.peek().expect(em.as_slice()).val1() != '\n' {
|
||||
let ch = chars.peek().unwrap_or_else(|| {
|
||||
fail!("{}", error(i).as_slice())
|
||||
}).val1();
|
||||
|
||||
if ch != '\n' {
|
||||
fail!("lexer accepted bare CR");
|
||||
}
|
||||
eat(&mut chars);
|
||||
@@ -433,7 +440,11 @@ fn eat<'a>(it: &mut iter::Peekable<(uint, char), str::CharOffsets<'a>>) {
|
||||
}
|
||||
},
|
||||
'\r' => {
|
||||
if chars.peek().expect(em.as_slice()).val1() != '\n' {
|
||||
let ch = chars.peek().unwrap_or_else(|| {
|
||||
fail!("{}", error(i).as_slice())
|
||||
}).val1();
|
||||
|
||||
if ch != '\n' {
|
||||
fail!("lexer accepted bare CR");
|
||||
}
|
||||
chars.next();
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user