Fix #[derive] for empty structs with braces
This commit is contained in:
parent
98a59cf57e
commit
4e8e607d84
7 changed files with 95 additions and 38 deletions
|
|
@ -73,7 +73,7 @@ fn expand(cx: &mut ExtCtxt,
|
|||
fn totalsum_substructure(cx: &mut ExtCtxt, trait_span: Span,
|
||||
substr: &Substructure) -> P<ast::Expr> {
|
||||
let fields = match *substr.fields {
|
||||
Struct(ref fs) | EnumMatching(_, _, ref fs) => fs,
|
||||
Struct(_, ref fs) | EnumMatching(_, _, ref fs) => fs,
|
||||
_ => cx.span_bug(trait_span, "impossible substructure")
|
||||
};
|
||||
|
||||
|
|
|
|||
45
src/test/run-pass/empty-struct-braces-derive.rs
Normal file
45
src/test/run-pass/empty-struct-braces-derive.rs
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// `#[derive(Trait)]` works for empty structs/variants with braces
|
||||
|
||||
#![feature(braced_empty_structs)]
|
||||
#![feature(rustc_private)]
|
||||
|
||||
extern crate serialize as rustc_serialize;
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash,
|
||||
Default, Debug, RustcEncodable, RustcDecodable)]
|
||||
struct S {}
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash,
|
||||
Debug, RustcEncodable, RustcDecodable)]
|
||||
enum E {
|
||||
V {},
|
||||
U,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let s = S {};
|
||||
let s1 = s;
|
||||
let s2 = s.clone();
|
||||
assert_eq!(s, s1);
|
||||
assert_eq!(s, s2);
|
||||
assert!(!(s < s1));
|
||||
assert_eq!(format!("{:?}", s), "S");
|
||||
|
||||
let e = E::V {};
|
||||
let e1 = e;
|
||||
let e2 = e.clone();
|
||||
assert_eq!(e, e1);
|
||||
assert_eq!(e, e2);
|
||||
assert!(!(e < e1));
|
||||
assert_eq!(format!("{:?}", e), "V");
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue