Wed Oct 19 09:33:22 EDT 2011


The next hurdle is block nesting.  Doing this only inside the printer
is too messy.  This needs an intermediate syntax that can represent
variable scope.

I'm not sure if the SSA dominator approach is necessary though.

General principle: 

  - Syntax can be simple, meaning it might be able to represent
    illegal constructs.  Correctness is guaranteed through properties
    of the domain of the transformation, not the image..

  - Printing is messy.  Try to limit it to straightforward mappings.

Maybe this just needs 2 languages.  Embed Term into something else
that can represent all this in a straightforward way.

Hmm.. do subsets need separate representations (and operations..).
Why not just use subsets on the same type, trying to restrict
operations maybe..

The thing is, nested scopes are a really useful feature of C that
probably completely covers my use case.  I think they are quite
straightforward to translate to the more low-level LLVM
representation, so let's just make it work with C in mind.

I'm thinking to separate pointer computation and poiner dereference.