* parse an object, enclosed in angle brackets{...}, for example {value: 2} * @return {Node} node * @private
(state)
| 1686 | * @private |
| 1687 | */ |
| 1688 | function parseObject (state) { |
| 1689 | if (state.token === '{') { |
| 1690 | openParams(state) |
| 1691 | let key |
| 1692 | |
| 1693 | const properties = {} |
| 1694 | do { |
| 1695 | getToken(state) |
| 1696 | |
| 1697 | if (state.token !== '}') { |
| 1698 | // parse key |
| 1699 | if (state.token === '"' || state.token === "'") { |
| 1700 | key = parseStringToken(state, state.token) |
| 1701 | } else if (state.tokenType === TOKENTYPE.SYMBOL || (state.tokenType === TOKENTYPE.DELIMITER && state.token in NAMED_DELIMITERS)) { |
| 1702 | key = state.token |
| 1703 | getToken(state) |
| 1704 | } else { |
| 1705 | throw createSyntaxError(state, 'Symbol or string expected as object key') |
| 1706 | } |
| 1707 | |
| 1708 | // parse key/value separator |
| 1709 | if (state.token !== ':') { |
| 1710 | throw createSyntaxError(state, 'Colon : expected after object key') |
| 1711 | } |
| 1712 | getToken(state) |
| 1713 | |
| 1714 | // parse key |
| 1715 | properties[key] = parseAssignment(state) |
| 1716 | } |
| 1717 | } |
| 1718 | while (state.token === ',') // eslint-disable-line no-unmodified-loop-condition |
| 1719 | |
| 1720 | if (state.token !== '}') { |
| 1721 | throw createSyntaxError(state, 'Comma , or bracket } expected after object value') |
| 1722 | } |
| 1723 | closeParams(state) |
| 1724 | getToken(state) |
| 1725 | |
| 1726 | let node = new ObjectNode(properties) |
| 1727 | |
| 1728 | // parse index parameters |
| 1729 | node = parseAccessors(state, node) |
| 1730 | |
| 1731 | return node |
| 1732 | } |
| 1733 | |
| 1734 | return parseNumber(state) |
| 1735 | } |
| 1736 | |
| 1737 | /** |
| 1738 | * parse a number |
no test coverage detected
searching dependent graphs…