diff options
| author | Michael Sullivan <sully@msully.net> | 2013-06-20 09:29:24 -0700 |
|---|---|---|
| committer | Michael Sullivan <sully@msully.net> | 2013-06-28 16:12:08 -0700 |
| commit | 817f98085f2332b604f0a2da5127f29c8fabc41f (patch) | |
| tree | bc9b643a90a6df5d1b13a217605dec1ff3ea19cf /src/librustc/middle/astencode.rs | |
| parent | a9e51f5f701d8104be0adfb50f5d409f8bf233ff (diff) | |
| download | rust-817f98085f2332b604f0a2da5127f29c8fabc41f.tar.gz rust-817f98085f2332b604f0a2da5127f29c8fabc41f.zip | |
Make calling methods parameterized on the trait work from default methods.
This is done by adding a new notion of "vtable_self". We do not yet properly handle super traits. Closes #7183.
Diffstat (limited to 'src/librustc/middle/astencode.rs')
| -rw-r--r-- | src/librustc/middle/astencode.rs | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index 70e94844319..c1d553b0454 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -632,6 +632,13 @@ fn encode_vtable_origin(ecx: &e::EncodeContext, } } } + typeck::vtable_self(def_id) => { + do ebml_w.emit_enum_variant("vtable_self", 2u, 1u) |ebml_w| { + do ebml_w.emit_enum_variant_arg(0u) |ebml_w| { + ebml_w.emit_def_id(def_id) + } + } + } } } } @@ -652,7 +659,9 @@ impl vtable_decoder_helpers for reader::Decoder { fn read_vtable_origin(&mut self, xcx: @ExtendedDecodeContext) -> typeck::vtable_origin { do self.read_enum("vtable_origin") |this| { - do this.read_enum_variant(["vtable_static", "vtable_param"]) + do this.read_enum_variant(["vtable_static", + "vtable_param", + "vtable_self"]) |this, i| { match i { 0 => { @@ -678,6 +687,13 @@ impl vtable_decoder_helpers for reader::Decoder { } ) } + 2 => { + typeck::vtable_self( + do this.read_enum_variant_arg(0u) |this| { + this.read_def_id(xcx) + } + ) + } // hard to avoid - user input _ => fail!("bad enum variant") } |
