
Notes on how to deal with the wicked corner case that is C/C++
preprocessor #if magic.  None of this is actually implemented.

Languages not affected:
 - D
 - Java
 - ECMA (Java Script)

Langauges affected:
 - C
 - C++
 - C#
 - Vala
 - Pawn
 - Objective C/C++


Threads of code are created for functions that navigate the tokens.
There is the master list of the raw tokens parsed out.

There is at least one thread, which, in the absense of any #if statements, is
the same as the raw token list.

In the threads, a BARRIER is placed where ever code cannot move past.
This represents and #if or #else statement.
Normally, the barriers are skipped when navigating code. Only when removing a
newline does the code need to check for a barrier.

For #if statements without an #else, there is an implicit #else added that contains
nothing.

// example 1
a
#if X
b
#endif
c

Thread
       #if   #endif
       V     V
0 - a -+- b -+- c
       |     |
1      +-----+  <- empty else path (ie, for '#if 0')

Max depth = 2


// example 2
a
#if X
b
#else
c
#endif
d
       #if   #endif
       V     V
0 - a -+- b -+- d
       |     |
1      +- c -+   <- else path

Max depth = 2


// example 3
a
#if X
b
#elif Y
c
#elif Z
d
#else
e
#endif
f
#if A
g
#endif
h
       #if X #endif          #if A
       V     V               V
0 - a -+- b -+- f -----------+- g -+- h
       |     |               |     |
1      +- c -+   <- elif Y   +-----+   <- empty else
       |     |
2      +- d -+   <- elif Z
       |     |
3      +- e -+   <- else

Max depth = 4

The detection routines need to be executed once for each thread, up to the maximum
thread depth.  Note that the typical maximum thread depth is going to be 2-3.

0 - a - b - f - g - h
1 - a - c - f ----- h
2 - a - d - f - g - h
3 - a - e - f - g - h

The general rule is that if the current thread exceed the max, thread 0 is used.

Identification is the primary use for the threads.
The secondary use is indentation.  The indentation of each token at each thread
level is recorded.
The maximum indentation for the token is used, assuming the thread is without
error. ('#if 0' commented out code that is bad may not be handled.)

I won't know if this will work for sure until I try it.
