diff options
author | Aleksey Kladov <[email protected]> | 2018-08-10 20:33:29 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2018-08-10 20:33:29 +0100 |
commit | 7c67612b8a894187fa3b64725531a5459f9211bf (patch) | |
tree | 9e2a536efa0c880d921fd8d4d74423afc9451fd4 /src/lexer/strings.rs | |
parent | 26262aaf05983c5b7f41cc438e287523268fe1eb (diff) |
organizize
Diffstat (limited to 'src/lexer/strings.rs')
-rw-r--r-- | src/lexer/strings.rs | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/src/lexer/strings.rs b/src/lexer/strings.rs deleted file mode 100644 index e3704fbb3..000000000 --- a/src/lexer/strings.rs +++ /dev/null | |||
@@ -1,106 +0,0 @@ | |||
1 | use SyntaxKind::{self, *}; | ||
2 | |||
3 | use lexer::ptr::Ptr; | ||
4 | |||
5 | pub(crate) fn is_string_literal_start(c: char, c1: Option<char>, c2: Option<char>) -> bool { | ||
6 | match (c, c1, c2) { | ||
7 | ('r', Some('"'), _) | ||
8 | | ('r', Some('#'), _) | ||
9 | | ('b', Some('"'), _) | ||
10 | | ('b', Some('\''), _) | ||
11 | | ('b', Some('r'), Some('"')) | ||
12 | | ('b', Some('r'), Some('#')) => true, | ||
13 | _ => false, | ||
14 | } | ||
15 | } | ||
16 | |||
17 | pub(crate) fn scan_char(ptr: &mut Ptr) { | ||
18 | if ptr.bump().is_none() { | ||
19 | return; // TODO: error reporting is upper in the stack | ||
20 | } | ||
21 | scan_char_or_byte(ptr); | ||
22 | if !ptr.next_is('\'') { | ||
23 | return; // TODO: error reporting | ||
24 | } | ||
25 | ptr.bump(); | ||
26 | } | ||
27 | |||
28 | pub(crate) fn scan_byte_char_or_string(ptr: &mut Ptr) -> SyntaxKind { | ||
29 | // unwrapping and not-exhaustive match are ok | ||
30 | // because of string_literal_start | ||
31 | let c = ptr.bump().unwrap(); | ||
32 | match c { | ||
33 | '\'' => { | ||
34 | scan_byte(ptr); | ||
35 | BYTE | ||
36 | } | ||
37 | '"' => { | ||
38 | scan_byte_string(ptr); | ||
39 | BYTE_STRING | ||
40 | } | ||
41 | 'r' => { | ||
42 | scan_raw_byte_string(ptr); | ||
43 | RAW_BYTE_STRING | ||
44 | } | ||
45 | _ => unreachable!(), | ||
46 | } | ||
47 | } | ||
48 | |||
49 | pub(crate) fn scan_string(ptr: &mut Ptr) { | ||
50 | while let Some(c) = ptr.bump() { | ||
51 | if c == '"' { | ||
52 | return; | ||
53 | } | ||
54 | } | ||
55 | } | ||
56 | |||
57 | pub(crate) fn scan_raw_string(ptr: &mut Ptr) { | ||
58 | if !ptr.next_is('"') { | ||
59 | return; | ||
60 | } | ||
61 | ptr.bump(); | ||
62 | |||
63 | while let Some(c) = ptr.bump() { | ||
64 | if c == '"' { | ||
65 | return; | ||
66 | } | ||
67 | } | ||
68 | } | ||
69 | |||
70 | fn scan_byte(ptr: &mut Ptr) { | ||
71 | if ptr.next_is('\'') { | ||
72 | ptr.bump(); | ||
73 | return; | ||
74 | } | ||
75 | ptr.bump(); | ||
76 | if ptr.next_is('\'') { | ||
77 | ptr.bump(); | ||
78 | return; | ||
79 | } | ||
80 | } | ||
81 | |||
82 | fn scan_byte_string(ptr: &mut Ptr) { | ||
83 | while let Some(c) = ptr.bump() { | ||
84 | if c == '"' { | ||
85 | return; | ||
86 | } | ||
87 | } | ||
88 | } | ||
89 | |||
90 | fn scan_raw_byte_string(ptr: &mut Ptr) { | ||
91 | if !ptr.next_is('"') { | ||
92 | return; | ||
93 | } | ||
94 | ptr.bump(); | ||
95 | |||
96 | while let Some(c) = ptr.bump() { | ||
97 | if c == '"' { | ||
98 | return; | ||
99 | } | ||
100 | } | ||
101 | } | ||
102 | |||
103 | fn scan_char_or_byte(ptr: &mut Ptr) { | ||
104 | //FIXME: deal with escape sequencies | ||
105 | ptr.bump(); | ||
106 | } | ||