 			}
 			
 			// create the variables that will be used inside the wrapper function
-			const OPERATOR_BRANCH:String = OPERATOR_PREFIX + '?:';
-			const OPERATOR_AND:String = OPERATOR_PREFIX + '&&';
-			const OPERATOR_OR:String = OPERATOR_PREFIX + '||';
 			const METHOD_INDEX:int = -1;
 			const CONDITION_INDEX:int = 0;
 			const TRUE_INDEX:int = 1;
 			const FALSE_INDEX:int = 2;
+			const BRANCH_LOOKUP:Dictionary = new Dictionary();
+			BRANCH_LOOKUP[functions[OPERATOR_PREFIX + '?:']] = true;
+			BRANCH_LOOKUP[functions[OPERATOR_PREFIX + '&&']] = true;
+			BRANCH_LOOKUP[functions[OPERATOR_PREFIX + '||']] = false;
 
 			const stack:Array = []; // used as a queue of function calls
 			var call:CompiledFunctionCall;

							// variable lookup -- call.compiledMethod is a constant and call.evaluatedMethod is the method name
							result = symbolTable is Function ? symbolTable(call.evaluatedMethod) : symbolTable[call.evaluatedMethod];
							if (result === undefined)
								result = defaultSymbolTable[call.evaluatedMethod];
						}
					}
					catch (e:Error)

				}
			}

			// step 1: group tokens by parentheses and compile function calls
			while (true)
			{
				// find first ')' and work backwards to a '('
				var open:int;
				var close:int = tokens.indexOf(')');
				for (open = close - 1; open >= 0; open--)
					if (tokens[open] == '(')
						break;
				if (open < 0)
					break;
				if (open < close)
				{
					// cut out tokens between '(' and ')'
