Skip to content

Commit fcca871

Browse files
marijnhgraydon
authored andcommitted
---
yaml --- r: 1934 b: refs/heads/master c: 39f0656 h: refs/heads/master v: v3
1 parent c45b60a commit fcca871

File tree

9 files changed

+118
-74
lines changed

9 files changed

+118
-74
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 8a7ea941bb47326ea05431fa58c3d88d60e4a6d3
2+
refs/heads/master: 39f0656b4f428b81bd6be06b89a8de1e63b72e87

trunk/src/comp/front/ast.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,8 @@ type native_mod = rec(str native_name,
385385
type native_mod_index = hashmap[ident,native_mod_index_entry];
386386
387387
type variant_arg = rec(@ty ty, def_id id);
388-
type variant = rec(str name, vec[variant_arg] args, def_id id, ann ann);
388+
type variant_ = rec(str name, vec[variant_arg] args, def_id id, ann ann);
389+
type variant = spanned[variant_];
389390
390391
type view_item = spanned[view_item_];
391392
tag view_item_ {
@@ -451,7 +452,7 @@ fn index_item(mod_index index, @item it) {
451452
index.insert(id, ast.mie_item(it));
452453
let uint variant_idx = 0u;
453454
for (ast.variant v in variants) {
454-
index.insert(v.name,
455+
index.insert(v.node.name,
455456
ast.mie_tag_variant(it, variant_idx));
456457
variant_idx += 1u;
457458
}
@@ -509,7 +510,7 @@ fn index_stmt(block_index index, @stmt s) {
509510
let uint vid = 0u;
510511
for (ast.variant v in variants) {
511512
auto t = ast.bie_tag_variant(it, vid);
512-
index.insert(v.name, t);
513+
index.insert(v.node.name, t);
513514
vid += 1u;
514515
}
515516
}

trunk/src/comp/front/parser.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,9 @@ impure fn parse_ty(parser p) -> @ast.ty {
451451
}
452452

453453
case (token.IDENT(_)) {
454-
t = ast.ty_path(parse_path(p, GREEDY), none[ast.def]);
454+
auto path = parse_path(p, GREEDY);
455+
t = ast.ty_path(path, none[ast.def]);
456+
hi = path.span;
455457
}
456458

457459
case (token.MUTABLE) {
@@ -2067,6 +2069,7 @@ impure fn parse_item_tag(parser p) -> @ast.item {
20672069
auto tok = p.peek();
20682070
alt (tok) {
20692071
case (token.IDENT(?name)) {
2072+
auto vlo = p.get_span();
20702073
p.bump();
20712074

20722075
let vec[ast.variant_arg] args = vec();
@@ -2084,11 +2087,12 @@ impure fn parse_item_tag(parser p) -> @ast.item {
20842087
case (_) { /* empty */ }
20852088
}
20862089

2090+
auto vhi = p.get_span();
20872091
expect(p, token.SEMI);
20882092

20892093
auto id = p.next_def_id();
2090-
variants += vec(rec(name=name, args=args, id=id,
2091-
ann=ast.ann_none));
2094+
auto vr = rec(name=name, args=args, id=id, ann=ast.ann_none);
2095+
variants += vec(spanned[ast.variant_](vlo, vhi, vr));
20922096
}
20932097
case (token.RBRACE) { /* empty */ }
20942098
case (_) {

trunk/src/comp/middle/fold.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -965,12 +965,13 @@ fn fold_item[ENV](&ENV env, ast_fold[ENV] fld, @item i) -> @item {
965965
let vec[ast.variant] new_variants = vec();
966966
for (ast.variant v in variants) {
967967
let vec[ast.variant_arg] new_args = vec();
968-
for (ast.variant_arg va in v.args) {
968+
for (ast.variant_arg va in v.node.args) {
969969
auto new_ty = fold_ty[ENV](env_, fld, va.ty);
970970
new_args += vec(rec(ty=new_ty, id=va.id));
971971
}
972-
new_variants += vec(rec(name=v.name, args=new_args, id=v.id,
973-
ann=v.ann));
972+
auto new_v = rec(name=v.node.name, args=new_args,
973+
id=v.node.id, ann=v.node.ann);
974+
new_variants += vec(respan[ast.variant_](v.span, new_v));
974975
}
975976
ret fld.fold_item_tag(env_, i.span, ident, new_variants,
976977
ty_params, id);

trunk/src/comp/middle/metadata.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ fn encode_def_id(&ebml.writer ebml_w, &ast.def_id id) {
169169
fn encode_tag_variant_paths(&ebml.writer ebml_w, vec[ast.variant] variants) {
170170
for (ast.variant variant in variants) {
171171
ebml.start_tag(ebml_w, tag_paths_item);
172-
encode_name(ebml_w, variant.name);
173-
encode_def_id(ebml_w, variant.id);
172+
encode_name(ebml_w, variant.node.name);
173+
encode_def_id(ebml_w, variant.node.id);
174174
ebml.end_tag(ebml_w);
175175
}
176176
}
@@ -314,14 +314,14 @@ fn encode_tag_variant_info(@trans.crate_ctxt cx, &ebml.writer ebml_w,
314314
ast.def_id did, vec[ast.variant] variants) {
315315
for (ast.variant variant in variants) {
316316
ebml.start_tag(ebml_w, tag_items_item);
317-
encode_def_id(ebml_w, variant.id);
317+
encode_def_id(ebml_w, variant.node.id);
318318
encode_kind(ebml_w, 'v' as u8);
319319
encode_tag_id(ebml_w, did);
320-
encode_type(ebml_w, trans.node_ann_type(cx, variant.ann));
321-
if (_vec.len[ast.variant_arg](variant.args) > 0u) {
322-
encode_symbol(cx, ebml_w, variant.id);
320+
encode_type(ebml_w, trans.node_ann_type(cx, variant.node.ann));
321+
if (_vec.len[ast.variant_arg](variant.node.args) > 0u) {
322+
encode_symbol(cx, ebml_w, variant.node.id);
323323
}
324-
encode_discriminant(cx, ebml_w, variant.id);
324+
encode_discriminant(cx, ebml_w, variant.node.id);
325325
ebml.end_tag(ebml_w);
326326
}
327327
}

trunk/src/comp/middle/resolve.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ fn lookup_name_wrapped(&env e, ast.ident i, namespace ns)
389389
case (ast.mie_tag_variant(?item, ?variant_idx)) {
390390
alt (item.node) {
391391
case (ast.item_tag(_, ?variants, _, ?tid)) {
392-
auto vid = variants.(variant_idx).id;
392+
auto vid = variants.(variant_idx).node.id;
393393
auto t = ast.def_variant(tid, vid);
394394
ret some[def_wrap](def_wrap_other(t));
395395
}
@@ -446,7 +446,7 @@ fn lookup_name_wrapped(&env e, ast.ident i, namespace ns)
446446
fn found_tag(@ast.item item, uint variant_idx) -> def_wrap {
447447
alt (item.node) {
448448
case (ast.item_tag(_, ?variants, _, ?tid)) {
449-
auto vid = variants.(variant_idx).id;
449+
auto vid = variants.(variant_idx).node.id;
450450
auto t = ast.def_variant(tid, vid);
451451
ret def_wrap_other(t);
452452
}

trunk/src/comp/middle/trans.rs

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,7 +1355,7 @@ fn GEP_tag(@block_ctxt cx,
13551355

13561356
// Synthesize a tuple type so that GEP_tup_like() can work its magic.
13571357
// Separately, store the type of the element we're interested in.
1358-
auto arg_tys = arg_tys_of_fn(variant.ann);
1358+
auto arg_tys = arg_tys_of_fn(variant.node.ann);
13591359
auto elem_ty = ty.plain_ty(ty.ty_nil); // typestate infelicity
13601360
auto i = 0;
13611361
let vec[@ty.t] true_arg_tys = vec();
@@ -1892,7 +1892,7 @@ fn decr_refcnt_and_if_zero(@block_ctxt cx,
18921892

18931893
fn variant_types(@crate_ctxt cx, &ast.variant v) -> vec[@ty.t] {
18941894
let vec[@ty.t] tys = vec();
1895-
alt (ty.ann_to_type(v.ann).struct) {
1895+
alt (ty.ann_to_type(v.node.ann).struct) {
18961896
case (ty.ty_fn(_, ?args, _)) {
18971897
for (ty.arg arg in args) {
18981898
tys += vec(arg.ty);
@@ -1931,7 +1931,7 @@ fn tag_variant_with_id(@crate_ctxt cx,
19311931
auto i = 0u;
19321932
while (i < _vec.len[ast.variant](variants)) {
19331933
auto variant = variants.(i);
1934-
if (common.def_eq(variant.id, variant_id)) {
1934+
if (common.def_eq(variant.node.id, variant_id)) {
19351935
ret variant;
19361936
}
19371937
i += 1u;
@@ -2074,22 +2074,22 @@ fn iter_structural_ty_full(@block_ctxt cx,
20742074
_uint.to_str(i, 10u));
20752075
llvm.LLVMAddCase(llswitch, C_int(i as int), variant_cx.llbb);
20762076

2077-
if (_vec.len[ast.variant_arg](variant.args) > 0u) {
2077+
if (_vec.len[ast.variant_arg](variant.node.args) > 0u) {
20782078
// N-ary variant.
2079-
auto fn_ty = ty.ann_to_type(variants.(i).ann);
2079+
auto fn_ty = ty.ann_to_type(variants.(i).node.ann);
20802080
alt (fn_ty.struct) {
20812081
case (ty.ty_fn(_, ?args, _)) {
20822082
auto j = 0;
20832083
for (ty.arg a in args) {
20842084
auto v = vec(C_int(0), C_int(j as int));
20852085

20862086
auto rslt = GEP_tag(variant_cx, llunion_a_ptr,
2087-
tid, variants.(i).id, tps, j);
2087+
tid, variants.(i).node.id, tps, j);
20882088
auto llfldp_a = rslt.val;
20892089
variant_cx = rslt.bcx;
20902090

20912091
rslt = GEP_tag(variant_cx, llunion_b_ptr, tid,
2092-
variants.(i).id, tps, j);
2092+
variants.(i).node.id, tps, j);
20932093
auto llfldp_b = rslt.val;
20942094
variant_cx = rslt.bcx;
20952095

@@ -3436,7 +3436,7 @@ fn trans_pat_match(@block_ctxt cx, @ast.pat pat, ValueRef llval,
34363436
auto variants = tag_variants(cx.fcx.ccx, vdef._0);
34373437
auto i = 0;
34383438
for (ast.variant v in variants) {
3439-
auto this_variant_id = v.id;
3439+
auto this_variant_id = v.node.id;
34403440
if (variant_id._0 == this_variant_id._0 &&
34413441
variant_id._1 == this_variant_id._1) {
34423442
variant_tag = i;
@@ -3698,9 +3698,9 @@ fn trans_path(@block_ctxt cx, &ast.path p, &option.t[ast.def] dopt,
36983698
alt (tag_item.node) {
36993699
case (ast.item_tag(_, ?variants, _, _)) {
37003700
for (ast.variant v in variants) {
3701-
if (v.id == vid) {
3701+
if (v.node.id == vid) {
37023702
fty = node_ann_type(cx.fcx.ccx,
3703-
v.ann);
3703+
v.node.ann);
37043704
}
37053705
}
37063706
}
@@ -5731,35 +5731,35 @@ fn trans_obj(@crate_ctxt cx, &ast._obj ob, ast.def_id oid,
57315731
fn trans_tag_variant(@crate_ctxt cx, ast.def_id tag_id,
57325732
&ast.variant variant, int index,
57335733
&vec[ast.ty_param] ty_params) {
5734-
if (_vec.len[ast.variant_arg](variant.args) == 0u) {
5734+
if (_vec.len[ast.variant_arg](variant.node.args) == 0u) {
57355735
ret; // nullary constructors are just constants
57365736
}
57375737

57385738
// Translate variant arguments to function arguments.
57395739
let vec[ast.arg] fn_args = vec();
57405740
auto i = 0u;
5741-
for (ast.variant_arg varg in variant.args) {
5741+
for (ast.variant_arg varg in variant.node.args) {
57425742
fn_args += vec(rec(mode=ast.alias,
57435743
ty=varg.ty,
57445744
ident="arg" + _uint.to_str(i, 10u),
57455745
id=varg.id));
57465746
}
57475747

5748-
check (cx.item_ids.contains_key(variant.id));
5749-
let ValueRef llfndecl = cx.item_ids.get(variant.id);
5748+
check (cx.item_ids.contains_key(variant.node.id));
5749+
let ValueRef llfndecl = cx.item_ids.get(variant.node.id);
57505750

57515751
auto fcx = new_fn_ctxt(cx, llfndecl);
57525752

57535753
create_llargs_for_fn_args(fcx, ast.proto_fn,
5754-
none[TypeRef], ret_ty_of_fn(variant.ann),
5754+
none[TypeRef], ret_ty_of_fn(variant.node.ann),
57555755
fn_args, ty_params);
57565756

57575757
let vec[@ty.t] ty_param_substs = vec();
57585758
for (ast.ty_param tp in ty_params) {
57595759
ty_param_substs += vec(plain_ty(ty.ty_param(tp.id)));
57605760
}
57615761

5762-
auto arg_tys = arg_tys_of_fn(variant.ann);
5762+
auto arg_tys = arg_tys_of_fn(variant.node.ann);
57635763
copy_args_to_allocas(fcx, fn_args, arg_tys);
57645764

57655765
auto bcx = new_top_block_ctxt(fcx);
@@ -5777,8 +5777,8 @@ fn trans_tag_variant(@crate_ctxt cx, ast.def_id tag_id,
57775777
vec(C_int(0), C_int(1)));
57785778

57795779
i = 0u;
5780-
for (ast.variant_arg va in variant.args) {
5781-
auto rslt = GEP_tag(bcx, llblobptr, tag_id, variant.id,
5780+
for (ast.variant_arg va in variant.node.args) {
5781+
auto rslt = GEP_tag(bcx, llblobptr, tag_id, variant.node.id,
57825782
ty_param_substs, i as int);
57835783
bcx = rslt.bcx;
57845784
auto lldestptr = rslt.val;
@@ -6182,9 +6182,10 @@ fn collect_tag_ctor(&@crate_ctxt cx, @ast.item i) -> @crate_ctxt {
61826182

61836183
case (ast.item_tag(_, ?variants, ?tps, _)) {
61846184
for (ast.variant variant in variants) {
6185-
if (_vec.len[ast.variant_arg](variant.args) != 0u) {
6186-
decl_fn_and_pair(extend_path(cx, variant.name), "tag",
6187-
tps, variant.ann, variant.id);
6185+
if (_vec.len[ast.variant_arg](variant.node.args) != 0u) {
6186+
decl_fn_and_pair(extend_path(cx, variant.node.name),
6187+
"tag", tps, variant.node.ann,
6188+
variant.node.id);
61886189
}
61896190
}
61906191
}
@@ -6229,8 +6230,8 @@ fn trans_constant(&@crate_ctxt cx, @ast.item it) -> @crate_ctxt {
62296230
llvm.LLVMSetLinkage(discrim_gvar, lib.llvm.LLVMPrivateLinkage
62306231
as llvm.Linkage);
62316232

6232-
cx.discrims.insert(variant.id, discrim_gvar);
6233-
cx.discrim_symbols.insert(variant.id, s);
6233+
cx.discrims.insert(variant.node.id, discrim_gvar);
6234+
cx.discrim_symbols.insert(variant.node.id, s);
62346235

62356236
i += 1u;
62366237
}

trunk/src/comp/middle/typeck.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -656,15 +656,15 @@ fn collect_item_types(session.session sess, @ast.crate crate)
656656
// Nullary tag constructors get turned into constants; n-ary tag
657657
// constructors get turned into functions.
658658
auto result_ty;
659-
if (_vec.len[ast.variant_arg](variant.args) == 0u) {
659+
if (_vec.len[ast.variant_arg](variant.node.args) == 0u) {
660660
result_ty = plain_ty(ty.ty_tag(tag_id, ty_param_tys));
661661
} else {
662662
// As above, tell ast_ty_to_ty() that trans_ty_item_to_ty()
663663
// should be called to resolve named types.
664664
auto f = bind getter(sess, id_to_ty_item, type_cache, _);
665665

666666
let vec[arg] args = vec();
667-
for (ast.variant_arg va in variant.args) {
667+
for (ast.variant_arg va in variant.node.args) {
668668
auto arg_ty = ast_ty_to_ty(f, va.ty);
669669
args += vec(rec(mode=ast.alias, ty=arg_ty));
670670
}
@@ -673,13 +673,13 @@ fn collect_item_types(session.session sess, @ast.crate crate)
673673
}
674674

675675
auto tpt = tup(params_opt, result_ty);
676-
type_cache.insert(variant.id, tpt);
676+
type_cache.insert(variant.node.id, tpt);
677677

678678
auto variant_t = rec(
679679
ann=ast.ann_type(result_ty, none[vec[@ty.t]])
680-
with variant
680+
with variant.node
681681
);
682-
result += vec(variant_t);
682+
result += vec(fold.respan[ast.variant_](variant.span, variant_t));
683683
}
684684

685685
ret result;

0 commit comments

Comments
 (0)