Complode

Complode is a stack-based language with not very many commands.

The calculation is:
 * 1) Pop A
 * 2) Pop B
 * 3) Pop C
 * 4) Pop E
 * 5) Pop F
 * 6) Pop Z
 * 7) If A>0 Then Let G=var(A) Else Pop G
 * 8) If B>0 Then Let H=var(B) Else Let H=G
 * 9) If C>0 Then Let var(C)=E
 * 10) If B>0 Then Let var(B)=F*G
 * 11) If Z>0 Then Push H+F+E
 * 12) If Z<0 And A<0 And B<0 Then it will push a list of all variables -A to -B and their values (as a single entry) to a stashing stack
 * 13) If Z<0 And A=0 And B=0 Then it will pop one entry from the stashing stack and restore all of the values of those variables
 * 14) If Z=0 And A<0 Then Push F*E

If a code-block is popped during this calculation, it is looped, at the beginning of the loop it pops a value from the stack and if it is zero it stops the loop, and pops again the value it was trying before, and if is also a code-block it does again with this code-block, until it is a number; the exception is "Pop G" which does not loop and keeps the code-block as is, and then if it is part of an addition or multiplication the numbers in that calculation are ignored and the result is just the code-block. Popping an empty stack returns zero.

Examples
Some useful macros: .dup( 0 -1 0 0 0 -1 -1 /  0 1 0 0 1 0 /  1 0 0 0 0 1 /  1 0 0 0 0 1 /  0 -1 0 0 0 0 0 / ) .discard( 0 0 0 0 0 0 / ) .swap( 0 -1 0 0 0 -2 -1 / ; stash var(1) and var(2)  0 1 0 0 1 0 / ; store to var(1)  0 1 0 0 2 0 / ; store to var(2)  1 0 0 0 0 1 / ; get from var(1)  1 0 0 0 0 2 / ; get from var(2)  0 -1 0 0 0 0 0 / ; unstash var(1) and var(2) ) .setvar( 0 -1 0 0 0 -1 -1 / 0 1 0 0 1 0 /  0 1 0 0 1 0 0 0 0 1 / 0 0 -1 0 0 0 0 0 / / )