# Copyright 2005-2007 Kevin Reid, under the terms of the MIT X license # found at http://www.opensource.org/licenses/mit-license.html ................ ? def makeSimplePipe := # value: ? def [o, i] := makeSimplePipe(["Chunk" => List]) # value: [->"anonymous" pipe, <-"anonymous" pipe] ? def op := o.reserve() # value: ? def ip := i.takeAtMost(1) # value: ? op # value: ? op.resolve([1,2,3]) ? interp.waitAtTop(ip) ? ip # value: [1] ? def ip2 := i.takeAtMost(1) # value: ? ip2 # value: [2] ? def [op2, op3] := [o.reserve(), o.reserve()] # value: [, ] ? op3 <- resolve([5]) # value: ? op2 <- resolve([4]) # value: ? interp.waitAtTop(def ip3 := i.takeAtMost(1)) ? ip3 # value: [3] ? interp.waitAtTop(def ip4 := i.takeAtMost(1)) ? ip4 # value: [4] ? interp.waitAtTop(def ip5 := i.takeAtMost(1)) ? ip5 # value: [5] Forward closure ? o.reserve() <- resolve(null) > interp.waitAtTop(def ip := i <- takeAtMost(1)) ? [ip] # value: [null] ? interp.waitAtTop(def ip := i <- takeAtMost(1)) ? [ip] # value: [null] ? def [o, i] := makeSimplePipe(["Chunk" => List]) > interp.waitAtTop(def ip := i <- takeAtMost(1)) > o.reserve() <- resolve(null) > null ? [ip] # value: [null] Reverse closure ? def [o, i] := makeSimplePipe(["Chunk" => List]) > i.close() > interp.waitAtTop(o.terminates()) ? [o.terminates()] # value: [null] ? def [o, i] := makeSimplePipe(["Chunk" => List]) > i.fail("x") > interp.waitAtTop(o.terminates()) ? [o.terminates()] # value: [] take/0 ? def [o, i] := makeSimplePipe(["Chunk" => List]) # value: [->"anonymous" pipe, <-"anonymous" pipe] x? interp.waitAtTop(def r := i.takeAtMost(0)) x? r x# value: [] XXX closure XXX failure from bogus chunks, bogus maximums