freenode/#clasp - IRC Chatlog
Search
14:46:11
drmeister
Functions now have access to their function names. The function name 'foo' is mangled as FOO^COMMON-LISP-USER^FN^^
14:48:20
drmeister
Ah - when we profile code and generate flame graphs we have very few characters of the name that we can display. So I put the function name first and the package following.
14:49:07
Shinmera
I see. Just to be clear, that's the C name that could be used to call the function?
14:52:46
drmeister
I also did it for errors where it expects a keyword but didn't get one - but not bad keyword arguments yet. Adding that now...
14:55:36
drmeister
This is currently the only function name I have accessible. I could add a symbol.
15:03:40
drmeister
Bike: the layout-procedure function establishes a dynamic environment including binding cmp:*current-function* and cmp:*current-function* will be bound to the current function while instructions for that function are generated with translate-xxx-instruction - correct?
15:04:33
Bike
I don't know. I just copied things I didn't understand, so if that's what you wrote it is ideally the case in my rewrite as well.
15:05:00
drmeister
I'm asking because now I'm binding cmp:*current-function-description* in layout-procedure - so instructions that need it can pass it to intrinsics.
15:05:20
Bike
https://github.com/clasp-developers/clasp/blob/dev/src/lisp/kernel/cleavir/translate.lisp#L294-L301 This looks right to me
15:06:48
drmeister
Right - not yet. The code that uses it is currently only the stuff in cmp/arguments.lisp
15:08:21
drmeister
What about symbol-value and fdefinition? If they signal an error - would it be a good idea to include the name of the function that was invoking those operations?
15:09:47
drmeister
Well, it's an option now - to have the function description pointer available to print more comprehensive error messages.
15:35:44
drmeister
I consolidated things so there's only one function to change once I figure out how to get a more human readable function name in there.
15:39:23
drmeister
And there is cmp:*current-function-description* - it stores the pointer to the current function-description that corresponds to the function bound to cmp:*current-function*.
15:42:19
drmeister
There is a structure in cmpintrinsics.lsp %function-description% https://github.com/clasp-developers/clasp/blob/dev/src/lisp/kernel/cmp/cmpintrinsics.lsp#L509
15:42:54
drmeister
And a C struct FunctionDescription... https://github.com/clasp-developers/clasp/blob/dev/include/clasp/core/functor.h#L55
15:43:25
drmeister
So I added a sanity check that will cause the compiler to fail when compiling cmpintrinsics.lsp
15:44:52
drmeister
Right now it looks like I only have one slot for a name. I'm going to add another for the symbol.
17:20:27
drmeister
Ah - also it doesn't work here because when I do things from C++ I bypass that stuff.
17:20:52
Shinmera
Well that may or may not be desired. Since it's an implementation extension you can do whatever you think is right.
18:33:58
Bike
because check-type allows the thing to be modified, you have to give it a place, not just a value
18:35:26
drmeister
It's happening here: https://github.com/clasp-developers/clasp/blob/dev/src/lisp/kernel/cleavir/hir.lisp#L284
18:43:50
Bike
cos what check-type does is the typep, but then it signals an error that can be restarted by modifying the place
19:49:17
drmeister
I think every argument processing error will now print the function name in the error message and lots of warnings in the C++ compilation and cclasp compilation have been eliminated by fixing their underlying cause.
20:24:27
drmeister
I spent the whole day improving the debugging experience and now all I want to do is code with it but I have to go to a dinner party! ARGH - life is just not fair sometimes.
20:29:23
drmeister
Anyway, I'm feeling pretty good about things. I really like these function-description objects embedded in the llvm Module's - they solve problems I've had from day 1.