aboutsummaryrefslogtreecommitdiff
path: root/src/comp
diff options
context:
space:
mode:
authorLindsey Kuper <[email protected]>2011-03-22 13:24:29 -0700
committerGraydon Hoare <[email protected]>2011-03-22 14:23:43 -0700
commit0ce0c4c41af189bdbd5c797304f2405fc36387e5 (patch)
tree74acc109a7b0570a03a66bce56a2fbb99205c647 /src/comp
parentRevert "Remove usages of case(_) { fail; } since the compiler does this autom... (diff)
downloadrust-0ce0c4c41af189bdbd5c797304f2405fc36387e5.tar.xz
rust-0ce0c4c41af189bdbd5c797304f2405fc36387e5.zip
Support for shorter error messages that are aware of objects' cnames.
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/middle/ty.rs26
-rw-r--r--src/comp/middle/typeck.rs8
2 files changed, 26 insertions, 8 deletions
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index 72564078..c6394c34 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -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 += " ";
@@ -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)) {
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index c849483e..dbeeb8f9 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -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, _);
@@ -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;