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 import tokenize
from src import parse
from src import oldparse
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_NEW_PARSE"):
        try:
            code = open(file, encoding="utf-8").read()
            tokens = tokenize.tokenize(code, file)
            ast = parse.parse(tokens, None)
        except UnicodeError:
            pass
    else:
        ast = oldparse.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)