[LLVMdev] Using LLVM for a dynamically typed language

Vyacheslav Akhmechet coffeemug at gmail.com
Thu Apr 21 07:28:01 PDT 2005


Evan,

The problem is that I do not know the type of a target function at
compile time. If you consider my code example, I don't know the type
of 'i' until runtime (in fact, I can't even know a possible range of
types 'i' may assume).

Thanks,
- Slava.

On 4/21/05, Evan Jones <ejones at uwaterloo.ca> wrote:
> On Thu, 2005-21-04 at 09:31 -0400, Vyacheslav Akhmechet wrote:
> > At this point I cannot know the type of 'i' at compile time. At
> > runtime 'i' is a structure that contains a type and a function
> > pointer. What I can't figure out is how to cast my llvm function
> > pointer to an appropriate function type. I cannot know until runtime
> > what the type will be. Naturally I can add runtime code that will do
> > all appropriate checks (number of parameters, etc.) but how do I do
> > the actual cast?
> 
> I'm not sure that I understand. LLVM permits you to cast any pointer to
> any other pointer. If you are using LLVM to generate your code, this
> basically has 3 steps:
> 
> 1. Get a Type* for the function type you want to cast to.
> 2. Use a cast instruction to actually perform the type cast.
> 
> In the code I'm currently working on, I do the following to cast a
> function pointer from one type to another. Hopefully the line wrapping
> won't totally destroy this.
> 
> std::vector<const Type*> paramTypes;
> 
> // First parameter: a void pointer
> paramTypes.push_back( PointerType::get( Type::getPrimitiveType( Type::SByteTyID ) ) );
> 
> FunctionType* pthreadFunctionType = FunctionType::get(
>         PointerType::get( Type::getPrimitiveType( Type::SByteTyID ) ),
>         paramTypes, false );
> assert( pthreadFunctionType != NULL );
> 
> // Cast the function to the pthread function type
> Value* castedFunction = new CastInst( function,
>         PointerType::get( pthreadFunctionType ), "", &terminator );
> 
> I hope this helps,
> 
> Evan Jones
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
>




More information about the llvm-dev mailing list