<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[46208] trunk/src/wp-includes/compat.php: Code Modernization: Remove JSON related polyfills.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/46208">46208</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/46208","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>desrosj</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2019-09-20 20:15:51 +0000 (Fri, 20 Sep 2019)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Code Modernization: Remove JSON related polyfills.

The PHP native JSON extension has been bundled and compiled with PHP by default since version 5.2.0. Because the minimum version of PHP required by WordPress is now 5.6.20 (see <a href="https://core.trac.wordpress.org/ticket/46594">#46594</a> and <a href="https://core.trac.wordpress.org/changeset/45058">[45058]</a>), JSON extension related polyfills and backwards compatibility code can now be removed.

This change removes the `json_last_error_msg()` and `JsonSerializable` polyfills included in WordPress for full JSON extension support in PHP < 5.6.

Follow up of [46205-46206].

See <a href="https://core.trac.wordpress.org/ticket/47699">#47699</a>.
Props jrf, Clorith, pento.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludescompatphp">trunk/src/wp-includes/compat.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludescompatphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/compat.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/compat.php  2019-09-20 20:07:53 UTC (rev 46207)
+++ trunk/src/wp-includes/compat.php    2019-09-20 20:15:51 UTC (rev 46208)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -289,53 +289,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">        return $hmac;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-if ( ! function_exists( 'json_encode' ) ) {
-       function json_encode( $string ) {
-               global $wp_json;
-
-               if ( ! ( $wp_json instanceof Services_JSON ) ) {
-                       require_once( ABSPATH . WPINC . '/class-json.php' );
-                       $wp_json = new Services_JSON();
-               }
-
-               return $wp_json->encodeUnsafe( $string );
-       }
-}
-
-if ( ! function_exists( 'json_decode' ) ) {
-       /**
-        * @global Services_JSON $wp_json
-        * @param string $string
-        * @param bool   $assoc_array
-        * @return object|array
-        */
-       function json_decode( $string, $assoc_array = false ) {
-               global $wp_json;
-
-               if ( ! ( $wp_json instanceof Services_JSON ) ) {
-                       require_once( ABSPATH . WPINC . '/class-json.php' );
-                       $wp_json = new Services_JSON();
-               }
-
-               $res = $wp_json->decode( $string );
-               if ( $assoc_array ) {
-                       $res = _json_decode_object_helper( $res );
-               }
-               return $res;
-       }
-
-       /**
-        * @param object $data
-        * @return array
-        */
-       function _json_decode_object_helper( $data ) {
-               if ( is_object( $data ) ) {
-                       $data = get_object_vars( $data );
-               }
-               return is_array( $data ) ? array_map( __FUNCTION__, $data ) : $data;
-       }
-}
-
</del><span class="cx" style="display: block; padding: 0 10px"> if ( ! function_exists( 'hash_equals' ) ) :
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="cx" style="display: block; padding: 0 10px">         * Timing attack safe string comparison
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -373,85 +326,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> endif;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-// JSON_PRETTY_PRINT was introduced in PHP 5.4
-// Defined here to prevent a notice when using it with wp_json_encode()
-if ( ! defined( 'JSON_PRETTY_PRINT' ) ) {
-       define( 'JSON_PRETTY_PRINT', 128 );
-}
-
-if ( ! function_exists( 'json_last_error_msg' ) ) :
-       /**
-        * Retrieves the error string of the last json_encode() or json_decode() call.
-        *
-        * @since 4.4.0
-        *
-        * @internal This is a compatibility function for PHP <5.5
-        *
-        * @return bool|string Returns the error message on success, "No Error" if no error has occurred,
-        *                     or false on failure.
-        */
-       function json_last_error_msg() {
-               // See https://core.trac.wordpress.org/ticket/27799.
-               if ( ! function_exists( 'json_last_error' ) ) {
-                       return false;
-               }
-
-               $last_error_code = json_last_error();
-
-               // Just in case JSON_ERROR_NONE is not defined.
-               $error_code_none = defined( 'JSON_ERROR_NONE' ) ? JSON_ERROR_NONE : 0;
-
-               switch ( true ) {
-                       case $last_error_code === $error_code_none:
-                               return 'No error';
-
-                       case defined( 'JSON_ERROR_DEPTH' ) && JSON_ERROR_DEPTH === $last_error_code:
-                               return 'Maximum stack depth exceeded';
-
-                       case defined( 'JSON_ERROR_STATE_MISMATCH' ) && JSON_ERROR_STATE_MISMATCH === $last_error_code:
-                               return 'State mismatch (invalid or malformed JSON)';
-
-                       case defined( 'JSON_ERROR_CTRL_CHAR' ) && JSON_ERROR_CTRL_CHAR === $last_error_code:
-                               return 'Control character error, possibly incorrectly encoded';
-
-                       case defined( 'JSON_ERROR_SYNTAX' ) && JSON_ERROR_SYNTAX === $last_error_code:
-                               return 'Syntax error';
-
-                       case defined( 'JSON_ERROR_UTF8' ) && JSON_ERROR_UTF8 === $last_error_code:
-                               return 'Malformed UTF-8 characters, possibly incorrectly encoded';
-
-                       case defined( 'JSON_ERROR_RECURSION' ) && JSON_ERROR_RECURSION === $last_error_code:
-                               return 'Recursion detected';
-
-                       case defined( 'JSON_ERROR_INF_OR_NAN' ) && JSON_ERROR_INF_OR_NAN === $last_error_code:
-                               return 'Inf and NaN cannot be JSON encoded';
-
-                       case defined( 'JSON_ERROR_UNSUPPORTED_TYPE' ) && JSON_ERROR_UNSUPPORTED_TYPE === $last_error_code:
-                               return 'Type is not supported';
-
-                       default:
-                               return 'An unknown error occurred';
-               }
-       }
-endif;
-
-if ( ! interface_exists( 'JsonSerializable' ) ) {
-       define( 'WP_JSON_SERIALIZE_COMPATIBLE', true );
-       /**
-        * JsonSerializable interface.
-        *
-        * Compatibility shim for PHP <5.4
-        *
-        * @link https://secure.php.net/jsonserializable
-        *
-        * @since 4.4.0
-        */
-       interface JsonSerializable {
-               // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid
-               public function jsonSerialize();
-       }
-}
-
</del><span class="cx" style="display: block; padding: 0 10px"> // random_int was introduced in PHP 7.0
</span><span class="cx" style="display: block; padding: 0 10px"> if ( ! function_exists( 'random_int' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">        require ABSPATH . WPINC . '/random_compat/random.php';
</span></span></pre>
</div>
</div>

</body>
</html>