Commit Graph

16 Commits

Author SHA1 Message Date
edef
277e786d3f Panic when an unfinished Generator is dropped 2017-03-16 22:40:20 +01:00
edef
785c7b516a Add tests for Generator::unwrap 2017-03-09 07:59:55 +01:00
edef
dcde4fe920 Don't use unsafe for the forget_yielded test
Now that the Send bound is gone, we can simply use a Cell instead of a
raw pointer.
2017-03-06 09:21:08 +01:00
edef
661872f725 Don't implement Send at all
On hosted platforms, libstd allows safely borrowing values from TLS with
'thread lifetime and without a Sync bound. As a result, we can't
guarantee that sending a generator across threads won't create dangling
references or data races. In freestanding environments, the notion of
thread-safety is likely to be defined by the consumer of libfringe,
so our Send bounds and implementation are unlikely to be meaningful
anyway.
2017-03-06 09:21:08 +01:00
Amanieu d'Antras
fc4cdbf4f5 Clean up the stack implementations
close #54
2016-09-30 21:39:15 -04:00
edef
19ec5ef45b Make the passed Yielder borrow immutable [breaking-change]
Yielder::suspend only requires an immutable reference, and allowing
mem::replace on the yielder isn't very useful.
2016-09-22 14:03:46 -04:00
edef
59f28e92cb Ensure that the closure outlives the generator [breaking-change]
Previously, it was possible to cause unsafety by having the closure
refer to values with lifetimes that weren't enclosed by the generator's
lifetime.
2016-09-22 14:03:46 -04:00
Amanieu d'Antras
fff625767c Clean up and simplify the implementation of generators 2016-09-09 10:59:35 -04:00
edef
bbfa5a43bc add regression test for #31 2016-08-30 18:26:42 -04:00
whitequark
5a77a01863 Implement OwnedStack. 2016-08-30 12:20:34 -04:00
whitequark
4b32c18f70 Rename Yielder::generate to Yielder::suspend.
This makes more sense, because "generate" implies *running*
a generator, not *returning* from a generator. That name was
a vestige of the time when libfringe only really provided a .next()
implementation, which made marginally more sense together with
.generate(), but it doesn't anymore when we have .resume().
2016-08-30 12:20:34 -04:00
edef
f21b8dc936 Update the license headers for MIT/Apache 2016-08-20 23:45:01 +02:00
whitequark
f8cf95f686 Implement SliceStack. 2016-08-19 15:12:42 +02:00
whitequark
ddbf9a5afe Reimplement Generator to pass both input and output values around. 2016-08-13 13:38:04 +02:00
whitequark
a5d3430e63 Make Generator safe in presence of destructors. 2016-08-13 13:38:04 +02:00
whitequark
7ffad26cfd Implement the safe Generator abstraction.
close #24
2016-07-17 13:55:56 -04:00