freenode/#clasp - IRC Chatlog
Search
15:53:51
drmeister
I've added a 'datum' type to the literal compiler. It stores the index for the datum in the literal table or if it's a transient value it stores a gensym to uniquely identify the transient. It's on the way to creating the bytecode interpreter. I'm stealing ideas from Cleavir.
15:55:42
drmeister
Right now the literal tables are full of transient values that are only there to create 'toplevel' values that the code references. I want to get the transient values out of there and only store 'toplevel' values that the code references. It will make the literal tables much more compact.
16:02:10
drmeister
i'm introducing the concept of a 'toplevel' value - one that is referenced by the code and a 'transient' value - one that is created by the literal interpreter to create a 'toplevel' value. The code only refers directly to 'toplevel' values.
16:03:14
drmeister
In your example above NIL and (nil #1=(#1# . #1#)) are toplevel values. #1# is transient.
16:04:41
drmeister
But if we had say... ("hello" #1=(#1# . #1#)) then only the ("hello" #1=(#1# . #1#)) would be toplevel.
16:11:59
Bike
the real problem with this hir stuff is it means i need to go through landing-pad.lisp again
16:12:23
Bike
i think any cleanup code needs to be duplicated a bunch because we need to rethrow any unwinds for other frames, but merely resume any non-unwinds
16:13:03
Bike
maybe we can just not start the "catch" thing until after we check whether it's the same frame? is that kosher?
16:45:21
drmeister
What the toplevel/transient value thing is good for is if you have a literal #( 'a 'b 'c 'd 'e 'f 'g) - you currently get a literal table with like 16 entries in it.
16:46:25
drmeister
That's because the literal table has an entry for the vector, another for every symbol and every symbol needs a string literal and one package literal and a literal for the package.
16:47:34
drmeister
The code only needs to reference the final product - the vector. Everything inside of it can be treated as transient values used to construct the vector.
17:07:00
Bike
i'm not saying there aren't transient values, i'm saying transient isn't the same as being directly referenced in the code
17:07:41
Bike
the poop with catch is i'm trying to reorganize it hierarchically but that'll go weird if i have to rethrow sometimes and resume other times
17:44:56
Bike
alright, so at the moment all the landingpads are independent- that is, if a call has a different set of blocks it could end up at, it has its own landingpad and its own code and etc
17:45:31
Bike
that's basically ok because all the landing pads do is find a block to go to. but if we had unwind-protect or something in play, they'd have to execute cleanup code, and each landing pad would have its own cleanup code which would expand code size for no reason.
17:46:09
Bike
so my idea is we divide each block/tagbody context into three parts - a landing pad, a "processor" (needs a better name), and a resume
17:46:35
Bike
the landing pad checks whether the exception is an unwind and for the right frame. if it's not, it goes to the resume, which does the cleanup code
17:46:56
Bike
if it is, it goes to the "processor", which checks whether the static tag location is one for that block/tagbody
17:47:27
Bike
now the trick is, each "processor" goes to the "processor" of the next block out if there is one once it's done - so only one check is generated for each static entrance
17:47:58
Bike
like, if you have (block a (block b ...)), there's a-landing-pad -> a-processor, and also b-landing-pad -> b-processor -> a-processor
17:49:01
Bike
this doesn't work with landing-pad as it is now, because the "processor" step also handles checking whether the exception is for the right frame
17:51:20
drmeister
That's where I lose you because it's been a while since I got this deep into exception handling. Checking something...
17:53:54
Bike
it's the with-begin-end-catch in landing-pad.lisp. it calls cc_landingpadUnwindMatchFrameElseRethrow which rethrows
17:57:17
drmeister
Could you drop by my office and we can talk about it a bit - when you have a pause.
18:00:23
drmeister
I went down this road of learning exception handling something like three times - each time learning it a bit better. I don't have time to go down a fourth time - but I can provide assistance to you. I've got some thoughts on how to figure out how the itanium exception handling works and then map that on to cleavir concepts.
18:20:07
drmeister
Is this always one of these two sequences coming out of a landing pad? (1) begin_catch .... rethrow or (2) begin_catch ... end_catch .... resume ?
18:22:50
Bike
whatevs, i'm just going to not deal with the cxa stuff at all in the case of getting the wrong frame.
18:22:57
drmeister
Yeah - the stack unwinds into the function and then normal processing continues and the function returns at some point.
18:36:39
drmeister
::notify kpoeck I made some changes over the last week that might provide a big boost to mcclim compilation via parallel compile-file. Could you give them a try?
21:18:24
Bike
alright i don't get it. i'm just going to fix up what's there alread and i'll worr about unwind protect later