Unsurprisingly, the toy language that is Tcl is serving me up some ridiculous case analysis. It has to do with the C++-side of a Tcl integration. When you look at the internals of the language objects created by the Tcl interpreter, some things that are conceptually the same have different internal representations. It's bad enough that I have to succumb to case analysis to figure out what's what: but on the other side of that wall, Tcl had to do some case analysis to put them all in different representations! Bad, naughty Tcl.
Here's what's bugging me. When you look at a
Tcl_Obj
over in the C world, it has a typePtr
member to distinguish different types of things:- A simple name like
A
has aNULL
typePtr. - So does a list of things in braces, like
{ A B }
. - A name with some special characters like
A[0]
has type "string". - So does a list of things in braces which extends over a few lines, like:
{ A \ B }
- An explicit list like
[list A]
has type "list". - A quoted string like
"A B"
hasNULL
. At least I think so. I lost track.
if
statements in the back-end tangling stuff up like this. But it's nearly impossible to untangle it on the C side.Stupid Tcl. Stupid case analysis.