Skip to content

Commit 4a0ee9d

Browse files
committed
---
yaml --- r: 1139 b: refs/heads/master c: f2195d8 h: refs/heads/master i: 1137: cdf9d75 1135: df2909b v: v3
1 parent aa000d2 commit 4a0ee9d

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: daac7a8b130f8f2dfbdeaf38ff39541adfd74736
2+
refs/heads/master: f2195d8b0adda5aa10e95c2bc31a3206211eadda

trunk/src/comp/lib/llvm.rs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,9 +1133,17 @@ fn mk_type_handle() -> type_handle {
11331133
}
11341134

11351135
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+
11361144
let int kind = llvm.LLVMGetTypeKind(ty);
11371145

1138-
fn tys_str(vec[TypeRef] tys) -> str {
1146+
fn tys_str(vec[TypeRef] outer, vec[TypeRef] tys) -> str {
11391147
let str s = "";
11401148
let bool first = true;
11411149
for (TypeRef t in tys) {
@@ -1144,7 +1152,7 @@ fn type_to_str(TypeRef ty) -> str {
11441152
} else {
11451153
s += ", ";
11461154
}
1147-
s += type_to_str(t);
1155+
s += type_to_str_inner(outer, t);
11481156
}
11491157
ret s;
11501158
}
@@ -1173,9 +1181,9 @@ fn type_to_str(TypeRef ty) -> str {
11731181
let vec[TypeRef] args =
11741182
_vec.init_elt[TypeRef](0 as TypeRef, n_args);
11751183
llvm.LLVMGetParamTypes(ty, _vec.buf[TypeRef](args));
1176-
s += tys_str(args);
1184+
s += tys_str(outer, args);
11771185
s += ") -> ";
1178-
s += type_to_str(out_ty);
1186+
s += type_to_str_inner(outer, out_ty);
11791187
ret s;
11801188
}
11811189

@@ -1185,15 +1193,23 @@ fn type_to_str(TypeRef ty) -> str {
11851193
let vec[TypeRef] elts =
11861194
_vec.init_elt[TypeRef](0 as TypeRef, n_elts);
11871195
llvm.LLVMGetStructElementTypes(ty, _vec.buf[TypeRef](elts));
1188-
s += tys_str(elts);
1196+
s += tys_str(outer, elts);
11891197
s += "}";
11901198
ret s;
11911199
}
11921200

11931201
case (10) { ret "Array"; }
11941202

11951203
case (11) {
1196-
ret "*" + type_to_str(llvm.LLVMGetElementType(ty));
1204+
let uint i = 0u;
1205+
for (TypeRef tout in outer0) {
1206+
i += 1u;
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));
11971213
}
11981214
11991215
case (12) { ret "Opaque"; }

0 commit comments

Comments
 (0)