aboutsummaryrefslogtreecommitdiff
path: root/src/comp
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2010-12-30 17:46:56 -0800
committerGraydon Hoare <[email protected]>2010-12-30 17:46:56 -0800
commit91809a17ac462e714e87b0150c0c525e52f69556 (patch)
treeafc665a62b5b007d35066e6c8d9c4807b18ea6ac /src/comp
parentTeach fold about ty_obj. (diff)
downloadrust-91809a17ac462e714e87b0150c0c525e52f69556.tar.xz
rust-91809a17ac462e714e87b0150c0c525e52f69556.zip
Teach typeck.ast_ty_to_ty about ty_obj.
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/middle/typeck.rs16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index 229a15bb..76a272b3 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -108,7 +108,7 @@ fn ast_ty_to_ty(ty_getter getter, &@ast.ty ast_ty) -> @ty.t {
case (ast.ty_fn(?inputs, ?output)) {
auto f = bind ast_arg_to_arg(getter, _);
- auto i = _vec.map[rec(ast.mode mode, @ast.ty ty),arg](f, inputs);
+ auto i = _vec.map[ast.ty_arg, arg](f, inputs);
sty = ty.ty_fn(i, ast_ty_to_ty(getter, output));
}
@@ -134,8 +134,18 @@ fn ast_ty_to_ty(ty_getter getter, &@ast.ty ast_ty) -> @ty.t {
cname = t0.cname;
}
- case (_) {
- fail;
+ case (ast.ty_obj(?meths)) {
+ let vec[ty.method] tmeths = vec();
+ auto f = bind ast_arg_to_arg(getter, _);
+ for (ast.ty_method m in meths) {
+ auto ins = _vec.map[ast.ty_arg, arg](f, m.inputs);
+ auto out = ast_ty_to_ty(getter, m.output);
+ append[ty.method](tmeths,
+ rec(ident=m.ident,
+ inputs=ins,
+ output=out));
+ }
+ sty = ty.ty_obj(tmeths);
}
}