 										throw new Error("Incorrect number of arguments for type casting.  Expected 1.");
 								}
 								// special case for Class('some.qualified.ClassName')
-								else if (call.evaluatedMethod === Class && call.evaluatedParams[0] is String)
+								else if (method === Class && call.evaluatedParams[0] is String)
 									result = getDefinitionByName(call.evaluatedParams[0]);
 								else // all other single-parameter type casting operations
-									result = call.evaluatedMethod(call.evaluatedParams[0]);
+									result = method(call.evaluatedParams[0]);
 							}
 							else
 							{
 								// function call
-								result = call.evaluatedMethod.apply(null, call.evaluatedParams);
+								result = method.apply(null, call.evaluatedParams);
 							}
 						}
 						else // no compiled params means it's a variable lookup
 						{
 							// call.compiledMethod is a constant and call.evaluatedMethod is the method name
-							symbolName = call.evaluatedMethod as String;
+							symbolName = method as String;
 							// find the variable
 							for (i = 0; i < allSymbolTables.length - 1; i++) // max i after loop will be length-1
 								if (allSymbolTables[i] && allSymbolTables[i].hasOwnProperty(symbolName))

								// assignment operator expects parameters like (host, ...chain, value)
								// if there is no matching local variable and 'this' has a matching one, assign the property of 'this'
								if (useThisScope && this && this.hasOwnProperty(symbolName) && !localSymbolTable.hasOwnProperty(symbolName))
									result = call.evaluatedMethod(this, symbolName, call.evaluatedParams[1]);
								else // otherwise, assign local variable
									result = call.evaluatedMethod(localSymbolTable, symbolName, call.evaluatedParams[1]);
							}
							else if (call.evaluatedMethod is Class)
							{
								// type casting
								if (call.evaluatedMethod == Array) // special case for Array
									result = call.evaluatedParams.concat();
								else if (call.evaluatedParams.length != 1)
								{
									// special case for Object('prop1', value1, ...)
									if (call.evaluatedMethod === Object)
									{
										var params:Array = call.evaluatedParams;
										result = {}

				call.evalIndex = INDEX_METHOD;
				stack.length = 1;
				stack[0] = call;
				stackLoop: while (true)
				{
					// evaluate the CompiledFunctionCall on top of the stack
					call = stack[stack.length - 1] as CompiledFunctionCall;
					
					// if we got here because of a break, advance evalIndex
					if (method == operators[ST_BREAK])
						call.evalIndex++;
					
					method = call.evaluatedMethod;
					compiledParams = call.compiledParams;
					if (compiledParams)
					{
