Newer
Older
NewLang / src / newlang / main.py
# SPDX-License-Identifier: LGPL-2.1-only
# Copyright 2022 Jookia <contact@jookia.org>

import os
import sys

from newlang import port
from newlang import log
from newlang.parse2 import tokenize as tokenize2
from newlang.parse2 import parse as parse2
from newlang import parse
from newlang import interp


def run_file(file, log_level=log.NORMAL):
    log.set_default_log_level(log_level)
    ast = None
    if os.getenv("NEWLANG_PARSE2"):
        try:
            code = open(file, encoding="utf-8").read()
            tokens = tokenize2.tokenize(code, file)
            ast = parse2.parse(tokens, None)
        except UnicodeError:
            pass
    else:
        ast = parse.parse_file(file)
    if not ast:
        return 1
    interp.run_ast(ast)
    return 0


def main():
    args = sys.argv
    log_level = os.getenv("NEWLANG_LOG_LEVEL")
    exe_name = "newlang"
    if len(args) != 2:
        print("Usage: %s FILENAME" % (exe_name))
        return 1
    return run_file(args[1], log_level)


def unexpected_exit():
    input("Unexpected exit. Press any key to continue.")


def wait_main():
    port.atexit_register_one(unexpected_exit)
    code = main()
    port.atexit_unregister()
    input("Exited with code %s. Press any key to continue." % (code))
    sys.exit(code)