mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 22:02:23 +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:
-32
@@ -1,32 +0,0 @@
|
||||
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
||||
// Exceptions. See /LICENSE for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
// RUN: executable_semantics %s 2>&1 | \
|
||||
// RUN: FileCheck --match-full-lines --allow-unused-prefixes=false %s
|
||||
// RUN: executable_semantics --trace %s 2>&1 | \
|
||||
// RUN: FileCheck --match-full-lines --allow-unused-prefixes %s
|
||||
// AUTOUPDATE: executable_semantics %s
|
||||
// CHECK: result: 3
|
||||
|
||||
package ExecutableSemanticsTest api;
|
||||
|
||||
// Test the way in which copying of continuations interacts with data
|
||||
// on the stack such as the variable `x`. In this example the copy
|
||||
// happens after the variable `x` is created.
|
||||
|
||||
var y: i32 = 0;
|
||||
|
||||
fn main() -> i32 {
|
||||
__continuation k1 {
|
||||
var x: i32 = 0;
|
||||
x = x + 1;
|
||||
__await;
|
||||
x = x + 2;
|
||||
y = x;
|
||||
}
|
||||
__run k1;
|
||||
var k2: __Continuation = k1;
|
||||
__run k2;
|
||||
return y;
|
||||
}
|
||||
+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