2022-01-20 21:54:11 +01:00
|
|
|
type
|
|
|
|
LineEditorChoice = enum
|
|
|
|
leBasic, leRdstdin
|
|
|
|
ReadlineInterruptedException* = object of CatchableError
|
|
|
|
|
2022-01-27 02:03:23 +01:00
|
|
|
# compiler debug options
|
2022-01-20 21:54:11 +01:00
|
|
|
const debugScanner* = false
|
|
|
|
const debugCompiler* = false
|
2022-01-21 01:51:55 +01:00
|
|
|
const debugDumpChunk* = false
|
2022-01-27 02:03:23 +01:00
|
|
|
const assertionsCompiler* = true # sanity checks in the compiler
|
|
|
|
# vm debug options (setting any to true will slow runtime down!)
|
|
|
|
const debugVM* = false
|
2022-01-21 18:37:46 +01:00
|
|
|
const assertionsVM* = false # sanity checks in the VM, such as the stack being empty at the end
|
2022-01-22 17:28:53 +01:00
|
|
|
const profileInstructions* = false # if true, the time spent on every opcode is measured
|
2022-01-20 21:54:11 +01:00
|
|
|
|
|
|
|
# choose a line editor for the repl
|
|
|
|
const lineEditor = leRdstdin
|
|
|
|
|
|
|
|
when lineEditor == leRdstdin:
|
|
|
|
import rdstdin
|
|
|
|
|
2022-01-27 05:56:09 +01:00
|
|
|
proc ndLineEditor*: string =
|
2022-01-20 21:54:11 +01:00
|
|
|
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
|