@@ -1133,9 +1133,17 @@ fn mk_type_handle() -> type_handle {
1133
1133
}
1134
1134
1135
1135
fn type_to_str ( TypeRef ty) -> str {
1136
+ let vec[ TypeRef ] v = vec ( ) ;
1137
+ ret type_to_str_inner ( v, ty) ;
1138
+ }
1139
+
1140
+ fn type_to_str_inner ( vec[ TypeRef ] outer0 , TypeRef ty) -> str {
1141
+
1142
+ auto outer = outer0 + vec ( ty) ;
1143
+
1136
1144
let int kind = llvm. LLVMGetTypeKind ( ty) ;
1137
1145
1138
- fn tys_str ( vec[ TypeRef ] tys ) -> str {
1146
+ fn tys_str ( vec[ TypeRef ] outer , vec [ TypeRef ] tys ) -> str {
1139
1147
let str s = "" ;
1140
1148
let bool first = true ;
1141
1149
for ( TypeRef t in tys) {
@@ -1144,7 +1152,7 @@ fn type_to_str(TypeRef ty) -> str {
1144
1152
} else {
1145
1153
s += ", " ;
1146
1154
}
1147
- s += type_to_str ( t) ;
1155
+ s += type_to_str_inner ( outer , t) ;
1148
1156
}
1149
1157
ret s;
1150
1158
}
@@ -1173,9 +1181,9 @@ fn type_to_str(TypeRef ty) -> str {
1173
1181
let vec[ TypeRef ] args =
1174
1182
_vec. init_elt [ TypeRef ] ( 0 as TypeRef , n_args) ;
1175
1183
llvm. LLVMGetParamTypes ( ty, _vec. buf [ TypeRef ] ( args) ) ;
1176
- s += tys_str ( args) ;
1184
+ s += tys_str ( outer , args) ;
1177
1185
s += ") -> " ;
1178
- s += type_to_str ( out_ty) ;
1186
+ s += type_to_str_inner ( outer , out_ty) ;
1179
1187
ret s;
1180
1188
}
1181
1189
@@ -1185,15 +1193,23 @@ fn type_to_str(TypeRef ty) -> str {
1185
1193
let vec[ TypeRef ] elts =
1186
1194
_vec. init_elt [ TypeRef ] ( 0 as TypeRef , n_elts) ;
1187
1195
llvm. LLVMGetStructElementTypes ( ty, _vec. buf [ TypeRef ] ( elts) ) ;
1188
- s += tys_str ( elts) ;
1196
+ s += tys_str ( outer , elts) ;
1189
1197
s += "}" ;
1190
1198
ret s;
1191
1199
}
1192
1200
1193
1201
case ( 10 ) { ret "Array" ; }
1194
1202
1195
1203
case ( 11 ) {
1196
- ret "* " + type_to_str(llvm.LLVMGetElementType(ty));
1204
+ let uint i = 0 u;
1205
+ for ( TypeRef tout in outer0) {
1206
+ i += 1 u;
1207
+ if ( tout as int == ty as int ) {
1208
+ let uint n = _vec. len [ TypeRef ] ( outer0) - i;
1209
+ ret "*\\ " + util. common . istr ( n as int ) ;
1210
+ }
1211
+ }
1212
+ ret "* " + type_to_str_inner(outer, llvm.LLVMGetElementType(ty));
1197
1213
}
1198
1214
1199
1215
case (12) { ret " Opaque "; }
0 commit comments