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