34 lines
854 B
Nim
34 lines
854 B
Nim
import ../types/value
|
|
import ../types/native
|
|
import ../types/ndstring
|
|
import bitops
|
|
|
|
proc natRead(args: seq[NdValue], retval: var NdValue): NatReturn =
|
|
retval = stdin.readLine().fromNimString()
|
|
return natOk
|
|
|
|
proc natPrint(args: seq[NdValue], retval: var NdValue): NatReturn =
|
|
if args.len() == 0:
|
|
retval = fromNil()
|
|
return natOk
|
|
for i, arg in args.pairs:
|
|
write stdout, $arg
|
|
if i < args.high():
|
|
write stdout, " "
|
|
write stdout, "\n"
|
|
retval = args[0];
|
|
return natOk
|
|
|
|
proc natWrite(args: seq[NdValue], retval: var NdValue): NatReturn =
|
|
if args.len() != 1:
|
|
return natError("Write expects exactly 1 argument, got " & $args.len() & ".")
|
|
let arg = args[0]
|
|
write stdout, $arg
|
|
retval = arg;
|
|
return natOk
|
|
|
|
proc constructIo* =
|
|
defNative("read", natRead)
|
|
defNative("print", natPrint)
|
|
defNative("write", natWrite)
|