summaryrefslogtreecommitdiff
path: root/projects/hack-vm/__main__.py
diff options
context:
space:
mode:
Diffstat (limited to 'projects/hack-vm/__main__.py')
-rw-r--r--projects/hack-vm/__main__.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/projects/hack-vm/__main__.py b/projects/hack-vm/__main__.py
index 5373fe9..33df369 100644
--- a/projects/hack-vm/__main__.py
+++ b/projects/hack-vm/__main__.py
@@ -3,10 +3,11 @@ from .memory import translate_memory
from .arith_logic import translate_arith_logic
from .compare import translate_compare
from .branching import translate_branching
+from .function import translate_function, translate_return
from .utils import *
-def vm_translate(input_path):
+def vm_translate(input_path, verbose):
# program name, for static variable labels
input_fn = input_path.split("/")[-1]
prog = input_fn[:-3] if input_fn.endswith(".vm") else input_fn
@@ -34,13 +35,17 @@ def vm_translate(input_path):
case []:
continue
case [("push" | "pop") as action, segment, index]:
- asm += translate_memory(action, segment, index, prog)
+ asm += translate_memory(action, segment, index, prog, verbose)
case [("add" | "sub" | "neg" | "and" | "or" | "not") as command]:
- asm += translate_arith_logic(command)
+ asm += translate_arith_logic(command, verbose)
case [("lt" | "eq" | "gt") as command]:
- asm += translate_compare(command)
+ asm += translate_compare(command, verbose)
case [("label" | "goto" | "if-goto") as action, label]:
- asm += translate_branching(action, label)
+ asm += translate_branching(action, label, verbose)
+ case [("call" | "function") as action, function, n]:
+ asm += translate_function(action, function, n, prog, verbose)
+ case ["return"]:
+ asm += translate_return(verbose)
case _:
exit_on_error(
f"Syntax error: invalid command: {cmd}", EXIT_CODE_SYNTAX_ERROR
@@ -61,6 +66,7 @@ def vm_translate(input_path):
if __name__ == "__main__":
parser = ArgumentParser("hack-vm")
+ parser.add_argument("-v", "--verbose", action="store_true", help="verbose mode")
parser.add_argument("input_path", help="input file in HACK VM")
args = parser.parse_args()
- vm_translate(args.input_path)
+ vm_translate(args.input_path, args.verbose)