diff options
| author | Vexu <git@vexu.eu> | 2020-01-14 16:39:54 +0200 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-01-14 13:10:52 -0500 |
| commit | af2ede4d96d5dd01a9db2f6fbfbe430214beaf63 (patch) | |
| tree | 5db5a5989dc010b4e0c00d02c26d4f22dd31be8b /lib/std | |
| parent | 50754ba336e99ac3db972a8b4e7bc583d77f2892 (diff) | |
| download | zig-af2ede4d96d5dd01a9db2f6fbfbe430214beaf63.tar.gz zig-af2ede4d96d5dd01a9db2f6fbfbe430214beaf63.zip | |
fix crash on multiline library name
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/zig/parse.zig | 7 | ||||
| -rw-r--r-- | lib/std/zig/parser_test.zig | 10 |
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig index 7cc9931d4e..604de516c4 100644 --- a/lib/std/zig/parse.zig +++ b/lib/std/zig/parse.zig @@ -285,7 +285,12 @@ fn parseTopLevelDecl(arena: *Allocator, it: *TokenIterator, tree: *Tree) !?*Node if (extern_export_inline_token) |token| { if (lib_name) |string_literal_node| - putBackToken(it, string_literal_node.cast(Node.StringLiteral).?.token); + if (string_literal_node.cast(Node.StringLiteral)) |single| { + putBackToken(it, single.token); + } else if (string_literal_node.cast(Node.MultilineStringLiteral)) |multi| { + while (multi.lines.pop()) |line| + putBackToken(it, line); + } else unreachable; putBackToken(it, token); return null; } diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index c57540ade9..1ebef6a114 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -2721,6 +2721,16 @@ test "zig fmt: extern without container keyword returns error" { ); } +test "zig fmt: extern multiline lib name" { + try testError( + \\extern \\super + \\ \\long + \\ \\library + \\ \\name + \\ + ); +} + const std = @import("std"); const mem = std.mem; const warn = std.debug.warn; |
