nondescript/src/ndspkg/lib/typeutils.nim

37 lines
1.0 KiB
Nim

import ../types/value
import ../types/native
import ../types/ndstring
import bitops
proc natChar(args: seq[NdValue], retval: var NdValue): NatReturn =
if args.len() != 1:
return natError("Char expects 1 argument.")
let arg = args[0]
if not arg.isFloat():
return natError("Char expects a number.")
let floatval = arg.asFloat()
if floatval > 255f or floatval < 0f:
return natError("Char got a number out of range.")
let chr = floatval.char()
retval = (chr).newString().fromNdString()
return natOk
proc natByte(args: seq[NdValue], retval: var NdValue): NatReturn =
if args.len() != 1:
return natError("Byte expects 1 argument.")
let arg = args[0]
if not arg.isString():
return natError("Byte expects a string.")
if arg.asString().getLength() != 1:
return natError("Byte expects a single character string.")
let byt = arg.asString().getIndexAsChar(0).float()
retval = byt.fromFloat()
return natOk
proc constructTypeutils* =
defNative("char", natChar)
defNative("byte", natByte)