diff options
| author | gingerBill <ginger.bill.22@gmail.com> | 2016-08-23 11:11:01 +0100 |
|---|---|---|
| committer | gingerBill <ginger.bill.22@gmail.com> | 2016-08-23 11:11:01 +0100 |
| commit | 975705f1fc68af73b25ff135733c57d8cfd62912 (patch) | |
| tree | 97498decafa4cfd5a960ed8b329017f023315bb8 /src/tokenizer.cpp | |
| parent | aaecb18c8f37a7f7feb3400178633819859b642f (diff) | |
Infix and Postfix procedure calls
Diffstat (limited to 'src/tokenizer.cpp')
| -rw-r--r-- | src/tokenizer.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 68c8918d0..82c98e256 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -31,6 +31,9 @@ TOKEN_KIND(Token__OperatorBegin, "_OperatorBegin"), \ TOKEN_KIND(Token_as, "as"), \ TOKEN_KIND(Token_transmute, "transmute"), \ \ + TOKEN_KIND(Token_CustomUnaryOp, "custom unary op"), \ + TOKEN_KIND(Token_CustomBinaryOp, "custom binary op"), \ +\ TOKEN_KIND(Token__AssignOpBegin, "_AssignOpBegin"), \ TOKEN_KIND(Token_AddEq, "+="), \ TOKEN_KIND(Token_SubEq, "-="), \ @@ -199,9 +202,11 @@ i32 token_precedence(Token t) { case Token_Shl: case Token_Shr: return 5; + case Token_CustomBinaryOp: + return 6; case Token_as: case Token_transmute: - return 6; + return 7; } return 0; @@ -642,6 +647,27 @@ Token tokenizer_get_token(Tokenizer *t) { token.kind = Token_EOF; break; + case '\'': { + token.kind = Token_CustomUnaryOp; + while (rune_is_whitespace(t->curr_rune)) + advance_to_next_rune(t); + token.string.text = t->curr; + while (rune_is_letter(t->curr_rune) || rune_is_digit(t->curr_rune)) { + advance_to_next_rune(t); + } + token.string.len = t->curr - token.string.text; + + while (rune_is_whitespace(t->curr_rune)) + advance_to_next_rune(t); + + if (t->curr_rune == '\'') { + advance_to_next_rune(t); + token.kind = Token_CustomBinaryOp; + } + + return token; + } break; + case '`': // Raw String Literal case '"': // String Literal { @@ -684,7 +710,7 @@ Token tokenizer_get_token(Tokenizer *t) { } } break; - case '\'': { // Rune Literal + case '$': { // Rune Literal b32 valid = true; isize len = 0; token.kind = Token_Rune; @@ -696,11 +722,11 @@ Token tokenizer_get_token(Tokenizer *t) { break; } advance_to_next_rune(t); - if (r == '\'') + if (r == '$') break; len++; if (r == '\\') { - if (!scan_escape(t, '\'')) + if (!scan_escape(t, '$')) valid = false; } } |