summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2021-05-18 11:12:01 +0200
committerJo-Philipp Wich <jo@mein.io>2021-05-18 13:11:33 +0200
commited32c42eefbc4560408d53445c603767469c85bd (patch)
tree15db63a3f8c7d74d9013699a067d5c984f820415
parentff6811f29065951ab3917460f3d76ffe6ddb0c81 (diff)
compiler, lexer: add NO_LEGACY define to disable legacy syntax features
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r--CMakeLists.txt6
-rw-r--r--compiler.c5
-rw-r--r--lexer.c2
3 files changed, 12 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0dfa62a..1452631 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,6 +16,8 @@ OPTION(MATH_SUPPORT "Math plugin support" ON)
OPTION(UBUS_SUPPORT "Ubus plugin support" ON)
OPTION(UCI_SUPPORT "UCI plugin support" ON)
+OPTION(LEGACY_SUPPORT "Support deprecated syntax features" ON)
+
SET(LIB_SEARCH_PATH "/usr/lib/ucode/*.so:/usr/share/ucode/*.uc:./*.so:./*.uc" CACHE STRING "Default library search path")
ADD_DEFINITIONS(-DLIB_SEARCH_PATH="${LIB_SEARCH_PATH}")
@@ -31,6 +33,10 @@ ELSE()
ADD_DEFINITIONS(-DNDEBUG)
ENDIF()
+IF(NOT LEGACY_SUPPORT)
+ ADD_DEFINITIONS(-DNO_LEGACY)
+ENDIF()
+
INCLUDE(FindPkgConfig)
PKG_CHECK_MODULES(JSONC json-c json)
IF(JSONC_FOUND)
diff --git a/compiler.c b/compiler.c
index cf9ca25..5a9b579 100644
--- a/compiler.c
+++ b/compiler.c
@@ -974,6 +974,7 @@ uc_compiler_compile_delete(uc_compiler *compiler, bool assignable)
uc_chunk *chunk = uc_compiler_current_chunk(compiler);
enum insn_type type;
+#ifndef NO_LEGACY
/* If the delete keyword is followed by an opening paren, it might be a
* legacy delete(object, propname) call */
if (uc_compiler_parse_match(compiler, TK_LPAREN)) {
@@ -1006,7 +1007,9 @@ uc_compiler_compile_delete(uc_compiler *compiler, bool assignable)
/* Otherwise compile expression, ensure that it results in a property
* access (I_LVAL) and overwrite it with delete operation. */
- else {
+ else
+#endif /* NO_LEGACY */
+ {
uc_compiler_parse_precedence(compiler, P_UNARY);
type = chunk->entries[compiler->last_insn];
diff --git a/lexer.c b/lexer.c
index 84af45d..cc35d66 100644
--- a/lexer.c
+++ b/lexer.c
@@ -145,7 +145,9 @@ static const struct keyword reserved_words[] = {
{ TK_RETURN, "return", 6, { 0 } },
{ TK_ENDFOR, "endfor", 6, { 0 } },
{ TK_SWITCH, "switch", 6, { 0 } },
+#ifndef NO_LEGACY
{ TK_LOCAL, "local", 5, { 0 } },
+#endif
{ TK_ENDIF, "endif", 5, { 0 } },
{ TK_WHILE, "while", 5, { 0 } },
{ TK_BREAK, "break", 5, { 0 } },