about summary refs log tree commit diff
path: root/src/libsyntax/fold.rs
diff options
context:
space:
mode:
authorNick Cameron <ncameron@mozilla.com>2014-02-24 20:17:02 +1300
committerNick Cameron <ncameron@mozilla.com>2014-04-20 13:41:18 +1200
commitff04aa8e385f343f66c5bed6a34d1ebf6c971e4d (patch)
tree9c0845b6a369ab071138f6c542e7aef46ff5a2a0 /src/libsyntax/fold.rs
parent3757f01c9bed7b2fe0d726ac45c754312e2917ea (diff)
downloadrust-ff04aa8e385f343f66c5bed6a34d1ebf6c971e4d.tar.gz
rust-ff04aa8e385f343f66c5bed6a34d1ebf6c971e4d.zip
Allow inheritance between structs.
No subtyping, no interaction with traits. Partially addresses #9912.
Diffstat (limited to 'src/libsyntax/fold.rs')
-rw-r--r--src/libsyntax/fold.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs
index fc4f427d8d7..73ad2664be4 100644
--- a/src/libsyntax/fold.rs
+++ b/src/libsyntax/fold.rs
@@ -235,7 +235,12 @@ pub trait Folder {
                 kind = StructVariantKind(@ast::StructDef {
                     fields: struct_def.fields.iter()
                         .map(|f| self.fold_struct_field(f)).collect(),
-                    ctor_id: struct_def.ctor_id.map(|c| self.new_id(c))
+                    ctor_id: struct_def.ctor_id.map(|c| self.new_id(c)),
+                    super_struct: match struct_def.super_struct {
+                        Some(t) => Some(self.fold_ty(t)),
+                        None => None
+                    },
+                    is_virtual: struct_def.is_virtual,
                 })
             }
         }
@@ -480,6 +485,11 @@ fn fold_struct_def<T: Folder>(struct_def: @StructDef, fld: &mut T) -> @StructDef
     @ast::StructDef {
         fields: struct_def.fields.iter().map(|f| fold_struct_field(f, fld)).collect(),
         ctor_id: struct_def.ctor_id.map(|cid| fld.new_id(cid)),
+        super_struct: match struct_def.super_struct {
+            Some(t) => Some(fld.fold_ty(t)),
+            None => None
+        },
+        is_virtual: struct_def.is_virtual,
     }
 }