diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 5f163d106a8..984333058f2 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -1144,6 +1144,8 @@ fn linearize_ty_params(@block_ctxt cx, @ty.t t) } ret t; } + + fn fold_tag_ty(@ty.t t) -> @ty.t { ret t; } } diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs index c85892f2a90..a44cdb4d44b 100644 --- a/src/comp/middle/ty.rs +++ b/src/comp/middle/ty.rs @@ -294,6 +294,7 @@ fn ty_to_str(&@t typ) -> str { type ty_fold = state obj { fn fold_simple_ty(@t ty) -> @t; + fn fold_tag_ty(@t ty) -> @t; }; fn fold_ty(ty_fold fld, @t ty) -> @t { @@ -322,7 +323,8 @@ fn fold_ty(ty_fold fld, @t ty) -> @t { for (@t subty in subtys) { new_subtys += vec(fold_ty(fld, subty)); } - ret rewrap(ty, ty_tag(tid, new_subtys)); + auto typ = rewrap(ty, ty_tag(tid, new_subtys)); + ret fld.fold_tag_ty(typ); } case (ty_tup(?subtys)) { let vec[@t] new_subtys = vec(); @@ -611,6 +613,8 @@ fn count_ty_params(@t ty) -> uint { } ret ty; } + + fn fold_tag_ty(@t ty) -> @t { ret ty; } } let vec[ast.def_id] param_ids_inner = vec(); @@ -1429,6 +1433,8 @@ fn unify(@ty.t expected, @ty.t actual, &unify_handler handler) } } } + + fn fold_tag_ty(@t typ) -> @t { ret typ; } } ret ty.fold_ty(folder(bindings), typ); @@ -1548,6 +1554,8 @@ fn replace_type_params(@t typ, hashmap[ast.def_id,@t] param_map) -> @t { } } } + + fn fold_tag_ty(@t typ) -> @t { ret typ; } } auto replacer = param_replacer(param_map); ret fold_ty(replacer, typ); diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs index f8f7fc72719..918cc4f1da1 100644 --- a/src/comp/middle/typeck.rs +++ b/src/comp/middle/typeck.rs @@ -73,6 +73,8 @@ fn generalize_ty(@crate_ctxt cx, @ty.t t) -> @ty.t { } ret t; } + + fn fold_tag_ty(@ty.t t) -> @ty.t { ret t; } } auto generalizer = ty_generalizer(cx, @common.new_def_hash[@ty.t]()); @@ -114,6 +116,8 @@ fn substitute_ty_params(&@crate_ctxt ccx, case (_) { ret typ; } } } + + fn fold_tag_ty(@ty.t typ) -> @ty.t { ret typ; } } fn hash_int(&int x) -> uint { ret x as uint; }