Skip to content

Commit

Permalink
mend
Browse files Browse the repository at this point in the history
  • Loading branch information
WingedSeal committed Sep 19, 2023
1 parent 99c20f7 commit b50f58b
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 11 deletions.
21 changes: 16 additions & 5 deletions src/jmc/compile/command/_flow_control.py
Original file line number Diff line number Diff line change
Expand Up @@ -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}"


Expand Down Expand Up @@ -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)
Expand Down
10 changes: 5 additions & 5 deletions src/jmc/compile/command/builtin_function/_var_operation.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion src/jmc/compile/command/var_operation.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down

0 comments on commit b50f58b

Please sign in to comment.