view gen/rttibuilder.h @ 1375:63f4afd01036

Cleaned up TypeInfo_Struct. Fixed problem with DtoConstSize_t taking a size_t argument, this is not enough for cross compiling from 32bit host to a 64bit target. It now takes uint64_t. There's probably a lot of similar case around to code ...
author Tomas Lindquist Olsen <tomas.l.olsen gmail com>
date Sun, 17 May 2009 04:41:10 +0200
parents e630ff79e10d
children a5d0e04298a8
line wrap: on
line source

#ifndef __LDC_GEN_RTTIBUILDER_H__
#define __LDC_GEN_RTTIBUILDER_H__

#include "llvm/Constant.h"
#include "llvm/ADT/SmallVector.h"

struct ClassDeclaration;
struct TypeClass;

struct IrStruct;

struct TypeInfoBuilder
{
    ClassDeclaration* base;
    TypeClass* basetype;
    IrStruct* baseir;

    // 10 is enough for any D1 typeinfo
    llvm::SmallVector<llvm::Constant*, 10> inits;

    TypeInfoBuilder(ClassDeclaration* base_class);

    void push(llvm::Constant* C);
    void push_null_vp();
    void push_null_void_array();
    void push_uint(unsigned u);
    void push_size(uint64_t s);
    void push_string(const char* str);
    void push_typeinfo(Type* t);
    void push_classinfo(ClassDeclaration* cd);
    void push_funcptr(FuncDeclaration* fd);
    void push_void_array(size_t dim, llvm::Constant* ptr);
    void push_void_array(llvm::Constant* CI, Type* valtype, Dsymbol* sym);

    /// Creates the initializer constant and assigns it to the global.
    void finalize(IrGlobal* tid);
};

#endif