import { parse_expression_at } from '../acorn.js'; import { regex_whitespace } from '../../utils/patterns.js'; import parser_errors from '../errors.js'; /** * @param {import('../index.js').Parser} parser * @returns {import('estree').Node | undefined} */ export default function read_expression(parser) { try { const node = parse_expression_at(parser.template, parser.index); let num_parens = 0; for (let i = parser.index; i < node.start; i += 1) { if (parser.template[i] === '(') num_parens += 1; } let index = node.end; while (num_parens > 0) { const char = parser.template[index]; if (char === ')') { num_parens -= 1; } else if (!regex_whitespace.test(char)) { parser.error(parser_errors.unexpected_token(')'), index); } index += 1; } parser.index = index; return node; } catch (err) { parser.acorn_error(err); } }