--- /dev/null
+<?php
+
+/*
+ * This file is part of the Behat Testwork.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Testwork\Call\Exception;
+
+use ErrorException;
+use ParseError;
+use Throwable;
+use TypeError;
+
+/**
+ * Fatal Throwable Error.
+ *
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+class FatalThrowableError extends ErrorException
+{
+ public function __construct(Throwable $e)
+ {
+ if ($e instanceof ParseError) {
+ $message = 'Parse error: '.$e->getMessage();
+ $severity = E_PARSE;
+ } elseif ($e instanceof TypeError) {
+ $message = 'Type error: '.$e->getMessage();
+ $severity = E_RECOVERABLE_ERROR;
+ } else {
+ $message = 'Fatal error: '.$e->getMessage();
+ $severity = E_ERROR;
+ }
+
+ parent::__construct(
+ $message,
+ $e->getCode(),
+ $severity,
+ $e->getFile(),
+ $e->getLine()
+ );
+
+ $this->setTrace($e->getTrace());
+ }
+
+ private function setTrace($trace)
+ {
+ $traceReflector = new \ReflectionProperty('Exception', 'trace');
+ $traceReflector->setAccessible(true);
+ $traceReflector->setValue($this, $trace);
+ }
+}