diff options
author | Jo-Philipp Wich <jo@mein.io> | 2021-05-18 11:12:01 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2021-05-18 13:11:33 +0200 |
commit | ed32c42eefbc4560408d53445c603767469c85bd (patch) | |
tree | 15db63a3f8c7d74d9013699a067d5c984f820415 | |
parent | ff6811f29065951ab3917460f3d76ffe6ddb0c81 (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.txt | 6 | ||||
-rw-r--r-- | compiler.c | 5 | ||||
-rw-r--r-- | lexer.c | 2 |
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) @@ -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]; @@ -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 } }, |