freenode/#clasp - IRC Chatlog
Search
21:10:08
drmeister
I just hit a snag. Any function that previously returned or accepts a Function_sp now needs to switch to T_sp
22:14:18
drmeister
I can call Function_sp objects without any trouble - I've been doing that for a long time.
22:16:25
drmeister
But I had a intermediate function that handled things - I need to do things just a bit differently now.
22:19:16
Bike
right. i was just worried about introducing a branch. but if there already is one, well
22:19:27
drmeister
The invoke_funcallable_instance is the new intermediate function. It will have the signature T_mv invoke_funcallable_instance(T_O* funcallable_instance, ...) and it will create a VaList_S structure that will be passed to the dispatch function.
22:21:11
drmeister
Either that or I put an entry (function pointer to dispatcher) slot in the Instance_O class at the same offset as the entry slot for Function_O but that is useless for general instances.
22:22:08
drmeister
What do you think? A branch for every funcall or increase every general instance by 8 bytes?
22:28:55
drmeister
Hmm, maybe it's only an issue because I have FuncallableInstance_O inheriting from Instance_O
22:30:46
drmeister
An Instance_O stores a class, a rack and a signature (pointer to list of class slots).
22:31:23
drmeister
I could make FuncallableInstance_O have the same offset for the class and the rack and put the signature elsewhere.
22:49:55
drmeister
The ASSERT_FUNCALLABLE will test if the T_sp in tfunc is funcallable when building in debug mode - and will be gone in release mode.
22:50:59
drmeister
The FUNCALLABLE_ENTRY_POINT(tfunc,entry) will read the function pointer from 'tfunc' and put it in 'entry'. I'll get rid of the ASSERT_FUNCALLABLE and put it into FUNCALLABLE_ENTRY_POINT
22:55:56
Shinmera
There's this venn diagram with "fast" "correct" "cheap" and all three are impossible.
22:57:23
Shinmera
Right, but so far drmeister has been very strong on "cheap" because he's been one-manning it for far too long with the fear of not getting any grants ever.
23:05:39
drmeister
I'll put a sanity check in at startup that ensures that offsetof(Function_O,entry) == offsetof(FuncallableInstance_O,entry)
23:09:23
drmeister
If I started over again today, from scratch - I don't think I could get 10% of the runtime right from the start.
0:41:54
drmeister
I've got a big family dinner going on tonight - I won't get much done until tomorrow.