File: distributed_actor_var_implicitly_async_throws.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (83 lines) | stat: -rw-r--r-- 2,514 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend-emit-module -emit-module-path %t/FakeDistributedActorSystems.swiftmodule -module-name FakeDistributedActorSystems -disable-availability-checking %S/Inputs/FakeDistributedActorSystems.swift
// RUN: %target-swift-frontend -typecheck -verify -disable-availability-checking -I %t 2>&1 %s
// REQUIRES: concurrency
// REQUIRES: distributed

import Distributed
import FakeDistributedActorSystems

@available(SwiftStdlib 5.5, *)
typealias DefaultDistributedActorSystem = FakeActorSystem

struct NotCodable {}

distributed actor D {

  // expected-note@+1{{access to property 'normal' is only permitted within distributed actor 'D'}}
  var normal: String = "normal"

  // expected-note@+1{{access to property 'computed' is only permitted within distributed actor 'D'}}
  var computed: String  {
    "normal"
  }

  // expected-error@+1{{property 'dlet' cannot be 'distributed', only computed properties can}}
  distributed let dlet: String = "illegal"

  // expected-error@+1{{distributed property 'dletvar' cannot be 'distributed', only computed properties can}}
  distributed var dletvar: String = "illegal"

  // OK:
  distributed var dist: String {
    "dist"
  }

  // FIXME: The following should be accepted.
  /*
  distributed var distGet: String {
    get distributed {
      "okey"
    }
  }
  */

  distributed var distSetGet: String { // expected-error {{'distributed' computed property 'distSetGet' cannot have setter}}
    set distributed { // expected-error {{expected '{' to start setter definition}}
      _ = newValue
    }
    get distributed {
      "okey"
    }
  }

  // expected-error@+1{{'distributed' property 'hello' cannot be 'static'}}
  static distributed var hello: String {
    "nope!"
  }

  // expected-error@+1{{result type 'NotCodable' of distributed property 'notCodable' does not conform to serialization requirement 'Codable'}}
  distributed var notCodable: NotCodable {
    .init()
  }

  //expected-error@+1{{'distributed' computed property 'dist_nope' cannot have setter}}
  distributed var dist_nope: String {
    get {
      "dist"
    }
    set {
      // ignore
    }
  }

}

func test_outside(distributed: D) async throws {
  _ = distributed.normal
  // expected-error@-1{{distributed actor-isolated property 'normal' can not be accessed from a nonisolated context}}

  _ = distributed.computed
  // expected-error@-1{{distributed actor-isolated property 'computed' can not be accessed from a nonisolated context}}
}