freenode/#clasp - IRC Chatlog
Search
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