Search
Sunday, 22nd of July 2018, 1:09:50 UTC
1:12:48
drmeister
No, I can't copy a vaslist - I'd need to be able to allocate a 24byte structure in the stack frame and use that.
1:12:52
drmeister
Is there any way to do that?
1:17:15
Bike
it owuld be nice if we could just stack allocate an actual list.
1:56:05
drmeister
Allocate a 24 byte structure in the stack frame to store a va_list
1:58:58
drmeister
stack allocating an actual list would be fine as well.
3:30:51
beach
Good morning everyone!
4:25:00
drmeister
Bike: I get one pass through a &va-rest list - even if I copy it into another variable.
4:25:02
drmeister
https://www.irccloud.com/pastebin/3OqbTh5I/
4:26:20
drmeister
I would need a special operator to copy the &va-rest parameter to into another variable so that I can convert it to a list if there is an error.
4:27:25
Bike
stack lists definitely seem preferable
4:27:52
drmeister
But we would have to know how large they need to be at compile time - we don't have that.
4:28:40
drmeister
A vaslist structure is 32 bytes - it's like a wide pointer.
4:29:01
Bike
we would? you can have variable alloca... the "function" anyway, dunno the llvm semantics
4:29:55
drmeister
We could have an alloca?
4:30:59
drmeister
Something like (let ((thing (alloca 32))) ... ) ?
4:31:43
drmeister
Or (with-alloca (x 32) ...)
4:34:46
drmeister
I suppose I could just create a C++ class on the heap to contain these...
4:44:49
drmeister
What's a lispy way to declare things like this on the stack?
4:44:58
drmeister
This is what shared-initialize becomes using &va-rest
4:45:00
drmeister
https://www.irccloud.com/pastebin/ulQS7QEp/
4:45:19
drmeister
The only thing we lose is the ability to provide the arguments in the error message.
4:46:40
Bike
declare dynamic-extent, basically
4:46:42
drmeister
If I could go (let ((saved-initargs (core:vaslist-copy initargs))) (declare (dynamic-extent saved-initargs)) ... )
4:47:24
drmeister
I know that the thing returned by core:vaslist-copy is 32 bytes in size
4:52:08
drmeister
I could allocate it on the heap - but that kind of defeats the purpose of avoiding consing.
5:11:21
drmeister
Hoookay - that was a terrible idea. shared-initialize repeatedly loops over the initargs
5:12:54
drmeister
It would be a great idea if I had a way to create a vaslist on the stack.
5:13:10
drmeister
Then I could save the value of the vaslist at the start and keep resetting it.
5:26:34
drmeister
I'm gonna make vaslists rewindable by keeping a backup copy.
5:52:13
drmeister
https://www.irccloud.com/pastebin/33CH1OkQ/
6:00:38
drmeister
I changed less than 10 lines of code and now vaslist's are 64bytes rather than 32 and they keep a copy of their original value.
6:00:53
drmeister
That makes them rewindable.
Sunday, 22nd of July 2018, 13:09:50 UTC