mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-04 22:02:52 +01:00
Make continuations consistently "shallow" (#874)
Prior to this change, `__await` would make a deep copy of the continuation stack, but shallow-copy the individual stack frames within it. As a result, continuations appeared to have shallow semantics so long as the continuation stack had only a single frame. This change also removes an obsolete test from the brief period when we intended continuations to have deep-copy semantics, which has been passing basically by accident.
This commit is contained in:
+9
-4
@@ -14,12 +14,17 @@ package ExecutableSemanticsTest api;
|
||||
// Assignment for continuations is shallow, so `k2` refers to the same
|
||||
// continuation as `k1`.
|
||||
|
||||
var x: i32 = 0;
|
||||
|
||||
fn Foo() {
|
||||
x = x + 1;
|
||||
__await;
|
||||
x = x + 2;
|
||||
}
|
||||
|
||||
fn main() -> i32 {
|
||||
var x: i32 = 0;
|
||||
__continuation k1 {
|
||||
x = x + 1;
|
||||
__await;
|
||||
x = x + 2;
|
||||
Foo();
|
||||
}
|
||||
var k2: __Continuation = k1;
|
||||
__run k1;
|
||||
|
||||
Reference in New Issue
Block a user