port some code to use dvec
This commit is contained in:
parent
cf6ad6d62a
commit
0f969da882
5 changed files with 49 additions and 31 deletions
|
@ -139,7 +139,7 @@ fn new_parser(sess: parse_sess, cfg: ast::crate_cfg, rdr: lexer::reader,
|
|||
mut token: tok0.tok,
|
||||
mut span: span0,
|
||||
mut last_span: span0,
|
||||
mut buffer: [],
|
||||
buffer: dvec::dvec(),
|
||||
mut restriction: parser::UNRESTRICTED,
|
||||
reader: rdr,
|
||||
keywords: token::keyword_table(),
|
||||
|
|
|
@ -13,6 +13,7 @@ import attr::{parse_outer_attrs_or_ext,
|
|||
parse_outer_attributes,
|
||||
parse_optional_meta};
|
||||
import common::*;
|
||||
import dvec::{dvec, extensions};
|
||||
|
||||
export expect;
|
||||
export file_type;
|
||||
|
@ -54,7 +55,7 @@ type parser = @{
|
|||
mut token: token::token,
|
||||
mut span: span,
|
||||
mut last_span: span,
|
||||
mut buffer: [{tok: token::token, span: span}],
|
||||
buffer: dvec<{tok: token::token, span: span}>,
|
||||
mut restriction: restriction,
|
||||
reader: reader,
|
||||
keywords: hashmap<str, ()>,
|
||||
|
@ -64,12 +65,12 @@ type parser = @{
|
|||
impl parser for parser {
|
||||
fn bump() {
|
||||
self.last_span = self.span;
|
||||
if vec::len(self.buffer) == 0u {
|
||||
if self.buffer.len() == 0u {
|
||||
let next = lexer::next_token(self.reader);
|
||||
self.token = next.tok;
|
||||
self.span = mk_sp(next.chpos, self.reader.chpos);
|
||||
} else {
|
||||
let next = vec::shift(self.buffer);
|
||||
let next = self.buffer.shift();
|
||||
self.token = next.tok;
|
||||
self.span = next.span;
|
||||
}
|
||||
|
@ -79,10 +80,10 @@ impl parser for parser {
|
|||
self.span = mk_sp(lo, hi);
|
||||
}
|
||||
fn look_ahead(distance: uint) -> token::token {
|
||||
while vec::len(self.buffer) < distance {
|
||||
while self.buffer.len() < distance {
|
||||
let next = lexer::next_token(self.reader);
|
||||
let sp = mk_sp(next.chpos, self.reader.chpos);
|
||||
vec::push(self.buffer, {tok: next.tok, span: sp});
|
||||
self.buffer.push({tok: next.tok, span: sp});
|
||||
}
|
||||
ret self.buffer[distance - 1u].tok;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import io::writer_util;
|
||||
import dvec::{dvec, extensions};
|
||||
|
||||
/*
|
||||
* This pretty-printer is a direct reimplementation of Philip Karlton's
|
||||
|
@ -102,7 +103,6 @@ fn mk_printer(out: io::writer, linewidth: uint) -> printer {
|
|||
let token: [mut token] = vec::to_mut(vec::from_elem(n, EOF));
|
||||
let size: [mut int] = vec::to_mut(vec::from_elem(n, 0));
|
||||
let scan_stack: [mut uint] = vec::to_mut(vec::from_elem(n, 0u));
|
||||
let print_stack: [print_stack_elt] = [];
|
||||
@{out: out,
|
||||
buf_len: n,
|
||||
mut margin: linewidth as int,
|
||||
|
@ -117,7 +117,7 @@ fn mk_printer(out: io::writer, linewidth: uint) -> printer {
|
|||
mut scan_stack_empty: true,
|
||||
mut top: 0u,
|
||||
mut bottom: 0u,
|
||||
mut print_stack: print_stack,
|
||||
print_stack: dvec(),
|
||||
mut pending_indentation: 0}
|
||||
}
|
||||
|
||||
|
@ -221,7 +221,7 @@ type printer = @{
|
|||
mut top: uint, // index of top of scan_stack
|
||||
mut bottom: uint, // index of bottom of scan_stack
|
||||
// stack of blocks-in-progress being flushed by print
|
||||
mut print_stack: [print_stack_elt],
|
||||
print_stack: dvec<print_stack_elt>,
|
||||
// buffered indentation to avoid writing trailing whitespace
|
||||
mut pending_indentation: int
|
||||
};
|
||||
|
@ -398,11 +398,12 @@ impl printer for printer {
|
|||
self.pending_indentation += amount;
|
||||
}
|
||||
fn get_top() -> print_stack_elt {
|
||||
let n = vec::len(self.print_stack);
|
||||
let mut top: print_stack_elt =
|
||||
{offset: 0, pbreak: broken(inconsistent)};
|
||||
if n != 0u { top = self.print_stack[n - 1u]; }
|
||||
ret top;
|
||||
let n = self.print_stack.len();
|
||||
if n != 0u {
|
||||
self.print_stack[n - 1u]
|
||||
} else {
|
||||
{offset: 0, pbreak: broken(inconsistent)}
|
||||
}
|
||||
}
|
||||
fn write_str(s: str) {
|
||||
while self.pending_indentation > 0 {
|
||||
|
@ -420,16 +421,18 @@ impl printer for printer {
|
|||
if L > self.space {
|
||||
let col = self.margin - self.space + b.offset;
|
||||
#debug("print BEGIN -> push broken block at col %d", col);
|
||||
self.print_stack += [{offset: col, pbreak: broken(b.breaks)}];
|
||||
self.print_stack.push({offset: col,
|
||||
pbreak: broken(b.breaks)});
|
||||
} else {
|
||||
#debug("print BEGIN -> push fitting block");
|
||||
self.print_stack += [{offset: 0, pbreak: fits}];
|
||||
self.print_stack.push({offset: 0,
|
||||
pbreak: fits});
|
||||
}
|
||||
}
|
||||
END {
|
||||
#debug("print END -> pop END");
|
||||
assert (vec::len(self.print_stack) != 0u);
|
||||
vec::pop(self.print_stack);
|
||||
assert (self.print_stack.len() != 0u);
|
||||
self.print_stack.pop();
|
||||
}
|
||||
BREAK(b) {
|
||||
let top = self.get_top();
|
||||
|
|
|
@ -7,6 +7,7 @@ import pp::{break_offset, word, printer,
|
|||
inconsistent, eof};
|
||||
import diagnostic;
|
||||
import ast_util::operator_prec;
|
||||
import dvec::{dvec, extensions};
|
||||
|
||||
// The ps is stored here to prevent recursive type.
|
||||
enum ann_node {
|
||||
|
@ -29,22 +30,27 @@ type ps =
|
|||
literals: option<[comments::lit]>,
|
||||
mut cur_cmnt: uint,
|
||||
mut cur_lit: uint,
|
||||
mut boxes: [pp::breaks],
|
||||
boxes: dvec<pp::breaks>,
|
||||
ann: pp_ann};
|
||||
|
||||
fn ibox(s: ps, u: uint) { s.boxes += [pp::inconsistent]; pp::ibox(s.s, u); }
|
||||
fn ibox(s: ps, u: uint) {
|
||||
s.boxes.push(pp::inconsistent);
|
||||
pp::ibox(s.s, u);
|
||||
}
|
||||
|
||||
fn end(s: ps) { vec::pop(s.boxes); pp::end(s.s); }
|
||||
fn end(s: ps) {
|
||||
s.boxes.pop();
|
||||
pp::end(s.s);
|
||||
}
|
||||
|
||||
fn rust_printer(writer: io::writer) -> ps {
|
||||
let boxes: [pp::breaks] = [];
|
||||
ret @{s: pp::mk_printer(writer, default_columns),
|
||||
cm: none::<codemap>,
|
||||
comments: none::<[comments::cmnt]>,
|
||||
literals: none::<[comments::lit]>,
|
||||
mut cur_cmnt: 0u,
|
||||
mut cur_lit: 0u,
|
||||
mut boxes: boxes,
|
||||
boxes: dvec(),
|
||||
ann: no_ann()};
|
||||
}
|
||||
|
||||
|
@ -59,7 +65,6 @@ const default_columns: uint = 78u;
|
|||
fn print_crate(cm: codemap, span_diagnostic: diagnostic::span_handler,
|
||||
crate: @ast::crate, filename: str, in: io::reader,
|
||||
out: io::writer, ann: pp_ann) {
|
||||
let boxes: [pp::breaks] = [];
|
||||
let r = comments::gather_comments_and_literals(span_diagnostic,
|
||||
filename, in);
|
||||
let s =
|
||||
|
@ -69,7 +74,7 @@ fn print_crate(cm: codemap, span_diagnostic: diagnostic::span_handler,
|
|||
literals: some(r.lits),
|
||||
mut cur_cmnt: 0u,
|
||||
mut cur_lit: 0u,
|
||||
mut boxes: boxes,
|
||||
boxes: dvec(),
|
||||
ann: ann};
|
||||
print_crate_(s, crate);
|
||||
}
|
||||
|
@ -195,9 +200,15 @@ fn test_variant_to_str() {
|
|||
assert varstr == "principle_skinner";
|
||||
}
|
||||
|
||||
fn cbox(s: ps, u: uint) { s.boxes += [pp::consistent]; pp::cbox(s.s, u); }
|
||||
fn cbox(s: ps, u: uint) {
|
||||
s.boxes.push(pp::consistent);
|
||||
pp::cbox(s.s, u);
|
||||
}
|
||||
|
||||
fn box(s: ps, u: uint, b: pp::breaks) { s.boxes += [b]; pp::box(s.s, u, b); }
|
||||
fn box(s: ps, u: uint, b: pp::breaks) {
|
||||
s.boxes.push(b);
|
||||
pp::box(s.s, u, b);
|
||||
}
|
||||
|
||||
fn nbsp(s: ps) { word(s.s, " "); }
|
||||
|
||||
|
@ -245,7 +256,7 @@ fn is_bol(s: ps) -> bool {
|
|||
}
|
||||
|
||||
fn in_cbox(s: ps) -> bool {
|
||||
let len = vec::len(s.boxes);
|
||||
let len = s.boxes.len();
|
||||
if len == 0u { ret false; }
|
||||
ret s.boxes[len - 1u] == pp::consistent;
|
||||
}
|
||||
|
|
|
@ -20,9 +20,12 @@ fn check_crate(tcx: ty::ctxt,
|
|||
crate: @ast::crate) -> (root_map, mutbl_map) {
|
||||
|
||||
// big hack to keep this off except when I want it on
|
||||
let msg_level = alt os::getenv("RUST_BORROWCK") {
|
||||
none {tcx.sess.opts.borrowck}
|
||||
some(v) {option::get(uint::from_str(v))}
|
||||
let msg_level = if tcx.sess.opts.borrowck != 0u {
|
||||
tcx.sess.opts.borrowck
|
||||
} else {
|
||||
os::getenv("RUST_BORROWCK").map_default(0u) { |v|
|
||||
option::get(uint::from_str(v))
|
||||
}
|
||||
};
|
||||
|
||||
let bccx = @{tcx: tcx,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue