about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-07-11 15:00:40 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-07-17 15:46:43 -0700
commitdb020ab63cd51dd4a25cba2d00117f016128762b (patch)
tree2b6f1e99ba4356f3e3bf5338332c278d2a85109b /src/libstd
parentb5729bd60095fb5ca884936775e031cf19900760 (diff)
downloadrust-db020ab63cd51dd4a25cba2d00117f016128762b.tar.gz
rust-db020ab63cd51dd4a25cba2d00117f016128762b.zip
rustc: Implement and enforce instance coherence
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/arena.rs9
-rw-r--r--src/libstd/ebml.rs33
-rw-r--r--src/libstd/json.rs11
-rw-r--r--src/libstd/map.rs16
-rw-r--r--src/libstd/net_ip.rs7
-rw-r--r--src/libstd/net_tcp.rs1
-rw-r--r--src/libstd/serialization.rs12
-rw-r--r--src/libstd/smallintmap.rs9
-rw-r--r--src/libstd/time.rs14
9 files changed, 84 insertions, 28 deletions
diff --git a/src/libstd/arena.rs b/src/libstd/arena.rs
index 65fcd0a59ca..2df720e6fe1 100644
--- a/src/libstd/arena.rs
+++ b/src/libstd/arena.rs
@@ -6,7 +6,12 @@ import list;
 import list::{list, cons, nil};
 
 type chunk = {data: ~[u8], mut fill: uint};
