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

import os
import sys

from src import port
from src import log
from src.parse2 import tokenize as tokenize2
from src.parse2 import parse as parse2
from src import parse
from src 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 = "NewLang"
    if len(args) == 1:
        exe = args[0]
    if len(args) != 2:
        print("Usage: %s FILENAME" % (exe))
        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)