libera/#clasp - IRC Chatlog
Search
13:56:12
drmeister
https://github.com/clasp-developers/clasp/blob/main/src/lisp/modules/clasp-analyzer/clasp-analyzer.lisp#L2980
13:58:17
drmeister
:bootstrap, :lispalloc (Typical LISP_CLASS), :templated-lispalloc (templated subclasses like Wrapper<XXX>), :gcvector, :gcarray, :classalloc, :rootclassalloc, :templated-classalloc
13:59:36
drmeister
The static analyzer runs matchers on the C++ AST and the matchers are passed to the discriminator of a species to decide if the thing that is being matched is one of those species.
14:48:37
drmeister
So that to figure out if a class x is descended from A you simply check if its stamp is between the stamp values of A-D
14:48:57
drmeister
And if a class x descended from B you check if its stamp is between the stamp values B-D
14:51:09
Bike
and i have no idea what the "analysis" structure it uses is, and what these other fields in the 'stamp' struct mean, and so on
15:03:42
Bike
and i guess that's because all subclasses of derivable cxx object have the same stamp, even though they can be different C++ classes
15:03:53
drmeister
You can bring this up in slime - it takes a little bit of prep though. I can walk you through it.
15:05:20
drmeister
The header stamp is primarily for the garbage collector. The stamp and the where-tag part of the header stamp tells you where to look for the stamp used for dispatch
15:35:20
Bike
defvirtual binds a useless call-next-method - is that something that we'd ever actually be able to have or want?
16:04:11
Bike
mm, well c++ doesn't have effective methods, so the "next" could involve more than one virtual function if there's multiple inheritance, for another thing
16:04:24
Bike
i guess we could keep track of superclasses ourselves and call functions that way, though
17:27:35
Bike
huh one of the pedantic compiler macro warnings i put in found something that looks like it could be a bug in the analyzer
17:28:41
Bike
https://github.com/clasp-developers/clasp/blob/main/src/lisp/modules/clasp-analyzer/clasp-analyzer.lisp#L1460-L1470 got a duplicate case entry