-type arena = {mut chunks: @list<@chunk>};
+
+type arena_ = {mut chunks: @list<@chunk>};
+
+enum arena {
+    arena_(arena_)
+}
 
 fn chunk(size: uint) -> @chunk {
     let mut v = ~[];
@@ -15,7 +20,7 @@ fn chunk(size: uint) -> @chunk {
 }
 
 fn arena_with_size(initial_size: uint) -> arena {
-    ret {mut chunks: @cons(chunk(initial_size), @nil)};
+    ret arena_({mut chunks: @cons(chunk(initial_size), @nil)});
 }
 
 fn arena() -> arena {
diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs
index 5f833a20e32..07f578901fd 100644
--- a/src/libstd/ebml.rs
+++ b/src/libstd/ebml.rs
@@ -155,7 +155,11 @@ fn doc_as_i32(d: doc) -> i32 { doc_as_u32(d) as i32 }
 fn doc_as_i64(d: doc) -> i64 { doc_as_u64(d) as i64 }
 
 // ebml writing
-type writer = {writer: io::writer, mut size_positions: ~[uint]};
+type writer_ = {writer: io::writer, mut size_positions: ~[uint]};
+
+enum writer {
+    writer_(writer_)
+}
 
 fn write_sized_vuint(w: io::writer, n: uint, size: uint) {
     alt size {
@@ -187,7 +191,7 @@ fn write_vuint(w: io::writer, n: uint) {
 
 fn writer(w: io::writer) -> writer {
     let size_positions: ~[uint] = ~[];
-    ret {writer: w, mut size_positions: size_positions};
+    ret writer_({writer: w, mut size_positions: size_positions});
 }
 
 // FIXME (#2741): Provide a function to write the standard ebml header.
@@ -311,9 +315,12 @@ enum ebml_serializer_tag {
     es_label // Used only when debugging
 }
 
-impl serializer of serialization::serializer for ebml::writer {
-    fn emit_nil() {}
+trait serializer_priv {
+    fn _emit_tagged_uint(t: ebml_serializer_tag, v: uint);
+    fn _emit_label(label: ~str);
+}
 
+impl serializer of serializer_priv for ebml::writer {
     // used internally to emit things like the vector length and so on
     fn _emit_tagged_uint(t: ebml_serializer_tag, v: uint) {
         assert v <= 0xFFFF_FFFF_u;
@@ -329,6 +336,10 @@ impl serializer of serialization::serializer for ebml::writer {
         // try and check failures more quickly.
         if debug { self.wr_tagged_str(es_label as uint, label) }
     }
+}
+
+impl serializer of serialization::serializer for ebml::writer {
+    fn emit_nil() {}
 
     fn emit_uint(v: uint) { self.wr_tagged_u64(es_uint as uint, v as u64); }
     fn emit_u64(v: u64) { self.wr_tagged_u64(es_u64 as uint, v); }
@@ -383,14 +394,18 @@ impl serializer of serialization::serializer for ebml::writer {
     fn emit_tup_elt(_idx: uint, f: fn()) { f() }
 }
 
-type ebml_deserializer = {mut parent: ebml::doc,
-                          mut pos: uint};
+type ebml_deserializer_ = {mut parent: ebml::doc,
+                           mut pos: uint};
+
+enum ebml_deserializer {
+    ebml_deserializer_(ebml_deserializer_)
+}
 
 fn ebml_deserializer(d: ebml::doc) -> ebml_deserializer {
-    {mut parent: d, mut pos: d.start}
+    ebml_deserializer_({mut parent: d, mut pos: d.start})
 }
 
-impl deserializer of serialization::deserializer for ebml_deserializer {
+impl deserializer_priv for ebml_deserializer {
     fn _check_label(lbl: ~str) {
         if self.pos < self.parent.end {
             let {tag: r_tag, doc: r_doc} =
@@ -443,7 +458,9 @@ impl deserializer of serialization::deserializer for ebml_deserializer {
         #debug["_next_uint exp_tag=%? result=%?", exp_tag, r];
         ret r as uint;
     }
+}
 
+impl deserializer of serialization::deserializer for ebml_deserializer {
     fn read_nil() -> () { () }
 
     fn read_u64() -> u64 { ebml::doc_as_u64(self.next_doc(es_u64)) }
diff --git a/src/libstd/json.rs b/src/libstd/json.rs
index f8194204626..74707e36a51 100644
--- a/src/libstd/json.rs
+++ b/src/libstd/json.rs
@@ -8,6 +8,7 @@ import io;
 import io::{reader_util, writer_util};
 import map;
 import map::hashmap;
+import map::map;
 import core::vec::extensions;
 
 export json;
@@ -114,13 +115,17 @@ fn to_str(j: json) -> ~str {
     io::with_str_writer(|wr| to_writer(wr, j))
 }
 
-type parser = {
+type parser_ = {
     rdr: io::reader,
     mut ch: char,
     mut line: uint,
     mut col: uint,
 };
 
+enum parser {
+    parser_(parser_)
+}
+
 impl parser for parser {
     fn eof() -> bool { self.ch == -1 as char }
 
@@ -463,12 +468,12 @@ impl parser for parser {
 
 /// Deserializes a json value from an io::reader
 fn from_reader(rdr: io::reader) -> result<json, error> {
-    let parser = {
+    let parser = parser_({
         rdr: rdr,
         mut ch: rdr.read_char(),
         mut line: 1u,
         mut col: 1u,
-    };
+    });
 
     parser.parse()
 }
diff --git a/src/libstd/map.rs b/src/libstd/map.rs
index 90ca5e23372..c285bc06629 100644
--- a/src/libstd/map.rs
+++ b/src/libstd/map.rs
@@ -92,13 +92,19 @@ mod chained {
         absent
     }
 
-    type t<K, V> = @{
+    type hashmap__<K, V> = {
         mut count: uint,
         mut chains: ~[mut chain<K,V>],
         hasher: hashfn<K>,
         eqer: eqfn<K>
     };
 
+    enum hashmap_<K, V> {
+        hashmap_(@hashmap__<K, V>)
+    }
+
+    type t<K, V> = hashmap_<K, V>;
+
     enum search_result<K, V> {
         not_found,
         found_first(uint, @entry<K,V>),
@@ -284,10 +290,10 @@ mod chained {
     }
 
     fn mk<K, V: copy>(hasher: hashfn<K>, eqer: eqfn<K>) -> t<K,V> {
-        let slf: t<K, V> = @{mut count: 0u,
-                             mut chains: chains(initial_capacity),
-                             hasher: hasher,
-                             eqer: eqer};
+        let slf: t<K, V> = hashmap_(@{mut count: 0u,
+                                      mut chains: chains(initial_capacity),
+                                      hasher: hasher,
+                                      eqer: eqer});
         slf
     }
 }
diff --git a/src/libstd/net_ip.rs b/src/libstd/net_ip.rs
index a78b6a5f172..f79a95d8ab5 100644
--- a/src/libstd/net_ip.rs
+++ b/src/libstd/net_ip.rs
@@ -148,7 +148,12 @@ mod v4 {
     // the simple, old style numberic representation of
     // ipv4
     type ipv4_rep = { a: u8, b: u8, c: u8, d:u8 };
-    impl x for ipv4_rep {
+
+    trait as_unsafe_u32 {
+        unsafe fn as_u32() -> u32;
+    }
+
+    impl x of as_unsafe_u32 for ipv4_rep {
         // this is pretty dastardly, i know
         unsafe fn as_u32() -> u32 {
             *((ptr::addr_of(self)) as *u32)
diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs
index 31b8841933b..c7dc2d0cdab 100644
--- a/src/libstd/net_tcp.rs
+++ b/src/libstd/net_tcp.rs
@@ -11,6 +11,7 @@ import future::extensions;
 import result::*;
 import libc::size_t;
 import str::extensions;
+import io::{reader, writer};
 
 // tcp interfaces
 export tcp_socket;
diff --git a/src/libstd/serialization.rs b/src/libstd/serialization.rs
index ba20ff88e3d..ed9cf5570ce 100644
--- a/src/libstd/serialization.rs
+++ b/src/libstd/serialization.rs
@@ -101,13 +101,21 @@ fn read_to_vec<D: deserializer, T: copy>(d: D, f: fn() -> T) -> ~[T] {
     }
 }
 
-impl serializer_helpers<S: serializer> for S {
+trait serializer_helpers {
+    fn emit_from_vec<T>(v: ~[T], f: fn(T));
+}
+
+impl serializer_helpers<S: serializer> of serializer_helpers for S {
     fn emit_from_vec<T>(v: ~[T], f: fn(T)) {
         emit_from_vec(self, v, f)
     }
 }
 
-impl deserializer_helpers<D: deserializer> for D {
+trait deserializer_helpers {
+    fn read_to_vec<T: copy>(f: fn() -> T) -> ~[T];
+}
+
+impl deserializer_helpers<D: deserializer> of deserializer_helpers for D {
     fn read_to_vec<T: copy>(f: fn() -> T) -> ~[T] {
         read_to_vec(self, f)
     }
diff --git a/src/libstd/smallintmap.rs b/src/libstd/smallintmap.rs
index 1d17ba0dbb4..112a55ab67d 100644
--- a/src/libstd/smallintmap.rs
+++ b/src/libstd/smallintmap.rs
@@ -5,14 +5,19 @@
 import core::option;
 import core::option::{some, none};
 import dvec::{dvec, extensions};
+import map::map;
 
 // FIXME (#2347): Should not be @; there's a bug somewhere in rustc that
 // requires this to be.
-type smallintmap<T: copy> = @{v: dvec<option<T>>};
+type smallintmap_<T: copy> = {v: dvec<option<T>>};
+
+enum smallintmap<T:copy> {
+    smallintmap_(@smallintmap_<T>)
+}
 
 /// Create a smallintmap
 fn mk<T: copy>() -> smallintmap<T> {
-    ret @{v: dvec()};
+    ret smallintmap_(@{v: dvec()});
 }
 
 /**
diff --git a/src/libstd/time.rs b/src/libstd/time.rs
index 553592b10bd..8680719c9b9 100644
--- a/src/libstd/time.rs
+++ b/src/libstd/time.rs
@@ -65,7 +65,7 @@ fn tzset() {
     rustrt::rust_tzset();
 }
 
-type tm = {
+type tm_ = {
     tm_sec: i32, // seconds after the minute ~[0-60]
     tm_min: i32, // minutes after the hour ~[0-59]
     tm_hour: i32, // hours after midnight ~[0-23]
@@ -80,8 +80,12 @@ type tm = {
     tm_nsec: i32, // nanoseconds
 };
 
+enum tm {
+    tm_(tm_)
+}
+
 fn empty_tm() -> tm {
-    {
+    tm_({
         tm_sec: 0_i32,
         tm_min: 0_i32,
         tm_hour: 0_i32,
@@ -94,7 +98,7 @@ fn empty_tm() -> tm {
         tm_gmtoff: 0_i32,
         tm_zone: ~"",
         tm_nsec: 0_i32,
-    }
+    })
 }
 
 /// Returns the specified time in UTC
@@ -563,7 +567,7 @@ fn strptime(s: ~str, format: ~str) -> result<tm, ~str> {
         }
 
         if pos == len && rdr.eof() {
-            ok({
+            ok(tm_({
                 tm_sec: tm.tm_sec,
                 tm_min: tm.tm_min,
                 tm_hour: tm.tm_hour,
@@ -576,7 +580,7 @@ fn strptime(s: ~str, format: ~str) -> result<tm, ~str> {
                 tm_gmtoff: tm.tm_gmtoff,
                 tm_zone: tm.tm_zone,
                 tm_nsec: tm.tm_nsec,
-            })
+            }))
         } else { result }
     }
 }