aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-07-31 11:37:14 +0100
committergingerBill <bill@gingerbill.org>2023-07-31 11:37:14 +0100
commit0de7df9eab9b256e0d1c8da7c9fc8c422c5ac1a7 (patch)
tree6f635a6fbc675797de0a47067165f7e54bd0abac /src/parser.cpp
parent60e509b1e066da14461b3832307065726e651153 (diff)
Improve `//+vet`; remove `using` in many places; add `//+vet !using-stmt` where necessary
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index b99182189..7d1c37d84 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -5563,7 +5563,9 @@ gb_internal u64 parse_vet_tag(Token token_for_pos, String s) {
while (s.len > 0) {
String p = string_trim_whitespace(vet_tag_get_token(s, &s));
- if (p.len == 0) break;
+ if (p.len == 0) {
+ break;
+ }
bool is_notted = false;
if (p[0] == '!') {
@@ -5571,14 +5573,10 @@ gb_internal u64 parse_vet_tag(Token token_for_pos, String s) {
p = substring(p, 1, p.len);
if (p.len == 0) {
syntax_error(token_for_pos, "Expected a vet flag name after '!'");
- break;
+ return build_context.vet_flags;
}
}
- if (p.len == 0) {
- continue;
- }
-
u64 flag = get_vet_flag_from_name(p);
if (flag != VetFlag_NONE) {
if (is_notted) {
@@ -5595,13 +5593,20 @@ gb_internal u64 parse_vet_tag(Token token_for_pos, String s) {
error_line("\tusing-stmt\n");
error_line("\tusing-param\n");
error_line("\textra\n");
- break;
+ return build_context.vet_flags;
}
}
+ if (vet_flags == 0 && vet_not_flags == 0) {
+ return build_context.vet_flags;
+ }
if (vet_flags == 0 && vet_not_flags != 0) {
- vet_flags = VetFlag_All;
+ return build_context.vet_flags &~ vet_not_flags;
+ }
+ if (vet_flags != 0 && vet_not_flags == 0) {
+ return vet_flags;
}
+ GB_ASSERT(vet_flags != 0 && vet_not_flags != 0);
return vet_flags &~ vet_not_flags;
}