Skip to content

Commit 2a8719a

Browse files
committed
---
yaml --- r: 3899 b: refs/heads/master c: 2a3ab10 h: refs/heads/master i: 3897: b01c862 3895: 4ca980e v: v3
1 parent 496d348 commit 2a8719a

File tree

2 files changed

+27
-30
lines changed

2 files changed

+27
-30
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: 3d353f76a9057fda207746d7c5a30729e65a70ba
2+
refs/heads/master: 2a3ab10f207607f612ef2cf81a353e7ebf5cf090

trunk/src/comp/middle/resolve.rs

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import std::option;
2828
import std::option::some;
2929
import std::option::none;
3030
import std::str;
31-
import std::vec;
3231

3332
export resolve_crate;
3433
export def_map;
@@ -98,7 +97,7 @@ type glob_imp_def = tup(def, @ast::view_item);
9897
type indexed_mod =
9998
rec(option::t[ast::_mod] m,
10099
mod_index index,
101-
mutable vec[glob_imp_def] glob_imports,
100+
mutable glob_imp_def[] glob_imports,
102101
hashmap[str, import_state] glob_imported_names);
103102

104103

@@ -114,7 +113,7 @@ type env =
114113
ast_map::map ast_map,
115114
hashmap[ast::node_id, import_state] imports,
116115
hashmap[ast::node_id, @indexed_mod] mod_map,
117-
hashmap[def_id, vec[ident]] ext_map,
116+
hashmap[def_id, ident[]] ext_map,
118117
ext_hash ext_cache,
119118
session sess);
120119

