diff --git a/src/eval.nim b/src/eval.nim index 16d89f9..7f5ffec 100644 --- a/src/eval.nim +++ b/src/eval.nim @@ -10,6 +10,7 @@ type Channel* = ref object buf: Deque[CljVal] capacity: int # 0 = unbuffered + closed*: bool var channelRegistry* = initTable[string, Channel]() var channelCounter*: int64 = 0 @@ -1074,7 +1075,7 @@ proc evalList(items: seq[CljVal], env: Env): EvalResult = channelCounter += 1 let id = "chan_" & $channelCounter let cap = if args.len > 0 and args[0].kind == ckInt: args[0].intVal.int else: 0 - let ch = Channel(buf: initDeque[CljVal](), capacity: cap) + let ch = Channel(buf: initDeque[CljVal](), capacity: cap, closed: false) channelRegistry[id] = ch return EvalResult(ok: true, value: cljString(id)) @@ -1083,6 +1084,8 @@ proc evalList(items: seq[CljVal], env: Env): EvalResult = if args[0].kind != ckString or not channelRegistry.hasKey(args[0].strVal): return EvalResult(ok: false, error: "put!/ 0 and ch.buf.len >= ch.capacity: return EvalResult(ok: false, error: "Channel buffer full") ch.buf.addLast(args[1]) @@ -1094,6 +1097,8 @@ proc evalList(items: seq[CljVal], env: Env): EvalResult = return EvalResult(ok: false, error: "take!/