public function quotingPass(MacroTokens $tokens)
{
$res = new MacroTokens();
while ($tokens->nextToken()) {
$res->append($tokens->isCurrent($tokens::T_SYMBOL) && (!$tokens->isPrev() || $tokens->isPrev(',', '(', '[', '=>', ':', '?', '.', '<', '>', '<=', '>=', '===', '!==', '==', '!=', '<>', '&&', '||', '=', 'and', 'or', 'xor', '??')) && (!$tokens->isNext() || $tokens->isNext(',', ';', ')', ']', '=>', ':', '?', '.', '<', '>', '<=', '>=', '===', '!==', '==', '!=', '<>', '&&', '||', 'and', 'or', 'xor', '??')) && !preg_match('#^[A-Z_][A-Z0-9_]{2,}$#', $tokens->currentValue()) ? "'" . $tokens->currentValue() . "'" : $tokens->currentToken());
}
return $res;
}