aboutsummaryrefslogtreecommitdiff
path: root/src/comp
diff options
context:
space:
mode:
authorPatrick Walton <[email protected]>2011-03-17 11:40:05 -0700
committerPatrick Walton <[email protected]>2011-03-17 11:40:05 -0700
commit55587a554c5c786488af5a31e812bf2ab959e006 (patch)
treea9e1b2412f4d195088495a8f2f0ab649637662d0 /src/comp
parentrustc: Don't go over inner functions' locals during the writeback phase of ty... (diff)
downloadrust-55587a554c5c786488af5a31e812bf2ab959e006.tar.xz
rust-55587a554c5c786488af5a31e812bf2ab959e006.zip
rustc: Sort object methods when parsing textual types in the AST
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/middle/ty.rs8
-rw-r--r--src/comp/middle/typeck.rs12
2 files changed, 11 insertions, 9 deletions
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index 923d97ff..e049962d 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -793,6 +793,14 @@ fn method_idx(session.session sess, &span sp,
fail;
}
+fn sort_methods(vec[method] meths) -> vec[method] {
+ fn method_lteq(&method a, &method b) -> bool {
+ ret _str.lteq(a.ident, b.ident);
+ }
+
+ ret std.sort.merge_sort[method](bind method_lteq(_,_), meths);
+}
+
fn is_lval(@ast.expr expr) -> bool {
alt (expr.node) {
case (ast.expr_field(_,_,_)) { ret true; }
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index 12226d70..b689c502 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -376,7 +376,8 @@ fn ast_ty_to_ty(ty_getter getter, &@ast.ty ast_ty) -> @ty.t {
inputs=ins,
output=out));
}
- sty = ty.ty_obj(tmeths);
+
+ sty = ty.ty_obj(ty.sort_methods(tmeths));
}
}
@@ -545,14 +546,7 @@ fn collect_item_types(session.session sess, @ast.crate crate)
auto methods =
_vec.map[@ast.method,method](f, obj_info.methods);
- fn method_lteq(&method a, &method b) -> bool {
- ret _str.lteq(a.ident, b.ident);
- }
-
- methods = std.sort.merge_sort[method](bind method_lteq(_,_),
- methods);
-
- auto t_obj = plain_ty(ty.ty_obj(methods));
+ auto t_obj = plain_ty(ty.ty_obj(ty.sort_methods(methods)));
ret t_obj;
}