authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-01-04 13:16:37+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-01-05 20:25:50+02:00
log2183c4bb444d80921783fc5a26d217c0e4a68d31
tree1e5261202f7e2d3b6c1ab55791edf5bec39cb08d
parenta5d1fb1e49891c70fd384e1cf38e9d2f4eac6ee9
signaturelock-open Commit is signed but in an unrecognized format.

std-c tokenizer string concatenation


1 files changed, 17 insertions(+), 7 deletions(-)

lib/std/c/tokenizer.zig+17-7
......@@ -272,6 +272,7 @@ pub const Tokenizer = struct {
272272 U,
273273 L,
274274 StringLiteral,
275 AfterStringLiteral,
275276 CharLiteralStart,
276277 CharLiteral,
277278 EscapeSequence,
......@@ -565,8 +566,7 @@ pub const Tokenizer = struct {
565566 state = .EscapeSequence;
566567 },
567568 '"' => {
568 self.index += 1;
569 break;
569 state = .AfterStringLiteral;
570570 },
571571 '\n', '\r' => {
572572 result.id = .Invalid;
......@@ -574,6 +574,15 @@ pub const Tokenizer = struct {
574574 },
575575 else => {},
576576 },
577 .AfterStringLiteral => switch (c) {
578 '"' => {
579 state = .StringLiteral;
580 },
581 '\n'...'\r', ' ' => {},
582 else => {
583 break;
584 },
585 },
577586 .CharLiteralStart => switch (c) {
578587 '\\' => {
579588 string = false;
......@@ -1109,6 +1118,7 @@ pub const Tokenizer = struct {
11091118 }
11101119 } else if (self.index == self.source.buffer.len) {
11111120 switch (state) {
1121 .AfterStringLiteral,
11121122 .Start => {},
11131123 .u, .u8, .U, .L, .Identifier => {
11141124 result.id = Token.getKeyword(self.source.buffer[result.start..self.index], self.prev_tok_id == .Hash and !self.pp_directive) orelse .Identifier;
......@@ -1351,11 +1361,11 @@ test "line continuation" {
13511361
13521362test "string prefix" {
13531363 expectTokens(
1354 \\"foo"
1355 \\u"foo"
1356 \\u8"foo"
1357 \\U"foo"
1358 \\L"foo"
1364 \\"foo" "bar"
1365 \\u"foo" "bar"
1366 \\u8"foo" "bar"
1367 \\U"foo" "bar"
1368 \\L"foo" "bar"
13591369 \\'foo'
13601370 \\u'foo'
13611371 \\U'foo'