From 1c4209041ea6ef75c8f129367746ce64e28c488a Mon Sep 17 00:00:00 2001 From: WingedSeal Date: Sat, 27 May 2023 22:38:02 +0700 Subject: [PATCH] Fix switch case from pr --- README.md | 2 +- src/jmc/compile/command/_flow_control.py | 17 +++++++++-------- .../builtin_function/execute_excluded.py | 8 ++++---- .../command/builtin_function/load_only.py | 4 ++-- src/jmc/config.py | 2 +- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 762ac3fc..f75b7a64 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# JMC · [![license-mit](https://badgen.net/badge/license/MIT/blue/)](https://github.com/WingedSeal/jmc/blob/main/LICENSE) [![release](https://badgen.net/badge/release/v1.2.14-alpha.4/blue/)](https://github.com/WingedSeal/jmc/releases/latest) [![build-passing](https://badgen.net/badge/build/passing/green/)](https://wingedseal.github.io/jmc/#/) [![discord-invite](https://badgen.net/badge/discord/Official-Server/blue/?icon=discord)](https://discord.gg/PNWKpwdzD3) +# JMC · [![license-mit](https://badgen.net/badge/license/MIT/blue/)](https://github.com/WingedSeal/jmc/blob/main/LICENSE) [![release](https://badgen.net/badge/release/v1.2.14/blue/)](https://github.com/WingedSeal/jmc/releases/latest) [![build-passing](https://badgen.net/badge/build/passing/green/)](https://wingedseal.github.io/jmc/#/) [![discord-invite](https://badgen.net/badge/discord/Official-Server/blue/?icon=discord)](https://discord.gg/PNWKpwdzD3) ## (JavaScript-like Minecraft Function) diff --git a/src/jmc/compile/command/_flow_control.py b/src/jmc/compile/command/_flow_control.py index 99abfeed..428a3e58 100644 --- a/src/jmc/compile/command/_flow_control.py +++ b/src/jmc/compile/command/_flow_control.py @@ -191,7 +191,7 @@ def __parse_switch_binary(min_: int, max_: int, count: str, datapack: DataPack, def parse_switch(scoreboard_player: ScoreboardPlayer, - func_contents: list[list[str]], start_at: int, datapack: DataPack, name: str = SWITCH_CASE_NAME) -> str: + func_contents: list[list[str]], datapack: DataPack, name: str = SWITCH_CASE_NAME, start_at: int = 1) -> str: """ Create a binary tree for JMC switch-case @@ -231,8 +231,8 @@ def switch(command: list[Token], datapack: DataPack, list_of_tokens = tokenizer.parse( command[2].string[1:-1], command[2].line, command[2].col + 1, expect_semicolon=True) - case_count = None; - case_start = None; + case_count = 0 + case_start = 0 cases_content: list[list[list[Token]]] = [] current_case_content: list[list[Token]] = [] if list_of_tokens[0][0].string != "case" or list_of_tokens[0][0].token_type != TokenType.KEYWORD: @@ -248,17 +248,17 @@ def switch(command: list[Token], datapack: DataPack, "Expected case number", tokens[0], tokenizer, col_length=True) if tokens[1].string == "-": count_str = tokens[1].string + tokens[2].string - tokens.pop(2) + del tokens[2] else: count_str = tokens[1].string - if not count_str.lstrip('-').isalnum(): + if not count_str.lstrip("-").isalnum(): raise JMCSyntaxException( "Expected case number", tokens[1], tokenizer) count = int(count_str) - if case_count == None: + if not case_count: case_count = count - if case_start == None: + if not case_start: case_start = case_count if count != case_count: raise JMCSyntaxException( @@ -300,7 +300,8 @@ def switch(command: list[Token], datapack: DataPack, raise JMCSyntaxException( "Unexpected integer in switch case", tokens[0], tokenizer) - return parse_switch(scoreboard_player, func_contents, case_start, datapack) + return parse_switch(scoreboard_player, func_contents, + datapack, start_at=case_start) FOR_NAME = "for_loop" diff --git a/src/jmc/compile/command/builtin_function/execute_excluded.py b/src/jmc/compile/command/builtin_function/execute_excluded.py index 86746237..c51b392f 100644 --- a/src/jmc/compile/command/builtin_function/execute_excluded.py +++ b/src/jmc/compile/command/builtin_function/execute_excluded.py @@ -229,12 +229,12 @@ def call(self) -> str: ) class HardcodeSwitch(JMCFunction): def call(self) -> str: - begin_at = int(self.args["begin_at"]) + start_at = int(self.args["begin_at"]) count = int(self.args["count"]) func_contents: list[list[str]] = [] scoreboard_player = find_scoreboard_player_type( self.raw_args["switch"].token, self.tokenizer) - for i in range(begin_at, count + 1): + for i in range(start_at, count + 1): try: func_contents.append(self.datapack.parse_function_token( Token( @@ -255,8 +255,8 @@ def call(self) -> str: error.msg = f"WARNING: This error happens inside {self.call_string}, error position might not be accurate\n\n" + error.msg raise error - return parse_switch(scoreboard_player, func_contents, begin_at, - self.datapack, self.name) + return parse_switch(scoreboard_player, func_contents, + self.datapack, self.name, start_at) @func_property( diff --git a/src/jmc/compile/command/builtin_function/load_only.py b/src/jmc/compile/command/builtin_function/load_only.py index 4115787c..598ed57b 100644 --- a/src/jmc/compile/command/builtin_function/load_only.py +++ b/src/jmc/compile/command/builtin_function/load_only.py @@ -93,7 +93,7 @@ def call(self) -> str: main_func.append( f"""execute if score {self.tag_id_var} {DataPack.var_name} matches 1.. run {parse_switch(ScoreboardPlayer( - PlayerType.SCOREBOARD, (self.tag_id_var, "@s")), func_contents, self.datapack, self.name)}""") + PlayerType.SCOREBOARD, (self.tag_id_var, "@s")), func_contents, self.datapack, name=self.name)}""") else: main_func.append( f"execute if score {self.tag_id_var} {DataPack.var_name} matches 1.. run {self.datapack.call_func(self.name, main_count)}") @@ -419,7 +419,7 @@ def call(self) -> str: [f"function {self.datapack.namespace}:{func}"]) run = [ parse_switch(ScoreboardPlayer( - PlayerType.SCOREBOARD, (obj, "@s")), func_contents, 1, self.datapack, self.name), + PlayerType.SCOREBOARD, (obj, "@s")), func_contents, self.datapack, self.name), ] else: run = [] diff --git a/src/jmc/config.py b/src/jmc/config.py index acd66900..49af3ba2 100644 --- a/src/jmc/config.py +++ b/src/jmc/config.py @@ -1,2 +1,2 @@ -VERSION = "v1.2.14-alpha.4" +VERSION = "v1.2.14" CONFIG_FILE_NAME = "jmc_config.json"