Skip to content

Commit

Permalink
Have parse_args populate and return Settings object directly
Browse files Browse the repository at this point in the history
  • Loading branch information
iafisher committed Feb 13, 2019
1 parent 8bd8bf9 commit cc75306
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 29 deletions.
2 changes: 2 additions & 0 deletions hera/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ def __init__(self, *, color=True, debug=False, volume=VOLUME_NORMAL):
self.data_start = DEFAULT_DATA_START
self.debug = debug
self.no_debug_ops = False
self.path = None
self.stdout = False
self.subcommand = ""
self.warn_octal_on = True
self.warn_return_on = True
self.volume = volume
Expand Down
66 changes: 37 additions & 29 deletions hera/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import functools
import sys
import textwrap
from typing import Optional
from typing import List, Optional

from .assembler import assemble
from .data import Settings, VOLUME_QUIET, VOLUME_VERBOSE
Expand All @@ -25,38 +25,21 @@ def external_main(argv=None) -> None:

def main(argv=None) -> Optional[VirtualMachine]:
"""The main entry point into hera-py."""
arguments = parse_args(argv)
path = arguments["<path>"]
settings = parse_args(argv)
path = settings.path

settings = Settings()
if arguments["--no-color"] or not sys.stderr.isatty():
if not sys.stderr.isatty():
settings.color = False

if arguments["--big-stack"]:
# Arbitrary value copied over from HERA-C.
settings.data_start = 0xC167

settings.code = arguments["--code"]
settings.data = arguments["--data"]
settings.no_debug_ops = arguments["--no-debug-ops"]
settings.stdout = arguments["--stdout"]
settings.warn_return_on = not arguments["--warn-return-off"]
settings.warn_octal_on = not arguments["--warn-octal-off"]

if arguments["--verbose"]:
settings.volume = VOLUME_VERBOSE
elif arguments["--quiet"]:
settings.volume = VOLUME_QUIET

if arguments["preprocess"]:
if settings.subcommand == "preprocess":
settings.allow_interrupts = True
main_preprocess(path, settings)
return None
elif arguments["debug"]:
elif settings.subcommand == "debug":
settings.debug = True
main_debug(path, settings)
return None
elif arguments["assemble"]:
elif settings.subcommand == "assemble":
settings.allow_interrupts = True
main_assemble(path, settings)
return None
Expand Down Expand Up @@ -128,7 +111,7 @@ def main_assemble(path: str, settings: Settings) -> None:
f.write(data)


def parse_args(argv):
def parse_args(argv: List[str]) -> Settings:
if argv is None:
argv = sys.argv[1:]

Expand Down Expand Up @@ -190,15 +173,40 @@ def parse_args(argv):
sys.stderr.write("--quiet and --verbose are incompatible.\n")
sys.exit(1)

flags["<path>"] = posargs[0]
for f in FLAGS:
if f not in flags:
flags[f] = False

return flags
settings = Settings()
settings.path = posargs[0]
if flags["debug"]:
settings.subcommand = "debug"
settings.debug = True
elif flags["assemble"]:
settings.subcommand = "assemble"
elif flags["preprocess"]:
settings.subcommand = "preprocess"

settings.allow_interrupts = settings.subcommand in ("assemble", "preprocess")
settings.code = flags["--code"]
settings.color = not flags["--no-color"]
settings.data = flags["--data"]
if flags["--big-stack"]:
# Arbitrary value copied over from HERA-C.
settings.data_start = 0xC167
settings.no_debug_ops = flags["--no-debug-ops"]
settings.stdout = flags["--stdout"]
settings.warn_octal_on = not flags["--warn-octal-off"]
settings.warn_return_on = not flags["--warn-return-off"]
if flags["--verbose"]:
settings.volume = VOLUME_VERBOSE
elif flags["--quiet"]:
settings.volume = VOLUME_QUIET

return settings


def short_to_long(arg):
def short_to_long(arg: str) -> str:
if arg == "-h":
return "--help"
elif arg == "-v":
Expand All @@ -209,7 +217,7 @@ def short_to_long(arg):
return arg


def dump_state(vm, settings):
def dump_state(vm: VirtualMachine, settings: Settings) -> None:
"""Print the state of the virtual machine to standard output."""
# Make sure that all program output has been printed.
sys.stdout.flush()
Expand Down

0 comments on commit cc75306

Please sign in to comment.