From b50f58b95fd66f03fc050fdec2a393a25757b315 Mon Sep 17 00:00:00 2001 From: WingedSeal Date: Tue, 19 Sep 2023 22:14:36 +0700 Subject: [PATCH] mend --- src/jmc/compile/command/_flow_control.py | 21 ++++++++++++++----- .../builtin_function/_var_operation.py | 10 ++++----- src/jmc/compile/command/var_operation.py | 2 +- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/jmc/compile/command/_flow_control.py b/src/jmc/compile/command/_flow_control.py index 6945b138..2d261d8b 100644 --- a/src/jmc/compile/command/_flow_control.py +++ b/src/jmc/compile/command/_flow_control.py @@ -216,22 +216,32 @@ def parse_switch(scoreboard_player: ScoreboardPlayer, has_default = "default" in case_numbers for (case_body, case_label) in zip(func_contents, case_numbers): if has_default and case_label != "default": - case_body.append(f"scoreboard players set __found_case__ {datapack.var_name} 1") + case_body.append( + f"scoreboard players set __found_case__ {datapack.var_name} 1") datapack.add_raw_private_function( name, case_body, f"{str(func_count)}/{case_label}") datapack.add_raw_private_function( name, [ f"$function {datapack.namespace}:{DataPack.private_name}/{name}/{func_count}/$(switch_key)" ], f"{str(func_count)}/select") - assert not isinstance(scoreboard_player, int) + assert not isinstance(scoreboard_player.value, int) return ( (f"scoreboard players set __found_case__ {datapack.var_name} 0\n" if has_default else "") + f"execute store result storage {datapack.namespace}:{datapack.storage_name} switch_key int 1 run scoreboard players get {scoreboard_player.value[1]} {scoreboard_player.value[0]}" + f"\nfunction {datapack.namespace}:{DataPack.private_name}/{name}/{func_count}/select with storage {datapack.namespace}:{datapack.storage_name}" + (f"\nexecute unless score __found_case__ {datapack.var_name} matches 1 run function {datapack.namespace}:{DataPack.private_name}/{name}/{func_count}/default" if has_default else "") ) - __parse_switch_binary(start_at, len(func_contents) + start_at - 1, func_count, - datapack, func_contents, scoreboard_player, name, start_at) + __parse_switch_binary( + start_at, + len(func_contents) + + start_at - + 1, + func_count, + datapack, + func_contents, + scoreboard_player, + name, + start_at) return f"function {datapack.namespace}:{DataPack.private_name}/{name}/{func_count}" @@ -290,7 +300,8 @@ def switch(command: list[Token], datapack: DataPack, if case_start is None: case_start = expected_case if count != expected_case: - datapack.version.require(16, tokens[1], tokenizer, suggestion=f"Expected case number {expected_case}") + datapack.version.require( + 16, tokens[1], tokenizer, suggestion=f"Expected case number {expected_case}") if len(tokens) < 3: raise JMCSyntaxException( "Expected colon (:)", tokens[1], tokenizer, col_length=True) diff --git a/src/jmc/compile/command/builtin_function/_var_operation.py b/src/jmc/compile/command/builtin_function/_var_operation.py index fb726a64..047512e0 100644 --- a/src/jmc/compile/command/builtin_function/_var_operation.py +++ b/src/jmc/compile/command/builtin_function/_var_operation.py @@ -53,7 +53,7 @@ def call(self) -> str: run = [ f"scoreboard players operation {N} {var} = {self.args['n']}", self.datapack.call_func(self.name, "main"), - f"scoreboard players operation {self.var} {var} = {x_n} {var}" + f"scoreboard players operation {self.var} = {x_n} {var}" ] if self.is_execute: @@ -164,19 +164,19 @@ def call(self) -> str: run.extend([ self.datapack.call_func(self.name, "main"), - f"scoreboard players operation {self.var} {var} = {result} {var}", + f"scoreboard players operation {self.var} = {result} {var}", ]) if isinstance(start.value, int): if start.value < 0: run.append( - f"scoreboard players remove {self.var} {var} {abs(start.value)}") + f"scoreboard players remove {self.var} {abs(start.value)}") elif start.value > 0: run.append( - f"scoreboard players add {self.var} {var} {start.value}") + f"scoreboard players add {self.var} {start.value}") else: run.append( - f"scoreboard players operation {self.var} {var} -= {start.value[1]} {start.value[0]}") + f"scoreboard players operation {self.var} -= {start.value[1]} {start.value[0]}") if self.is_execute: count = self.datapack.get_count(self.name) diff --git a/src/jmc/compile/command/var_operation.py b/src/jmc/compile/command/var_operation.py index c9a8c5d6..7b8aec09 100644 --- a/src/jmc/compile/command/var_operation.py +++ b/src/jmc/compile/command/var_operation.py @@ -148,7 +148,7 @@ def variable_operation( "Unexpected token", tokens[4], tokenizer) return VAR_OPERATION_COMMANDS[tokens[2].string]( - tokens[3], tokens[2], datapack, tokenizer, var=tokens[0].string, is_execute=is_execute).call() + tokens[3], tokens[2], datapack, tokenizer, var=tokens[0].string + " " + objective_name, is_execute=is_execute).call() if (len(tokens) == 4 and operator == "=" and tokens[2].token_type == TokenType.KEYWORD and tokens[3].token_type == TokenType.PAREN_ROUND):