summaryrefslogtreecommitdiffhomepage
path: root/lexer.c
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2022-03-06 23:56:41 +0100
committerJo-Philipp Wich <jo@mein.io>2022-03-07 23:17:51 +0100
commitefe8a0233bea283765443226340fa732cffc9ca6 (patch)
tree3532b18c9ada2e4bab1ec7d4e89e960067168c3e /lexer.c
parent05bd7edd7a101aa09a54371aa34bc22646b75bee (diff)
syntax: support add new operators
- Support ES2016 exponentiation (**) and exponentiation assignment (**=) - Support ES2020 nullish coalescing (??) and logical nullish assignment (??=) - Support ES2021 logical and assignment (&&=) and logical or assignment (||=) Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'lexer.c')
-rw-r--r--lexer.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/lexer.c b/lexer.c
index b41e680..5fe7f6b 100644
--- a/lexer.c
+++ b/lexer.c
@@ -75,6 +75,10 @@ static const struct token tokens[] = {
{ TK_ELLIP, { .pat = "..." }, 3, NULL },
{ TK_QLBRACK, { .pat = "?.[" }, 3, NULL },
{ TK_QLPAREN, { .pat = "?.(" }, 3, NULL },
+ { TK_ASEXP, { .pat = "**=" }, 3, NULL },
+ { TK_ASAND, { .pat = "&&=" }, 3, NULL },
+ { TK_ASOR, { .pat = "||=" }, 3, NULL },
+ { TK_ASNULLISH, { .pat = "\?\?=" }, 3, NULL },
{ TK_AND, { .pat = "&&" }, 2, NULL },
{ TK_ASADD, { .pat = "+=" }, 2, NULL },
{ TK_ASBAND, { .pat = "&=" }, 2, NULL },
@@ -84,6 +88,7 @@ static const struct token tokens[] = {
{ TK_ASMOD, { .pat = "%=" }, 2, NULL },
{ TK_ASMUL, { .pat = "*=" }, 2, NULL },
{ TK_ASSUB, { .pat = "-=" }, 2, NULL },
+ { TK_EXP, { .pat = "**" }, 2, NULL },
{ TK_DEC, { .pat = "--" }, 2, NULL },
{ TK_INC, { .pat = "++" }, 2, NULL },
{ TK_EQ, { .pat = "==" }, 2, NULL },
@@ -100,6 +105,7 @@ static const struct token tokens[] = {
{ TK_LSTM, { .pat = "{%" }, 2, NULL },
{ TK_RSTM, { .pat = "%}" }, 2, NULL },
{ TK_ARROW, { .pat = "=>" }, 2, NULL },
+ { TK_NULLISH, { .pat = "??" }, 2, NULL },
{ TK_QDOT, { .pat = "?." }, 2, NULL },
{ TK_ADD, { .pat = "+" }, 1, NULL },
{ TK_ASSIGN, { .pat = "=" }, 1, NULL },