static CodeFormatter()
{
precedences = new Dictionary<Operator, int>();
precedences[Operator.Not] = 2; //$REFACTOR: precedence is a property of the output language; these are the C/C++ precedences
precedences[Operator.Neg] = 2;
precedences[Operator.FNeg] = 2;
precedences[Operator.Comp] = 2;
precedences[Operator.AddrOf] = 2;
precedences[Operator.SMul] = 4;
precedences[Operator.UMul] = 4;
precedences[Operator.IMul] = 4;
precedences[Operator.SDiv] = 4;
precedences[Operator.UDiv] = 4;
precedences[Operator.IMod] = 4;
precedences[Operator.FMul] = 4;
precedences[Operator.FDiv] = 4;
precedences[Operator.IAdd] = 5;
precedences[Operator.ISub] = 5;
precedences[Operator.USub] = 5;
precedences[Operator.FAdd] = 5;
precedences[Operator.FSub] = 5;
precedences[Operator.Sar] = 6;
precedences[Operator.Shr] = 6;
precedences[Operator.Shl] = 6;
precedences[Operator.Lt] = 7;
precedences[Operator.Le] = 7;
precedences[Operator.Gt] = 7;
precedences[Operator.Ge] = 7;
precedences[Operator.Feq] = 7;
precedences[Operator.Fne] = 7;
precedences[Operator.Flt] = 7;
precedences[Operator.Fle] = 7;
precedences[Operator.Fgt] = 7;
precedences[Operator.Fge] = 7;
precedences[Operator.Ult] = 7;
precedences[Operator.Ule] = 7;
precedences[Operator.Ugt] = 7;
precedences[Operator.Uge] = 7;
precedences[Operator.Eq] = 8;
precedences[Operator.Ne] = 8;
precedences[Operator.And] = 9;
precedences[Operator.Xor] = 10;
precedences[Operator.Or] = 11;
precedences[Operator.Cand] = 12;
precedences[Operator.Cor] = 13;
singleStatements = new HashSet<Type>
{
typeof(AbsynReturn),
typeof(AbsynGoto),
typeof(AbsynBreak),
typeof(AbsynContinue),
typeof(AbsynAssignment),
typeof(AbsynSideEffect)
};
}