Skip to content

Commit

Permalink
Support for shorter error messages that are aware of objects' cnames.
Browse files Browse the repository at this point in the history
  • Loading branch information
lkuper authored and graydon committed Mar 22, 2011
1 parent bcf04e2 commit 0ce0c4c
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 8 deletions.
26 changes: 20 additions & 6 deletions src/comp/middle/ty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,17 @@ fn ty_to_str(&@t typ) -> str {
option.t[ast.ident] ident,
vec[arg] inputs, @t output) -> str {
auto f = fn_input_to_str;
auto s = "fn";
if (proto == ast.proto_iter) {
s = "iter";

auto s;
alt (proto) {
case (ast.proto_iter) {
s = "iter";
}
case (ast.proto_fn) {
s = "fn";
}
}

alt (ident) {
case (some[ast.ident](?i)) {
s += " ";
Expand Down Expand Up @@ -206,9 +213,16 @@ fn ty_to_str(&@t typ) -> str {
}

case (ty_obj(?meths)) {
auto f = method_to_str;
auto m = _vec.map[method,str](f, meths);
s += "obj {\n\t" + _str.connect(m, "\n\t") + "\n}";
alt (typ.cname) {
case (some[str](?cs)) {
s += cs;
}
case (_) {
auto f = method_to_str;
auto m = _vec.map[method,str](f, meths);
s += "obj {\n\t" + _str.connect(m, "\n\t") + "\n}";
}
}
}

case (ty_var(?v)) {
Expand Down
8 changes: 6 additions & 2 deletions src/comp/middle/typeck.rs
Original file line number Diff line number Diff line change
Expand Up @@ -538,19 +538,22 @@ fn collect_item_types(session.session sess, @ast.crate crate)

fn ty_of_obj(@ty_item_table id_to_ty_item,
@ty_table item_to_ty,
&ast.ident id,
&ast._obj obj_info) -> @ty.t {
auto f = bind ty_of_method(id_to_ty_item, item_to_ty, _);
auto methods =
_vec.map[@ast.method,method](f, obj_info.methods);

auto t_obj = plain_ty(ty.ty_obj(ty.sort_methods(methods)));
auto t_obj = @rec(struct=ty.ty_obj(ty.sort_methods(methods)),
cname=some[str](id));
ret t_obj;
}

fn ty_of_obj_ctor(@ty_item_table id_to_ty_item,
@ty_table item_to_ty,
&ast.ident id,
&ast._obj obj_info) -> @ty.t {
auto t_obj = ty_of_obj(id_to_ty_item, item_to_ty, obj_info);
auto t_obj = ty_of_obj(id_to_ty_item, item_to_ty, id, obj_info);
let vec[arg] t_inputs = vec();
for (ast.obj_field f in obj_info.fields) {
auto g = bind getter(id_to_ty_item, item_to_ty, _);
Expand Down Expand Up @@ -584,6 +587,7 @@ fn collect_item_types(session.session sess, @ast.crate crate)
// TODO: handle ty-params
auto t_ctor = ty_of_obj_ctor(id_to_ty_item,
item_to_ty,
ident,
obj_info);
item_to_ty.insert(def_id, t_ctor);
ret t_ctor;
Expand Down

0 comments on commit 0ce0c4c

Please sign in to comment.