diff --git a/src/test/auxiliary/issue2378a.rs b/src/test/auxiliary/issue2378a.rs new file mode 100644 index 000000000000..35269a2d653c --- /dev/null +++ b/src/test/auxiliary/issue2378a.rs @@ -0,0 +1,10 @@ +enum maybe { just(T), nothing } + +impl methods for maybe { + fn [](idx: uint) -> T { + alt self { + just(t) { t } + nothing { fail; } + } + } +} \ No newline at end of file diff --git a/src/test/auxiliary/issue2378b.rs b/src/test/auxiliary/issue2378b.rs new file mode 100644 index 000000000000..9cfe4d3a3686 --- /dev/null +++ b/src/test/auxiliary/issue2378b.rs @@ -0,0 +1,12 @@ +use issue2378a; + +import issue2378a::maybe; +import issue2378a::methods; + +type two_maybes = {a: maybe, b: maybe}; + +impl methods for two_maybes { + fn [](idx: uint) -> (T, T) { + (self.a[idx], self.b[idx]) + } +} \ No newline at end of file diff --git a/src/test/run-pass/issue2378c.rs b/src/test/run-pass/issue2378c.rs new file mode 100644 index 000000000000..c72be0e0d42e --- /dev/null +++ b/src/test/run-pass/issue2378c.rs @@ -0,0 +1,14 @@ +// xfail-test -- #2378 unfixed +// aux-build:issue2378a.rs +// aux-build:issue2378b.rs + +use issue2378a; +use issue2378b; + +import issue2378a::{just, methods}; +import issue2378b::{methods}; + +fn main() { + let x = {a: just(3), b: just(5)}; + assert x[0u] == (3, 5); +}