Skip to content

Commit

Permalink
Fix switch case from pr
Browse files Browse the repository at this point in the history
  • Loading branch information
WingedSeal committed May 27, 2023
1 parent 084cbd9 commit 1c42090
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 16 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -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)

Expand Down
17 changes: 9 additions & 8 deletions src/jmc/compile/command/_flow_control.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand All @@ -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(
Expand Down Expand Up @@ -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"
Expand Down
8 changes: 4 additions & 4 deletions src/jmc/compile/command/builtin_function/execute_excluded.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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(
Expand Down
4 changes: 2 additions & 2 deletions src/jmc/compile/command/builtin_function/load_only.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)}")
Expand Down Expand Up @@ -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 = []
Expand Down
2 changes: 1 addition & 1 deletion src/jmc/config.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
VERSION = "v1.2.14-alpha.4"
VERSION = "v1.2.14"
CONFIG_FILE_NAME = "jmc_config.json"

0 comments on commit 1c42090

Please sign in to comment.