[LLVMdev] "Bound Methods" in LLVM Bytecode
Evan Jones
ejones at uwaterloo.ca
Sat Oct 29 07:20:05 PDT 2005
On Oct 29, 2005, at 1:04, Chris Lattner wrote:
>> The question is, how can I implement this efficiently, ideally using
>> LLVM?
> Okay. One simple option would be to insert code like this:
>
> if (isamethod(functionObject))
> functionObject->functionPointer(a)
> else
> functionObject->functionPointer()
Ah yes, the good old fashioned simple approach. The only change is that
by the time I get to the function call, I may no longer have reference
to the object (in the compiler), so I would have to stuff that into the
bound method object itself.
> Sure, you can do this. Another simple option would be to just make
> every "function" take a first pointer argument which they ignore.
> This would allow the caller to always pass a this pointer without
> knowing anything about the callee.
Ah, of course! This is probably the best way to do it, since it is so
simple. The "FunctionObject" type would contain not only a function
pointer, but also a "this" pointer. For normal functions, "this" would
be NULL. Why didn't I think of that, since I was halfway to that
solution already? That would change the call implementation to the
following:
functionObject->functionPointer( functionObject->thisPointer )
>> Will it work if I just create a char array and copy in the
>> appropriate native code for the current platform?
> Hrm, sometimes, sometimes not. Code is not always relocatable like
> that, it sounds dangerous.
Ah, also a good point. A copying garbage collector, for example, would
definitely make things more complicated.
Thanks for your help! I was definitely thinking the wrong way.
Evan Jones
--
Evan Jones
http://evanjones.ca/
More information about the llvm-dev
mailing list