aboutsummaryrefslogtreecommitdiff
path: root/src/tokenizer.cpp
diff options
context:
space:
mode:
authorkristopher tate <kris.tate+github@gmail.com>2019-01-26 05:10:40 +0900
committerJimmi Holst Christensen <jimmi@ziglang.org>2019-01-25 21:10:40 +0100
commit5bf9ffdc5be02e67b57fe9398ad9d13147bfb0c8 (patch)
treef8c68dbdabe3534f80134f755ec4b1ff007bdc22 /src/tokenizer.cpp
parent3bec3b9f9ba49bbc2e7244737c50bdbaa12a6b14 (diff)
downloadzig-5bf9ffdc5be02e67b57fe9398ad9d13147bfb0c8.tar.gz
zig-5bf9ffdc5be02e67b57fe9398ad9d13147bfb0c8.zip
Hint at use of and/or when &&/|| is improperly used (#1886)
Diffstat (limited to 'src/tokenizer.cpp')
-rw-r--r--src/tokenizer.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp
index 921ee4de09..464412d443 100644
--- a/src/tokenizer.cpp
+++ b/src/tokenizer.cpp
@@ -199,6 +199,7 @@ enum TokenizeState {
TokenizeStateSawDash,
TokenizeStateSawMinusPercent,
TokenizeStateSawAmpersand,
+ TokenizeStateSawAmpersandAmpersand,
TokenizeStateSawCaret,
TokenizeStateSawBar,
TokenizeStateSawBarBar,
@@ -891,6 +892,10 @@ void tokenize(Buf *buf, Tokenization *out) {
end_token(&t);
t.state = TokenizeStateStart;
break;
+ case '&':
+ set_token_id(&t, t.cur_tok, TokenIdAmpersandAmpersand);
+ t.state = TokenizeStateSawAmpersandAmpersand;
+ break;
default:
t.pos -= 1;
end_token(&t);
@@ -898,6 +903,11 @@ void tokenize(Buf *buf, Tokenization *out) {
continue;
}
break;
+ case TokenizeStateSawAmpersandAmpersand:
+ t.pos -= 1;
+ end_token(&t);
+ t.state = TokenizeStateStart;
+ continue;
case TokenizeStateSawCaret:
switch (c) {
case '=':
@@ -1468,6 +1478,7 @@ void tokenize(Buf *buf, Tokenization *out) {
case TokenizeStateSawPlus:
case TokenizeStateSawDash:
case TokenizeStateSawAmpersand:
+ case TokenizeStateSawAmpersandAmpersand:
case TokenizeStateSawCaret:
case TokenizeStateSawBar:
case TokenizeStateSawEq:
@@ -1515,6 +1526,7 @@ void tokenize(Buf *buf, Tokenization *out) {
const char * token_name(TokenId id) {
switch (id) {
case TokenIdAmpersand: return "&";
+ case TokenIdAmpersandAmpersand: return "&&";
case TokenIdArrow: return "->";
case TokenIdAtSign: return "@";
case TokenIdBang: return "!";