common.rs 4.2 KB
Newer Older
1
import std._uint;
2
import std._int;
3
import std._vec;
4
import std.option.none;
5
import front.ast;
6
import util.typestate_ann.ts_ann;
7

8 9 10 11 12 13 14
import std.io.stdout;
import std.io.str_writer;
import std.io.string_writer;
import pretty.pprust.print_block;
import pretty.pprust.print_expr;
import pretty.pprust.print_decl;
import pretty.pp.mkstate;
15 16

type filename = str;
17
type span = rec(uint lo, uint hi);
18
type spanned[T] = rec(T node, span span);
G
Graydon Hoare 已提交
19

20
tag ty_mach {
21 22 23 24 25 26 27 28 29 30 31 32
    ty_i8;
    ty_i16;
    ty_i32;
    ty_i64;

    ty_u8;
    ty_u16;
    ty_u32;
    ty_u64;

    ty_f32;
    ty_f64;
33
}
G
Graydon Hoare 已提交
34

35 36
fn ty_mach_to_str(ty_mach tm) -> str {
    alt (tm) {
37 38 39 40 41 42 43 44 45 46 47 48
        case (ty_u8) { ret "u8"; }
        case (ty_u16) { ret "u16"; }
        case (ty_u32) { ret "u32"; }
        case (ty_u64) { ret "u64"; }

        case (ty_i8) { ret "i8"; }
        case (ty_i16) { ret "i16"; }
        case (ty_i32) { ret "i32"; }
        case (ty_i64) { ret "i64"; }

        case (ty_f32) { ret "f32"; }
        case (ty_f64) { ret "f64"; }
49 50 51
    }
}

52 53 54 55 56 57
fn new_str_hash[V]() -> std.map.hashmap[str,V] {
    let std.map.hashfn[str] hasher = std._str.hash;
    let std.map.eqfn[str] eqer = std._str.eq;
    ret std.map.mk_hashmap[str,V](hasher, eqer);
}

P
Patrick Walton 已提交
58 59 60 61
fn def_eq(&ast.def_id a, &ast.def_id b) -> bool {
    ret a._0 == b._0 && a._1 == b._1;
}

62 63 64 65 66 67
fn hash_def(&ast.def_id d) -> uint {
    auto h = 5381u;
    h = ((h << 5u) + h) ^ (d._0 as uint);
    h = ((h << 5u) + h) ^ (d._1 as uint);
    ret h;
}
68

69 70
fn new_def_hash[V]() -> std.map.hashmap[ast.def_id,V] {
    let std.map.hashfn[ast.def_id] hasher = hash_def;
P
Patrick Walton 已提交
71
    let std.map.eqfn[ast.def_id] eqer = def_eq;
72 73 74
    ret std.map.mk_hashmap[ast.def_id,V](hasher, eqer);
}

75 76 77 78 79 80 81 82
fn new_int_hash[V]() -> std.map.hashmap[int,V] {
    fn hash_int(&int x) -> uint { ret x as uint; }
    fn eq_int(&int a, &int b) -> bool { ret a == b; }
    auto hasher = hash_int;
    auto eqer = eq_int;
    ret std.map.mk_hashmap[int,V](hasher, eqer);
}

P
Patrick Walton 已提交
83 84 85 86 87 88 89 90
fn new_uint_hash[V]() -> std.map.hashmap[uint,V] {
    fn hash_uint(&uint x) -> uint { ret x; }
    fn eq_uint(&uint a, &uint b) -> bool { ret a == b; }
    auto hasher = hash_uint;
    auto eqer = eq_uint;
    ret std.map.mk_hashmap[uint,V](hasher, eqer);
}

91 92 93 94
fn istr(int i) -> str {
    ret _int.to_str(i, 10u);
}

95 96 97 98 99 100 101 102 103 104 105
fn uistr(uint i) -> str {
    ret _uint.to_str(i, 10u);
}

fn elt_expr(&ast.elt e) -> @ast.expr { ret e.expr; }

fn elt_exprs(vec[ast.elt] elts) -> vec[@ast.expr] {
    auto f = elt_expr;
    be _vec.map[ast.elt, @ast.expr](f, elts);
}

106 107 108 109 110 111 112 113
fn field_expr(&ast.field f) -> @ast.expr { ret f.expr; }

fn field_exprs(vec[ast.field] fields) -> vec [@ast.expr] {
    auto f = field_expr;
    ret _vec.map[ast.field, @ast.expr](f, fields);
}

fn plain_ann() -> ast.ann {
114
  ret ast.ann_type(middle.ty.mk_nil(),
115 116 117
                   none[vec[@middle.ty.t]], none[@ts_ann]);
}

118
fn log_expr(&ast.expr e) -> () {
119 120 121 122 123 124
  let str_writer s = string_writer();
  auto out_ = mkstate(s.get_writer(), 80u);
  auto out = @rec(s=out_,
                  comments=none[vec[front.lexer.cmnt]],
                  mutable cur_cmnt=0u);

125
  print_expr(out, @e);
126 127 128 129 130 131 132 133 134 135 136 137 138 139
  log(s.get_str());
}

fn log_block(&ast.block b) -> () {
  let str_writer s = string_writer();
  auto out_ = mkstate(s.get_writer(), 80u);
  auto out = @rec(s=out_,
                  comments=none[vec[front.lexer.cmnt]],
                  mutable cur_cmnt=0u);

  print_block(out, b);
  log(s.get_str());
}

140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
fn log_ann(&ast.ann a) -> () {
    alt (a) {
        case (ast.ann_none) {
            log("ann_none");
        }
        case (ast.ann_type(_,_,_)) {
            log("ann_type");
        }
    }
}

fn log_stmt(ast.stmt st) -> () {
  let str_writer s = string_writer();
  auto out_ = mkstate(s.get_writer(), 80u);
  auto out = @rec(s=out_,
                  comments=none[vec[front.lexer.cmnt]],
                  mutable cur_cmnt=0u);
  alt (st.node) {
    case (ast.stmt_decl(?decl,_)) {
      print_decl(out, decl);
    }
    case (ast.stmt_expr(?ex,_)) {
      print_expr(out, ex);
    }
    case (_) { /* do nothing */ }
  }
  log(s.get_str());
}

G
Graydon Hoare 已提交
169 170 171 172 173 174 175
//
// Local Variables:
// mode: rust
// fill-column: 78;
// indent-tabs-mode: nil
// c-basic-offset: 4
// buffer-file-coding-system: utf-8-unix
176
// compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
G
Graydon Hoare 已提交
177 178
// End:
//