about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2010-11-05 18:27:57 -0700
committerGraydon Hoare <graydon@mozilla.com>2010-11-05 18:31:20 -0700
commit2122e363df7521db72b4ead62f07ffa3bdf176fa (patch)
treea3685ba8900b1a6062456dfa122cbd30c2cfe7c2 /src
parent3956b983123cd204b736c7b43ed5f1c7c607717a (diff)
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 ba4f5cdfdd4..528734c4bcf 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);