diff options
author | 2021-03-25 00:00:22 -0700 | |
---|---|---|
committer | 2021-03-25 00:00:22 -0700 | |
commit | 30cccdf7154b6470e876464da9e412af10894dd5 (patch) | |
tree | 73ed40b30af23ba3e5b94070e478f3e2ca1670c0 /src/parser/parse/read/expression.ts | |
parent | a72ab10c623022860691d6a095b74dea70cc6f69 (diff) | |
download | astro-30cccdf7154b6470e876464da9e412af10894dd5.tar.gz astro-30cccdf7154b6470e876464da9e412af10894dd5.tar.zst astro-30cccdf7154b6470e876464da9e412af10894dd5.zip |
add component state, top-level await support (#26)
Diffstat (limited to 'src/parser/parse/read/expression.ts')
-rw-r--r-- | src/parser/parse/read/expression.ts | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/parser/parse/read/expression.ts b/src/parser/parse/read/expression.ts new file mode 100644 index 000000000..f691f4772 --- /dev/null +++ b/src/parser/parse/read/expression.ts @@ -0,0 +1,42 @@ +import { parse_expression_at } from '../acorn.js'; +import { Parser } from '../index.js'; +import { whitespace } from '../../utils/patterns.js'; +// import { Node } from 'estree'; + +// @ts-ignore +export default function read_expression(parser: Parser): string { + try { + const start = parser.index; + let index = parse_expression_at(parser.template, parser.index); + let num_parens = 0; + + for (let i = parser.index; i < start; i += 1) { + if (parser.template[i] === '(') num_parens += 1; + } + + 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(start, index); + // return node as Node; + } catch (err) { + parser.acorn_error(err); + } +}
\ No newline at end of file |