aboutsummaryrefslogtreecommitdiff
path: root/src/comp/front
diff options
context:
space:
mode:
Diffstat (limited to 'src/comp/front')
-rw-r--r--src/comp/front/creader.rs88
1 files changed, 43 insertions, 45 deletions
diff --git a/src/comp/front/creader.rs b/src/comp/front/creader.rs
index 99dbf6ad..3ecf3058 100644
--- a/src/comp/front/creader.rs
+++ b/src/comp/front/creader.rs
@@ -49,8 +49,7 @@ tag resolve_result {
// Callback to translate defs to strs or back.
type str_def = fn(str) -> ast.def_id;
-type pstate = rec(str rep, mutable uint pos, uint len,
- @ty.type_store tystore);
+type pstate = rec(str rep, mutable uint pos, uint len, ty.ctxt tcx);
fn peek(@pstate st) -> u8 {
if (st.pos < st.len) {ret st.rep.(st.pos) as u8;}
@@ -63,9 +62,9 @@ fn next(@pstate st) -> u8 {
ret ch as u8;
}
-fn parse_ty_str(str rep, str_def sd, @ty.type_store tystore) -> ty.t {
+fn parse_ty_str(str rep, str_def sd, ty.ctxt tcx) -> ty.t {
auto len = _str.byte_len(rep);
- auto st = @rec(rep=rep, mutable pos=0u, len=len, tystore=tystore);
+ auto st = @rec(rep=rep, mutable pos=0u, len=len, tcx=tcx);
auto result = parse_ty(st, sd);
if (st.pos != len) {
log_err "parse_ty_str: incomplete parse, stopped at byte "
@@ -77,27 +76,27 @@ fn parse_ty_str(str rep, str_def sd, @ty.type_store tystore) -> ty.t {
fn parse_ty(@pstate st, str_def sd) -> ty.t {
alt (next(st) as char) {
- case ('n') { ret ty.mk_nil(st.tystore); }
- case ('b') { ret ty.mk_bool(st.tystore); }
- case ('i') { ret ty.mk_int(st.tystore); }
- case ('u') { ret ty.mk_uint(st.tystore); }
- case ('l') { ret ty.mk_float(st.tystore); }
+ case ('n') { ret ty.mk_nil(st.tcx); }
+ case ('b') { ret ty.mk_bool(st.tcx); }
+ case ('i') { ret ty.mk_int(st.tcx); }
+ case ('u') { ret ty.mk_uint(st.tcx); }
+ case ('l') { ret ty.mk_float(st.tcx); }
case ('M') {
alt (next(st) as char) {
- case ('b') { ret ty.mk_mach(st.tystore, common.ty_u8); }
- case ('w') { ret ty.mk_mach(st.tystore, common.ty_u16); }
- case ('l') { ret ty.mk_mach(st.tystore, common.ty_u32); }
- case ('d') { ret ty.mk_mach(st.tystore, common.ty_u64); }
- case ('B') { ret ty.mk_mach(st.tystore, common.ty_i8); }
- case ('W') { ret ty.mk_mach(st.tystore, common.ty_i16); }
- case ('L') { ret ty.mk_mach(st.tystore, common.ty_i32); }
- case ('D') { ret ty.mk_mach(st.tystore, common.ty_i64); }
- case ('f') { ret ty.mk_mach(st.tystore, common.ty_f32); }
- case ('F') { ret ty.mk_mach(st.tystore, common.ty_f64); }
+ case ('b') { ret ty.mk_mach(st.tcx, common.ty_u8); }
+ case ('w') { ret ty.mk_mach(st.tcx, common.ty_u16); }
+ case ('l') { ret ty.mk_mach(st.tcx, common.ty_u32); }
+ case ('d') { ret ty.mk_mach(st.tcx, common.ty_u64); }
+ case ('B') { ret ty.mk_mach(st.tcx, common.ty_i8); }
+ case ('W') { ret ty.mk_mach(st.tcx, common.ty_i16); }
+ case ('L') { ret ty.mk_mach(st.tcx, common.ty_i32); }
+ case ('D') { ret ty.mk_mach(st.tcx, common.ty_i64); }
+ case ('f') { ret ty.mk_mach(st.tcx, common.ty_f32); }
+ case ('F') { ret ty.mk_mach(st.tcx, common.ty_f64); }
}
}
- case ('c') { ret ty.mk_char(st.tystore); }
- case ('s') { ret ty.mk_str(st.tystore); }
+ case ('c') { ret ty.mk_char(st.tcx); }
+ case ('s') { ret ty.mk_str(st.tcx); }
case ('t') {
check(next(st) as char == '[');
auto def = parse_def(st, sd);
@@ -106,13 +105,13 @@ fn parse_ty(@pstate st, str_def sd) -> ty.t {
params += vec(parse_ty(st, sd));
}
st.pos = st.pos + 1u;
- ret ty.mk_tag(st.tystore, def, params);
+ ret ty.mk_tag(st.tcx, def, params);
}
- case ('p') { ret ty.mk_param(st.tystore, parse_int(st) as uint); }
- case ('@') { ret ty.mk_box(st.tystore, parse_mt(st, sd)); }
- case ('V') { ret ty.mk_vec(st.tystore, parse_mt(st, sd)); }
- case ('P') { ret ty.mk_port(st.tystore, parse_ty(st, sd)); }
- case ('C') { ret ty.mk_chan(st.tystore, parse_ty(st, sd)); }
+ case ('p') { ret ty.mk_param(st.tcx, parse_int(st) as uint); }
+ case ('@') { ret ty.mk_box(st.tcx, parse_mt(st, sd)); }
+ case ('V') { ret ty.mk_vec(st.tcx, parse_mt(st, sd)); }
+ case ('P') { ret ty.mk_port(st.tcx, parse_ty(st, sd)); }
+ case ('C') { ret ty.mk_chan(st.tcx, parse_ty(st, sd)); }
case ('T') {
check(next(st) as char == '[');
let vec[ty.mt] params = vec();
@@ -120,7 +119,7 @@ fn parse_ty(@pstate st, str_def sd) -> ty.t {
params += vec(parse_mt(st, sd));
}
st.pos = st.pos + 1u;
- ret ty.mk_tup(st.tystore, params);
+ ret ty.mk_tup(st.tcx, params);
}
case ('R') {
check(next(st) as char == '[');
@@ -134,15 +133,15 @@ fn parse_ty(@pstate st, str_def sd) -> ty.t {
fields += vec(rec(ident=name, mt=parse_mt(st, sd)));
}
st.pos = st.pos + 1u;
- ret ty.mk_rec(st.tystore, fields);
+ ret ty.mk_rec(st.tcx, fields);
}
case ('F') {
auto func = parse_ty_fn(st, sd);
- ret ty.mk_fn(st.tystore, ast.proto_fn, func._0, func._1);
+ ret ty.mk_fn(st.tcx, ast.proto_fn, func._0, func._1);
}
case ('W') {
auto func = parse_ty_fn(st, sd);
- ret ty.mk_fn(st.tystore, ast.proto_iter, func._0, func._1);
+ ret ty.mk_fn(st.tcx, ast.proto_iter, func._0, func._1);
}
case ('N') {
auto abi;
@@ -152,7 +151,7 @@ fn parse_ty(@pstate st, str_def sd) -> ty.t {
case ('l') {abi = ast.native_abi_llvm;}
}
auto func = parse_ty_fn(st, sd);
- ret ty.mk_native_fn(st.tystore,abi,func._0,func._1);
+ ret ty.mk_native_fn(st.tcx,abi,func._0,func._1);
}
case ('O') {
check(next(st) as char == '[');
@@ -174,11 +173,11 @@ fn parse_ty(@pstate st, str_def sd) -> ty.t {
output=func._1));
}
st.pos += 1u;
- ret ty.mk_obj(st.tystore, methods);
+ ret ty.mk_obj(st.tcx, methods);
}
- case ('X') { ret ty.mk_var(st.tystore, parse_int(st)); }
- case ('E') { ret ty.mk_native(st.tystore); }
- case ('Y') { ret ty.mk_type(st.tystore); }
+ case ('X') { ret ty.mk_var(st.tcx, parse_int(st)); }
+ case ('E') { ret ty.mk_native(st.tcx); }
+ case ('Y') { ret ty.mk_type(st.tcx); }
}
}
@@ -331,7 +330,7 @@ fn variant_tag_id(&ebml.doc d) -> ast.def_id {
ret parse_def_id(ebml.doc_data(tagdoc));
}
-fn item_type(&ebml.doc item, int this_cnum, @ty.type_store tystore) -> ty.t {
+fn item_type(&ebml.doc item, int this_cnum, ty.ctxt tcx) -> ty.t {
fn parse_external_def_id(int this_cnum, str s) -> ast.def_id {
// FIXME: This is completely wrong when linking against a crate
// that, in turn, links against another crate. We need a mapping
@@ -344,7 +343,7 @@ fn item_type(&ebml.doc item, int this_cnum, @ty.type_store tystore) -> ty.t {
auto tp = ebml.get_doc(item, metadata.tag_items_data_item_type);
auto s = _str.unsafe_from_bytes(ebml.doc_data(tp));
- ret parse_ty_str(s, bind parse_external_def_id(this_cnum, _), tystore);
+ ret parse_ty_str(s, bind parse_external_def_id(this_cnum, _), tcx);
}
fn item_ty_param_count(&ebml.doc item, int this_cnum) -> uint {
@@ -506,12 +505,12 @@ fn lookup_def(session.session sess, int cnum, vec[ast.ident] path)
ret some[ast.def](def);
}
-fn get_type(session.session sess, @ty.type_store tystore, ast.def_id def)
+fn get_type(session.session sess, ty.ctxt tcx, ast.def_id def)
-> ty.ty_param_count_and_ty {
auto external_crate_id = def._0;
auto data = sess.get_external_crate(external_crate_id).data;
auto item = lookup_item(def._1, data);
- auto t = item_type(item, external_crate_id, tystore);
+ auto t = item_type(item, external_crate_id, tcx);
auto tp_count;
auto kind_ch = item_kind(item);
@@ -532,9 +531,8 @@ fn get_symbol(session.session sess, ast.def_id def) -> str {
ret item_symbol(item);
}
-fn get_tag_variants(session.session sess,
- @ty.type_store tystore,
- ast.def_id def) -> vec[trans.variant_info] {
+fn get_tag_variants(session.session sess, ty.ctxt tcx, ast.def_id def)
+ -> vec[trans.variant_info] {
auto external_crate_id = def._0;
auto data = sess.get_external_crate(external_crate_id).data;
auto items = ebml.get_doc(ebml.new_doc(data), metadata.tag_items);
@@ -544,9 +542,9 @@ fn get_tag_variants(session.session sess,
auto variant_ids = tag_variant_ids(item, external_crate_id);
for (ast.def_id did in variant_ids) {
auto item = find_item(did._1, items);
- auto ctor_ty = item_type(item, external_crate_id, tystore);
+ auto ctor_ty = item_type(item, external_crate_id, tcx);
let vec[ty.t] arg_tys = vec();
- alt (ty.struct(tystore, ctor_ty)) {
+ alt (ty.struct(tcx, ctor_ty)) {
case (ty.ty_fn(_, ?args, _)) {
for (ty.arg a in args) {
arg_tys += vec(a.ty);