diff options
author | 2021-03-16 16:08:11 -0400 | |
---|---|---|
committer | 2021-03-16 16:08:11 -0400 | |
commit | 588b086a4dc45e717341e18728fff65a90ddf46c (patch) | |
tree | fbabfff761add5217963a3d341d68392bea2cccf /src/compiler/parse/read/expression.ts | |
parent | 174fc1d669fea1cf8be0d873fdb232fd0169abe6 (diff) | |
download | astro-588b086a4dc45e717341e18728fff65a90ddf46c.tar.gz astro-588b086a4dc45e717341e18728fff65a90ddf46c.tar.zst astro-588b086a4dc45e717341e18728fff65a90ddf46c.zip |
Bring compiler into Astro (#4)
* include source compiler
* Import from JS
* Conditionally use the instance contents
Co-authored-by: Fred K. Schott <fkschott@gmail.com>
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); + } +} |