aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2010-11-05 18:27:57 -0700
committerGraydon Hoare <[email protected]>2010-11-05 18:31:20 -0700
commit2122e363df7521db72b4ead62f07ffa3bdf176fa (patch)
treea3685ba8900b1a6062456dfa122cbd30c2cfe7c2 /src
parentSwitch rustc to llvm 2.8 rather than 2.8svn on windows. (diff)
downloadrust-2122e363df7521db72b4ead62f07ffa3bdf176fa.tar.xz
rust-2122e363df7521db72b4ead62f07ffa3bdf176fa.zip
Teach rustc to generate type descriptors.
Diffstat (limited to 'src')
-rw-r--r--src/comp/middle/trans.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index ba4f5cdf..528734c4 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -322,6 +322,19 @@ fn C_struct(vec[ValueRef] elts) -> ValueRef {
False);
}
+fn C_tydesc(TypeRef t) -> ValueRef {
+ ret C_struct(vec(C_null(T_opaque()), // first_param
+ llvm.LLVMSizeOf(t), // size
+ llvm.LLVMAlignOf(t), // align
+ C_null(T_opaque()), // copy_glue_off
+ C_null(T_opaque()), // drop_glue_off
+ C_null(T_opaque()), // free_glue_off
+ C_null(T_opaque()), // sever_glue_off
+ C_null(T_opaque()), // mark_glue_off
+ C_null(T_opaque()), // obj_drop_glue_off
+ C_null(T_opaque()))); // is_stateful
+}
+
fn decl_cdecl_fn(ModuleRef llmod, str name,
vec[TypeRef] inputs, TypeRef output) -> ValueRef {
let TypeRef llty = T_fn(inputs, output);