 		public function getAllLibraries():Array
 		{
 			return libraries.concat(); // make a copy
-		}
+		}
+		
+		private const BRANCH_LOOKUP:Dictionary = new Dictionary(); // Function or String -> true
+		private const ASSIGN_OP_LOOKUP:Object = new Dictionary(); // Function -> true
 		
 		/**
 		 * While this is set to true, compiler optimizations are enabled.

			}
			
			// create the variables that will be used inside the wrapper function
			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[constants[OPERATOR_ESCAPE + '?:']] = true;
			BRANCH_LOOKUP[constants[OPERATOR_ESCAPE + '&&']] = true;
			BRANCH_LOOKUP[constants[OPERATOR_ESCAPE + '||']] = false;
			const ASSIGN_OP_LOOKUP:Object = new Dictionary();
			for each (var assigOp:Function in assignmentOperators)
				ASSIGN_OP_LOOKUP[assigOp] = true;

			const builtInSymbolTable:Object = {};
			const localSymbolTable:Object = {};
			// set up Array of symbol tables in the correct scope order: built-in, local, params, this, global
			const allSymbolTables:Array = [

			];
			const THIS_SYMBOL_TABLE_INDEX:int = 3;
			
			// this function avoids unnecessary function call overhead by keeping its own call stack rather than using recursion.
			var wrapperFunction:Function = function():*
			{
				builtInSymbolTable['this'] = this;