@@ -134,7 +133,7 @@ fn resolve_crate(session sess, &ast_map::map amap, @ast::crate crate) ->
134133
ast_map=amap,
135134
imports=new_int_hash[import_state](),
136135
mod_map=new_int_hash[@indexed_mod](),
137-
ext_map=new_def_hash[vec[ident]](),
136+
ext_map=new_def_hash[ident[]](),
138137
ext_cache=new_ext_hash(),
139138
sess=sess);
140139
map_crate(e, crate);
@@ -161,7 +160,7 @@ fn map_crate(&@env e, &@ast::crate c) {
161160
e.mod_map.insert(-1,
162161
@rec(m=some(c.node.module),
163162
index=index_mod(c.node.module),
164-
mutable glob_imports=[],
163+
mutable glob_imports=~[],
165164
glob_imported_names=new_str_hash[import_state]()));
166165
fn index_vi(@env e, &@ast::view_item i, &scopes sc, &vt[scopes] v) {
167166
alt (i.node) {
@@ -179,15 +178,15 @@ fn map_crate(&@env e, &@ast::crate c) {
179178
e.mod_map.insert(i.id,
180179
@rec(m=some(md),
181180
index=index_mod(md),
182-
mutable glob_imports=[],
181+
mutable glob_imports=~[],
183182
glob_imported_names=s));
184183
}
185184
case (ast::item_native_mod(?nmd)) {
186185
auto s = new_str_hash[import_state]();
187186
e.mod_map.insert(i.id,
188187
@rec(m=none[ast::_mod],
189188
index=index_nmod(nmd),
190-
mutable glob_imports=[],
189+
mutable glob_imports=~[],
191190
glob_imported_names=s));
192191
}
193192
case (_) { }
@@ -224,7 +223,7 @@ fn map_crate(&@env e, &@ast::crate c) {
224223
auto imp = follow_import(*e, sc, path, vi.span);
225224
if (option::is_some(imp)) {
226225
find_mod(e, sc).glob_imports +=
227-
[tup(option::get(imp), vi)];
226+
~[tup(option::get(imp), vi)];
228227
}
229228
}
230229
case (_) { }
@@ -400,14 +399,8 @@ fn resolve_constr(@env e, node_id id, &@ast::constr c, &scopes sc,
400399
if (option::is_some(new_def)) {
401400
alt (option::get(new_def)) {
402401
case (ast::def_fn(?pred_id, ast::pure_fn)) {
403-
// FIXME: Remove this vec->ivec conversion.
404-
let (@ast::constr_arg_general[uint])[] cag_ivec = ~[];
405-
for (@ast::constr_arg_general[uint] cag in c.node.args) {
406-
cag_ivec += ~[cag];
407-
}
408-
409402
let ty::constr_general[uint] c_ =
410-
rec(path=c.node.path, args=cag_ivec, id=pred_id);
403+
rec(path=c.node.path, args=c.node.args, id=pred_id);
411404
let ty::constr_def new_constr = respan(c.span, c_);
412405
add_constr(e, id, new_constr);
413406
}
@@ -886,7 +879,7 @@ fn lookup_in_mod(&env e, &def m, &span sp, &ident name, namespace ns,
886879

887880
auto cached = e.ext_cache.find(tup(defid, name, ns));
888881
if (!option::is_none(cached)) { ret cached; }
889-
auto path = [name];
882+
auto path = ~[name];
890883
if (defid._1 != -1) { path = e.ext_map.get(defid) + path; }
891884
auto fnd = lookup_external(e, defid._0, path, ns);
892885
if (!option::is_none(fnd)) {
@@ -995,11 +988,11 @@ fn lookup_glob_in_mod(&env e, @indexed_mod info, &span sp, &ident id,
995988
}
996989

997990
auto matches =
998-
vec::filter_map(bind lookup_in_mod_(e, _, sp, id, ns, dr),
999-
{ info.glob_imports });
1000-
if (vec::len(matches) == 0u) {
991+
ivec::filter_map(bind lookup_in_mod_(e, _, sp, id, ns, dr),
992+
{ info.glob_imports });
993+
if (ivec::len(matches) == 0u) {
1001994
ret none[def];
1002-
} else if (vec::len(matches) == 1u) {
995+
} else if (ivec::len(matches) == 1u) {
1003996
ret some[def](matches.(0)._0);
1004997
} else {
1005998
for (glob_imp_def match in matches) {
@@ -1161,9 +1154,13 @@ fn ns_for_def(def d) -> namespace {
11611154
};
11621155
}
11631156

1164-
fn lookup_external(&env e, int cnum, vec[ident] ids, namespace ns) ->
1157+
fn lookup_external(&env e, int cnum, &ident[] ids, namespace ns) ->
11651158
option::t[def] {
1166-
for (def d in csearch::lookup_defs(e.sess.get_cstore(), cnum, ids)) {
1159+
// FIXME: Remove this ivec->vec conversion.
1160+
auto ids_vec = [];
1161+
for (ident i in ids) { ids_vec += [i]; }
1162+
1163+
for (def d in csearch::lookup_defs(e.sess.get_cstore(), cnum, ids_vec)) {
11671164
e.ext_map.insert(ast::def_id_of_def(d), ids);
11681165
if (ns == ns_for_def(d)) { ret some(d); }
11691166
}
@@ -1284,13 +1281,13 @@ fn check_arm(@env e, &ast::arm a, &() x, &vt[()] v) {
12841281
walk_pat(ch, a.pats.(i));
12851282
// Ensure the bindings introduced in this pattern are the same as in
12861283
// the first pattern.
1287-
if (vec::len(ch.seen) != vec::len(seen0)) {
1284+
if (ivec::len(ch.seen) != ivec::len(seen0)) {
12881285
e.sess.span_err(a.pats.(i).span,
12891286
"inconsistent number of bindings");
12901287
} else {
12911288
for (ident name in ch.seen) {
1292-
if (option::is_none(vec::find(bind str::eq(name, _),
1293-
seen0))) {
1289+
if (option::is_none(ivec::find(bind str::eq(name, _),
1290+
seen0))) {
12941291
// Fight the alias checker
12951292
auto name_ = name;
12961293
e.sess.span_err
@@ -1351,10 +1348,10 @@ fn check_fn(&env e, &span sp, &ast::_fn f) {
13511348
ensure_unique_ivec(e, sp, f.decl.inputs, arg_name, "argument");
13521349
}
13531350

1354-
type checker = @rec(mutable vec[ident] seen, str kind, session sess);
1351+
type checker = @rec(mutable ident[] seen, str kind, session sess);
13551352

13561353
fn checker(&env e, str kind) -> checker {
1357-
let vec[ident] seen = [];
1354+
let ident[] seen = ~[];
13581355
ret @rec(mutable seen=seen, kind=kind, sess=e.sess);
13591356
}
13601357

@@ -1364,12 +1361,12 @@ fn add_name(&checker ch, &span sp, &ident name) {
13641361
ch.sess.span_fatal(sp, "duplicate " + ch.kind + " name: " + name);
13651362
}
13661363
}
1367-
vec::push(ch.seen, name);
1364+
ch.seen += ~[name];
13681365
}
13691366

13701367
fn ident_id(&ident i) -> ident { ret i; }
13711368

1372-
fn ensure_unique[T](&env e, &span sp, &vec[T] elts, fn(&T) -> ident id,
1369+
fn ensure_unique[T](&env e, &span sp, &T[] elts, fn(&T) -> ident id,
13731370
&str kind) {
13741371
auto ch = checker(e, kind);
13751372
for (T elt in elts) { add_name(ch, sp, id(elt)); }

0 commit comments

Comments
 (0)