From efe8a0233bea283765443226340fa732cffc9ca6 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sun, 6 Mar 2022 23:56:41 +0100 Subject: 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 --- include/ucode/compiler.h | 6 ++++-- include/ucode/lexer.h | 6 ++++++ include/ucode/vm.h | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/ucode/compiler.h b/include/ucode/compiler.h index c112027..ffe7caf 100644 --- a/include/ucode/compiler.h +++ b/include/ucode/compiler.h @@ -37,11 +37,11 @@ typedef enum { P_COMMA, /* , */ - P_ASSIGN, /* = += -= *= /= %= <<= >>= &= ^= |= */ + P_ASSIGN, /* = += -= *= /= %= <<= >>= &= ^= |= ||= &&= **= ??= */ P_TERNARY, /* ?: */ - P_OR, /* || */ + P_OR, /* || ?? */ P_AND, /* && */ P_BOR, /* | */ P_BXOR, /* ^ */ @@ -55,6 +55,8 @@ typedef enum { P_ADD, /* + - */ P_MUL, /* * / % */ + P_EXP, /* ** */ + P_UNARY, /* ! ~ +… -… ++… --… */ P_INC, /* …++ …-- */ diff --git a/include/ucode/lexer.h b/include/ucode/lexer.h index 30849e0..aa5d78b 100644 --- a/include/ucode/lexer.h +++ b/include/ucode/lexer.h @@ -63,6 +63,7 @@ typedef enum { TK_MUL, TK_DIV, TK_MOD, + TK_EXP, TK_NOT, TK_COMPL, TK_INC, @@ -109,6 +110,11 @@ typedef enum { TK_QLBRACK, TK_QLPAREN, TK_QDOT, + TK_ASEXP, + TK_ASAND, + TK_ASOR, + TK_ASNULLISH, + TK_NULLISH, TK_EOF, TK_ERROR diff --git a/include/ucode/vm.h b/include/ucode/vm.h index 4ba4627..24818a1 100644 --- a/include/ucode/vm.h +++ b/include/ucode/vm.h @@ -77,6 +77,7 @@ __insn(SUB) \ __insn(MUL) \ __insn(DIV) \ __insn(MOD) \ +__insn(EXP) \ __insn(NOT) \ __insn(COMPL) \ __insn(PLUS) \ -- cgit v1.2.3