<?php

// === SUPPORTED ===

function kphp_set_context_on_error(mixed[] $tags, mixed $extra_info, string $env = "") ::: void;

// === UNSUPPORTED ===

/** @kphp-generate-stub-class */
interface Throwable {
    public function getMessage () ::: string;
    public function getCode () ::: int;
    public function getFile () ::: string;
    public function getLine () ::: int;
    public function getTrace () ::: string[][];
    public function getTraceAsString () ::: string;
}


/** @kphp-generate-stub-class */
class Exception implements Throwable {
    protected $message = '';
    protected $code = 0;
    /** @var string */
    protected $file;
    /** @var int */
    protected $line;

    /** @kphp-extern-func-info generate-stub */
    public function __construct($message ::: string = '', $code ::: int = 0) ::: Exception;
    /** @kphp-extern-func-info generate-stub */
    final public function getMessage () ::: string;
    /** @kphp-extern-func-info generate-stub */
    final public function getCode () ::: int;
    /** @kphp-extern-func-info generate-stub */
    final public function getFile () ::: string;
    /** @kphp-extern-func-info generate-stub */
    final public function getLine () ::: int;
    /** @kphp-extern-func-info generate-stub */
    final public function getTrace () ::: string[][];
    /** @kphp-extern-func-info generate-stub */
    final public function getTraceAsString () ::: string;

    /** @kphp-extern-func-info generate-stub */
    final private function __clone() ::: void;
}


/** @kphp-generate-stub-class */
class Error implements Throwable {
    protected $message = '';
    protected $code = 0;
    /** @var string */
    protected $file;
    /** @var int */
    protected $line;

    /** @kphp-extern-func-info generate-stub */
    public function __construct($message ::: string = '', $code ::: int = 0) ::: Error;
    /** @kphp-extern-func-info generate-stub */
    final public function getMessage () ::: string;
    /** @kphp-extern-func-info generate-stub */
    final public function getCode () ::: int;
    /** @kphp-extern-func-info generate-stub */
    final public function getFile () ::: string;
    /** @kphp-extern-func-info generate-stub */
    final public function getLine () ::: int;
    /** @kphp-extern-func-info generate-stub */
    final public function getTrace () ::: string[][];
    /** @kphp-extern-func-info generate-stub */
    final public function getTraceAsString () ::: string;

    /** @kphp-extern-func-info generate-stub */
    final private function __clone() ::: void;
}

define('E_ERROR', 1);
define('E_WARNING', 2);
define('E_PARSE', 4);
define('E_NOTICE', 8);
define('E_CORE_ERROR', 16);
define('E_CORE_WARNING', 32);
define('E_COMPILE_ERROR', 64);
define('E_COMPILE_WARNING', 128);
define('E_USER_ERROR', 256);
define('E_USER_WARNING', 512);
define('E_USER_NOTICE', 1024);
define('E_STRICT', 2048);
define('E_RECOVERABLE_ERROR', 4096);
define('E_DEPRECATED', 8192);
define('E_USER_DEPRECATED', 16384);
define('E_ALL', 32767);

/** @kphp-extern-func-info generate-stub */
function err ($file ::: string, $line ::: int, $code ::: string, $desc ::: string = '') ::: Exception;
function error_get_last() ::: mixed;
/** @kphp-extern-func-info generate-stub */
function error_reporting ($e ::: int = TODO) ::: int;
/** @kphp-extern-func-info generate-stub */
function kphp_backtrace($pretty ::: bool = true) ::: string[];
