<?php


// ===== SUPPORTED =====

// microtime(false) specialization
function _microtime_string(): string;
// microtime(true) specialization
function _microtime_float(): float;

// hrtime(true) specialization
function _hrtime_int(): int;
// hrtime(false) specialization
function _hrtime_array(): int[];

/**
 * @kphp-internal-result-indexing
 */
function _explode_nth($delimiter ::: string, $str ::: string, int $index): string;

/**
 * @kphp-internal-result-indexing
 */
function _explode_1($delimiter ::: string, $str ::: string): string;

/**
 * @kphp-internal-result-array2tuple
 */
function _explode_tuple2($delimiter ::: string, $str ::: string, int $mask, $limit ::: int = 2+1): tuple(string, string);

/**
 * @kphp-internal-result-array2tuple
 */
function _explode_tuple3($delimiter ::: string, $str ::: string, int $mask, $limit ::: int = 3+1): tuple(string, string, string);

/**
 * @kphp-internal-result-array2tuple
 */
function _explode_tuple4($delimiter ::: string, $str ::: string, int $mask, $limit ::: int = 4+1): tuple(string, string, string, string);

// ===== UNSUPPORTED =====

function _exception_set_location($e, string $filename, int $line): ^1;

// `new $c(...)` => `_by_name_construct($c, ...)`
function _by_name_construct(string $class_name, ...$args) ::: instance<^1>;
// `$c::method()` => `_by_name_call_method($c, 'method')`
function _by_name_call_method(string $class_name, string $method_name, ...$args);
// `$c::CONST` => `_by_name_get_const($c, 'CONST')`
function _by_name_get_const(string $class_name, string $constant);
// `$c::$field` => `_by_name_get_field($c, 'field')`
function _by_name_get_field(string $class_name, string $field);

/**
 * @kphp-internal-param-readonly $str
 */
function _tmp_substr($str ::: string, $start ::: int, $length ::: int = PHP_INT_MAX): _tmp_string;

/**
 * @kphp-internal-param-readonly $str
 */
function _tmp_trim($str ::: string, $what ::: string = " \n\r\t\v\0"): _tmp_string;
