Hint at use of and/or when &&/|| is improperly used (#1886)

This commit is contained in:
kristopher tate
2019-01-26 05:10:40 +09:00
committed by Jimmi Holst Christensen
parent 3bec3b9f9b
commit 5bf9ffdc5b
6 changed files with 226 additions and 196 deletions

View File

@@ -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 "!";