 				return function(...args):* { return value; };
 			}
 			
-			// create the variables that will be used inside the wrapper function
-
-			const builtInSymbolTable:Object = {};
-			builtInSymbolTable['eval'] = this._eval as Function || undefined;
-			builtInSymbolTable['this'] = bindThis;
+			const EVAL:* = this._eval as Function || undefined;
 			
 			// set up Array of symbol tables in the correct scope order: built-in, local, params, this, global
-			const allSymbolTables:Array = [builtInSymbolTable]; // buit-in first
-			const LOCAL_SYMBOL_TABLE_INDEX:int = allSymbolTables.push(null) - 1; // placeholder
-			
-			// add custom symbol table(s)
+			const BUILT_IN_SYMBOL_TABLE_INDEX:int = 0;
+			const LOCAL_SYMBOL_TABLE_INDEX:int = 1;
+			var THIS_SYMBOL_TABLE_INDEX:int = LOCAL_SYMBOL_TABLE_INDEX + 1;
 			if (symbolTable is Array)
 			{
-				for each (var _symbolTable:Object in symbolTable)
-					allSymbolTables.push(_symbolTable);
+				symbolTable = (symbolTable as Array).concat();
+				THIS_SYMBOL_TABLE_INDEX += symbolTable.length;
 			}
 			else
-			{
-				allSymbolTables.push(symbolTable);
-			}
-			
-			// push placeholder for 'this' symbol table
-			const THIS_SYMBOL_TABLE_INDEX:int = allSymbolTables.push(null) - 1;
-			
-			// add libraries in reverse order so the last one will be checked first
-			var i:int = libraries.length;
-			while (i--)
-				allSymbolTables.push(libraries[i]);
-			// check globals last
-			allSymbolTables.push(globals);
+				THIS_SYMBOL_TABLE_INDEX += 1;
 			
 			// this flag is set to useThisScope when the compiledObject is a function definition
 			var cascadeThisScope:Boolean = false;

			// Each recursive call must use a clone of the CompiledFunctionCall,
			// so we keep track of recursion depth and re-use copies of the CompiledFunctionCall.
			var recursion:int = 0;
			var recursiveCalls:Array = [compiledObject];
			
			// this function avoids unnecessary function call overhead by keeping its own call stack rather than using recursion.
			var wrapperFunction:Function = function():*
			{
				const stack:Array = []; // used as a queue of function calls
				const localSymbolTable:Object = {};
				var call:CompiledFunctionCall;
				var subCall:CompiledFunctionCall;
				var compiledParams:Array;
				var method:Object;

							throw e;
						
						if (errorHandler(e))
						{
							result = undefined; // ignore and continue
							recursion++;
						}
						else
							return undefined; // halt
					}
