freenode/#clasp - IRC Chatlog
Search
17:19:51
Bike
i was here, i think https://github.com/clasp-developers/clasp/commit/e2e30b83103b099d2e6fd207f8f6600bc5ab2619
17:53:07
Bike
yeah, no. i can do that, i can call print, i can compile and load a file and run functions in it
17:53:36
drmeister
What if you go (error "foo") do you get an sldb window and can you quit out of it?
17:53:59
drmeister
That was where my problems started yesterday or the day before and then got worse and worse.
18:37:40
jmercouris
I was thinking you could do introspection of classes and objects, and lets say we have a class Goldfish, with method swim, we could automatically generate C code like void goldfishSwim(void* goldfish) { goldfish->swim() }; or something
18:38:12
jmercouris
that way we could make a C interface for a C++ library with introspection to be used by others
18:38:30
jmercouris
drmeister: are you saying that it is going to be very difficult to do because it is not documented?
18:39:11
drmeister
Yes - that's what I'm saying. It's the clang ASTMatcher interface - it's fully exposed but not documented. I use it to do static analysis of clasp's C++ code.
18:40:17
drmeister
jmercouris: Not in the foreseable future. I don't have time due to starting up a company.
18:40:52
Bike
the ASTMatcher interface in clasp is just a wrap around the LLVM interface, isn't it? or no?
18:40:56
drmeister
jmercouris: Code that uses it is here: https://github.com/clasp-developers/clasp/blob/dev/src/lisp/modules/clasp-analyzer/clasp-analyzer.lisp#L1
18:41:15
drmeister
And here... https://github.com/clasp-developers/clasp/blob/dev/src/lisp/modules/clang-tool/clang-tool.lisp#L1
18:42:08
drmeister
It's fully functional - but not easy to use. I use it to identify every pointer in every class in Clasp that needs to be fixed up by the garbage collector.
18:42:40
jmercouris
would an approach of reading the header files directly be very onerous? possible?
18:42:42
drmeister
It's not easy to use because the clang C++ AST and ASTMatcher facility is not easy to use.
18:43:07
drmeister
Clasp's static analyzer reads ALL of the clasp C++ code, header files, source files - everything.
18:43:08
jmercouris
I mean literally reading and tokenizing the .h files and deciding what the classes and methods that exist are
18:44:44
drmeister
Building clasp generates a "compilation database" - a database of all C++ files that are compiled when Clasp is built with all the compiler settings.
18:45:28
drmeister
You feed that compilation database to the clang tooling library through clasp's wrappers and then walk the clang C++ AST and build info from that.
18:45:59
drmeister
There is no "reading/tokenization of the .h files". We literally run the clang compiler on the code and access the AST directly.
18:46:22
jmercouris
I was asking if you think it would be simpler for one to literally read the files themselves in a sim ple little lisp program
18:47:04
jmercouris
I also figured you meant it was very complex when you said "there is only one way"
18:47:18
jmercouris
let someone else do the heavy lifting, and use their tooling, no matter how difficult it is
18:47:24
drmeister
I wouldn't mess with writing your own parser. There will be tears. If you really want to do this - I would start reading the clasp-analyzer.lisp code.
18:48:43
drmeister
So do I. So I exposed the clang ASTMatcher interface and I used that. Now I have a static analyzer that's been working for years - and will keep working because any changes to C++ will be accommodated by the clang frontend.
18:58:45
drmeister
When I compile-file-serial the code above I get two pairs of calls to those and one pair of calls to cc_save_values/cc_load_values
18:58:58
drmeister
I need to read some legal documents for a bit and then I can tackle debugging this.
18:59:35
drmeister
I edit the .ll file and stick llvm-ir calls for debugging straight into it. It's the best way to sort out what is going on.
19:09:25
Bike
the disassembly looks like i'd expect. it calls cc_nvalues, allocates temp storage, calls cc_save_all_values, invokes the cleanup thunk, calls c_load_all_values
19:21:10
Bike
if you use call-with-lock-held instead there's no problem, which is why the previous issue is gone
19:21:40
Bike
so i guess the problematic case is executing an unwind protect and then returning to somewhere in the same function
19:46:57
Bike
it calls restoreMultipleValue0 and THEN executes the unwind protect. okay, that is wrong
20:43:06
Bike
if we change the C++ functions to touch the mv array less it'll be harder to reproduce, though.
21:15:25
drmeister
I see - so we expect an error and we get an error but it reports them as "unexpected failures" - so they aren't problems we need to fix.
21:26:00
Bike
well, yes and no. we don't really have the compiler doing anything coherent with types right now
21:26:18
kpoeck
For every problem I see, I create an issue (Bike as well). For every Fix I put a regression test