Skip to content

Commit de5c61e

Browse files
committed
---
yaml --- r: 14200 b: refs/heads/try c: 5d57fa3 h: refs/heads/master v: v3
1 parent 82c0ab5 commit de5c61e

File tree

4 files changed

+45
-25
lines changed

4 files changed

+45
-25
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
refs/heads/master: 61b1875c16de39c166b0f4d54bba19f9c6777d1a
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 4a81779abd786ff22d71434c6d9a5917ea4cdfff
5-
refs/heads/try: efd393d6137b06715dbd3a3e18bfd7ae4bd9bb6b
5+
refs/heads/try: 5d57fa3403ab627e9507a9f0768e742ebc17bc11
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105

branches/try/src/comp/metadata/encoder.rs

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import std::{io, ebml, map, list};
44
import io::writer_util;
5+
import ebml::writer_util;
56
import syntax::ast::*;
67
import syntax::ast_util;
78
import syntax::ast_util::local_def;
@@ -21,15 +22,22 @@ type encode_ctxt = {ccx: @crate_ctxt, type_abbrevs: abbrev_map};
2122

2223
// Path table encoding
2324
fn encode_name(ebml_w: ebml::writer, name: str) {
24-
ebml::start_tag(ebml_w, tag_paths_data_name);
25-
ebml_w.writer.write(str::bytes(name));
26-
ebml::end_tag(ebml_w);
25+
ebml_w.wr_tag(tag_paths_data_name) {||
26+
ebml_w.wr_str(name);
27+
}
2728
}
2829

2930
fn encode_def_id(ebml_w: ebml::writer, id: def_id) {
30-
ebml::start_tag(ebml_w, tag_def_id);
31-
ebml_w.writer.write(str::bytes(def_to_str(id)));
32-
ebml::end_tag(ebml_w);
31+
ebml_w.wr_tag(tag_def_id) {||
32+
ebml_w.wr_str(def_to_str(id));
33+
}
34+
}
35+
36+
fn encode_named_def_id(ebml_w: ebml::writer, name: str, id: def_id) {
37+
ebml_w.wr_tag(tag_paths_data_item) {||
38+
encode_name(ebml_w, name);
39+
encode_def_id(ebml_w, id);
40+
}
3341
}
3442

3543
type entry<T> = {val: T, pos: uint};
@@ -38,10 +46,10 @@ fn encode_enum_variant_paths(ebml_w: ebml::writer, variants: [variant],
3846
path: [str], &index: [entry<str>]) {
3947
for variant: variant in variants {
4048
add_to_index(ebml_w, path, index, variant.node.name);
41-
ebml::start_tag(ebml_w, tag_paths_data_item);
42-
encode_name(ebml_w, variant.node.name);
43-
encode_def_id(ebml_w, local_def(variant.node.id));
44-
ebml::end_tag(ebml_w);
49+
ebml_w.wr_tag(tag_paths_data_item) {||
50+
encode_name(ebml_w, variant.node.name);
51+
encode_def_id(ebml_w, local_def(variant.node.id));
52+
}
4553
}
4654
}
4755

@@ -56,10 +64,7 @@ fn encode_native_module_item_paths(ebml_w: ebml::writer, nmod: native_mod,
5664
path: [str], &index: [entry<str>]) {
5765
for nitem: @native_item in nmod.items {
5866
add_to_index(ebml_w, path, index, nitem.ident);
59-
ebml::start_tag(ebml_w, tag_paths_data_item);
60-
encode_name(ebml_w, nitem.ident);
61-
encode_def_id(ebml_w, local_def(nitem.id));
62-
ebml::end_tag(ebml_w);
67+
encode_named_def_id(ebml_w, nitem.ident, local_def(nitem.id));
6368
}
6469
}
6570

@@ -71,17 +76,11 @@ fn encode_module_item_paths(ebml_w: ebml::writer, module: _mod, path: [str],
7176
alt it.node {
7277
item_const(_, _) {
7378
add_to_index(ebml_w, path, index, it.ident);
74-
ebml::start_tag(ebml_w, tag_paths_data_item);
75-
encode_name(ebml_w, it.ident);
76-
encode_def_id(ebml_w, local_def(it.id));
77-
ebml::end_tag(ebml_w);
79+
encode_named_def_id(ebml_w, it.ident, local_def(it.id));
7880
}
7981
item_fn(_, tps, _) {
8082
add_to_index(ebml_w, path, index, it.ident);
81-
ebml::start_tag(ebml_w, tag_paths_data_item);
82-
encode_name(ebml_w, it.ident);
83-
encode_def_id(ebml_w, local_def(it.id));
84-
ebml::end_tag(ebml_w);
83+
encode_named_def_id(ebml_w, it.ident, local_def(it.id));
8584
}
8685
item_mod(_mod) {
8786
add_to_index(ebml_w, path, index, it.ident);

branches/try/src/etc/ctags.rust

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
--regex-rust=/[ \t]*enum[ \t]+([a-zA-Z0-9_]+)/\1/T,types/
66
--regex-rust=/[ \t]*resource[ \t]+([a-zA-Z0-9_]+)/\1/T,types/
77
--regex-rust=/[ \t]*mod[ \t]+([a-zA-Z0-9_]+)/\1/m,modules/
8+
--regex-rust=/[ \t]*const[ \t]+([a-zA-Z0-9_]+)/\1/m,consts/

branches/try/src/libstd/ebml.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,9 @@ fn create_writer(w: io::writer) -> writer {
154154
// TODO: Provide a function to write the standard ebml header.
155155
fn start_tag(w: writer, tag_id: uint) {
156156
// Write the enum ID:
157-
158157
write_vint(w.writer, tag_id);
159-
// Write a placeholder four-byte size.
160158

159+
// Write a placeholder four-byte size.
161160
w.size_positions += [w.writer.tell()];
162161
let zeroes: [u8] = [0u8, 0u8, 0u8, 0u8];
163162
w.writer.write(zeroes);
@@ -170,5 +169,26 @@ fn end_tag(w: writer) {
170169
write_sized_vint(w.writer, cur_pos - last_size_pos - 4u, 4u);
171170
w.writer.seek(cur_pos as int, io::seek_set);
172171
}
172+
173+
impl writer_util for writer {
174+
fn wr_tag(tag_id: uint, blk: fn()) {
175+
start_tag(self, tag_id);
176+
blk();
177+
end_tag(self);
178+
}
179+
180+
fn wr_uint(id: uint) {
181+
write_vint(self.writer, id);
182+
}
183+
184+
fn wr_bytes(b: [u8]) {
185+
self.writer.write(b);
186+
}
187+
188+
fn wr_str(s: str) {
189+
self.wr_bytes(str::bytes(s));
190+
}
191+
}
192+
173193
// TODO: optionally perform "relaxations" on end_tag to more efficiently
174194
// encode sizes; this is a fixed point iteration

0 commit comments

Comments
 (0)