aboutsummaryrefslogtreecommitdiff
path: root/src/tokenizer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tokenizer.cpp')
-rw-r--r--src/tokenizer.cpp29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp
index f98c0c8344..44d838a723 100644
--- a/src/tokenizer.cpp
+++ b/src/tokenizer.cpp
@@ -195,7 +195,8 @@ enum TokenizeState {
TokenizeStateSawMinusPercent,
TokenizeStateSawAmpersand,
TokenizeStateSawCaret,
- TokenizeStateSawPipe,
+ TokenizeStateSawBar,
+ TokenizeStateSawBarBar,
TokenizeStateLineComment,
TokenizeStateLineString,
TokenizeStateLineStringEnd,
@@ -594,7 +595,7 @@ void tokenize(Buf *buf, Tokenization *out) {
break;
case '|':
begin_token(&t, TokenIdBinOr);
- t.state = TokenizeStateSawPipe;
+ t.state = TokenizeStateSawBar;
break;
case '=':
begin_token(&t, TokenIdEq);
@@ -888,13 +889,17 @@ void tokenize(Buf *buf, Tokenization *out) {
continue;
}
break;
- case TokenizeStateSawPipe:
+ case TokenizeStateSawBar:
switch (c) {
case '=':
set_token_id(&t, t.cur_tok, TokenIdBitOrEq);
end_token(&t);
t.state = TokenizeStateStart;
break;
+ case '|':
+ set_token_id(&t, t.cur_tok, TokenIdBarBar);
+ t.state = TokenizeStateSawBarBar;
+ break;
default:
t.pos -= 1;
end_token(&t);
@@ -902,6 +907,19 @@ void tokenize(Buf *buf, Tokenization *out) {
continue;
}
break;
+ case TokenizeStateSawBarBar:
+ switch (c) {
+ case '=':
+ set_token_id(&t, t.cur_tok, TokenIdBarBarEq);
+ end_token(&t);
+ t.state = TokenizeStateStart;
+ break;
+ default:
+ t.pos -= 1;
+ end_token(&t);
+ t.state = TokenizeStateStart;
+ continue;
+ }
case TokenizeStateSawSlash:
switch (c) {
case '/':
@@ -1428,7 +1446,7 @@ void tokenize(Buf *buf, Tokenization *out) {
case TokenizeStateSawDash:
case TokenizeStateSawAmpersand:
case TokenizeStateSawCaret:
- case TokenizeStateSawPipe:
+ case TokenizeStateSawBar:
case TokenizeStateSawEq:
case TokenizeStateSawBang:
case TokenizeStateSawLessThan:
@@ -1443,6 +1461,7 @@ void tokenize(Buf *buf, Tokenization *out) {
case TokenizeStateSawMinusPercent:
case TokenizeStateLineString:
case TokenizeStateLineStringEnd:
+ case TokenizeStateSawBarBar:
end_token(&t);
break;
case TokenizeStateSawDotDot:
@@ -1475,6 +1494,7 @@ const char * token_name(TokenId id) {
case TokenIdArrow: return "->";
case TokenIdAtSign: return "@";
case TokenIdBang: return "!";
+ case TokenIdBarBar: return "||";
case TokenIdBinOr: return "|";
case TokenIdBinXor: return "^";
case TokenIdBitAndEq: return "&=";
@@ -1577,6 +1597,7 @@ const char * token_name(TokenId id) {
case TokenIdTimesEq: return "*=";
case TokenIdTimesPercent: return "*%";
case TokenIdTimesPercentEq: return "*%=";
+ case TokenIdBarBarEq: return "||=";
}
return "(invalid token)";
}