about summary refs log tree commit diff
path: root/src/lib
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2011-03-25 17:53:46 -0700
committerPatrick Walton <pcwalton@mimiga.net>2011-03-25 17:54:48 -0700
commit94c19a18ae8ddf70d0c6a21b296e0858dc154d2a (patch)
tree8f8a88da05e45ba03c48cf82f9670a9d00991b7a /src/lib
parent661f1c541e86305a714ea2a27ec7b40ca241aa01 (diff)
downloadrust-94c19a18ae8ddf70d0c6a21b296e0858dc154d2a.tar.gz
rust-94c19a18ae8ddf70d0c6a21b296e0858dc154d2a.zip
rustc: Look up names in "use"d crates
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/ebml.rs15
-rw-r--r--src/lib/io.rs9
2 files changed, 18 insertions, 6 deletions
diff --git a/src/lib/ebml.rs b/src/lib/ebml.rs
index d1697ebaeed..047218a33a6 100644
--- a/src/lib/ebml.rs
+++ b/src/lib/ebml.rs
@@ -6,7 +6,7 @@ import option.none;
 import option.some;
 
 type ebml_tag = rec(uint id, uint size);
-type ebml_state = rec(ebml_tag ebml_tag, uint pos);
+type ebml_state = rec(ebml_tag ebml_tag, uint tag_pos, uint data_pos);
 
 // TODO: When we have module renaming, make "reader" and "writer" separate
 // modules within this file.
@@ -56,8 +56,10 @@ impure fn create_reader(&io.reader r) -> reader {
 impure fn bytes_left(&reader r) -> uint {
     auto pos = r.reader.tell();
     alt (_vec.last[ebml_state](r.states)) {
-        case (none[ebml_state])      { ret r.size - pos; }
-        case (some[ebml_state](?st)) { ret st.pos + st.ebml_tag.size - pos; }
+        case (none[ebml_state]) { ret r.size - pos; }
+        case (some[ebml_state](?st)) {
+            ret st.data_pos + st.ebml_tag.size - pos;
+        }
     }
 }
 
@@ -69,9 +71,10 @@ impure fn read_tag(&reader r) -> ebml_tag {
 
 // Reads a tag and moves the cursor to its first child or data segment.
 impure fn move_to_first_child(&reader r) {
-    auto pos = r.reader.tell();
+    auto tag_pos = r.reader.tell();
     auto t = read_tag(r);
-    r.states += vec(rec(ebml_tag=t, pos=pos));
+    auto data_pos = r.reader.tell();
+    r.states += vec(rec(ebml_tag=t, tag_pos=tag_pos, data_pos=data_pos));
 }
 
 // Reads a tag and skips over its contents, moving to its next sibling.
@@ -84,7 +87,7 @@ impure fn move_to_next_sibling(&reader r) {
 impure fn move_to_parent(&reader r) {
     check (_vec.len[ebml_state](r.states) > 0u);
     auto st = _vec.pop[ebml_state](r.states);
-    r.reader.seek(st.pos as int, io.seek_set);
+    r.reader.seek(st.tag_pos as int, io.seek_set);
 }
 
 // Reads the data segment of a tag.
diff --git a/src/lib/io.rs b/src/lib/io.rs
index 5088d1979ca..84de18157c1 100644
--- a/src/lib/io.rs
+++ b/src/lib/io.rs
@@ -188,6 +188,11 @@ fn file_reader(str path) -> reader {
     ret new_reader(FILE_buf_reader(f, true));
 }
 
+// FIXME: Remove me once objects are exported.
+fn new_reader_(buf_reader bufr) -> reader {
+    ret new_reader(bufr);
+}
+
 
 // Byte buffer readers
 
@@ -224,6 +229,10 @@ state obj byte_buf_reader(byte_buf bbuf) {
     impure fn tell() -> uint { ret bbuf.pos; }
 }
 
+fn new_byte_buf_reader(vec[u8] buf) -> byte_buf_reader {
+    ret byte_buf_reader(@rec(buf=buf, mutable pos=0u));
+}
+
 
 // Writing