1fd3a827eSAlex Crichtonpackage foo:foo;
2878a243aSTimmy Silesmo
3878a243aSTimmy Silesmointerface resources {
4878a243aSTimmy Silesmo  resource bar {
5fd3a827eSAlex Crichton    constructor();
6fd3a827eSAlex Crichton    static-a: static func() -> u32;
7fd3a827eSAlex Crichton    method-a: func() -> u32;
8878a243aSTimmy Silesmo  }
9878a243aSTimmy Silesmo
10fd3a827eSAlex Crichton  bar-own-arg: func(x: own<bar>);
11fd3a827eSAlex Crichton  bar-borrow-arg: func(x: borrow<bar>);
12fd3a827eSAlex Crichton  bar-result: func() -> own<bar>;
13878a243aSTimmy Silesmo
14fd3a827eSAlex Crichton  tuple-own-arg: func(x: tuple<own<bar>, u32>);
15fd3a827eSAlex Crichton  tuple-borrow-arg: func(x: tuple<own<bar>, u32>);
16fd3a827eSAlex Crichton  tuple-result: func() -> tuple<own<bar>, u32>;
17878a243aSTimmy Silesmo
18fd3a827eSAlex Crichton  option-own-arg: func(x: option<own<bar>>);
19fd3a827eSAlex Crichton  option-borrow-arg: func(x: option<borrow<bar>>);
20fd3a827eSAlex Crichton  option-result: func() -> option<own<bar>>;
21878a243aSTimmy Silesmo
22fd3a827eSAlex Crichton  result-own-arg: func(x: result<own<bar>>);
23fd3a827eSAlex Crichton  result-borrow-arg: func(x: result<borrow<bar>>);
24fd3a827eSAlex Crichton  result-result: func() -> result<own<bar>>;
25878a243aSTimmy Silesmo
26fd3a827eSAlex Crichton  list-own-arg: func(x: list<own<bar>>);
27fd3a827eSAlex Crichton  list-borrow-arg: func(x: list<borrow<bar>>);
28fd3a827eSAlex Crichton  list-result: func() -> list<own<bar>>;
29878a243aSTimmy Silesmo
30878a243aSTimmy Silesmo  record nested-own {
31878a243aSTimmy Silesmo    nested-bar: own<bar>
32878a243aSTimmy Silesmo  }
33878a243aSTimmy Silesmo
34878a243aSTimmy Silesmo  record nested-borrow {
35878a243aSTimmy Silesmo    nested-bar: borrow<bar>
36878a243aSTimmy Silesmo  }
37878a243aSTimmy Silesmo
38fd3a827eSAlex Crichton  record-own-arg: func(x: nested-own);
39fd3a827eSAlex Crichton  record-borrow-arg: func(x: nested-borrow);
40fd3a827eSAlex Crichton  record-result: func() -> nested-own;
41878a243aSTimmy Silesmo
42fd3a827eSAlex Crichton  type some-handle = borrow<bar>;
43fd3a827eSAlex Crichton  func-with-handle-typedef: func(x: some-handle);
44*2365e64cSDave Bakker
45*2365e64cSDave Bakker  resource fallible {
46*2365e64cSDave Bakker    constructor() -> result<fallible, string>;
47*2365e64cSDave Bakker  }
48878a243aSTimmy Silesmo}
49878a243aSTimmy Silesmo
50878a243aSTimmy Silesmoworld the-world {
51fd3a827eSAlex Crichton  import resources;
52878a243aSTimmy Silesmo
53878a243aSTimmy Silesmo  resource world-resource {
54fd3a827eSAlex Crichton    constructor();
55878a243aSTimmy Silesmo
56fd3a827eSAlex Crichton    foo: func();
57fd3a827eSAlex Crichton    static-foo: static func();
58878a243aSTimmy Silesmo  }
59878a243aSTimmy Silesmo
60fd3a827eSAlex Crichton  import some-world-func: func() -> world-resource;
61fd3a827eSAlex Crichton  export some-world-func2: func() -> world-resource;
62878a243aSTimmy Silesmo
63fd3a827eSAlex Crichton  export uses-resource-transitively;
64878a243aSTimmy Silesmo
65fd3a827eSAlex Crichton  import long-use-chain4;
66878a243aSTimmy Silesmo}
67878a243aSTimmy Silesmo
68878a243aSTimmy Silesmointerface transitive-interface-with-resource {
69fd3a827eSAlex Crichton  resource foo;
70878a243aSTimmy Silesmo}
71878a243aSTimmy Silesmo
72878a243aSTimmy Silesmointerface uses-resource-transitively {
73fd3a827eSAlex Crichton  use transitive-interface-with-resource.{foo};
74878a243aSTimmy Silesmo
75fd3a827eSAlex Crichton  handle: func(x: foo);
76878a243aSTimmy Silesmo}
77878a243aSTimmy Silesmo
78878a243aSTimmy Silesmointerface long-use-chain4 {
79fd3a827eSAlex Crichton  use long-use-chain3.{a};
80878a243aSTimmy Silesmo
81fd3a827eSAlex Crichton  foo: func() -> a;
82878a243aSTimmy Silesmo}
83878a243aSTimmy Silesmointerface long-use-chain3 {
84fd3a827eSAlex Crichton  use long-use-chain2.{a};
85878a243aSTimmy Silesmo}
86878a243aSTimmy Silesmointerface long-use-chain2 {
87fd3a827eSAlex Crichton  use long-use-chain1.{a};
88878a243aSTimmy Silesmo}
89878a243aSTimmy Silesmointerface long-use-chain1 {
90fd3a827eSAlex Crichton  resource a;
91878a243aSTimmy Silesmo}
92