 			return macros.getObject(macroName) != null;
 		}
 		
-		private static function _getMacro(macroName:String):*
+		/**
+		 * This function evaluates a macro specified in the macros hash map,
+		 * catching and reporting any errors that are thrown.
+		 * @param macroName The name of the macro to evaluate.
+		 * @return The result of evaluating the macro.
+		 */
+		public static function evaluateMacro(macroName:String):*
 		{
 			var lf:LinkableFunction = macros.getObject(macroName) as LinkableFunction;
 			if (!lf)

				_isFunctionDefinition = false;
				
				if (_macroProxy == null)
					_macroProxy = new ProxyObject(_hasMacro, _getMacro, null, evaluateMacro); // allows evaluating macros but not setting them
				
				if (detectLinkableObjectChange(_getNewCompiler, macroLibraries))
					_compiler = _getNewCompiler(true);

				return lf;
			return lf.apply();
		}
		public static function callMacro(macroName:String, ...params):*
		{
			// error catching/reporting is handled automatically for LinkableFunctions in the macros list.
			var lf:LinkableFunction = macros.getObject(macroName) as LinkableFunction;
			return lf ? lf.apply(null, params) : undefined;
		}
		public static function applyMacro(macroName:String, params:Array = null):*
		{
			// error catching/reporting is handled automatically for LinkableFunctions in the macros list.
			var lf:LinkableFunction = macros.getObject(macroName) as LinkableFunction;
