diff options
Diffstat (limited to 'src/compiler/parse/read/expression.ts')
| -rw-r--r-- | src/compiler/parse/read/expression.ts | 41 | 
1 files changed, 41 insertions, 0 deletions
| diff --git a/src/compiler/parse/read/expression.ts b/src/compiler/parse/read/expression.ts new file mode 100644 index 000000000..3af2868e6 --- /dev/null +++ b/src/compiler/parse/read/expression.ts @@ -0,0 +1,41 @@ +// @ts-nocheck + +import { parse_expression_at } from '../acorn.js'; +import { Parser } from '../index.js'; +import { whitespace } from '../../utils/patterns.js'; +// import { Node } from 'estree'; + +export default function read_expression(parser: Parser): string { +	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 (!whitespace.test(char)) { +				parser.error({ +					code: 'unexpected-token', +					message: 'Expected )' +				}, index); +			} + +			index += 1; +		} + +		parser.index = index; +		 +		return parser.template.substring(node.start, node.end); +		// return node as Node; +	} catch (err) { +		parser.acorn_error(err); +	} +} | 
