30 lines
808 B
Nim
30 lines
808 B
Nim
|
type
|
||
|
LineEditorChoice = enum
|
||
|
leBasic, leRdstdin
|
||
|
ReadlineInterruptedException* = object of CatchableError
|
||
|
|
||
|
# choose debug options here
|
||
|
const debugVM* = true
|
||
|
const debugScanner* = false
|
||
|
const debugCompiler* = false
|
||
|
const debugDumpChunk* = true
|
||
|
const assertionsVM* = true # sanity checks in the VM, such as the stack being empty at the end
|
||
|
|
||
|
# choose a line editor for the repl
|
||
|
const lineEditor = leRdstdin
|
||
|
|
||
|
when lineEditor == leRdstdin:
|
||
|
import rdstdin
|
||
|
|
||
|
proc konLineEditor*: string =
|
||
|
proc ctrlc =
|
||
|
raise newException(ReadlineInterruptedException, "Ctrl+C/D pressed.")
|
||
|
when lineEditor == leBasic:
|
||
|
write stdout, "\r-> "
|
||
|
result = stdin.readLine()
|
||
|
when lineEditor == leRdstdin:
|
||
|
var line: string
|
||
|
let ok = readLineFromStdin("-> ", line)
|
||
|
if not ok:
|
||
|
ctrlc()
|
||
|
return line
|