no escape

This commit is contained in:
Aleksey Kladov 2018-08-22 13:22:06 +03:00
parent e8dfb92641
commit a4f140b0f3
7 changed files with 39 additions and 17 deletions

View file

@ -15,24 +15,25 @@ pub(crate) fn is_string_literal_start(c: char, c1: Option<char>, c2: Option<char
}
pub(crate) fn scan_char(ptr: &mut Ptr) {
loop {
if ptr.next_is('\\') {
while let Some(c) = ptr.next() {
match c {
'\\' => {
ptr.bump();
if ptr.next_is('\\') || ptr.next_is('\'') {
ptr.bump();
}
continue;
}
if ptr.next_is('\'') {
'\'' => {
ptr.bump();
return;
}
if ptr.next_is('\n') {
break;
}
'\n' => return,
_ => {
ptr.bump();
}
}
}
}
pub(crate) fn scan_byte_char_or_string(ptr: &mut Ptr) -> SyntaxKind {
// unwrapping and not-exhaustive match are ok
@ -56,10 +57,22 @@ pub(crate) fn scan_byte_char_or_string(ptr: &mut Ptr) -> SyntaxKind {
}
pub(crate) fn scan_string(ptr: &mut Ptr) {
while let Some(c) = ptr.bump() {
if c == '"' {
while let Some(c) = ptr.next() {
match c {
'\\' => {
ptr.bump();
if ptr.next_is('\\') || ptr.next_is('"') {
ptr.bump();
}
}
'"' => {
ptr.bump();
return;
}
_ => {
ptr.bump();
},
}
}
}

View file

@ -1 +1,2 @@
"hello" r"world"
"hello" r"world" "\n\"\\no escape" "multi
line"

View file

@ -1,4 +1,8 @@
STRING 7 "\"hello\""
WHITESPACE 1 " "
RAW_STRING 8 "r\"world\""
WHITESPACE 1 " "
STRING 17 "\"\\n\\\"\\\\no escape\""
WHITESPACE 1 " "
STRING 12 "\"multi\nline\""
WHITESPACE 1 "\n"

View file

@ -0,0 +1 @@
'1

View file

@ -0,0 +1 @@
CHAR 2 "\'1"

View file

@ -0,0 +1 @@
"hello

View file

@ -0,0 +1 @@
STRING 7 "\"hello\n"