From dacfc9de15c8bbf510c52b708b64e7980d8fe6ff Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 5 Nov 2019 20:09:09 +0000 Subject: [PATCH] Fix `//+build` for ! e.g. `//+build !windows amd64, linux !amd64` --- src/parser.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/parser.cpp b/src/parser.cpp index 891711a50..7d59eaf9e 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -4585,13 +4585,12 @@ String build_tag_get_token(String s, String *out) { while (n < s.len) { Rune rune = 0; isize width = gb_utf8_decode(&s[n], s.len-n, &rune); - if (n == 0 && rune == ',') { - *out = substring(s, width, s.len); - return substring(s, 0, width); - } - if (!rune_is_letter(rune) && !rune_is_digit(rune)) { - *out = substring(s, n, s.len); - return substring(s, 0, n); + if (n == 0 && rune == '!') { + + } else if (!rune_is_letter(rune) && !rune_is_digit(rune)) { + isize k = gb_max(gb_max(n, width), 1); + *out = substring(s, k, s.len); + return substring(s, 0, k); } n += width; } @@ -4614,7 +4613,7 @@ bool parse_build_tag(Token token_for_pos, String s) { bool this_kind_correct = true; do { - String p = build_tag_get_token(s, &s); + String p = string_trim_whitespace(build_tag_get_token(s, &s)); if (p.len == 0) break; if (p == ",") break;