public static function throwError(&$exception) { // Deprecation warning. MLog::add('MError::throwError() is deprecated.', MLog::WARNING, 'deprecated'); static $thrown = false; // If thrown is hit again, we've come back to MError in the middle of throwing another MError, so die! if ($thrown) { self::handleEcho($exception, array()); // Inifite loop. mexit(); } $thrown = true; $level = $exception->get('level'); // See what to do with this kind of error $handler = MError::getErrorHandling($level); $function = 'handle' . ucfirst($handler['mode']); if (is_callable(array('MError', $function))) { $reference = call_user_func_array(array('MError', $function), array(&$exception, isset($handler['options']) ? $handler['options'] : array())); } else { // This is required to prevent a very unhelpful white-screen-of-death mexit('MError::raise -> Static method MError::' . $function . ' does not exist.' . ' Contact a developer to debug' . '<br /><strong>Error was</strong> ' . '<br />' . $exception->getMessage()); } // We don't need to store the error, since MException already does that for us! // Remove loop check $thrown = false; return $reference; }