diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -461,6 +461,7 @@ 'xhpast_get_parser_future' => 'parser/xhpast/bin/xhpast_parse.php', 'xhpast_is_available' => 'parser/xhpast/bin/xhpast_parse.php', 'xhpast_parser_token_constants' => 'parser/xhpast/parser_tokens.php', + 'xhpast_version' => 'parser/xhpast/bin/xhpast_parse.php', 'xsprintf' => 'xsprintf/xsprintf.php', 'xsprintf_callback_example' => 'xsprintf/xsprintf.php', 'xsprintf_command' => 'xsprintf/csprintf.php', diff --git a/src/parser/xhpast/bin/xhpast_parse.php b/src/parser/xhpast/bin/xhpast_parse.php --- a/src/parser/xhpast/bin/xhpast_parse.php +++ b/src/parser/xhpast/bin/xhpast_parse.php @@ -2,19 +2,11 @@ function xhpast_is_available() { static $available; + if ($available === null) { - $available = false; - $bin = xhpast_get_binary_path(); - if (Filesystem::pathExists($bin)) { - list($err, $stdout) = exec_manual('%s --version', $bin); - if (!$err) { - $version = trim($stdout); - if ($version === 'xhpast version 5.5.8/1g') { - $available = true; - } - } - } + $available = xhpast_version() == 'xhpast version 5.5.8/1g'; } + return $available; } @@ -57,3 +49,19 @@ $root = phutil_get_library_root('phutil'); execx('%s', $root.'/../scripts/build_xhpast.sh'); } + +function xhpast_version() { + static $version; + + if ($version === null) { + $bin = xhpast_get_binary_path(); + if (Filesystem::pathExists($bin)) { + list($err, $stdout) = exec_manual('%s --version', $bin); + if (!$err) { + $version = trim($stdout); + } + } + } + + return $version; +}