libera/#sicl - IRC Chatlog
Search
5:18:02
beach
It turns out I can semi-automate many parts of the visualizer. For many AST classes, I just have to supply order and indentation of children. And a child is indicated by the slot reader in Iconoclast. Then, the Iconoclast function SLOT-DESIGNATORS returns information about the cardinality of each slot-value.
5:18:03
beach
I can still define specific methods on DISPLAY-AST* if I want some fancy layout, but for most AST classes, it is enough to supply the order and indentation of children to get a result that is acceptable.
5:19:51
beach
This is good news, because I was not looking forward to writing a method on DISPLAY-AST* for each macro AST in addition to the methods I already have for the AST representing special forms.
5:21:15
beach
Instead, I want to spend time on visualizer features such as highlighting associated definitions and references to variables, function names, tag names, block names, etc.
5:25:08
beach
Writing a method on DISPLAY-AST* and then fixing typos takes at least a few minutes. Adding a method on LAYOUT takes significantly less than a minute.
15:44:46
beach
One thing that seems fairly simple to do about BLOCK/RETURN-FROM and TAGBODY/GO at the AST level is to determine whether unwinding is necessary or not. If the two are in different functions, then it is necessary, otherwise not. Unless I am missing something of course.
15:46:21
beach
Anyway, I think I have done enough work for today, so I'll spend the rest of the day thinking of other things I can do at the AST level.
15:54:28
bike
yeah, that's all you need, assuming you can still handle local unwinding like undoing special bindings etc.
15:56:44
beach
Ah, yes, forgot about that one. What I really need is to compare dynamic environments at the two points.
15:57:46
beach
It is funny how it all comes back to the same decisions we made at some point at the AST level. I had kind of expected things to be a bit more different.
15:58:22
beach
... like when we introduced the lexical variable holding the dynamic environment at the HIR level.
16:04:43
beach
Maybe I should introduce an explicit LET-AST for the dynamic environment. I mean, the dynamic environment comes as an argument to the function entry, and when there is a binding or a BLOCK or a TAGBODY, then I could bind the variable like (LET ((DYNAMIC-ENVIRONMENT DYNAMIC-ENVIRONMENT)) ... ). The question is then when to do that.