1782 * Literal
1783 * ArrayLiteral
1784 * ObjectLiteral
1785 * ( Expression )
1786 *
1787 * See 11.1
1788 *
1789 * Parse primary expression.
1790 * @return Expression node.
1791 */
1792 @SuppressWarnings("fallthrough")
1793 private Expression primaryExpression() {
1794 // Capture first token.
1795 final int primaryLine = line;
1796 final long primaryToken = token;
1797
1798 switch (type) {
1799 case THIS:
1800 final String name = type.getName();
1801 next();
1802 return new IdentNode(primaryToken, finish, name);
1803 case IDENT:
1804 final IdentNode ident = getIdent();
1805 if (ident == null) {
1806 break;
1807 }
1808 detectSpecialProperty(ident);
1809 return ident;
1810 case OCTAL:
1811 if (isStrictMode) {
1812 throw error(AbstractParser.message("strict.no.octal"), token);
1813 }
1814 case STRING:
1815 case ESCSTRING:
1816 case DECIMAL:
1817 case HEXADECIMAL:
1818 case FLOATING:
1819 case REGEX:
1820 case XML:
1821 return getLiteral();
|
1782 * Literal
1783 * ArrayLiteral
1784 * ObjectLiteral
1785 * ( Expression )
1786 *
1787 * See 11.1
1788 *
1789 * Parse primary expression.
1790 * @return Expression node.
1791 */
1792 @SuppressWarnings("fallthrough")
1793 private Expression primaryExpression() {
1794 // Capture first token.
1795 final int primaryLine = line;
1796 final long primaryToken = token;
1797
1798 switch (type) {
1799 case THIS:
1800 final String name = type.getName();
1801 next();
1802 lc.setFlag(lc.getCurrentFunction(), FunctionNode.USES_THIS);
1803 return new IdentNode(primaryToken, finish, name);
1804 case IDENT:
1805 final IdentNode ident = getIdent();
1806 if (ident == null) {
1807 break;
1808 }
1809 detectSpecialProperty(ident);
1810 return ident;
1811 case OCTAL:
1812 if (isStrictMode) {
1813 throw error(AbstractParser.message("strict.no.octal"), token);
1814 }
1815 case STRING:
1816 case ESCSTRING:
1817 case DECIMAL:
1818 case HEXADECIMAL:
1819 case FLOATING:
1820 case REGEX:
1821 case XML:
1822 return getLiteral();
|