diff --git a/src/main.nim b/src/main.nim index 43242a1..5521c13 100644 --- a/src/main.nim +++ b/src/main.nim @@ -2,7 +2,9 @@ import strformat import strutils import terminal +import parseopt import os + # Thanks art <3 import jale/editor as ed import jale/templates @@ -18,6 +20,7 @@ import frontend/parser as p import frontend/compiler as c import backend/vm as v import util/serializer as s +import config # Forward declarations proc fillSymbolTable(tokenizer: Lexer) @@ -290,11 +293,54 @@ proc runFile(f: string) = when isMainModule: setControlCHook(proc () {.noconv.} = quit(0)) - let args = commandLineParams() - if args.len() == 0: + var optParser = initOptParser(commandLineParams()) + var file: string = "" + var fromString: bool = false + var interactive: bool = false + for kind, key, value in optParser.getopt(): + case kind: + of cmdArgument: + file = key + of cmdLongOption: + case key: + of "help": + echo HELP_MESSAGE + quit() + of "version": + echo PEON_VERSION_STRING + quit() + of "string": + file = key + fromString = true + of "interactive": + interactive = true + else: + echo &"error: unkown option '{key}'" + quit() + of cmdShortOption: + case key: + of "h": + echo HELP_MESSAGE + quit() + of "v": + echo PEON_VERSION_STRING + quit() + of "s": + file = key + fromString = true + of "i": + interactive = true + else: + echo &"error: unkown option '{key}'" + quit() + else: + echo "usage: peon [options] [filename.pn]" + quit() + # TODO: Use interactive/fromString options + if file == "": repl() else: - runFile(args[0]) + runFile(file) proc fillSymbolTable(tokenizer: Lexer) =